(no commit message)
authorAndreas Müller <a.mueller@bgbm.org>
Sun, 20 Apr 2008 16:29:33 +0000 (16:29 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Sun, 20 Apr 2008 16:29:33 +0000 (16:29 +0000)
20 files changed:
.gitattributes
.gitignore
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/CdmBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/DefinedTermBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ICdmBase.java [new file with mode: 0644]
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ILoadableTerm.java [new file with mode: 0644]
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/Language.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/RelationshipTermBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/Representation.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/init/DefaultVocabularyStore.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/init/IVocabularyStore.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/init/TermLoader.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/location/WaterbodyOrCountry.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/view/View.java
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/common/CdmBaseTest.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/VocabularyStoreImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/common/CdmEntityDaoBase.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/common/CdmGenericDaoImpl.java
cdmlib-persistence/src/main/resources/eu/etaxonomy/cdm/persistence.xml
cdmlib-services/src/test/resources/log4j.properties

index 0e2b8effd67fcb899ad99475d05f32464f44ccd9..9b584ad027993d8a4a39fee138ad1e72506ce6cd 100644 (file)
@@ -55,8 +55,10 @@ cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/EventBase.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/Extension.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ExtensionType.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/Figure.java -text
+cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ICdmBase.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IDefTerm.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IEvent.java -text
+cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ILoadableTerm.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IMediaDocumented.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IOriginalSource.java -text
 cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/IReferencedEntity.java -text
index 4d564553fb6804a8ed590d14806410d1884d2f50..0d105074a7a4992325fb0d801f74ad4ab5eea205 100644 (file)
@@ -1,3 +1,4 @@
+/.metadata
 cdmlib-commons/.classpath
 cdmlib-commons/.project
 cdmlib-commons/.settings
index d21da1e662c6e3b7ff4da650cf94901f508da58c..73432cd0e14f5e3b08063d950392b9b7fa92c5c3 100644 (file)
@@ -38,7 +38,7 @@ import eu.etaxonomy.cdm.model.agent.Person;
  *
  */
 @MappedSuperclass
-public abstract class CdmBase implements Serializable{
+public abstract class CdmBase implements Serializable, ICdmBase{
        private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
        private int id;
        private UUID uuid;
@@ -107,20 +107,16 @@ public abstract class CdmBase implements Serializable{
                propertyChangeSupport.firePropertyChange(evt);
        }
 
-       /**
-        * Returns local unique identifier for the concrete subclass
-        * @return
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.ICdmBase#getId()
         */
        @Id
        @GeneratedValue(generator = "system-increment")
        public int getId() {
                return this.id;
        }
-       /**
-        * Assigns a unique local ID to this object. 
-        * Because of the EJB3 @Id and @GeneratedValue annotation this id will be
-        * set automatically by the persistence framework when object is saved.
-        * @param id
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.ICdmBase#setId(int)
         */
        public void setId(int id) {
                this.id = id;
@@ -144,27 +140,31 @@ public abstract class CdmBase implements Serializable{
        }
        
        
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.ICdmBase#getUuid()
+        */
        @Transient
        public UUID getUuid() {
                return this.uuid;
        }
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.ICdmBase#setUuid(java.util.UUID)
+        */
        public void setUuid(UUID uuid) {
                this.uuid = uuid;
        }
 
        
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.ICdmBase#getCreated()
+        */
        @Temporal(TemporalType.TIMESTAMP)
        @Basic(fetch = FetchType.LAZY)
        public Calendar getCreated() {
                return created;
        }
-       /**
-        * Sets the timestamp this object was created. 
-        * Most databases cannot store milliseconds, so they are removed by this method.
-        * Caution: We are planning to replace the Calendar class with a different datetime representation which is more suitable for hibernate
-        * see {@link http://dev.e-taxonomy.eu/trac/ticket/247 TRAC ticket} 
-        * 
-        * @param created
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.ICdmBase#setCreated(java.util.Calendar)
         */
        public void setCreated(Calendar created) {
                if (created != null){
@@ -174,11 +174,17 @@ public abstract class CdmBase implements Serializable{
        }
 
 
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.ICdmBase#getCreatedBy()
+        */
        @ManyToOne(fetch=FetchType.LAZY)
        @Cascade( { CascadeType.SAVE_UPDATE })
        public Person getCreatedBy() {
                return this.createdBy;
        }
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.model.common.ICdmBase#setCreatedBy(eu.etaxonomy.cdm.model.agent.Person)
+        */
        public void setCreatedBy(Person createdBy) {
                this.createdBy = createdBy;
        }
@@ -193,7 +199,7 @@ public abstract class CdmBase implements Serializable{
                if (obj == null){
                        return false;
                }else if (CdmBase.class.isAssignableFrom(obj.getClass())){
-                       CdmBase cdmObj = (CdmBase)obj;
+                       ICdmBase cdmObj = (ICdmBase)obj;
                        boolean uuidEqual = cdmObj.getUuid().equals(this.getUuid());
                        boolean createdEqual = cdmObj.getCreated().equals(this.getCreated());
                        if (uuidEqual && createdEqual){
index 6305c67f0e75eb34e0db65d4f4db90021f490f01..74ff45e4577d7e6b0f6829e2f3833d5e5d1e5ee5 100644 (file)
@@ -37,7 +37,7 @@ import javax.persistence.*;
  */
 @Entity
 @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
-public abstract class DefinedTermBase<T extends DefinedTermBase> extends TermBase implements IDefTerm{
+public abstract class DefinedTermBase<T extends DefinedTermBase> extends TermBase implements ILoadableTerm{
        static Logger logger = Logger.getLogger(DefinedTermBase.class);
        
        static protected IVocabularyStore vocabularyStore = new DefaultVocabularyStore();
@@ -66,20 +66,22 @@ public abstract class DefinedTermBase<T extends DefinedTermBase> extends TermBas
        }
 
 
+       
        /* (non-Javadoc)
-        * @see eu.etaxonomy.cdm.model.common.IDefTerm#readCsvLine(java.util.List)
+        * @see eu.etaxonomy.cdm.model.common.ILoadableTerm#readCsvLine(java.util.List)
         */
-       public void readCsvLine(List<String> csvLine) {
-               readCsvLine(csvLine, Language.ENGLISH());
+       public ILoadableTerm readCsvLine(List<String> csvLine) {
+               return readCsvLine(csvLine, Language.ENGLISH());
        }
-       public void readCsvLine(List<String> csvLine, Language lang) {
+       public ILoadableTerm readCsvLine(List<String> csvLine, Language lang) {
                this.setUuid(UUID.fromString(csvLine.get(0)));
                this.setUri(csvLine.get(1));
-               this.addRepresentation(new Representation(csvLine.get(3), csvLine.get(2).trim(), lang) );
+               this.addRepresentation(Representation.NewInstance(csvLine.get(3), csvLine.get(2).trim(), lang) );
+               return this;
        }
 
        /* (non-Javadoc)
-        * @see eu.etaxonomy.cdm.model.common.IDefTerm#writeCsvLine(au.com.bytecode.opencsv.CSVWriter)
+        * @see eu.etaxonomy.cdm.model.common.ILoadableTerm#writeCsvLine(au.com.bytecode.opencsv.CSVWriter)
         */
        public void writeCsvLine(CSVWriter writer) {
                String [] line = new String[4];
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ICdmBase.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ICdmBase.java
new file mode 100644 (file)
index 0000000..9641e0c
--- /dev/null
@@ -0,0 +1,63 @@
+package eu.etaxonomy.cdm.model.common;\r
+\r
+import java.util.Calendar;\r
+import java.util.UUID;\r
+\r
+import javax.persistence.Basic;\r
+import javax.persistence.FetchType;\r
+import javax.persistence.GeneratedValue;\r
+import javax.persistence.Id;\r
+import javax.persistence.ManyToOne;\r
+import javax.persistence.Temporal;\r
+import javax.persistence.TemporalType;\r
+import javax.persistence.Transient;\r
+\r
+import org.hibernate.annotations.Cascade;\r
+import org.hibernate.annotations.CascadeType;\r
+\r
+import eu.etaxonomy.cdm.model.agent.Person;\r
+\r
+public interface ICdmBase {\r
+\r
+       /**\r
+        * Returns local unique identifier for the concrete subclass\r
+        * @return\r
+        */\r
+       @Id\r
+       @GeneratedValue(generator = "system-increment")\r
+       public abstract int getId();\r
+\r
+       /**\r
+        * Assigns a unique local ID to this object. \r
+        * Because of the EJB3 @Id and @GeneratedValue annotation this id will be\r
+        * set automatically by the persistence framework when object is saved.\r
+        * @param id\r
+        */\r
+       public abstract void setId(int id);\r
+\r
+       @Transient\r
+       public abstract UUID getUuid();\r
+\r
+       public abstract void setUuid(UUID uuid);\r
+\r
+       @Temporal(TemporalType.TIMESTAMP)\r
+       @Basic(fetch = FetchType.LAZY)\r
+       public abstract Calendar getCreated();\r
+\r
+       /**\r
+        * Sets the timestamp this object was created. \r
+        * Most databases cannot store milliseconds, so they are removed by this method.\r
+        * Caution: We are planning to replace the Calendar class with a different datetime representation which is more suitable for hibernate\r
+        * see {@link http://dev.e-taxonomy.eu/trac/ticket/247 TRAC ticket} \r
+        * \r
+        * @param created\r
+        */\r
+       public abstract void setCreated(Calendar created);\r
+\r
+       @ManyToOne(fetch = FetchType.LAZY)\r
+       @Cascade( { CascadeType.SAVE_UPDATE })\r
+       public abstract Person getCreatedBy();\r
+\r
+       public abstract void setCreatedBy(Person createdBy);\r
+\r
+}
\ No newline at end of file
diff --git a/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ILoadableTerm.java b/cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/ILoadableTerm.java
new file mode 100644 (file)
index 0000000..1167db0
--- /dev/null
@@ -0,0 +1,30 @@
+package eu.etaxonomy.cdm.model.common;
+
+import java.util.List;
+
+import javax.persistence.ManyToOne;
+
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
+
+import au.com.bytecode.opencsv.CSVWriter;
+
+public interface ILoadableTerm extends ICdmBase{
+
+       /**
+        * Fills the {@link ILoadableTerm} with contents from a csvLine. If the csvLine represents the default language
+        * the csvLine attributes are merged into the existing default language and the default Language is returned.
+        * @param csvLine
+        * @return
+        */
+       public abstract ILoadableTerm readCsvLine(List<String> csvLine);
+
+       public abstract void writeCsvLine(CSVWriter writer);
+
+       @ManyToOne
+       @Cascade( { CascadeType.SAVE_UPDATE })
+       public abstract TermVocabulary getVocabulary();
+
+       public abstract void setVocabulary(TermVocabulary newVocabulary);
+
+}
\ No newline at end of file
index c7efb589773819d9de74ba4d4b5cfda870e9a996..897ec65f8ce073e745c2eeeda1bb7b717f2e62c7 100644 (file)
@@ -45,7 +45,9 @@ public class Language extends DefinedTermBase {
        private static final UUID uuidDutch = UUID.fromString("9965d79a-acf9-4921-a2c0-863b8c16c056");
        private static final UUID uuidPolish = UUID.fromString("3fdca387-f1b0-4ec1-808f-1bc3dc482194");
        
-       
+       public static Language NewInstance(){
+               return new Language();
+       }
        
        private char[] iso639_1 = new char[2];
        private char[] iso639_2 = new char[3];
@@ -135,14 +137,24 @@ public class Language extends DefinedTermBase {
                return getUUID(uuidPolish);
        }
  
-       public void readCsvLine(List csvLine) {
-               // read UUID, URI, english label+description
-               List<String> csvLineString = csvLine;
-               super.readCsvLine(csvLine);
-               // iso codes extra
-               this.iso639_1=csvLineString.get(4).trim().toCharArray();
-               this.iso639_2=csvLineString.get(5).trim().toCharArray();
+       @Override 
+       public ILoadableTerm readCsvLine(List csvLine) {
+               ILoadableTerm result;
+               if ( UUID.fromString(csvLine.get(0).toString()).equals(DEFAULT().getUuid()) && this != DEFAULT() ){
+                       result = DEFAULT();
+                       result.readCsvLine(csvLine);
+               }else{
+                       // read UUID, URI, english label+description
+                       List<String> csvLineString = csvLine;
+                       result = this;
+                       super.readCsvLine(csvLine);
+                       // iso codes extra
+                       this.iso639_1=csvLineString.get(4).trim().toCharArray();
+                       this.iso639_2=csvLineString.get(5).trim().toCharArray();
+               }
+               return result;
        }
+       
        public void writeCsvLine(CSVWriter writer) {
                String [] line = new String[6];
                line[0] = getUuid().toString();
index dc3cf8f05bed2fe6a29b574799a5e2ef48d746b1..72c28226ba20b35baf9dbb54f736cb7e4bae01d4 100644 (file)
@@ -129,14 +129,16 @@ public abstract class RelationshipTermBase<T extends RelationshipTermBase> exten
                return this.getInverseRepresentation(lang).getDescription();
        }
        
-       public void readCsvLine(List csvLine) {
+       public ILoadableTerm readCsvLine(List csvLine) {
+               RelationshipTermBase result;
                // read UUID, URI, english label+description
                List<String> csvLineString = (List<String>)csvLine;
-               super.readCsvLine(csvLineString);
+               result = (RelationshipTermBase)super.readCsvLine(csvLineString);
                // inverse label + 2 booleans
-               this.addInverseRepresentation(new Representation(csvLineString.get(4).trim(), csvLineString.get(5).trim(), Language.ENGLISH()) );
-               this.setSymmetric(Boolean.parseBoolean(csvLineString.get(6)));
-               this.setTransitive(Boolean.parseBoolean(csvLineString.get(7)));
+               result.addInverseRepresentation(new Representation(csvLineString.get(4).trim(), csvLineString.get(5).trim(), Language.ENGLISH()) );
+               result.setSymmetric(Boolean.parseBoolean(csvLineString.get(6)));
+               result.setTransitive(Boolean.parseBoolean(csvLineString.get(7)));
+               return result;
        }
        
        public void writeCsvLine(CSVWriter writer) {
index d9bf9c1d500f756689b72b25c165bb781255b540..a996336a6f22a48c889bd907364a205dd41ee809 100644 (file)
@@ -28,6 +28,10 @@ public class Representation extends LanguageString {
        private String label;
        private String abbreviatedLabel;
 
+       public static Representation NewInstance(String text, String label, Language lang){
+               return new Representation(text, label, lang);
+       }
+       
        public Representation() {
                super();
        }       
index 0c496604682c3c1a465d6032ce2301243d195cc6..3448326237e7130a10bccfcdc3b933645ba22ca0 100644 (file)
@@ -11,9 +11,14 @@ import java.util.UUID;
 import org.apache.log4j.Logger;\r
 \r
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
+import eu.etaxonomy.cdm.model.common.ILoadableTerm;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 \r
+/**\r
+ * @author AM\r
+ *\r
+ */\r
 /**\r
  * @author AM\r
  *\r
@@ -28,16 +33,16 @@ public class DefaultVocabularyStore implements IVocabularyStore {
        }\r
        \r
        \r
-       static protected Map<UUID, DefinedTermBase> definedTermsMap = null;\r
+       static protected Map<UUID, ILoadableTerm> definedTermsMap = null;\r
        static protected Map<UUID, TermVocabulary<DefinedTermBase>> termVocabularyMap = null;\r
 \r
 \r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.model.common.init.IVocabularyStore#getTermByUuid(java.util.UUID)\r
         */\r
-       public DefinedTermBase getTermByUuid(UUID uuid) {\r
+       public DefinedTermBase<DefinedTermBase> getTermByUuid(UUID uuid) {\r
                if (!isInitialized  &&  ! loadBasicTerms()){ return null;}\r
-               return definedTermsMap.get(uuid);\r
+               return (DefinedTermBase<DefinedTermBase>)definedTermsMap.get(uuid);\r
        }\r
 \r
        /* (non-Javadoc)\r
@@ -53,9 +58,9 @@ public class DefaultVocabularyStore implements IVocabularyStore {
         * @see eu.etaxonomy.cdm.model.common.init.IVocabularyStore#saveOrUpdate(eu.etaxonomy.cdm.model.common.TermVocabulary)\r
         */\r
        public void saveOrUpdate(TermVocabulary<DefinedTermBase> vocabulary) {\r
+               logger.info("dddd");\r
                loadBasicTerms();\r
                Iterator<DefinedTermBase> termIterator = vocabulary.iterator();\r
-\r
                while (termIterator.hasNext()){\r
                        DefinedTermBase<DefinedTermBase> term = termIterator.next();\r
                        if (definedTermsMap.get(term.getUuid()) != null){\r
@@ -66,11 +71,23 @@ public class DefaultVocabularyStore implements IVocabularyStore {
                termVocabularyMap.put(vocabulary.getUuid(), vocabulary);\r
        }\r
        \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.model.common.init.IVocabularyStore#saveOrUpdate(eu.etaxonomy.cdm.model.common.TermVocabulary)\r
+        */\r
+       public void saveOrUpdate(ILoadableTerm term) {\r
+               loadBasicTerms();\r
+               if (definedTermsMap.get(term.getUuid()) != null){\r
+                       term.setId(definedTermsMap.get(term.getUuid()).getId()); // to avoid duplicates in the default Language\r
+               }\r
+               definedTermsMap.put(term.getUuid(), term);\r
+               termVocabularyMap.put(term.getVocabulary().getUuid(), term.getVocabulary());\r
+       }\r
+       \r
        \r
        public boolean loadBasicTerms() {\r
                if (definedTermsMap == null){\r
                        logger.info("initTermsMap start ...");\r
-                       definedTermsMap = new HashMap<UUID, DefinedTermBase>();\r
+                       definedTermsMap = new HashMap<UUID, ILoadableTerm>();\r
                        try {\r
                                definedTermsMap.put(DEFAULT_LANGUAGE().getUuid(), DEFAULT_LANGUAGE());\r
                                TermLoader termLoader = new TermLoader(this);\r
index f36fcf01aa33fc1279dc0213a5c62919129ca403..065f0516e1a3c4f66b86dda73090199dbdf035cd 100644 (file)
@@ -3,6 +3,7 @@ package eu.etaxonomy.cdm.model.common.init;
 import java.util.UUID;\r
 \r
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
+import eu.etaxonomy.cdm.model.common.ILoadableTerm;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 \r
 /**\r
@@ -23,13 +24,22 @@ public interface IVocabularyStore {
         */\r
        public void saveOrUpdate(TermVocabulary<DefinedTermBase> vocabulary);\r
        \r
+       \r
+       \r
+       /**\r
+        * TODO\r
+        * @param term\r
+        */\r
+       public void saveOrUpdate(ILoadableTerm term);\r
+\r
+       \r
         /** ATTENTION: Be aware that TermLoader indirectly calls getTermByUuid(uuid)\r
         * for the default language. So make sure that before loading the Terms by the\r
         * TermLoader getTermByUuid() returns a valid Object without going to endless recursion.\r
         * @param uuid the definedTermBases UUID\r
         * @return the DefinedTermBase to return\r
         */\r
-       public DefinedTermBase getTermByUuid(UUID uuid);\r
+       public DefinedTermBase<DefinedTermBase> getTermByUuid(UUID uuid);\r
        \r
        /**\r
         * @param uuid\r
index 0319ba4ce19ab6e349152764f07fb82946f4b88d..846efc25189552192e13d6221731f35dbfda5474 100644 (file)
@@ -5,7 +5,6 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
@@ -18,7 +17,7 @@ import au.com.bytecode.opencsv.CSVReader;
 import eu.etaxonomy.cdm.common.CdmUtils;
 
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
-import eu.etaxonomy.cdm.model.common.IDefTerm;
+import eu.etaxonomy.cdm.model.common.ILoadableTerm;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.NoDefinedTermClassException;
 import eu.etaxonomy.cdm.model.common.OrderedTermBase;
@@ -63,7 +62,7 @@ public class TermLoader {
        // load a list of defined terms from a simple text file
        // if isEnumeration is true an Enumeration for the ordered term list will be returned
        @Transactional(readOnly = false)
-       public TermVocabulary<DefinedTermBase> loadTerms(Class<IDefTerm> termClass, String filename, boolean isEnumeration, boolean isOrdered) throws NoDefinedTermClassException, FileNotFoundException {
+       public TermVocabulary<DefinedTermBase> loadTerms(Class<ILoadableTerm> termClass, String filename, boolean isEnumeration, boolean isOrdered) throws NoDefinedTermClassException, FileNotFoundException {
                TermVocabulary voc;
                DefinedTermBase.setVocabularyStore(vocabularyStore); //otherwise DefinedTermBase is not able to find DefaultLanguage
                if (isOrdered){
@@ -71,6 +70,9 @@ public class TermLoader {
                }else{
                        voc = new TermVocabulary<DefinedTermBase>(termClass.getCanonicalName(), termClass.getSimpleName(), termClass.getCanonicalName());
                }
+               logger.info("save vocabulary ...");
+               saveVocabulary(voc, termClass);
+               logger.info("save vocabulary end.");
                try {
                        String strResourceFileName = "terms" + CdmUtils.getFolderSeperator() + filename;
                        logger.debug("strResourceFileName is " + strResourceFileName);
@@ -81,29 +83,35 @@ public class TermLoader {
                        String [] nextLine;
                        while ((nextLine = reader.readNext()) != null) {
                                // nextLine[] is an array of values from the line
-                               IDefTerm term = termClass.newInstance();
-                               ArrayList<String> aList = new ArrayList<String>(10);
+                               ArrayList<String> csvTermAttributeList = new ArrayList<String>(10);
                                for (String col : nextLine){
-                                       aList.add(col);
+                                       csvTermAttributeList.add(col);
                                }
-                               while (aList.size()<10){
-                                       aList.add("");
+                               while (csvTermAttributeList.size()<10){
+                                       csvTermAttributeList.add("");
                                }
-                               term.readCsvLine(aList);
+                               
+                               ILoadableTerm term = termClass.newInstance();
+                               term = term.readCsvLine(csvTermAttributeList);
                                term.setVocabulary(voc);
+                               vocabularyStore.saveOrUpdate(term);
                                // save enumeration and all terms to DB
-                               if (vocabularyStore != null){
-                                       vocabularyStore.saveOrUpdate(voc);
-                               }else{
-                                       //e.g. in tests when no database connection exists
-                                       if (logger.isDebugEnabled()) {logger.debug("No vocabularyStore exists. Vocabulary for class '" + termClass +  "' could not be saved to database");}
-                               }
                        }
                } catch (Exception e) {
                        logger.error(e.getMessage());
                }
                return voc;
        }
+       
+       private void saveVocabulary(TermVocabulary voc, Class<ILoadableTerm> termClass){
+               if (vocabularyStore != null){
+                       vocabularyStore.saveOrUpdate(voc);
+               }else{
+                       //e.g. in tests when no database connection exists
+                       if (logger.isDebugEnabled()) {logger.debug("No vocabularyStore exists. Vocabulary for class '" + termClass +  "' could not be saved to database");}
+               }
+
+       }
 
        public TermVocabulary<DefinedTermBase> loadDefaultTerms(Class termClass, boolean isOrdered) throws NoDefinedTermClassException, FileNotFoundException {
                if (termClass != null){logger.info("load class " + termClass.getName());}
@@ -158,7 +166,7 @@ public class TermLoader {
                if (saver == null){
                        return false;
                }
-               DefinedTermBase basicTerm = saver.getTermByUuid(uuid);
+               ILoadableTerm basicTerm = saver.getTermByUuid(uuid);
                if ( basicTerm == null || ! basicTerm.getUuid().equals(uuid)){
                        return false;
                }else{
index b4a86e0fe30c232cff4c1e65ed4962faa8e8bd73..d51cbbd8277e1a2cc8a244b2e83cb8f4b03be6cc 100644 (file)
@@ -11,6 +11,7 @@ package eu.etaxonomy.cdm.model.location;
 
 
 
+import eu.etaxonomy.cdm.model.common.ILoadableTerm;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.Representation;
 import eu.etaxonomy.cdm.model.common.TimePeriod;
@@ -599,11 +600,13 @@ uuidPersianGulf
        }
 
        
-       public void readCsvLine(List<String> csvLine) {
+       public ILoadableTerm readCsvLine(List<String> csvLine) {
+               ILoadableTerm result;
                // read UUID, URI, english label+description
-               super.readCsvLine(csvLine);
+               result = super.readCsvLine(csvLine);
                // iso codes extra
                this.iso2code=csvLine.get(4).trim();
+               return result;
        }
        public void writeCsvLine(CSVWriter writer) {
                String [] line = new String[6];
index 71d2f99439d6ae3e0541749f4ee9db688edeaf55..1ef5f3bbc4396327b5f17913d6f6d2fbaa5a6dfd 100644 (file)
@@ -13,6 +13,7 @@ package eu.etaxonomy.cdm.model.view;
 import org.apache.log4j.Logger;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.common.IReferencedEntity;
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
 
@@ -90,7 +91,7 @@ public class View extends CdmBase implements IReferencedEntity{
        public void addMember(CdmBase member) {
                this.members.add(member);
        }
-       public void removeMember(CdmBase member) {
+       public void removeMember(ICdmBase member) {
                this.members.remove(member);
        }
 
@@ -105,7 +106,7 @@ public class View extends CdmBase implements IReferencedEntity{
        public void addNonMember(CdmBase member) {
                this.nonMembers.add(member);
        }
-       public void removeNonMember(CdmBase member) {
+       public void removeNonMember(ICdmBase member) {
                this.nonMembers.remove(member);
        }
 
index d64eba7f99c2f79d4bfb8291939967afe7c8fe71..be2736aef2253748723c4158ba9e37410e930039 100644 (file)
@@ -507,7 +507,7 @@ public class CdmBaseTest extends EntityTestBase{
         */\r
        @Test\r
        public void testEqualsObject() {\r
-               CdmBase cdmBase2 = getTestCdmBase();\r
+               ICdmBase cdmBase2 = getTestCdmBase();\r
                cdmBase2.setUuid(cdmBase.getUuid());\r
                cdmBase2.setCreated(cdmBase.getCreated());\r
                cdmBase2.setCreatedBy(Person.NewInstance());\r
index 3054e0a44ff99e35421508fde9397bb22607271d..db39f13a7005a9cfd45a2e2b2c2df674b544300c 100644 (file)
@@ -11,10 +11,9 @@ import java.util.UUID;
 import org.apache.log4j.Logger;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Component;\r
-import org.springframework.transaction.annotation.Transactional;\r
 \r
-import eu.etaxonomy.cdm.model.agent.Person;\r
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
+import eu.etaxonomy.cdm.model.common.ILoadableTerm;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 import eu.etaxonomy.cdm.model.common.init.IVocabularyStore;\r
@@ -26,6 +25,10 @@ import eu.etaxonomy.cdm.persistence.dao.common.ITermVocabularyDao;
  * @author a.mueller\r
  *\r
  */\r
+/**\r
+ * @author AM\r
+ *\r
+ */\r
 @Component\r
 public class VocabularyStoreImpl implements IVocabularyStore {\r
        private static Logger logger = Logger.getLogger(VocabularyStoreImpl.class);\r
@@ -36,11 +39,13 @@ public class VocabularyStoreImpl implements IVocabularyStore {
 \r
        public static final Language DEFAULT_LANGUAGE= makeDefaultLanguage();\r
        private static Language makeDefaultLanguage() {\r
+               logger.info("make Default language ...");\r
                Language defaultLanguage = new Language(uuidEnglish);\r
+               logger.info("make Default language end");\r
                return defaultLanguage;\r
        }\r
        \r
-       static protected Map<UUID, DefinedTermBase> definedTermsMap = null;\r
+       static protected Map<UUID, ILoadableTerm> definedTermsMap = null;\r
 \r
        \r
        @Autowired\r
@@ -60,23 +65,41 @@ public class VocabularyStoreImpl implements IVocabularyStore {
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.model.common.init.IVocabularySaver#saveOrUpdate(eu.etaxonomy.cdm.model.common.TermVocabulary)\r
         */\r
-       public void saveOrUpdate2(TermVocabulary<DefinedTermBase> vocabulary) {\r
+       public void saveOrUpdate(TermVocabulary<DefinedTermBase> vocabulary) {\r
+               logger.info("vocabulary save or update start ...");\r
                initialize();\r
                Iterator<DefinedTermBase> termIterator = vocabulary.iterator();\r
                while (termIterator.hasNext()){\r
+                       logger.info("iterate ...");\r
                        DefinedTermBase<DefinedTermBase> term = termIterator.next();\r
                        if (definedTermsMap.get(term.getUuid()) != null){\r
                                term.setId(definedTermsMap.get(term.getUuid()).getId()); // to avoid duplicates in the default Language\r
                        }\r
                        definedTermsMap.put(term.getUuid(), term);\r
                }\r
+               logger.info("vocabulary save or update before dao save ...");\r
                vocabularyDao.saveOrUpdate(vocabulary);\r
+               logger.info("vocabulary save or update end.");\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.model.common.init.IVocabularyStore#saveOrUpdate(eu.etaxonomy.cdm.model.common.IDefTerm)\r
+        */\r
+       public void saveOrUpdate(ILoadableTerm term) {\r
+               initialize();\r
+               if (definedTermsMap.get(term.getUuid()) != null){\r
+                       ILoadableTerm oldTerm = definedTermsMap.get(term.getUuid());\r
+                       term.setId(oldTerm.getId()); // to avoid duplicates in the default Language\r
+                       \r
+               }\r
+               definedTermsMap.put(term.getUuid(), term);\r
+//             vocabularyDao.saveOrUpdate(term);\r
        }\r
 \r
-       public DefinedTermBase getTermByUuid(UUID uuid) {\r
+       public DefinedTermBase<DefinedTermBase> getTermByUuid(UUID uuid) {\r
                if (initialize()){\r
                        if (definedTermsMap.get(uuid) != null){\r
-                               return definedTermsMap.get(uuid);\r
+                               return (DefinedTermBase<DefinedTermBase>)definedTermsMap.get(uuid);\r
                        }else{\r
                                DefinedTermBase term = termDao.findByUuid(uuid);\r
                                definedTermsMap.put(term.getUuid(), term);\r
@@ -101,17 +124,22 @@ public class VocabularyStoreImpl implements IVocabularyStore {
                if (! initialized){\r
                        logger.info("inititialize VocabularyStoreImpl ...");\r
                        try {\r
+                               logger.info("000 ...");\r
                                Language defaultLanguage = (Language)termDao.findByUuid(DEFAULT_LANGUAGE.getUuid());\r
-                               \r
+                               logger.info("aaa ...");\r
                                if (defaultLanguage == null){\r
+                                       logger.info("bbb ...");\r
+                                       logger.info("DL ..."  + DEFAULT_LANGUAGE.hashCode());\r
                                        termDao.saveOrUpdate(DEFAULT_LANGUAGE);\r
-                                       definedTermsMap = new HashMap<UUID, DefinedTermBase>();\r
+                                       definedTermsMap = new HashMap<UUID, ILoadableTerm>();\r
                                        definedTermsMap.put(DEFAULT_LANGUAGE.getUuid(), DEFAULT_LANGUAGE);\r
+                                       logger.info("ccc ...");\r
                                        initialized = true;\r
                                        TermLoader termLoader = new TermLoader(this);\r
                                        termLoader.loadAllDefaultTerms();\r
                                }else if (definedTermsMap == null){\r
-                                               definedTermsMap = new HashMap<UUID, DefinedTermBase>();\r
+                                       logger.info("ddd ...");\r
+                                       definedTermsMap = new HashMap<UUID, ILoadableTerm>();\r
                                                definedTermsMap.put(defaultLanguage.getUuid(), defaultLanguage);\r
                                }\r
                        } catch (Exception e) {\r
@@ -120,7 +148,7 @@ public class VocabularyStoreImpl implements IVocabularyStore {
                                return false;\r
                        }\r
                        initialized = true;\r
-                       logger.info("initTermsMap end ...");\r
+                       logger.info("inititialize VocabularyStoreImpl end ...");\r
                }\r
                return true;\r
        }\r
index 8c9ee67ddcba3adce746879d78d989c4a573b493..4bbbee40caa07fff2b41abdd2274cf27f08bb998 100644 (file)
@@ -8,6 +8,8 @@ import java.util.UUID;
 \r
 import org.apache.log4j.Logger;\r
 import org.hibernate.Criteria;\r
+import org.hibernate.HibernateException;\r
+import org.hibernate.NonUniqueObjectException;\r
 import org.hibernate.Session;\r
 import org.hibernate.criterion.Order;\r
 import org.hibernate.criterion.Restrictions;\r
@@ -39,9 +41,24 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
        }\r
 \r
        public UUID saveOrUpdate(T transientObject) throws DataAccessException  {\r
-               Session session = getSession();\r
-               session.saveOrUpdate(transientObject);\r
-               return transientObject.getUuid();\r
+               try {\r
+                       logger.info("dao saveOrUpdate start...");\r
+                       logger.info("transientObject(" + transientObject.getClass().getSimpleName() + ") ID:" + transientObject.getId() + ", UUID: " + transientObject.getUuid()) ;\r
+                       Session session = getSession();\r
+                       session.saveOrUpdate(transientObject);\r
+                       logger.info("dao saveOrUpdate edc");\r
+                       return transientObject.getUuid();\r
+               } catch (NonUniqueObjectException e) {\r
+                       logger.error(e.getIdentifier());\r
+                       logger.error(e.getEntityName());\r
+                       logger.error(e.getMessage());\r
+                       e.printStackTrace();\r
+                       throw e;\r
+               } catch (HibernateException e) {\r
+                       \r
+                       e.printStackTrace();\r
+                       throw e;\r
+               }\r
        }\r
 \r
        public UUID save(T newInstance) throws DataAccessException {\r
index 863edeed315976d8d4cf0e0810cac83d443aab3b..09f333772581a40bb3b54135616c18bfe4cd0c60 100644 (file)
@@ -1,9 +1,6 @@
 package eu.etaxonomy.cdm.persistence.dao.common;
 
-import java.util.List;
-
 import org.springframework.stereotype.Repository;
-import org.springframework.transaction.annotation.Transactional;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
 
index 3355b47ada5fe0083211480ef27419a55b9d3c26..07712a0ad48710b43ee054d7cce5bd758e9d906a 100644 (file)
@@ -48,7 +48,7 @@
             <value>eu.etaxonomy.cdm.model.common.Extension</value>
             <value>eu.etaxonomy.cdm.model.common.ExtensionType</value>
             <value>eu.etaxonomy.cdm.model.common.Figure</value>
-            <value>eu.etaxonomy.cdm.model.common.IDefTerm</value>
+            <value>eu.etaxonomy.cdm.model.common.ILoadableTerm</value>
             <value>eu.etaxonomy.cdm.model.common.IdentifiableEntity</value>
             <value>eu.etaxonomy.cdm.model.common.IdentifyableMediaEntity</value>
             <value>eu.etaxonomy.cdm.model.common.IEvent</value>
index f97ea3ff4eef73f973078bf4acaff95db789d52b..5b3390b11c4e9eb64e471421f229e16d41c6e9d4 100644 (file)
@@ -21,8 +21,9 @@ log4j.rootLogger=warn, stdout
 
        ### *** CDM *** ###
 
-log4j.logger.eu.etaxonomy.cdm = info 
+log4j.logger.eu.etaxonomy.cdm = info
 log4j.logger.eu.etaxonomy.cdm.database.init = debug
+log4j.logger.eu.etaxonomy.cdm.model.common.init = debug
 
 
        ### *** SPRING ************ ###