r1034 - in trunk: . echobase-domain/src/main/java/fr/ifremer/echobase/config echobase-domain/src/main/resources/i18n echobase-services echobase-services/src/main/java/fr/ifremer/echobase/services/service echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb echobase-ui/src/main/java/fr/ifremer/echobase/ui echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial echobase-ui/src/mai
Author: sbavencoff Date: 2014-07-03 16:56:06 +0200 (Thu, 03 Jul 2014) New Revision: 1034 Url: http://forge.codelutin.com/projects/echobase/repository/revisions/1034 Log: refs #4194 : create one repository by data base Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfiguration.java trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfigurationOption.java trunk/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.properties trunk/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.properties trunk/echobase-services/pom.xml trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/WorkingDbConfigurationService.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/Show.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowMap.java trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/show.jsp trunk/echobase-ui/src/main/webapp/css/screen.css trunk/pom.xml Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfiguration.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfiguration.java 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfiguration.java 2014-07-03 14:56:06 UTC (rev 1034) @@ -287,6 +287,19 @@ return file; } + public File getLizmapConfig() { + File file = applicationConfig.getOptionAsFile( + EchoBaseConfigurationOption.LIZMAP_CONFIG.key); + Preconditions.checkNotNull(file); + return file; + } + + public String getLizmapJdbcUrl() { + String jdbcUrl = applicationConfig.getOption( + EchoBaseConfigurationOption.LIZMAP_JDBC_URL.key); + return jdbcUrl; + } + public String getLizmapUrl(){ String url = applicationConfig.getOption(EchoBaseConfigurationOption.LIZMAP_URL.key); return url; Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfigurationOption.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfigurationOption.java 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/config/EchoBaseConfigurationOption.java 2014-07-03 14:56:06 UTC (rev 1034) @@ -107,10 +107,18 @@ n("echobase.config.lizmap.target.file.description"), "${echobase.data.directory}/lizmap/projects", File.class), + LIZMAP_CONFIG("echobase.lizmap.config.file", + n("echobase.config.lizmap.config.file.description"), + "/var/www/lizmap-web-client-2.9.4/lizmap/var/config/lizmapConfig.ini.php", + File.class), LIZMAP_URL("echobase.lizmap.url", n("echobase.config.lizmap.url.description"), - "http://localhost/lizmap-web-client-2.9.4/lizmap/www/index.php/view/map/", + "http://localhost/lizmap-web-client-2.9.4/lizmap/www/index.php/view/", String.class), + LIZMAP_JDBC_URL("echobase.lizmap.jdbc.url", + n("echobase.config.lizmap.jdbc.url.description"), + "jdbc:sqlite:/var/www/lizmap-web-client-2.9.4/lizmap/var/jauth.db", + String.class), LIZMAP_REPOSITORY("echobase.lizmap.repository", n("echobase.config.lizmap.url.description"), "echobase", Modified: trunk/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.properties =================================================================== --- trunk/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.properties 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-domain/src/main/resources/i18n/echobase-domain_en_GB.properties 2014-07-03 14:56:06 UTC (rev 1034) @@ -35,6 +35,8 @@ echobase.config.h2Version.description=H2 jdbc driver version echobase.config.internal.db.directory.description=Directory of the internal database echobase.config.lib.directory.description=Directory where to put internal libraries (jdbc drivers, embedded war) +echobase.config.lizmap.config.file.description=Lizmap configuration file +echobase.config.lizmap.jdbc.url.description=JDBC URL for lizmap data base echobase.config.lizmap.target.file.description=Repository directory of Qgis and LizMap files echobase.config.lizmap.template.file.description=Lizmap configuration file template echobase.config.lizmap.url.description=Lizmap URL Modified: trunk/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.properties =================================================================== --- trunk/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.properties 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-domain/src/main/resources/i18n/echobase-domain_fr_FR.properties 2014-07-03 14:56:06 UTC (rev 1034) @@ -35,6 +35,8 @@ echobase.config.h2Version.description=Version du pilote jdbc H2 echobase.config.internal.db.directory.description=Répertoire de la base interne echobase.config.lib.directory.description=Chemin où sont stockés les libraires internes (drivers + application embarquée) +echobase.config.lizmap.config.file.description=Fichier de configuration de lizmap +echobase.config.lizmap.jdbc.url.description=URL JDBC de la base lizmap echobase.config.lizmap.target.file.description=Le répertoire de dépôt des fichiers Qgis et lizmap echobase.config.lizmap.template.file.description=Le modièle du fichier de configuration de Lizmap echobase.config.lizmap.url.description=L'URL de Lizmap Modified: trunk/echobase-services/pom.xml =================================================================== --- trunk/echobase-services/pom.xml 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-services/pom.xml 2014-07-03 14:56:06 UTC (rev 1034) @@ -138,6 +138,10 @@ <artifactId>commons-logging</artifactId> </dependency> <dependency> + <groupId>commons-configuration</groupId> + <artifactId>commons-configuration</artifactId> + </dependency> + <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> </dependency> @@ -219,6 +223,12 @@ <scope>test</scope> </dependency> + <!-- base sqlite for Lizmap --> + <dependency> + <groupId>org.xerial</groupId> + <artifactId>sqlite-jdbc</artifactId> + </dependency> + </dependencies> <profiles> Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java 2014-07-03 14:56:06 UTC (rev 1034) @@ -711,6 +711,10 @@ return persistenceContext.getVoyageDao().forMissionEquals(mission).findAll(); } + public List<Voyage> getAllVoyages() { + return persistenceContext.getVoyageDao().findAll(); + } + public long countVoyage() { return persistenceContext.getVoyageDao().count(); } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.java 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/SpatialService.java 2014-07-03 14:56:06 UTC (rev 1034) @@ -24,11 +24,16 @@ import com.google.common.base.Charsets; import com.google.common.base.Preconditions; import fr.ifremer.echobase.EchoBaseTechnicalException; +import fr.ifremer.echobase.entities.WorkingDbConfiguration; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.io.EchoBaseIOUtil; import fr.ifremer.echobase.persistence.JdbcConfiguration; import fr.ifremer.echobase.services.EchoBaseServiceSupport; import fr.ifremer.echobase.services.service.UserDbPersistenceService; +import fr.ifremer.echobase.services.service.workingDb.WorkingDbConfigurationService; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.HierarchicalINIConfiguration; +import org.apache.commons.configuration.SubnodeConfiguration; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -40,6 +45,10 @@ import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; import java.util.Scanner; /** @@ -66,6 +75,10 @@ @Inject private UserDbPersistenceService persistenceService; + @Inject + private WorkingDbConfigurationService workingDbConfigurationService; + + public void addSpatialSupport() { // add spatial structure @@ -157,24 +170,113 @@ /** - * Generate map files for this database and this voyage. + * Generate maps files for this database. * @param conf data base connexion configuration - * @param voyageId voyage identifier for this map - * @return Name of project map + * @return Name of repository maps */ - public String generateMap(JdbcConfiguration conf, String voyageId) { - Preconditions.checkState(StringUtils.isNotBlank(voyageId)); - Voyage voyage = persistenceService.getVoyage(voyageId); - return generateMap(conf, voyage); + public String generateMaps(JdbcConfiguration conf) { + + WorkingDbConfiguration workingDbConfiguration + = workingDbConfigurationService.getWorkingDbConfigurationByUrl(conf.getUrl()); + + File lizmapTarget = getConfiguration().getLizmapTarget(); + + File lizmapConfig = getConfiguration().getLizmapConfig(); + + String lizmapJdbcUrl = getConfiguration().getLizmapJdbcUrl(); + + if (!lizmapTarget.isDirectory()) { + throw new EchoBaseTechnicalException("Map target (" + lizmapTarget.getAbsolutePath() + ") is not directory"); + } + + String repositoryName = getRepositoryName(conf); + File repository = new File(lizmapTarget, repositoryName); + + if (!repository.isDirectory()) { + repository.mkdir(); + } + + // Add repository in Lizmap + + try { + HierarchicalINIConfiguration lizmapIni = new HierarchicalINIConfiguration(lizmapConfig); + SubnodeConfiguration section = lizmapIni.getSection("repository:" + repositoryName); + section.setProperty("label", workingDbConfiguration.getDescription()); + section.setProperty("path", repository.getAbsolutePath() + "/"); + lizmapIni.save(new FileWriter(lizmapConfig)); + + } catch (ConfigurationException e) { + throw new EchoBaseTechnicalException("Could not load Lizmap config", e); + } catch (IOException e) { + throw new EchoBaseTechnicalException("Could not save Lizmap config", e); + } + + // Add authorization + Connection connection = null; + Statement statement = null; + + try { + connection = DriverManager.getConnection(lizmapJdbcUrl); + statement = connection.createStatement(); + statement.execute("INSERT OR REPLACE INTO jacl2_rights " + + "(id_aclsbj, id_aclgrp, id_aclres, canceled) " + + "VALUES " + + "('lizmap.repositories.view', '__anonymous', '" + repositoryName + "', 0);"); + statement.execute("INSERT OR REPLACE INTO jacl2_rights " + + "(id_aclsbj, id_aclgrp, id_aclres, canceled) " + + "VALUES " + + "('lizmap.repositories.view', 'admins', '" + repositoryName + "', 0);"); + + } catch (SQLException e) { + throw new EchoBaseTechnicalException("Could not create rights in lizmap", e); + } finally { + try { + if (statement != null) { + statement.close(); + } + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + throw new EchoBaseTechnicalException("Could not create rights in lizmap", e); + } + } + + + for (Voyage voyage : persistenceService.getAllVoyages()) { + generateMap(conf, voyage, repository); + } + + return repositoryName; } + protected String getRepositoryName(JdbcConfiguration conf) { + + String url = conf.getUrl(); + + int hostIndex = START_JDBC_URL.length() - 1; + int portIndex = url.indexOf(':', hostIndex); + int dbnameIndex = url.indexOf("/", portIndex); + + String dbname = url.substring(dbnameIndex + 1); + String host = url.substring(hostIndex + 1, portIndex); + String port = url.substring(portIndex + 1, dbnameIndex); + + String repository = host + port + dbname; + + repository = StringUtils.replaceEach(repository, new String[]{"-"}, new String[]{""}); + + return repository; + } + /** * Generate map files for this database and this voyage. * @param conf data base connexion configuration * @param voyage voyage for this map + * @param repository Lizmap repository * @return Name of project map */ - public String generateMap (JdbcConfiguration conf, Voyage voyage) { + protected String generateMap (JdbcConfiguration conf, Voyage voyage, File repository) { Preconditions.checkNotNull(conf); Preconditions.checkNotNull(voyage); @@ -182,12 +284,10 @@ String[] templateValues = getTemplateValues(conf, voyage); - generateMapFile(getConfiguration().getQgisTemplate(), project, templateValues); + generateMapFile(getConfiguration().getQgisTemplate(), repository, project, templateValues); - generateMapFile(getConfiguration().getLizmapTemplate(), project, templateValues); + generateMapFile(getConfiguration().getLizmapTemplate(), repository, project, templateValues); - - return project; } @@ -195,22 +295,17 @@ /** * Generate file from template and values * @param template file template to used + * @param repository lizmap repository * @param project project name * @param templateValues values to used in the template * @return file generated */ - protected File generateMapFile(File template, String project, String[] templateValues) { + protected File generateMapFile(File template, File repository, String project, String[] templateValues) { - File lizmapTarget = getConfiguration().getLizmapTarget(); - - if (!lizmapTarget.isDirectory()) { - throw new EchoBaseTechnicalException("Map target (" + lizmapTarget.getAbsolutePath() + ") is not directory"); - } - String name = template.getName(); name = project + name.substring(name.indexOf(".")); - File target = new File(lizmapTarget, name); + File target = new File(repository, name); if (!target.isFile()) { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/WorkingDbConfigurationService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/WorkingDbConfigurationService.java 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/service/workingDb/WorkingDbConfigurationService.java 2014-07-03 14:56:06 UTC (rev 1034) @@ -180,6 +180,13 @@ } } + public WorkingDbConfiguration getWorkingDbConfigurationByUrl(String url) { + + WorkingDbConfiguration configuration = getDao().forUrlEquals(url).findUnique(); + + return configuration; + } + protected WorkingDbConfiguration getExistingConf(String id) throws WorkingDbConfigurationNotFoundException { WorkingDbConfiguration entity = getDao().findByTopiaId(id); if (entity == null) { Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationListener.java 2014-07-03 14:56:06 UTC (rev 1034) @@ -48,6 +48,7 @@ static { try { Class.forName("org.postgresql.Driver"); + Class.forName("org.sqlite.JDBC"); } catch (ClassNotFoundException e) { if (log.isErrorEnabled()) { log.error("Could not find pg driver", e); Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/Show.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/Show.java 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/Show.java 2014-07-03 14:56:06 UTC (rev 1034) @@ -21,13 +21,13 @@ * #L% */ -import fr.ifremer.echobase.entities.data.Voyage; -import fr.ifremer.echobase.services.service.UserDbPersistenceService; +import fr.ifremer.echobase.persistence.JdbcConfiguration; import fr.ifremer.echobase.services.service.spatial.SpatialService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.inject.Inject; -import java.util.Map; /** * To configure and show spatial datas. @@ -39,12 +39,11 @@ private static final long serialVersionUID = 1L; - @Inject - protected transient UserDbPersistenceService userDbPersistenceService; + private static final Log log = LogFactory.getLog(Show.class); @Inject protected transient SpatialService spatialService; - + protected final ShowSpatialModel model = new ShowSpatialModel(); public ShowSpatialModel getModel() { @@ -53,13 +52,18 @@ protected boolean canAddSpatial; - /** Universe of existing voyages. */ - protected Map<String, String> voyages; + protected String lizmapRepository; - public Map<String, String> getVoyages() { - return voyages; + public String getLizmapUrl() { + String url = getServiceContext().getConfiguration().getLizmapUrl() + "?" + + "repository=" + lizmapRepository; + return url; } + public String getLizmapRepository() { + return lizmapRepository; + } + public boolean isCanAddSpatial() { return canAddSpatial; } @@ -67,15 +71,20 @@ @Override public String execute() throws Exception { - voyages = userDbPersistenceService.loadSortAndDecorate(Voyage.class); + JdbcConfiguration dbConf = getEchoBaseSession().getWorkingDbConfiguration(); + lizmapRepository = spatialService.generateMaps(dbConf); + + if (log.isInfoEnabled()) { + log.info("Loading spatial view for repository: " + lizmapRepository); + } + model.setJdbcUrl(getServiceContext().getUserDbUrl()); model.setWithSpatial(spatialService.isSpatialAware()); // can add postgis if working db is postgresql and has still no echobase // spatial db canAddSpatial = !model.isWithSpatial() && spatialService.isPostgresql(); - return SUCCESS; } Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowMap.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowMap.java 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/spatial/ShowMap.java 2014-07-03 14:56:06 UTC (rev 1034) @@ -21,14 +21,8 @@ * #L% */ -import fr.ifremer.echobase.persistence.JdbcConfiguration; -import fr.ifremer.echobase.services.service.spatial.SpatialService; import fr.ifremer.echobase.ui.actions.EchoBaseActionSupport; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import javax.inject.Inject; - /** * To display only the spatial data map. * <p/> @@ -39,52 +33,4 @@ */ public class ShowMap extends EchoBaseActionSupport { - private static final long serialVersionUID = 1L; - - /** Logger. */ - private static final Log log = LogFactory.getLog(ShowMap.class); - - @Inject - protected transient SpatialService spatialService; - - protected String voyageId; - - protected String lizmpaProject; - - public String getVoyageId() { - return voyageId; - } - - public void setVoyageId(String voyageId) { - this.voyageId = voyageId; - } - - public String getLizmapUrl() { - String url = getServiceContext().getConfiguration().getLizmapUrl() + "?" + - "repository=" + getServiceContext().getConfiguration().getLizmapRepository() + "&" + - "project=" + lizmpaProject; - return url; - } - - public String getLizmapRepository() { - return getServiceContext().getConfiguration().getLizmapRepository(); - } - - public String getLizmapProject() { - return lizmpaProject; - } - - - @Override - public String execute() throws Exception { - - JdbcConfiguration dbConf = getEchoBaseSession().getWorkingDbConfiguration(); - - lizmpaProject = spatialService.generateMap(dbConf, voyageId); - - if (log.isInfoEnabled()) { - log.info("Loading spatial view for voyage: " + voyageId); - } - return SUCCESS; - } } Modified: trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/show.jsp =================================================================== --- trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/show.jsp 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-ui/src/main/webapp/WEB-INF/jsp/spatial/show.jsp 2014-07-03 14:56:06 UTC (rev 1034) @@ -39,41 +39,13 @@ </li> </ul> </div> + </s:form> - <fieldset> - <legend> - <s:text name="echobase.legend.showData.configure"/> - </legend> + <iframe id="spatialViewContent" src="${lizmapUrl}"></iframe> - <div class="cleanBoth help"> - <s:a href="%{getDocumentation('showSpatialData.html', null)}" target="doc"> - <s:text name="echobase.action.show.showSpatialData.documentation"/> - </s:a> - </div> - <br/> +</div> - <div class="label"> - <s:property value="getText('echobase.common.voyage')"/> : - </div> - <ul> - <s:iterator value="voyages"> - <li> - <s:url action="showMap" id="showMapUrl"> - <s:param name="voyageId" value="%{key}"/> - </s:url> - <s:a href="%{showMapUrl}" target="_blank"> - <s:property value="%{value}"/> - </s:a> - </li> - </s:iterator> - </ul> - - <s:hidden key="model.withSpatial" label=' '/> - - </fieldset> - - </s:form> </s:if> <s:else> Modified: trunk/echobase-ui/src/main/webapp/css/screen.css =================================================================== --- trunk/echobase-ui/src/main/webapp/css/screen.css 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/echobase-ui/src/main/webapp/css/screen.css 2014-07-03 14:56:06 UTC (rev 1034) @@ -762,3 +762,8 @@ } #errorStack { padding:5px; width:80%; overflow:auto; } + +#spatialViewContent { + width: 99%; + height: 800px; +} Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2014-06-18 16:03:21 UTC (rev 1033) +++ trunk/pom.xml 2014-07-03 14:56:06 UTC (rev 1034) @@ -268,6 +268,12 @@ </dependency> <dependency> + <groupId>commons-configuration</groupId> + <artifactId>commons-configuration</artifactId> + <version>1.10</version> + </dependency> + + <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version> @@ -287,6 +293,14 @@ <version>${h2Version}</version> </dependency> + <!-- base sqlite for Lizmap --> + <dependency> + <groupId>org.xerial</groupId> + <artifactId>sqlite-jdbc</artifactId> + <version>3.7.2</version> + </dependency> + + <!-- Struts 2 --> <dependency>
participants (1)
-
sbavencoff@users.forge.codelutin.com