(no commit message)
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / berlinModel / BerlinModelOccurrenceIO.java
1 /**
2 *
3 */
4 package eu.etaxonomy.cdm.io.berlinModel;
5
6 import java.sql.ResultSet;
7 import java.sql.SQLException;
8 import java.util.HashSet;
9 import java.util.Set;
10
11 import org.apache.log4j.Logger;
12 import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.*;
13 import eu.etaxonomy.cdm.api.application.CdmApplicationController;
14 import eu.etaxonomy.cdm.api.service.ITaxonService;
15 import eu.etaxonomy.cdm.io.source.Source;
16 import eu.etaxonomy.cdm.model.common.Language;
17 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
18 import eu.etaxonomy.cdm.model.description.TaxonDescription;
19 import eu.etaxonomy.cdm.model.description.TextData;
20 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
21 import eu.etaxonomy.cdm.model.taxon.Taxon;
22 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
23
24
25 /**
26 * @author a.mueller
27 *
28 */
29 public class BerlinModelOccurrenceIO {
30 private static final Logger logger = Logger.getLogger(BerlinModelOccurrenceIO.class);
31
32 private static int modCount = 10000;
33
34 public static boolean check(BerlinModelImportConfigurator bmiConfig){
35 boolean result = true;
36 logger.warn("Checking for Occurrence not yet implemented");
37 //result &= checkArticlesWithoutJournal(bmiConfig);
38 //result &= checkPartOfJournal(bmiConfig);
39
40 return result;
41 }
42
43 public static boolean invoke(BerlinModelImportConfigurator bmiConfig, CdmApplicationController cdmApp,
44 MapWrapper<TaxonBase> taxonMap, MapWrapper<ReferenceBase> referenceMap){
45
46 Set<TaxonBase> taxonStore = new HashSet<TaxonBase>();
47 Source source = bmiConfig.getSource();
48 ITaxonService taxonService = cdmApp.getTaxonService();
49
50 String dbAttrName;
51 String cdmAttrName;
52
53 logger.info("start makeFacts ...");
54
55 boolean delete = bmiConfig.isDeleteAll();
56
57 try {
58 //get data from database
59 String strQuery =
60 " SELECT xxx.*, PTaxon.RIdentifier as taxonId " +
61 " FROM Fact INNER JOIN " +
62 " dbo.PTaxon ON Fact.PTNameFk = PTaxon.PTNameFk AND Fact.PTRefFk = PTaxon.PTRefFk "+
63 " WHERE (1=1)";
64 ResultSet rs = source.getResultSet(strQuery) ;
65
66 int i = 0;
67 //for each reference
68 while (rs.next()){
69
70 if ((i++ % modCount) == 0){ logger.info("Facts handled: " + (i-1));}
71
72 int occurrenceId = rs.getInt("occId");
73 int taxonId = rs.getInt("taxonId");
74 int factRefFk = rs.getInt("factRefFk");
75 int categoryFk = rs.getInt("factCategoryFk");
76
77 TaxonBase taxonBase = taxonMap.get(taxonId);
78
79 if (taxonBase != null){
80 Taxon taxon;
81 if ( taxonBase instanceof Taxon ) {
82 taxon = (Taxon) taxonBase;
83 }else{
84 logger.warn("TaxonBase for Occurrence " + occurrenceId + " was not of type Taxon but: " + taxonBase.getClass().getSimpleName());
85 continue;
86 }
87
88 TaxonDescription taxonDescription = TaxonDescription.NewInstance();
89
90 taxon.addDescription(taxonDescription);
91
92 //commonNames
93 String commonNameString;
94 if (taxon.getName() != null){
95 commonNameString = "Common " + taxon.getName().getTitleCache();
96 }else{
97 commonNameString = "Common (null)";
98 }
99 Language language = bmiConfig.getFactLanguage();
100 language = null;
101 CommonTaxonName commonName = CommonTaxonName.NewInstance(commonNameString, language);
102 taxonDescription.addElement(commonName);
103
104
105 //TODO
106 //etc.
107
108 taxonStore.add(taxon);
109 }else{
110 //TODO
111 logger.warn("Taxon for Fact " + occurrenceId + " does not exist in store");
112 }
113 //put
114 }
115 logger.info("Taxa to save: " + taxonStore.size());
116 taxonService.saveTaxonAll(taxonStore);
117
118 logger.info("end makeFacts ...");
119 return true;
120 } catch (SQLException e) {
121 logger.error("SQLException:" + e);
122 return false;
123 }
124
125 }
126
127
128 }