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
+/.metadata
cdmlib-commons/.classpath
cdmlib-commons/.project
cdmlib-commons/.settings
*
*/
@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;
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;
}
+ /* (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){
}
+ /* (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;
}
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){
*/
@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();
}
+
/* (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];
--- /dev/null
+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
--- /dev/null
+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
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];
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();
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) {
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();
}
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
}\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
* @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
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
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
*/\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
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.UUID;
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;
// 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){
}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);
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());}
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{
+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;
}
- 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];
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;
public void addMember(CdmBase member) {
this.members.add(member);
}
- public void removeMember(CdmBase member) {
+ public void removeMember(ICdmBase member) {
this.members.remove(member);
}
public void addNonMember(CdmBase member) {
this.nonMembers.add(member);
}
- public void removeNonMember(CdmBase member) {
+ public void removeNonMember(ICdmBase member) {
this.nonMembers.remove(member);
}
*/\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
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
* @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
\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
/* (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
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
return false;\r
}\r
initialized = true;\r
- logger.info("initTermsMap end ...");\r
+ logger.info("inititialize VocabularyStoreImpl end ...");\r
}\r
return true;\r
}\r
\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
}\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
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;
<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>
### *** 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 ************ ###