From: <fxp...@us...> - 2011-08-30 14:02:52
|
Revision: 8151 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=8151&view=rev Author: fxprunayre Date: 2011-08-30 14:02:43 +0000 (Tue, 30 Aug 2011) Log Message: ----------- GeoNetwork, #589. Thanks Jesse Eichar. Validation query for Oracle and DB2 #591, Thanks Christian Mueller. #583 DB creation and migration improvement. Modified Paths: -------------- trunk/web/pom.xml trunk/web/src/main/filters/dev.properties trunk/web/src/main/filters/inspire.properties trunk/web/src/main/filters/prod.properties trunk/web/src/main/java/org/fao/geonet/Geonetwork.java trunk/web/src/main/java/org/fao/geonet/lib/DbLib.java trunk/web/src/main/java/org/fao/geonet/lib/ServerLib.java trunk/web/src/main/java/org/fao/geonet/lib/TextLib.java Added Paths: ----------- trunk/web/src/main/webResources/WEB-INF/server-props-overrides.xml trunk/web/src/main/webResources/WEB-INF/web.xml trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/data-db-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-ar-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-ca-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-cn-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-de-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-en-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-es-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-fi-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-fr-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-nl-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-no-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-pt-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-ru-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/data/loc-vi-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/243/ trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/243/data-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/260/ trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/260/migrate-db-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/260/migrate-db-oracle.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/260/migrate-db-postgis.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/260/migrate-db-postgres.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/260/migrate-db-sqlserver.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/260/migrate-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/261/ trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/261/migrate-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/262/ trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/262/migrate-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/263/ trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/263/migrate-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/264/ trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/264/migrate-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/265/ trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/265/migrate-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/270/ trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/270/migrate-default.sql trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/280/ trunk/web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/280/migrate-default.sql trunk/web/src/main/webapp/WEB-INF/config-db.xml trunk/web/src/main/webapp/WEB-INF/config-gui.xml trunk/web/src/main/webapp/WEB-INF/config-overrides-dev.xml trunk/web/src/main/webapp/WEB-INF/config-overrides-example.xml trunk/web/src/main/webapp/WEB-INF/config-overrides-inspire.xml trunk/web/src/main/webapp/WEB-INF/config-overrides-prod.xml trunk/web/src/main/webapp/WEB-INF/config-overrides-widget.xml trunk/web/src/main/webapp/WEB-INF/config-overrides.xsd trunk/web/src/main/webapp/WEB-INF/config.xml trunk/web/src/main/webapp/WEB-INF/server.prop Removed Paths: ------------- trunk/web/src/main/webResources/WEB-INF/classes/setup/sql/data/data-db-default.sql trunk/web/src/main/webResources/WEB-INF/config-gui.xml trunk/web/src/main/webResources/WEB-INF/config.xml trunk/web/src/main/webResources/WEB-INF/server.prop trunk/web/src/main/webapp/WEB-INF/web.xml Modified: trunk/web/pom.xml =================================================================== --- trunk/web/pom.xml 2011-08-30 14:02:17 UTC (rev 8150) +++ trunk/web/pom.xml 2011-08-30 14:02:43 UTC (rev 8151) @@ -306,6 +306,12 @@ <artifactId>opendap</artifactId> <version>2.1</version> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>geonetwork-client</artifactId> + <version>${project.version}</version> + <scope>provided</scope> + </dependency> </dependencies> <build> @@ -316,51 +322,40 @@ <version>2.5</version> <executions> <execution> - <id>copy-filter-webResource</id> - <phase>process-resources</phase> - <goals> - <goal>copy-resources</goal> - </goals> - <configuration> - <outputDirectory>${build.webapp.resources}</outputDirectory> - <resources> - <resource> - <directory>${basedir}/src/main/webResources</directory> - <filtering>true</filtering> - <targetPath>${build.webapp.resources}</targetPath> - <excludes> - <exclude>**/.svn</exclude> - </excludes> - </resource> - </resources> - <filters> - <filter>${basedir}/src/main/filters/${env}.properties</filter> - </filters> - <overwrite>true</overwrite> - </configuration> - </execution> - <execution> - <id>copy-webapp</id> - <phase>process-resources</phase> - <goals> - <goal>copy-resources</goal> - </goals> - <configuration> - <outputDirectory>${build.webapp.resources}</outputDirectory> - <resources> - <resource> - <directory>src/main/webapp</directory> - <filtering>false</filtering> - <targetPath>${build.webapp.resources}</targetPath> - <excludes> - <exclude>**/.svn</exclude> - </excludes> - </resource> - </resources> - <overwrite>false</overwrite> - </configuration> - </execution> - </executions> + <id>copy-filter-webResource</id> + <phase>process-resources</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <includeEmptyDirs>false</includeEmptyDirs> + <outputDirectory>${build.webapp.resources}</outputDirectory> + <resources> + <resource> + <directory>${basedir}/src/main/webResources</directory> + <filtering>true</filtering> + <targetPath>${build.webapp.resources}</targetPath> + <excludes> + <exclude>**/.svn</exclude> + </excludes> + </resource> + <resource> + <directory>${basedir}/src/main/webapp/scripts/lib/</directory> + <filtering>false</filtering> + <targetPath>${build.webapp.resources}/scripts/lib/</targetPath> + <excludes> + <exclude>**/.svn</exclude> + <exclude>**/*.js</exclude> + </excludes> + </resource> + </resources> + <filters> + <filter>${basedir}/src/main/filters/${env}.properties</filter> + </filters> + <overwrite>true</overwrite> + </configuration> + </execution> + </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> @@ -381,7 +376,6 @@ </configuration> </plugin> - <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>yuicompressor-maven-plugin</artifactId> @@ -681,10 +675,17 @@ (see src/main/filters) and copy them to the webapp --> <webResources> <resource> + <directory>${basedir}/src/main/webapp</directory> <directory>${build.webapp.resources}</directory> </resource> </webResources> - + <overlays> + <overlay> + <groupId>${project.groupId}</groupId> + <artifactId>geonetwork-client</artifactId> + <type>jar</type> + </overlay> + </overlays> <!-- <warSourceDirectory>src/main/geonetwork</warSourceDirectory> --> <!-- Remove comment tag to include documentation in the build. @@ -741,9 +742,13 @@ </connector> </connectors> <webApp>${project.build.directory}/geonetwork</webApp> - <webAppSourceDirectory>${build.webapp.resources}</webAppSourceDirectory> + <webXml>${build.webapp.resources}/WEB-INF/web.xml</webXml> +<!-- <webAppSourceDirectory>${build.webapp.resources}</webAppSourceDirectory> --> <webAppConfig> <contextPath>/geonetwork</contextPath> + <baseResource implementation="org.mortbay.resource.ResourceCollection"> + <resourcesAsCSV>${basedir}/src/main/webapp,${build.webapp.resources}${widgets.webapp.resources}</resourcesAsCSV> + </baseResource> </webAppConfig> <stopKey>JETTY_TOP</stopKey> <stopPort>8090</stopPort> @@ -793,6 +798,13 @@ <env>inspire</env> </properties> </profile> + <profile> + <id>widgets</id> + <properties> + <web.xml.widget.config.overrides>,/WEB-INF/config-overrides-widget.xml</web.xml.widget.config.overrides> + <widgets.webapp.resources>,../web-client/src/main/resources/</widgets.webapp.resources> + </properties> + </profile> </profiles> <reporting> @@ -814,5 +826,9 @@ <geonetwork.webapp.css.dir>${geonetwork.webapp.dir}</geonetwork.webapp.css.dir> <minify.verbose>false</minify.verbose> <build.webapp.resources>${project.build.directory}/webapp</build.webapp.resources> + <web.xml.main.config.overrides>/WEB-INF/config-overrides-${env}.xml</web.xml.main.config.overrides> + <web.xml.widget.config.overrides></web.xml.widget.config.overrides> + <widgets.webapp.resources></widgets.webapp.resources> + <system.specific.overrides></system.specific.overrides> </properties> </project> Modified: trunk/web/src/main/filters/dev.properties =================================================================== --- trunk/web/src/main/filters/dev.properties 2011-08-30 14:02:17 UTC (rev 8150) +++ trunk/web/src/main/filters/dev.properties 2011-08-30 14:02:43 UTC (rev 8151) @@ -2,53 +2,3 @@ xsl.TransformerFactoryImpl=net.sf.saxon.TransformerFactoryImpl -# Catalogue names -geonetwork.siteId=Dummy -geonetwork.name=My GeoNetwork catalogue -geonetwork.organization=My organization - -# Catalogue settings -geonetwork.host=localhost -geonetwork.port=8080 -geonetwork.protocol=http -geonetwork.inspire=false -geonetwork.inspire.enableSearchPanel=false -geonetwork.z3950=true -geonetwork.z3950.port=2100 -geonetwork.searchStats=false -geonetwork.xlinkResolver=false -geonetwork.harvester.enableEditing=false -geonetwork.indexlanguage.english=true -geonetwork.indexlanguage.french=false -geonetwork.metadata.enableSimpleView=true -geonetwork.metadata.enableIsoView=true -geonetwork.metadata.enableInspireView=false -geonetwork.metadata.enableXmlView=true -geonetwork.metadata.defaultView=simple - -# GUI settings -geonetwork.config-gui.widget=false -geonetwork.config-gui.widget.url=main.home -#geonetwork.config-gui.url=../../apps/search/ -geonetwork.config-gui.widget.create= -geonetwork.config-gui.widget.parameters= -geonetwork.config-gui.thesaurusRepositoryUrl=http://geonetwork.svn.sourceforge.net/svnroot/geonetwork/utilities/repository/thesaurus.xml - -# Application settings -geonetwork.language=en -geonetwork.config.dataDir=WEB-INF/data -geonetwork.config.luceneDir=WEB-INF/lucene -geonetwork.config.preferredSchema=iso19139 -geonetwork.config.schemaPluginsDir=../../schemaPlugins -geonetwork.config.uploadDir=../../data/tmp -geonetwork.config.maxUploadSize=100 - -# DBMS -geonetwork.config.dbms.pool=jeeves.resources.dbms.ApacheDBCPool -#geonetwork.config.dbms.pool=jeeves.resources.dbms.DbmsPool -geonetwork.config.dbms.username=admin -geonetwork.config.dbms.password=gnos -geonetwork.config.dbms.driver=org.h2.Driver -geonetwork.config.dbms.url=jdbc:h2:geonetwork -geonetwork.config.dbms.poolSize=33 -geonetwork.config.dbms.reconnectTime=3600 Modified: trunk/web/src/main/filters/inspire.properties =================================================================== --- trunk/web/src/main/filters/inspire.properties 2011-08-30 14:02:17 UTC (rev 8150) +++ trunk/web/src/main/filters/inspire.properties 2011-08-30 14:02:43 UTC (rev 8151) @@ -1,54 +1,3 @@ geonetwork.build.profile=inspire xsl.TransformerFactoryImpl=de.fzi.dbs.xml.transform.CachingTransformerFactory - -# Catalogue names -geonetwork.siteId=Dummy -geonetwork.name=My GeoNetwork catalogue -geonetwork.organization=My organization - -# Catalogue settings -geonetwork.host=localhost -geonetwork.port=8080 -geonetwork.protocol=http -geonetwork.inspire=true -geonetwork.inspire.enableSearchPanel=true -geonetwork.z3950=true -geonetwork.z3950.port=2100 -geonetwork.searchStats=false -geonetwork.xlinkResolver=false -geonetwork.harvester.enableEditing=false -geonetwork.indexlanguage.english=true -geonetwork.indexlanguage.french=false -geonetwork.metadata.enableSimpleView=true -geonetwork.metadata.enableIsoView=true -geonetwork.metadata.enableInspireView=true -geonetwork.metadata.enableXmlView=true -geonetwork.metadata.defaultView=inspire - -# GUI settings -geonetwork.config-gui.widget=false -geonetwork.config-gui.widget.url=main.home -#geonetwork.config-gui.url=../../apps/search/ -geonetwork.config-gui.widget.create= -geonetwork.config-gui.widget.parameters=extent=-10.6700,34.5000,31.5500,71.0500 -geonetwork.config-gui.thesaurusRepositoryUrl=http://geonetwork.svn.sourceforge.net/svnroot/geonetwork/utilities/repository/thesaurus.xml - -# Application settings -geonetwork.language=en -geonetwork.config.dataDir=WEB-INF/data -geonetwork.config.luceneDir=WEB-INF/lucene -geonetwork.config.preferredSchema=iso19139 -geonetwork.config.schemaPluginsDir=../../schemaPlugins -geonetwork.config.uploadDir=../../data/tmp -geonetwork.config.maxUploadSize=100 - -# DBMS -geonetwork.config.dbms.pool=jeeves.resources.dbms.ApacheDBCPool -#geonetwork.config.dbms.pool=jeeves.resources.dbms.DbmsPool -geonetwork.config.dbms.username=admin -geonetwork.config.dbms.password=gnos -geonetwork.config.dbms.driver=org.h2.Driver -geonetwork.config.dbms.url=jdbc:h2:geonetwork -geonetwork.config.dbms.poolSize=33 -geonetwork.config.dbms.reconnectTime=3600 Modified: trunk/web/src/main/filters/prod.properties =================================================================== --- trunk/web/src/main/filters/prod.properties 2011-08-30 14:02:17 UTC (rev 8150) +++ trunk/web/src/main/filters/prod.properties 2011-08-30 14:02:43 UTC (rev 8151) @@ -2,53 +2,4 @@ xsl.TransformerFactoryImpl=de.fzi.dbs.xml.transform.CachingTransformerFactory -# Catalogue names -geonetwork.siteId=Dummy -geonetwork.name=My GeoNetwork catalogue -geonetwork.organization=My organization -# Catalogue settings -geonetwork.host=localhost -geonetwork.port=8080 -geonetwork.protocol=http -geonetwork.inspire=false -geonetwork.inspire.enableSearchPanel=false -geonetwork.z3950=true -geonetwork.z3950.port=2100 -geonetwork.searchStats=false -geonetwork.xlinkResolver=false -geonetwork.harvester.enableEditing=false -geonetwork.indexlanguage.english=true -geonetwork.indexlanguage.french=false -geonetwork.metadata.enableSimpleView=true -geonetwork.metadata.enableIsoView=true -geonetwork.metadata.enableInspireView=false -geonetwork.metadata.enableXmlView=true -geonetwork.metadata.defaultView=simple - -# GUI settings -geonetwork.config-gui.widget=false -geonetwork.config-gui.widget.url=main.home -#geonetwork.config-gui.url=../../apps/search/ -geonetwork.config-gui.widget.create= -geonetwork.config-gui.widget.parameters= -geonetwork.config-gui.thesaurusRepositoryUrl=http://geonetwork.svn.sourceforge.net/svnroot/geonetwork/utilities/repository/thesaurus.xml - -# Application settings -geonetwork.language=en -geonetwork.config.dataDir=WEB-INF/data -geonetwork.config.luceneDir=WEB-INF/lucene -geonetwork.config.preferredSchema=iso19139 -geonetwork.config.schemaPluginsDir=../../schemaPlugins -geonetwork.config.uploadDir=../../data/tmp -geonetwork.config.maxUploadSize=100 - -# DBMS -geonetwork.config.dbms.pool=jeeves.resources.dbms.ApacheDBCPool -#geonetwork.config.dbms.pool=jeeves.resources.dbms.DbmsPool -geonetwork.config.dbms.username=admin -geonetwork.config.dbms.password=gnos -geonetwork.config.dbms.driver=org.h2.Driver -geonetwork.config.dbms.url=jdbc:h2:geonetwork -geonetwork.config.dbms.poolSize=33 -geonetwork.config.dbms.reconnectTime=3600 Modified: trunk/web/src/main/java/org/fao/geonet/Geonetwork.java =================================================================== --- trunk/web/src/main/java/org/fao/geonet/Geonetwork.java 2011-08-30 14:02:17 UTC (rev 8150) +++ trunk/web/src/main/java/org/fao/geonet/Geonetwork.java 2011-08-30 14:02:43 UTC (rev 8151) @@ -32,6 +32,7 @@ import java.nio.charset.Charset; import java.sql.SQLException; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.UUID; @@ -40,12 +41,15 @@ import jeeves.interfaces.ApplicationHandler; import jeeves.interfaces.Logger; import jeeves.resources.dbms.Dbms; +import jeeves.server.ConfigurationOverrides; import jeeves.server.ServiceConfig; import jeeves.server.UserSession; import jeeves.server.context.ServiceContext; +import jeeves.server.sources.http.JeevesServlet; import jeeves.utils.BinaryFile; +import jeeves.utils.ProxyInfo; import jeeves.utils.Util; -import jeeves.utils.ProxyInfo; +import jeeves.utils.Xml; import jeeves.utils.XmlResolver; import jeeves.xlink.Processor; @@ -104,6 +108,7 @@ static final String IDS_ATTRIBUTE_NAME = "id"; private ThreadPool threadPool; private String FS = File.separator; + private Element dbConfiguration; //--------------------------------------------------------------------------- //--- @@ -131,7 +136,7 @@ String baseURL = context.getBaseUrl(); String webappName = baseURL.substring(1); - ServerLib sl = new ServerLib(path); + ServerLib sl = new ServerLib(context.getServlet(), path); String version = sl.getVersion(); String subVersion = sl.getSubVersion(); @@ -195,6 +200,10 @@ // --- Check current database and create database if an emty one is found + String dbConfigurationFilePath = path + "/WEB-INF/config-db.xml"; + dbConfiguration = Xml.loadFile(dbConfigurationFilePath); + ConfigurationOverrides.updateWithOverrides(dbConfigurationFilePath, context.getServlet(), path, dbConfiguration); + Dbms dbms = initDatabase(context); //------------------------------------------------------------------------ @@ -212,7 +221,7 @@ SettingManager settingMan = new SettingManager(dbms, context.getProviderManager()); // --- Migrate database if an old one is found - migrateDatabase(dbms, settingMan, version, subVersion); + migrateDatabase(context.getServlet(), dbms, settingMan, version, subVersion); //--- initialize ThreadUtils with setting manager and rm props ThreadUtils.init(context.getResourceManager().getProps(Geonet.Res.MAIN_DB), @@ -430,6 +439,23 @@ } } + /** + * Parse a version number removing extra "-*" element and returning an integer. "2.7.0-SNAPSHOT" + * is returned as 270. + * + * @param number The version number to parse + * @return The version number as an integer + * @throws Exception + */ + private int parseVersionNumber(String number) throws Exception { + // Remove extra "-SNAPSHOT" info which may be in version number + int dashIdx = number.indexOf("-"); + if (dashIdx != -1) { + number = number.substring(0, number.indexOf("-")); + } + return Integer.valueOf(number.replaceAll("\\.", "")); + } + /** * Check if current database is running same version as the web application. * If not, apply migration SQL script : @@ -438,10 +464,10 @@ * * @param dbms * @param settingMan - * @param version + * @param webappVersion * @param subVersion */ - private void migrateDatabase(Dbms dbms, SettingManager settingMan, String version, String subVersion) { + private void migrateDatabase(JeevesServlet jeevesServlet, Dbms dbms, SettingManager settingMan, String webappVersion, String subVersion) { logger.info(" - Migration ..."); // Get db version and subversion @@ -449,72 +475,97 @@ String dbSubVersion = settingMan.getValue("system/platform/subVersion"); // Migrate db if needed - logger.debug(" Webapp version:" + version + " subversion:" + subVersion); - logger.debug(" Database version:" + dbVersion + " subversion:" + dbSubVersion); + logger.info(" Webapp version:" + webappVersion + " subversion:" + subVersion); + logger.info(" Database version:" + dbVersion + " subversion:" + dbSubVersion); + if (dbVersion == null || webappVersion == null) { + logger.warning(" Database does not contain any version information. Check that the database is a GeoNetwork database with data." + + " Migration step aborted."); + return; + } - if (version.equals(dbVersion) + int from = 0, to = 0; + + try { + from = parseVersionNumber(dbVersion); + to = parseVersionNumber(webappVersion); + } catch(Exception e) { + logger.warning(" Error parsing version numbers: " + e.getMessage()); + e.printStackTrace(); + } + + if (from == to //&& subVersion.equals(dbSubVersion) Check only on version number ) { logger.info(" Webapp version = Database version, no migration task to apply."); } else { // Migrating from 2.0 to 2.5 could be done 2.0 -> 2.3 -> 2.4 -> 2.5 String dbType = Lib.db.getDBType(dbms); - logger.info(" Migrating from " + dbVersion + " to " + version + " (dbtype:" + dbType + ")..."); - String sqlScriptPath = ""; - String sqlMigrationScriptPath = path + "/WEB-INF/classes/setup/sql/migrate/" + - dbVersion + "-to-" + version + "/" + dbType + ".sql"; - String defaultSqlMigrationScriptPath = path + "/WEB-INF/classes/setup/sql/migrate/" + - dbVersion + "-to-" + version + "/default.sql"; - - File sqlMigrationScript = new File(sqlMigrationScriptPath); - File defaultSqlMigrationScript = new File(defaultSqlMigrationScriptPath); - File script = null; + logger.debug(" Migrating from " + from + " to " + to + " (dbtype:" + dbType + ")..."); - // Use specific db script or default one - if (sqlMigrationScript.exists()) { - script = sqlMigrationScript; - } else if (defaultSqlMigrationScript.exists()) { - script = defaultSqlMigrationScript; - } + boolean anyMigrationAction = false; + boolean anyMigrationError = false; - if (script != null) { - try { - sqlScriptPath = script.getCanonicalPath(); - // Run the SQL migration - logger.info(" Running SQL migration step ..."); - Lib.db.runSQL(dbms, script); - - // Refresh setting manager in case the migration task added some new settings. - settingMan.refresh(dbms); - - // Update the logo - String siteId = settingMan.getValue("system/site/siteId"); - initLogo(dbms, siteId); - - // TODO : Maybe a force rebuild index is required in such situation. - } catch (Exception e) { - logger.info(" Errors occurs during SQL migration task: " + sqlScriptPath - + " or when refreshing settings manager."); - e.printStackTrace(); - } - - logger.info(" Successfull migration.\n" + - " Catalogue administrator still need to update the catalogue\n" + - " logo and data directory in order to complete the migration process.\n" + - " Lucene index rebuild is also recommended after migration." - ); - - } else { - logger.info(" No migration task found between webapp and database version.\n" + - " The system may be unstable or may failed to start if you try to run \n" + - " the current GeoNetwork " + version + " with an older database (ie. " + dbVersion + "\n" + - " ). Try to run the migration task manually on the current database\n" + - " before starting the application or start with a new empty database.\n" + - " Sample SQL scripts for migration could be found in WEB-INF/sql/migrate folder.\n" - ); - + logger.info(" Loading SQL migration step configuration from config-db.xml ..."); + List<Element> versions = dbConfiguration.getChild("migrate").getChildren(); + for(Element version : versions) { + int versionNumber = Integer.valueOf(version.getAttributeValue("id")); + if (versionNumber > from && versionNumber <= to) { + logger.info(" - running tasks for " + versionNumber + "..."); + List<Element> versionConfiguration = version.getChildren(); + for(Element file : versionConfiguration) { + String filePath = path + file.getAttributeValue("path"); + String filePrefix = file.getAttributeValue("filePrefix"); + anyMigrationAction = true; + logger.info(" - SQL migration file:" + filePath + " prefix:" + filePrefix + " ..."); + try { + Lib.db.insertData(jeevesServlet, dbms, path, filePath, filePrefix); + } catch (Exception e) { + logger.info(" Errors occurs during SQL migration file: " + e.getMessage()); + e.printStackTrace(); + anyMigrationError = true; + } + } + } + } + + + // Refresh setting manager in case the migration task added some new settings. + try { + settingMan.refresh(dbms); + } catch (Exception e) { + logger.info(" Errors occurs during settings manager refresh during migration. Error is: " + e.getMessage()); + e.printStackTrace(); + anyMigrationError = true; + } + + // Update the logo + String siteId = settingMan.getValue("system/site/siteId"); + initLogo(dbms, siteId); + + // TODO : Maybe a force rebuild index is required in such situation. + + if (anyMigrationAction && !anyMigrationError) { + logger.info(" Successfull migration.\n" + + " Catalogue administrator still need to update the catalogue\n" + + " logo and data directory in order to complete the migration process.\n" + + " Lucene index rebuild is also recommended after migration." + ); } + if (!anyMigrationAction) { + logger.warning(" No migration task found between webapp and database version.\n" + + " The system may be unstable or may failed to start if you try to run \n" + + " the current GeoNetwork " + webappVersion + " with an older database (ie. " + dbVersion + "\n" + + " ). Try to run the migration task manually on the current database\n" + + " before starting the application or start with a new empty database.\n" + + " Sample SQL scripts for migration could be found in WEB-INF/sql/migrate folder.\n" + ); + + } + + if (anyMigrationError) { + logger.warning(" Error occurs during migration. Check the log file for more details."); + } // TODO : Maybe some migration stuff has to be done in Java ? } } @@ -541,16 +592,30 @@ String dbURL = dbms.getURL(); logger.info(" - Database connection on " + dbURL + " ..."); + // Create db if empty if (!Lib.db.touch(dbms)) { logger.info(" " + dbURL + " is an empty database (Metadata table not found)."); + + List<Element> createConfiguration = dbConfiguration.getChild("create").getChildren(); + for(Element file : createConfiguration) { + String filePath = path + file.getAttributeValue("path"); + String filePrefix = file.getAttributeValue("filePrefix"); + logger.info(" - SQL create file:" + filePath + " prefix:" + filePrefix + " ..."); + // Do we need to remove object before creating the database ? + Lib.db.removeObjects(context.getServlet(), dbms, path, filePath, filePrefix); + Lib.db.createSchema(context.getServlet(), dbms, path, filePath, filePrefix); + } - // Do we need to remove object before creating the database ? - Lib.db.removeObjects(dbms, path); - Lib.db.createSchema(dbms, path); - dbms.commit(); - Lib.db.insertData(dbms, path); - + List<Element> dataConfiguration = dbConfiguration.getChild("data").getChildren(); + for(Element file : dataConfiguration) { + String filePath = path + file.getAttributeValue("path"); + String filePrefix = file.getAttributeValue("filePrefix"); + logger.info(" - SQL data file:" + filePath + " prefix:" + filePrefix + " ..."); + Lib.db.insertData(context.getServlet(), dbms, path, filePath, filePrefix); + } + dbms.commit(); + // Copy logo String uuid = UUID.randomUUID().toString(); initLogo(dbms, uuid); @@ -558,7 +623,6 @@ } else { logger.info(" Found an existing GeoNetwork database."); } - return dbms; } Modified: trunk/web/src/main/java/org/fao/geonet/lib/DbLib.java =================================================================== --- trunk/web/src/main/java/org/fao/geonet/lib/DbLib.java 2011-08-30 14:02:17 UTC (rev 8150) +++ trunk/web/src/main/java/org/fao/geonet/lib/DbLib.java 2011-08-30 14:02:43 UTC (rev 8151) @@ -24,6 +24,7 @@ package org.fao.geonet.lib; import jeeves.resources.dbms.Dbms; +import jeeves.server.sources.http.JeevesServlet; import jeeves.utils.Log; import org.fao.geonet.constants.Geonet; import org.jdom.Element; @@ -47,7 +48,6 @@ // ----------------------------------------------------------------------------- private static final String SQL_EXTENSION = ".sql"; - private static final String SETUP_SQL_PATH = "/WEB-INF/classes/setup/sql/"; public Element select(Dbms dbms, String table, String name) throws SQLException { @@ -118,15 +118,16 @@ * Remove all objects in the database. Read the SQL file and check all * CREATE TABLE statements to collect the list of table to remove. * + * @param jeevesServlet * @param dbms * @param cb * @throws FileNotFoundException * @throws IOException */ - public void removeObjects(Dbms dbms, String appPath) + public void removeObjects(JeevesServlet jeevesServlet, Dbms dbms, String appPath, String filePath, String filePrefix) throws FileNotFoundException, IOException { Log.debug(Geonet.DB, "Removing database objects"); - List<String> schema = loadSchemaFile(dbms, appPath); + List<String> schema = loadSchemaFile(jeevesServlet, dbms, appPath, filePath, filePrefix); // --- step 1 : collect objects to remove ArrayList<ObjectInfo> objects = new ArrayList<ObjectInfo>(); @@ -172,20 +173,21 @@ /** * Create database schema. + * @param jeevesServlet * * @param dbms */ - public void createSchema(Dbms dbms, String appPath) throws Exception { + public void createSchema(JeevesServlet jeevesServlet, Dbms dbms, String appPath, String filePath, String filePrefix) throws Exception { Log.debug(Geonet.DB, "Creating database schema"); - List<String> schema = loadSchemaFile(dbms, appPath); + List<String> schema = loadSchemaFile(jeevesServlet, dbms, appPath, filePath, filePrefix); runSQL(dbms, schema); } - public void insertData(Dbms dbms, String appPath) throws Exception { + public void insertData(JeevesServlet jeevesServlet, Dbms dbms, String appPath, String filePath, String filePrefix) throws Exception { Log.debug(Geonet.DB, "Filling database tables"); - List<String> data = loadSqlDataFile(dbms, appPath); + List<String> data = loadSqlDataFile(jeevesServlet, dbms, appPath, filePath, filePrefix); runSQL(dbms, data); } @@ -196,12 +198,12 @@ * @param sqlFile * @throws Exception */ - public void runSQL(Dbms dbms, File sqlFile) throws Exception { - runSQL(dbms, sqlFile, true); + public void runSQL(JeevesServlet jeevesServlet, Dbms dbms, File sqlFile) throws Exception { + runSQL(jeevesServlet, dbms, sqlFile, true); } - public void runSQL(Dbms dbms, File sqlFile, boolean failOnError) throws Exception { - List<String> data = Lib.text.load(sqlFile.getCanonicalPath(), "UTF-8"); + public void runSQL(JeevesServlet jeevesServlet, Dbms dbms, File sqlFile, boolean failOnError) throws Exception { + List<String> data = Lib.text.load(jeevesServlet, sqlFile.getCanonicalPath(), "UTF-8"); runSQL(dbms, data, failOnError); } @@ -267,12 +269,13 @@ /** * + * @param jeevesServlet * @param dbms * @return * @throws FileNotFoundException * @throws IOException */ - private List<String> loadSchemaFile(Dbms dbms, String appPath) // FIXME : + private List<String> loadSchemaFile(JeevesServlet jeevesServlet, Dbms dbms, String appPath, String filePath, String filePrefix) // FIXME : // use // resource // dir @@ -281,45 +284,45 @@ // appPath throws FileNotFoundException, IOException { // --- find out which dbms schema to load - String file = checkFilePath(appPath, "create/create-db-", getDBType(dbms)); + String file = checkFilePath(filePath, filePrefix, getDBType(dbms)); - Log.debug(Geonet.DB, "Database creation script is:" + file); + Log.debug(Geonet.DB, " Loading script:" + file); // --- load the dbms schema - return Lib.text.load(file); + return Lib.text.load(jeevesServlet, appPath, file); } /** * Check if db specific SQL script exist, if not return default SQL script path. * - * @param appPath + * @param filePath * @param prefix * @param type * @return */ - private String checkFilePath (String appPath, String prefix, String type) { - String dbFilePath = appPath + SETUP_SQL_PATH + prefix + type + SQL_EXTENSION; + private String checkFilePath (String filePath, String prefix, String type) { + String dbFilePath = filePath + "/" + prefix + type + SQL_EXTENSION; File dbFile = new File(dbFilePath); if (dbFile.exists()) return dbFilePath; - String defaultFilePath = appPath + SETUP_SQL_PATH + prefix + "default" + SQL_EXTENSION; + String defaultFilePath = filePath + "/" + prefix + "default" + SQL_EXTENSION; File defaultFile = new File(defaultFilePath); if (defaultFile.exists()) return defaultFilePath; else - Log.debug(Geonet.DB, "No default SQL script found: " + defaultFilePath); + Log.debug(Geonet.DB, " No default SQL script found: " + defaultFilePath); return ""; } - private List<String> loadSqlDataFile(Dbms dbms, String appPath) + private List<String> loadSqlDataFile(JeevesServlet jeevesServlet, Dbms dbms, String appPath, String filePath, String filePrefix) throws FileNotFoundException, IOException { // --- find out which dbms data file to load - String file = checkFilePath(appPath, "data/data-db-", getDBType(dbms)); + String file = checkFilePath(filePath, filePrefix, getDBType(dbms)); // --- load the sql data - return Lib.text.load(file, "UTF-8"); + return Lib.text.load(jeevesServlet, appPath, file, "UTF-8"); } private String getObjectName(String createStatem) { Modified: trunk/web/src/main/java/org/fao/geonet/lib/ServerLib.java =================================================================== --- trunk/web/src/main/java/org/fao/geonet/lib/ServerLib.java 2011-08-30 14:02:17 UTC (rev 8150) +++ trunk/web/src/main/java/org/fao/geonet/lib/ServerLib.java 2011-08-30 14:02:43 UTC (rev 8151) @@ -23,10 +23,17 @@ package org.fao.geonet.lib; +import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStreamReader; +import java.io.StringReader; +import java.util.List; import java.util.Properties; +import jeeves.server.ConfigurationOverrides; +import jeeves.server.sources.http.JeevesServlet; + //============================================================================= public class ServerLib @@ -37,15 +44,27 @@ //--- //--------------------------------------------------------------------------- - public ServerLib(String appPath) throws IOException + public ServerLib(JeevesServlet servlet, String appPath) throws IOException { this.appPath = appPath; serverProps = new Properties(); - FileInputStream is = new FileInputStream(appPath + SERVER_PROPS); - serverProps.load(is); - is.close(); + BufferedReader reader = new BufferedReader(new InputStreamReader( + new FileInputStream(appPath + SERVER_PROPS), "UTF-8")); + try { + List<String> lines = ConfigurationOverrides.loadFileAndUpdate( + SERVER_PROPS, servlet, appPath, reader); + StringBuilder b = new StringBuilder(); + for (String string : lines) { + b.append(string); + b.append("\n"); + } + serverProps.load(new StringReader(b.toString())); + } finally { + reader.close(); + } + } //--------------------------------------------------------------------------- Modified: trunk/web/src/main/java/org/fao/geonet/lib/TextLib.java =================================================================== --- trunk/web/src/main/java/org/fao/geonet/lib/TextLib.java 2011-08-30 14:02:17 UTC (rev 8150) +++ trunk/web/src/main/java/org/fao/geonet/lib/TextLib.java 2011-08-30 14:02:43 UTC (rev 8151) @@ -23,6 +23,8 @@ package org.fao.geonet.lib; +import jeeves.server.ConfigurationOverrides; +import jeeves.server.sources.http.JeevesServlet; import jeeves.utils.Util; import java.io.BufferedReader; @@ -47,46 +49,17 @@ //--- //--------------------------------------------------------------------------- - public List<String> load(String file) throws FileNotFoundException, IOException + public List<String> load(JeevesServlet jeevesServlet, String appPath, String file) throws FileNotFoundException, IOException { - FileInputStream is = new FileInputStream(file); - BufferedReader ir = new BufferedReader(new InputStreamReader(is, "ISO-8859-1")); - - ArrayList<String> al = new ArrayList<String>(); - - String line; - - try - { - while ((line = ir.readLine()) != null) - al.add(line); - - return al; - } - finally - { - ir.close(); - } + return load(jeevesServlet, appPath, file, "ISO-8859-1"); } - public List<String> load(String file, String encoding) throws FileNotFoundException, IOException + public List<String> load(JeevesServlet jeevesServlet, String appPath, String file, String encoding) throws FileNotFoundException, IOException { FileInputStream is = new FileInputStream(file); BufferedReader ir = new BufferedReader(new InputStreamReader(is, encoding)); - ArrayList<String> al = new ArrayList<String>(); - - String line; - try - { - while ((line = ir.readLine()) != null) - al.add(line); - return al; - } - finally - { - ir.close(); - } + return ConfigurationOverrides.loadFileAndUpdate(file, jeevesServlet, appPath, ir); } //--------------------------------------------------------------------------- Deleted: trunk/web/src/main/webResources/WEB-INF/classes/setup/sql/data/data-db-default.sql =================================================================== --- trunk/web/src/main/webResources/WEB-INF/classes/setup/sql/data/data-db-default.sql 2011-08-30 14:02:17 UTC (rev 8150) +++ trunk/web/src/main/webResources/WEB-INF/classes/setup/sql/data/data-db-default.sql 2011-08-30 14:02:43 UTC (rev 8151) @@ -1,9011 +0,0 @@ --- ====================================================================== --- === Sql Script for Mckoi Database --- === --- === This script empties all tables from database and --- === inserts default data --- ====================================================================== - --- ====================================================================== --- === Delete tables content --- ====================================================================== - -DELETE FROM MetadataCateg; -DELETE FROM MetadataRating; -DELETE FROM OperationAllowed; -DELETE FROM Metadata; -DELETE FROM CategoriesDes; -DELETE FROM Categories; -DELETE FROM IsoLanguagesDes; -DELETE FROM IsoLanguages; -DELETE FROM RegionsDes; -DELETE FROM Regions; -DELETE FROM UserGroups; -DELETE FROM GroupsDes; -DELETE FROM Groups; -DELETE FROM Users; -DELETE FROM OperationsDes; -DELETE FROM Operations; -DELETE FROM CswServerCapabilitiesInfo; -DELETE FROM Languages; -DELETE FROM Settings; -DELETE FROM Relations; - --- ====================================================================== --- === Table: Languages --- ====================================================================== - -INSERT INTO Languages VALUES ('en','English', 'eng', 'y', 'y'); -INSERT INTO Languages VALUES ('fr','French', 'fre', 'y', 'n'); -INSERT INTO Languages VALUES ('es','Espanol', 'spa', 'y', 'n'); -INSERT INTO Languages VALUES ('ru','Russian', 'rus', 'n', 'n'); -INSERT INTO Languages VALUES ('cn','Chinese', 'chi', 'n', 'n'); -INSERT INTO Languages VALUES ('de','Deutsch', 'ger', 'y', 'n'); -INSERT INTO Languages VALUES ('nl','Nederlands', 'dut', 'y', 'n'); -INSERT INTO Languages VALUES ('pt','Português', 'por', 'y', 'n'); -INSERT INTO Languages VALUES ('no','Norwegian', 'nor', 'n', 'n'); -INSERT INTO Languages VALUES ('fi','Finnish', 'fin', 'y', 'n'); - --- ====================================================================== --- === Table: CswServerCapabilitiesInfo --- ====================================================================== - -INSERT INTO CswServerCapabilitiesInfo VALUES (1, 'en', 'title', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (2, 'en', 'abstract', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (3, 'en', 'fees', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (4, 'en', 'accessConstraints', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (5, 'es', 'title', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (6, 'es', 'abstract', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (7, 'es', 'fees', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (8, 'es', 'accessConstraints', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (9, 'nl', 'title', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (10, 'nl', 'abstract', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (11, 'nl', 'fees', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (12, 'nl', 'accessConstraints', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (13, 'cn', 'title', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (14, 'cn', 'abstract', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (15, 'cn', 'fees', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (16, 'cn', 'accessConstraints', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (17, 'de', 'title', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (18, 'de', 'abstract', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (19, 'de', 'fees', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (20, 'de', 'accessConstraints', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (21, 'fr', 'title', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (22, 'fr', 'abstract', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (23, 'fr', 'fees', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (24, 'fr', 'accessConstraints', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (25, 'pt', 'title', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (26, 'pt', 'abstract', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (27, 'pt', 'fees', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (28, 'pt', 'accessConstraints', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (29, 'ru', 'title', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (30, 'ru', 'abstract', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (31, 'ru', 'fees', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (32, 'ru', 'accessConstraints', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (33, 'no', 'title', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (34, 'no', 'abstract', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (35, 'no', 'fees', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (36, 'no', 'accessConstraints', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (37, 'fi', 'title', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (38, 'fi', 'abstract', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (39, 'fi', 'fees', ''); -INSERT INTO CswServerCapabilitiesInfo VALUES (40, 'fi', 'accessConstraints', ''); - --- ====================================================================== --- === Table: Categories --- ====================================================================== - -INSERT INTO Categories VALUES (1,'maps'); -INSERT INTO Categories VALUES (2,'datasets'); -INSERT INTO Categories VALUES (3,'interactiveResources'); -INSERT INTO Categories VALUES (4,'applications'); -INSERT INTO Categories VALUES (5,'caseStudies'); -INSERT INTO Categories VALUES (6,'proceedings'); -INSERT INTO Categories VALUES (7,'photo'); -INSERT INTO Categories VALUES (8,'audioVideo'); -INSERT INTO Categories VALUES (9,'directories'); -INSERT INTO Categories VALUES (10,'otherResources'); - --- ====================================================================== --- === Table: CategoriesDes --- ====================================================================== - -INSERT INTO CategoriesDes VALUES (1,'en','Maps & graphics'); -INSERT INTO CategoriesDes VALUES (2,'en','Datasets'); -INSERT INTO CategoriesDes VALUES (3,'en','Interactive resources'); -INSERT INTO CategoriesDes VALUES (4,'en','Applications'); -INSERT INTO CategoriesDes VALUES (5,'en','Case studies, best practices'); -INSERT INTO CategoriesDes VALUES (6,'en','Conference proceedings'); -INSERT INTO CategoriesDes VALUES (7,'en','Photo'); -INSERT INTO CategoriesDes VALUES (8,'en','Audio/Video'); -INSERT INTO CategoriesDes VALUES (9,'en','Directories'); -INSERT INTO CategoriesDes VALUES (10,'en','Other information resources'); -INSERT INTO CategoriesDes VALUES (2,'es','Conjuntos de datos'); -INSERT INTO CategoriesDes VALUES (3,'es','Recursos interactivos'); -INSERT INTO CategoriesDes VALUES (5,'es','Casos de Uso, buenas prácticas'); -INSERT INTO CategoriesDes VALUES (4,'es','Aplicaciones'); -INSERT INTO CategoriesDes VALUES (6,'es','Resúmenes de conferencias'); -INSERT INTO CategoriesDes VALUES (7,'es','Fotografías'); -INSERT INTO CategoriesDes VALUES (9,'es','Directorios'); -INSERT INTO CategoriesDes VALUES (8,'es','Audio/Vídeo'); -INSERT INTO CategoriesDes VALUES (10,'es','Otros recursos de información'); -INSERT INTO CategoriesDes VALUES (1,'ru','Карты и графика'); -INSERT INTO CategoriesDes VALUES (2,'ru','Наборы данных'); -INSERT INTO CategoriesDes VALUES (3,'ru','Интерактивные ресурсы'); -INSERT INTO CategoriesDes VALUES (4,'ru','Компьютерные программы'); -INSERT INTO CategoriesDes VALUES (5,'ru','Практические ситуации'); -INSERT INTO CategoriesDes VALUES (6,'ru','Материалы конференций'); -INSERT INTO CategoriesDes VALUES (7,'ru','Фотографии'); -INSERT INTO CategoriesDes VALUES (8,'ru','Аудио/Видео'); -INSERT INTO CategoriesDes VALUES (9,'ru','Каталоги/справочники'); -INSERT INTO CategoriesDes VALUES (10,'ru','Другие ресурсы'); -INSERT INTO CategoriesDes VALUES (1,'cn','Maps & graphics'); -INSERT INTO CategoriesDes VALUES (2,'cn','Datasets'); -INSERT INTO CategoriesDes VALUES (3,'cn','Interactive resources'); -INSERT INTO CategoriesDes VALUES (4,'cn','Applications'); -INSERT INTO CategoriesDes VALUES (5,'cn','Case studies, best practices'); -INSERT INTO CategoriesDes VALUES (6,'cn','Conference proceedings'); -INSERT INTO CategoriesDes VALUES (7,'cn','Photo'); -INSERT INTO CategoriesDes VALUES (8,'cn','Audio/Video'); -INSERT INTO CategoriesDes VALUES (9,'cn','Directories'); -INSERT INTO CategoriesDes VALUES (10,'cn','Other information resources'); -INSERT INTO CategoriesDes VALUES (2,'fr','Jeux de données'); -INSERT INTO CategoriesDes VALUES (1,'fr','Cartes & graphiques'); -INSERT INTO CategoriesDes VALUES (7,'fr','Photographies'); -INSERT INTO CategoriesDes VALUES (10,'fr','Autres ressources'); -INSERT INTO CategoriesDes VALUES (5,'fr','Etude de cas, meilleures pratiques'); -INSERT INTO CategoriesDes VALUES (1,'es','Mapas & gráficos'); -INSERT INTO CategoriesDes VALUES (8,'fr','Vidéo/Audio'); -INSERT INTO CategoriesDes VALUES (9,'fr','Répertoires'); -INSERT INTO CategoriesDes VALUES (4,'fr','Applications'); -INSERT INTO CategoriesDes VALUES (3,'fr','Ressources interactives'); -INSERT INTO CategoriesDes VALUES (6,'fr','Conférences'); -INSERT INTO CategoriesDes VALUES (1,'de','Karten & Grafiken'); -INSERT INTO CategoriesDes VALUES (2,'de','Datensets'); -INSERT INTO CategoriesDes VALUES (3,'de','Interaktive Resourcen'); -INSERT INTO CategoriesDes VALUES (4,'de','Applikationen'); -INSERT INTO CategoriesDes VALUES (5,'de','Fallstudien'); -INSERT INTO CategoriesDes VALUES (6,'de','Konferenz Ergebnisse'); -INSERT INTO CategoriesDes VALUES (7,'de','Photo'); -INSERT INTO CategoriesDes VALUES (8,'de','Audio/Video'); -INSERT INTO CategoriesDes VALUES (9,'de','Verzeichnisse'); -INSERT INTO CategoriesDes VALUES (10,'de','Andere Resourcen'); -INSERT INTO CategoriesDes VALUES (1,'nl','Kaarten & afbeeldingen'); -INSERT INTO CategoriesDes VALUES (2,'nl','Datasets'); -INSERT INTO CategoriesDes VALUES (3,'nl','Interactieve kaarten'); -INSERT INTO CategoriesDes VALUES (4,'nl','Toepassingen'); -INSERT INTO CategoriesDes VALUES (5,'nl','Case studies, best practices'); -INSERT INTO CategoriesDes VALUES (6,'nl','Conferentie handelingen'); -INSERT INTO CategoriesDes VALUES (7,'nl','Fotos'); -INSERT INTO CategoriesDes VALUES (8,'nl','Audio/Video'); -INSERT INTO CategoriesDes VALUES (9,'nl','Catalogi'); -INSERT INTO CategoriesDes VALUES (10,'nl','Andere informatie bronnen'); -INSERT INTO CategoriesDes VALUES (1,'pt','Mapas & Graficos'); -INSERT INTO CategoriesDes VALUES (2,'pt','Datasets'); -INSERT INTO CategoriesDes VALUES (3,'pt','Fontes Interactivas'); -INSERT INTO CategoriesDes VALUES (4,'pt','Aplicações'); -INSERT INTO CategoriesDes VALUES (5,'pt','Estudos de Caso, Boas Praticas'); -INSERT INTO CategoriesDes VALUES (6,'pt','Procedimentos de Validação'); -INSERT INTO CategoriesDes VALUES (7,'pt','Foto'); -INSERT INTO CategoriesDes VALUES (8,'pt','Audio/Video'); -INSERT INTO CategoriesDes VALUES (9,'pt','Directorios'); -INSERT INTO CategoriesDes VALUES (10,'pt','Outra Informação sobre Fontes'); -INSERT INTO CategoriesDes VALUES (1,'no','Kart og grafikk'); -INSERT INTO CategoriesDes VALUES (2,'no','Datasett'); -INSERT INTO CategoriesDes VALUES (3,'no','Interakive ressurser'); -INSERT INTO CategoriesDes VALUES (4,'no','Applikasjoner'); -INSERT INTO CategoriesDes VALUES (5,'no','Studier og anbefalinger'); -INSERT INTO CategoriesDes VALUES (6,'no','Konferanseresultater'); -INSERT INTO CategoriesDes VALUES (7,'no','Fotografier'); -INSERT INTO CategoriesDes VALUES (8,'no','Audio/Video'); -INSERT INTO CategoriesDes VALUES (9,'no','Kataloger'); -INSERT INTO CategoriesDes VALUES (10,'no','Andre ressurser'); -INSERT INTO CategoriesDes VALUES (1,'fi','Kartat & kuvat'); -INSERT INTO CategoriesDes VALUES (2,'fi','Tietoaineistot'); -INSERT INTO CategoriesDes VALUES (3,'fi','Vuorovaikutteiset resurssit'); -INSERT INTO CategoriesDes VALUES (4,'fi','Sovellukset'); -INSERT INTO CategoriesDes VALUES (5,'fi','Esimerkkitapaukset, parhaat käytännöt'); -INSERT INTO CategoriesDes VALUES (6,'fi','Konferenssijulkaisut'); -INSERT INTO CategoriesDes VALUES (7,'fi','Valokuvat'); -INSERT INTO CategoriesDes VALUES (8,'fi','Äänitteet / Videot'); -INSERT INTO CategoriesDes VALUES (9,'fi','Hakemistot'); -INSERT INTO CategoriesDes VALUES (10,'fi','Other information resources'); - --- ====================================================================== --- === Table: Groups --- ====================================================================== - -INSERT INTO Groups VALUES (-1,'GUEST','self-registered users',NULL,NULL); -INSERT INTO Groups VALUES (0,'intranet',NULL,NULL,NULL); -INSERT INTO Groups VALUES (1,'all',NULL,NULL,NULL); -INSERT INTO Groups VALUES (2,'sample',NULL,NULL,NULL); - --- ====================================================================== --- === Table: GroupsDes --- ====================================================================== - -INSERT INTO GroupsDes VALUES (-1,'en','Guest'); -INSERT INTO GroupsDes VALUES (-1,'fr','Invité'); -INSERT INTO GroupsDes VALUES (-1,'es','Guest'); -INSERT INTO GroupsDes VALUES (-1,'cn','Guest'); -INSERT INTO GroupsDes VALUES (-1,'ru','Guest'); -INSERT INTO GroupsDes VALUES (-1,'de','Gast'); -INSERT INTO GroupsDes VALUES (-1,'nl','Gast'); -INSERT INTO GroupsDes VALUES (-1,'pt','Convidado'); -INSERT INTO GroupsDes VALUES (-1,'no','Gjest'); -INSERT INTO GroupsDes VALUES (0,'en','Intranet'); -INSERT INTO GroupsDes VALUES (0,'fr','Intranet'); -INSERT INTO GroupsDes VALUES (0,'es','Intranet'); -INSERT INTO GroupsDes VALUES (0,'cn','Intranet'); -INSERT INTO GroupsDes VALUES (0,'ru','Пример группы'); -INSERT INTO GroupsDes VALUES (0,'de','Intranet'); -INSERT INTO GroupsDes VALUES (0,'nl','Intranet'); -INSERT INTO GroupsDes VALUES (0,'pt','Intranet'); -INSERT INTO GroupsDes VALUES (0,'no','Intranett'); -INSERT INTO GroupsDes VALUES (1,'en','All'); -INSERT INTO GroupsDes VALUES (1,'fr','Tous'); -INSERT INTO GroupsDes VALUES (1,'es','Todos'); -INSERT INTO GroupsDes VALUES (1,'cn','All'); -INSERT INTO GroupsDes VALUES (1,'ru','Все'); -INSERT INTO GroupsDes VALUES (1,'de','Alle'); -INSERT INTO GroupsDes VALUES (1,'no','Alle'); -INSERT INTO GroupsDes VALUES (1,'nl','Iedereen'); -INSERT INTO GroupsDes VALUES (1,'pt','Todos'); -INSERT INTO GroupsDes VALUES (2,'en','Sample group'); -INSERT INTO GroupsDes VALUES (2,'fr','Groupe exemple'); -INSERT INTO GroupsDes VALUES (2,'es','Grupo de ejemplo'); -INSERT INTO GroupsDes VALUES (2,'cn','Sample group'); -INSERT INTO GroupsDes VALUES (2,'ru','Пример группы'); -INSERT INTO GroupsDes VALUES (2,'de','Beispielgruppe'); -INSERT INTO GroupsDes VALUES (2,'nl','Voorbeeldgroep'); -INSERT INTO GroupsDes VALUES (2,'pt','Grupo de Amostra'); -INSERT INTO GroupsDes VALUES (2,'no','Eksempelgruppe'); -INSERT INTO GroupsDes VALUES (-1,'fi','Vierailija'); -INSERT INTO GroupsDes VALUES (0,'fi','Intranet'); -INSERT INTO GroupsDes VALUES (1,'fi','Kaikki'); -INSERT INTO GroupsDes VALUES (2,'fi','Ryhmä'); - --- ====================================================================== --- === Table: IsoLanguages --- ====================================================================== - -INSERT INTO IsoLanguages VALUES (1,'aar'); -INSERT INTO IsoLanguages VALUES (2,'abk'); -INSERT INTO IsoLanguages VALUES (3,'ace'); -INSERT INTO IsoLanguages VALUES (4,'ach'); -INSERT INTO IsoLanguages VALUES (5,'ada'); -INSERT INTO IsoLanguages VALUES (6,'ady'); -INSERT INTO IsoLanguages VALUES (7,'afa'); -INSERT INTO IsoLanguages VALUES (8,'afh'); -INSERT INTO IsoLanguages VALUES (9,'afr'); -INSERT INTO IsoLanguages VALUES (10,'ain'); -INSERT INTO IsoLanguages VALUES (11,'aka'); -INSERT INTO IsoLanguages VALUES (12,'akk'); -INSERT INTO IsoLanguages VALUES (13,'alb'); -INSERT INTO IsoLanguages VALUES (14,'ale'); -INSERT INTO IsoLanguages VALUES (15,'alg'); -INSERT INTO IsoLanguages VALUES (16,'alt'); -INSERT INTO IsoLanguages VALUES (17,'amh'); -INSERT INTO IsoLanguages VALUES (18,'ang'); -INSERT INTO IsoLanguages VALUES (19,'anp'); -INSERT INTO IsoLanguages VALUES (20,'apa'); -INSERT INTO IsoLanguages VALUES (21,'ara'); -INSERT INTO IsoLanguages VALUES (22,'arc'); -INSERT INTO IsoLanguages VALUES (23,'arg'); -INSERT INTO IsoLanguages VALUES (24,'arm'); -INSERT INTO IsoLanguages VALUES (25,'arn'); -INSERT INTO IsoLanguages VALUES (26,'arp'); -INSERT INTO IsoLanguages VALUES (27,'art'); -INSERT INTO IsoLanguages VALUES (28,'arw'); -INSERT INTO IsoLanguages VALUES (29,'asm'); -INSERT INTO IsoLanguages VALUES (30,'ast'); -INSERT INTO IsoLanguages VALUES (31,'ath'); -INSERT INTO IsoLanguages VALUES (32,'aus'); -INSERT INTO IsoLanguages VALUES (33,'ava'); -INSERT INTO IsoLanguages VALUES (34,'ave'); -INSERT INTO IsoLanguages VALUES (35,'awa'); -INSERT INTO IsoLanguages VALUES (36,'aym'); -INSERT INTO IsoLanguages VALUES (37,'aze'); -INSERT INTO IsoLanguages VALUES (38,'bad'); -INSERT INTO IsoLanguages VALUES (39,'bai'); -INSERT INTO IsoLanguages VALUES (40,'bak'); -INSERT INTO IsoLanguages VALUES (41,'bal'); -INSERT INTO IsoLanguages VALUES (42,'bam'); -INSERT INTO IsoLanguages VALUES (43,'ban'); -INSERT INTO IsoLanguages VALUES (44,'baq'); -INSERT INTO IsoLanguages VALUES (45,'bas'); -INSERT INTO IsoLanguages VALUES (46,'bat'); -INSERT INTO IsoLanguages VALUES (47,'bej'); -INSERT INTO IsoLanguages VALUES (48,'bel'); -INSERT INTO IsoLanguages VALUES (49,'bem'); -INSERT INTO IsoLanguages VALUES (50,'ben'); -INSERT INTO IsoLanguages VALUES (51,'ber'); -INSERT INTO IsoLanguages VALUES (52,'bho'); -INSERT INTO IsoLanguages VALUES (53,'bih'); -INSERT INTO IsoLanguages VALUES (54,'bik'); -INSERT INTO IsoLanguages VALUES (55,'bin'); -INSERT INTO IsoLanguages VALUES (56,'bis'); -INSERT INTO IsoLanguages VALUES (57,'bla'); -INSERT INTO IsoLanguages VALUES (58,'bnt'); -INSERT INTO IsoLanguages VALUES (59,'bos'); -INSERT INTO IsoLanguages VALUES (60,'bra'); -INSERT INTO IsoLanguages VALUES (61,'bre'); -INSERT INTO IsoLanguages VALUES (62,'btk'); -INSERT INTO IsoLanguages VALUES (63,'bua'); -INSERT INTO IsoLanguages VALUES (64,'bug'); -INSERT INTO IsoLanguages VALUES (65,'bul'); -INSERT INTO IsoLanguages VALUES (66,'bur'); -INSERT INTO IsoLanguages VALUES (67,'byn'); -INSERT INTO IsoLanguages VALUES (68,'cad'); -INSERT INTO IsoLanguages VALUES (69,'cai'); -INSERT INTO IsoLanguages VALUES (70,'car'); -INSERT INTO IsoLanguages VALUES (71,'cat'); -INSERT INTO IsoLanguages VALUES (72,'cau'); -INSERT INTO IsoLanguages VALUES (73,'ceb'); -INSERT INTO IsoLanguages VALUES (74,'cel'); -INSERT INTO IsoLanguages VALUES (75,'cha'); -INSERT INTO IsoLanguages VALUES (76,'chb'); -INSERT INTO IsoLanguages VALUES (77,'che'); -INSERT INTO IsoLanguages VALUES (78,'chg'); -INSERT INTO IsoLanguages VALUES (79,'chi'); -INSERT INTO IsoLanguages VALUES (80,'chk'); -INSERT INTO IsoLanguages VALUES (81,'chm'); -INSERT INTO IsoLanguages VALUES (82,'chn'); -INSERT INTO IsoLanguages VALUES (83,'cho'); -INSERT INTO IsoLanguages VALUES (84,'chp'); -INSERT INTO IsoLanguages VALUES (85,'chr'); -INSERT INTO IsoLanguages VALUES (86,'chu'); -INSERT INTO IsoLanguages VALUES (87,'chv'); -INSERT INTO IsoLanguages VALUES (88,'chy'); -INSERT INTO IsoLanguages VALUES (89,'cmc'); -INSERT INTO IsoLa... [truncated message content] |