1 package eu
.etaxonomy
.cdm
.model
.common
.init
;
3 import java
.io
.FileNotFoundException
;
4 import java
.io
.InputStream
;
5 import java
.io
.InputStreamReader
;
6 import java
.util
.ArrayList
;
10 import org
.apache
.log4j
.Logger
;
11 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
12 import org
.springframework
.stereotype
.Component
;
13 import org
.springframework
.transaction
.annotation
.Transactional
;
15 import au
.com
.bytecode
.opencsv
.CSVReader
;
16 import au
.com
.bytecode
.opencsv
.CSVWriter
;
17 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
19 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
20 import eu
.etaxonomy
.cdm
.model
.common
.IDefTerm
;
21 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
22 import eu
.etaxonomy
.cdm
.model
.common
.NoDefinedTermClassException
;
23 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
24 import eu
.etaxonomy
.cdm
.model
.location
.Continent
;
25 import eu
.etaxonomy
.cdm
.model
.location
.WaterbodyOrCountry
;
26 import eu
.etaxonomy
.cdm
.model
.name
.HybridRelationshipType
;
27 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationshipType
;
28 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalStatusType
;
29 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
30 import eu
.etaxonomy
.cdm
.model
.name
.TypeDesignationStatus
;
31 import eu
.etaxonomy
.cdm
.model
.taxon
.ConceptRelationshipType
;
32 import eu
.etaxonomy
.cdm
.model
.taxon
.SynonymRelationshipType
;
35 @Transactional(readOnly
= false)
36 public class TermLoader
{
37 private static final Logger logger
= Logger
.getLogger(TermLoader
.class);
40 private IVocabularySaver vocabularySaver
;
42 private static Map
<UUID
, DefinedTermBase
> definedTermsMap
;
44 public static void setDefinedTermsMap(Map
<UUID
, DefinedTermBase
> dtm
){
45 definedTermsMap
= dtm
;
48 // load a list of defined terms from a simple text file
49 // if isEnumeration is true an Enumeration for the ordered term list will be returned
50 @Transactional(readOnly
= false)
51 public TermVocabulary
<DefinedTermBase
> loadTerms(Class
<IDefTerm
> termClass
, String filename
, boolean isEnumeration
) throws NoDefinedTermClassException
, FileNotFoundException
{
52 TermVocabulary
<DefinedTermBase
> voc
= new TermVocabulary
<DefinedTermBase
>(termClass
.getCanonicalName(), termClass
.getSimpleName(), termClass
.getCanonicalName());
54 String strResourceFileName
= "terms" + CdmUtils
.getFolderSeperator() + filename
;
55 logger
.debug("strResourceFileName is " + strResourceFileName
);
56 InputStream inputStream
= CdmUtils
.getReadableResourceStream("terms" + CdmUtils
.getFolderSeperator() + filename
);
57 if (inputStream
== null) {logger
.debug("inputStream is null");}
58 CSVReader reader
= new CSVReader(new InputStreamReader(inputStream
));
61 while ((nextLine
= reader
.readNext()) != null) {
62 // nextLine[] is an array of values from the line
63 IDefTerm term
= termClass
.newInstance();
64 ArrayList
<String
> aList
= new ArrayList
<String
>(10);
65 for (String col
: nextLine
){
68 while (aList
.size()<10){
71 term
.readCsvLine(aList
);
72 term
.setVocabulary(voc
);
73 // save enumeration and all terms to DB
74 if (vocabularySaver
!= null){
75 vocabularySaver
.saveOrUpdate(voc
);
77 //e.g. in tests when no database connection exists
78 logger
.debug("No dao exists. Vocabulary for class '" + termClass
+ "' could not be saved to database");
80 if (definedTermsMap
!= null){
81 DefinedTermBase defTermBase
= (DefinedTermBase
)term
;
82 definedTermsMap
.put(defTermBase
.getUuid(), defTermBase
);
86 } catch (Exception e
) {
87 // TODO Auto-generated catch block
93 public TermVocabulary
loadDefaultTerms(Class termClass
) throws NoDefinedTermClassException
, FileNotFoundException
{
94 return this.loadTerms(termClass
, termClass
.getSimpleName()+".csv", true);
97 public void loadAllDefaultTerms() throws FileNotFoundException
, NoDefinedTermClassException
{
98 // first insert default language english, its used everywhere even for Language!
99 //Language langEN = new Language("e9f8cdb7-6819-44e8-95d3-e2d0690c3523");
102 logger
.debug("load terms");
103 loadDefaultTerms(Language
.class);
104 loadDefaultTerms(WaterbodyOrCountry
.class);
105 loadDefaultTerms(Continent
.class);
106 loadDefaultTerms(Rank
.class);
107 loadDefaultTerms(TypeDesignationStatus
.class);
108 loadDefaultTerms(NomenclaturalStatusType
.class);
109 loadDefaultTerms(SynonymRelationshipType
.class);
110 loadDefaultTerms(HybridRelationshipType
.class);
111 loadDefaultTerms(NameRelationshipType
.class);
112 loadDefaultTerms(ConceptRelationshipType
.class);
113 logger
.debug("terms loaded");
117 /******************* not in version 4.5 (cdmlib-model)*/
120 // public static void main(String[] args) {
121 // CdmApplicationController appCtr = new CdmApplicationController();
122 // TermLoader tl = (TermLoader) appCtr.applicationContext.getBean("termLoader");
124 // tl.loadAllDefaultTerms();
125 // } catch (Exception e) {
126 // // TODO Auto-generated catch block
127 // e.printStackTrace();
131 // public void loadAllDefaultTerms() throws FileNotFoundException, NoDefinedTermClassException{
132 // IVocabularySaver vocabularySaver = dao;
133 // loadAllDefaultTerms(vocabularySaver);