Fixed some issues with database handling and fixed a bug in LocationService.
authorn.hoffmann <n.hoffmann@localhost>
Mon, 25 May 2009 15:49:05 +0000 (15:49 +0000)
committern.hoffmann <n.hoffmann@localhost>
Mon, 25 May 2009 15:49:05 +0000 (15:49 +0000)
.gitattributes
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonNameExport.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/location/NamedArea.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/CdmPersistentDataSource.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/PersistentTermInitializer.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/types/H2DatabaseType.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/CdmEntityDaoBase.java
cdmlib-persistence/src/main/resources/eu/etaxonomy/cdm/cdm.datasources.xml
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ILocationService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/LocationServiceImpl.java
cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestLocationServiceImpl.java [new file with mode: 0644]

index add420105c7fa2de9c6b90666fea65d8ebd9a1f4..41ecbde506a70a982ac449d8e014f4a188939e5b 100644 (file)
@@ -1799,6 +1799,7 @@ cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/Datasource.java -te
 cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestConcurrentSession.java -text
 cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestConversationEnabled.java -text
 cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestDatabase.java -text
+cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestLocationServiceImpl.java -text
 cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestService.java -text
 cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestTaxonFunction.java -text
 cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/hibernate.cfg.xml -text
index fd920b876c50e9fc958a17417fcf431bb7f7a90c..ac7745ed1989c0fe9fae05b882ebc2e3f40019ce 100644 (file)
@@ -23,7 +23,6 @@ import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbObjectMapper;
 import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbStringMapper;\r
 import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IdMapper;\r
 import eu.etaxonomy.cdm.io.berlinModel.out.mapper.MethodMapper;\r
-import eu.etaxonomy.cdm.io.berlinModel.out.mapper.NomStatusMapper;\r
 import eu.etaxonomy.cdm.io.berlinModel.out.mapper.RefDetailMapper;\r
 import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
 import eu.etaxonomy.cdm.io.common.Source;\r
index 416163f6fdec60f1841bcdd646106c8ef822dbea..b67a1b6c3b3b00a0974526174df53c584eeac5ab 100644 (file)
@@ -35,6 +35,7 @@ import org.hibernate.annotations.Cascade;
 import org.hibernate.annotations.CascadeType;
 import org.hibernate.envers.Audited;
 
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.OrderedTermBase;
 import eu.etaxonomy.cdm.model.common.TermVocabulary;
index 685ad20f419a78e303c05c1c5b23974736a77c79..5cb70a7df79a870f19017182893d40557867dc67 100644 (file)
@@ -79,6 +79,7 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
                }\r
        }\r
        \r
+       \r
        //name\r
        protected String dataSourceName;\r
 \r
@@ -454,6 +455,25 @@ public class CdmPersistentDataSource extends CdmDataSourceBase{
                return save(strDataSourceName, databaseTypeEnum, server, databaseName, port, username, password, driverManagerDataSource, "init", "destroy", true, true, databasePath, null);\r
        }\r
        \r
+       /**\r
+        * Saves an H2 instance \r
+        * \r
+        * @param strDataSourceName\r
+        * @param databasePath\r
+        * @param databaseName\r
+        * @param username\r
+        * @param password\r
+        * @param mode\r
+        * @return\r
+        */\r
+       public static CdmPersistentDataSource saveLocalH2(String strDataSourceName, String databasePath, String databaseName, String username, String password, H2Mode mode){\r
+               DatabaseTypeEnum databaseTypeEnum = DatabaseTypeEnum.H2;\r
+               Class<? extends DriverManagerDataSource> driverManagerDataSource =  LocalH2.class;\r
+               String server = "localhost";\r
+               int port = databaseTypeEnum.getDefaultPort();\r
+               return save(strDataSourceName, databaseTypeEnum, server, databaseName, port, username, password, driverManagerDataSource, null, null, null, null, databasePath, mode);\r
+       }\r
+       \r
        //\r
        private static CdmPersistentDataSource save(String strDataSourceName, \r
                        DatabaseTypeEnum databaseTypeEnum, \r
index f8840125b24163e2b1ece39f812b6c3820602e25..1de9ba937e23723621ba29595fd120e690f56993 100644 (file)
@@ -84,7 +84,7 @@ public class PersistentTermInitializer extends DefaultTermInitializer {
                        return;\r
                } else {\r
                        Map<UUID,DefinedTermBase> terms = new HashMap<UUID,DefinedTermBase>();\r
-                       logger.info("PersistentTermInitializer.omit == false, initializing " + terms.size() + " term classes");\r
+                       logger.info("PersistentTermInitializer.omit == false, initializing " + classesToInitialize.length + " term classes");\r
                        for(Class clazz : classesToInitialize) {\r
                                UUID vocabularyUuid = firstPass(clazz,terms);\r
                                secondPass(clazz,vocabularyUuid,terms);\r
index 61de5192fb16367f7a4701e220093ce0fe83fd01..6180d3951a767920f44753c826e4efeaa02584a8 100644 (file)
@@ -80,7 +80,7 @@ public class H2DatabaseType extends DatabaseTypeBase {
        @Override\r
        public String getServerNameByConnectionString(String connectionString) {\r
                String result;\r
-               if (connectionString.startsWith("file:")){\r
+               if (connectionString.startsWith("file:") || connectionString.startsWith( urlString + "file:")){\r
                        result = null; \r
                }else if (connectionString.startsWith("tcp://")){\r
                        String prefix = "tcp://";\r
@@ -105,7 +105,7 @@ public class H2DatabaseType extends DatabaseTypeBase {
        public String getDatabaseNameByConnectionString(String connectionString) {\r
                int pos = -1;\r
                String result;\r
-               if (connectionString.startsWith("file:")){\r
+               if (connectionString.startsWith("file:") || connectionString.startsWith( urlString + "file:")){\r
                        pos = connectionString.lastIndexOf("/");\r
                        result = connectionString.substring(pos + 1);\r
                }else if (connectionString.startsWith("tcp://")){\r
@@ -126,7 +126,7 @@ public class H2DatabaseType extends DatabaseTypeBase {
        @Override\r
        public int getPortByConnectionString(String connectionString) {\r
                int result;\r
-               if (connectionString.startsWith("file:")){\r
+               if (connectionString.startsWith("file:") || connectionString.startsWith( urlString + "file:")){\r
                        result = -1; \r
                }else if (connectionString.startsWith("tcp://")){\r
                        String prefix = "tcp://";\r
index b8ca97003b93e5375f32c3124d6cacbced32add1..8e9f77aaeee3fd0419230f9ae670b3c6a9c4f83b 100644 (file)
@@ -161,6 +161,9 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
                if (results.isEmpty()){\r
                        return null;\r
                }else{\r
+                       if(results.size() > 1){\r
+                               logger.error("findByUuid() delivers more than one result for UUID: " + uuid);\r
+                       }\r
                        return results.get(0);                  \r
                }\r
        }\r
index b3103e93ffb8b8e9b3760e1709fe3ee03c1de41a..3ed85be17be0e3b4a15248ae7d5e12431e6e531a 100644 (file)
@@ -7,24 +7,6 @@
     http://www.springframework.org/schema/context\r
     http://www.springframework.org/schema/context/spring-context-2.5.xsd">\r
 \r
-\r
-       <bean id="localDefaultH2DataSource" \r
-                       lazy-init="true"\r
-                       class="eu.etaxonomy.cdm.database.LocalH2"       \r
-                       init-method="init"\r
-                       destroy-method="destroy"\r
-                       >\r
-        <property name="driverClassName" value="org.h2.Driver"/>\r
-        <property name="username" value="sa"/>\r
-        <property name="password" value=""/>\r
-        <!-- property name="startServer" value="true"/> -->\r
-        <!--  property name="silent" value="true"/>-->\r
-        <!-- property name="pureUrl" value="jdbc:h2:tcp://localhost/"/-->\r
-        <!-- property name="dbName" value="cdm"/> -->\r
-        <!--  <property name="databasePath" value="C:\tmp\cdmDb\"/> -->\r
-       </bean>\r
-       \r
-       \r
 <!--JDBC datasource pattern-->\r
 <!--   <bean id="defaultDataSource"  lazy-init="true" class="org.springframework.jdbc.datasource.DriverManagerDataSource">-->\r
 <!--        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>-->\r
index b7c36c3772de51b30b08d6c6fbb298a119828e41..134dd478345f6e8ca7a0d088df455b8a026764e2 100644 (file)
@@ -46,7 +46,7 @@ public interface ILocationService extends IService<DefinedTermBase> {
      * @param vocabularyType
      * @return
      */
-    public OrderedTermVocabulary<NamedArea> getNamedAreaVocabulary(NamedAreaVocabularyType vocabularyType, NamedAreaLevel namedAreaLevel, NamedAreaType namedAreaType);
+    public OrderedTermVocabulary<NamedArea> getNamedAreaVocabulary(NamedAreaVocabularyType vocabularyType);
     
     public TermVocabulary<NamedAreaType> getNamedAreaTypeVocabulary();
     
@@ -63,5 +63,9 @@ public interface ILocationService extends IService<DefinedTermBase> {
      * @return
      */
     public OrderedTermVocabulary<AbsenceTerm> getAbsenceTermVocabulary(); 
-       
+    
+    /**
+     * 
+     */
+    public List<NamedArea> getTopLevelNamedAreasByVocabularyType(NamedAreaVocabularyType vocabularyType);
 }
index d03db67f6d3e2805445758a25daa2595456596fc..298a7dcee2aeba45f3ba0e349defc3508ec62986 100644 (file)
@@ -24,12 +24,9 @@ import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
 import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.model.description.AbsenceTerm;
 import eu.etaxonomy.cdm.model.description.PresenceTerm;
-import eu.etaxonomy.cdm.model.location.Continent;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
 import eu.etaxonomy.cdm.model.location.NamedAreaType;
-import eu.etaxonomy.cdm.model.location.TdwgArea;
-import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;
 import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
 import eu.etaxonomy.cdm.persistence.dao.common.IOrderedTermVocabularyDao;
 import eu.etaxonomy.cdm.persistence.dao.common.ITermVocabularyDao;
@@ -101,25 +98,21 @@ public class LocationServiceImpl extends ServiceBase<DefinedTermBase,IDefinedTer
        /* (non-Javadoc)
         * @see eu.etaxonomy.cdm.api.service.ILocationService#getNamedAreas(java.lang.Object)
         */
-       public OrderedTermVocabulary<NamedArea> getNamedAreaVocabulary(NamedAreaVocabularyType vocabularyType, NamedAreaLevel level, NamedAreaType type) {
+       public OrderedTermVocabulary<NamedArea> getNamedAreaVocabulary(NamedAreaVocabularyType vocabularyType) {
 
-               OrderedTermVocabulary<NamedArea> namedAreaVocabulary = new OrderedTermVocabulary<NamedArea>(); 
-               
-               List<NamedArea> namedAreaList = definedTermDao.list(level, type, null, null);
-               
-               for(NamedArea namedArea : namedAreaList){
-                       if(vocabularyType == NamedAreaVocabularyType.TDWG_AREA && (namedArea instanceof TdwgArea)){
-                               namedAreaVocabulary.addTerm(namedArea);
-                       }
-                       if(vocabularyType == NamedAreaVocabularyType.CONTINENT && (namedArea instanceof Continent)){
-                               namedAreaVocabulary.addTerm(namedArea);
-                       }
-                       if(vocabularyType == NamedAreaVocabularyType.WATERBODY_OR_COUNTRY && (namedArea instanceof WaterbodyOrCountry)){
-                               namedAreaVocabulary.addTerm(namedArea);
-                       }
+               UUID namedAreaVocabularyUuid = null;
+                       
+               if(vocabularyType == NamedAreaVocabularyType.TDWG_AREA){
+                       namedAreaVocabularyUuid = UUID.fromString("1fb40504-d1d7-44b0-9731-374fbe6cac77"); 
+               }
+               if(vocabularyType == NamedAreaVocabularyType.CONTINENT){
+                       namedAreaVocabularyUuid = UUID.fromString("e72cbcb6-58f8-4201-9774-15d0c6abc128");
+               }
+               if(vocabularyType == NamedAreaVocabularyType.WATERBODY_OR_COUNTRY){
+                       namedAreaVocabularyUuid = UUID.fromString("006b1870-7347-4624-990f-e5ed78484a1a");
                }
 
-               return namedAreaVocabulary;
+               return (OrderedTermVocabulary)orderedVocabularyDao.findByUuid(namedAreaVocabularyUuid);
        }
 
        /* (non-Javadoc)
@@ -145,7 +138,20 @@ public class LocationServiceImpl extends ServiceBase<DefinedTermBase,IDefinedTer
                return namedAreaTypeVocabulary;
        }
 
+       public List<NamedArea> getTopLevelNamedAreasByVocabularyType(NamedAreaVocabularyType vocabularyType){
+               
+               OrderedTermVocabulary<NamedArea> vocabulary = getNamedAreaVocabulary(vocabularyType);
 
+               List<NamedArea> topLevelTerms = new ArrayList<NamedArea>();
+               
+               for(NamedArea area : vocabulary){                       
+                       if(area.getPartOf() == null){
+                               topLevelTerms.add(area);
+                       }
+               }
+               
+               return topLevelTerms;
+       }
 
 
 
diff --git a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestLocationServiceImpl.java b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestLocationServiceImpl.java
new file mode 100644 (file)
index 0000000..1b41fb3
--- /dev/null
@@ -0,0 +1,88 @@
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.cdm.test.function;
+
+
+import org.apache.log4j.Logger;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.unitils.spring.annotation.SpringBeanByType;
+
+import eu.etaxonomy.cdm.api.application.CdmApplicationController;
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.service.ILocationService;
+import eu.etaxonomy.cdm.api.service.ILocationService.NamedAreaVocabularyType;
+import eu.etaxonomy.cdm.database.CdmDataSource;
+import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
+import eu.etaxonomy.cdm.database.DbSchemaValidation;
+import eu.etaxonomy.cdm.database.ICdmDataSource;
+import eu.etaxonomy.cdm.model.common.init.TermNotFoundException;
+import eu.etaxonomy.cdm.model.name.BotanicalName;
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
+import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.reference.Journal;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;
+
+/**
+ * @author n.hoffman
+ * @created 12.05.2009
+ * @version 1.0
+ */
+public class TestLocationServiceImpl  extends CdmIntegrationTest{
+       private static final Logger logger = Logger
+                       .getLogger(TestLocationServiceImpl.class);
+       
+       @SpringBeanByType
+       private ILocationService locationService;
+       
+       @Ignore
+       @Test
+       public void testGetTopLevelContinentAreas(){
+               locationService.getTopLevelNamedAreasByVocabularyType(NamedAreaVocabularyType.CONTINENT);
+       }
+       
+       @Test
+       public void testGetTopLevelTdwgAreas(){
+               locationService.getTopLevelNamedAreasByVocabularyType(NamedAreaVocabularyType.TDWG_AREA);
+       }
+       
+       @Ignore
+       @Test
+       public void testGetTopLevelWaterbodyOrCoutryAreas(){
+               locationService.getTopLevelNamedAreasByVocabularyType(NamedAreaVocabularyType.WATERBODY_OR_COUNTRY);
+       }
+       
+       public void testNewDatasourceClass(){
+               try {
+//                     String server = "192.168.2.10";
+//                     String database = "cdm_test_andreasM";
+//                     String username = "edit";
+//                     String password = CdmUtils.readInputLine("Password: ");
+                       DbSchemaValidation dbSchemaValidation = DbSchemaValidation.CREATE;
+
+//                     ICdmDataSource datasource = CdmDataSource.NewMySqlInstance(server, database, username, password);
+                       ICdmDataSource datasource = CdmDataSource.NewH2EmbeddedInstance("test", "sa", "");
+                       CdmApplicationController appCtr = CdmApplicationController.NewInstance(datasource, dbSchemaValidation);
+                       
+                       ConversationHolder conversation = appCtr.NewConversation();
+                       conversation.bind();
+                       
+                       Taxon taxon = Taxon.NewInstance(null, null);
+
+
+               } catch (DataSourceNotFoundException e) {
+                       logger.error("datasource error");
+               } catch (TermNotFoundException e) {
+                       logger.error("defined terms not found");
+               }
+       }
+}