(no commit message)
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / berlinModel / BerlinModelTypesIO.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.HashMap;
9 import java.util.HashSet;
10 import java.util.Map;
11 import java.util.Set;
12
13 import org.apache.log4j.Logger;
14
15 import eu.etaxonomy.cdm.api.application.CdmApplicationController;
16 import eu.etaxonomy.cdm.api.service.INameService;
17 import eu.etaxonomy.cdm.io.common.IIO;
18 import eu.etaxonomy.cdm.io.common.MapWrapper;
19 import eu.etaxonomy.cdm.io.common.Source;
20 import eu.etaxonomy.cdm.model.common.Annotation;
21 import eu.etaxonomy.cdm.model.media.ImageFile;
22 import eu.etaxonomy.cdm.model.media.Media;
23 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
24 import eu.etaxonomy.cdm.model.name.TypeDesignationStatus;
25 import eu.etaxonomy.cdm.model.occurrence.Specimen;
26 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
27 import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
28
29
30
31 /**
32 * @author a.mueller
33 *
34 */
35 public class BerlinModelTypesIO extends BerlinModelIOBase implements IIO<BerlinModelImportConfigurator> {
36 private static final Logger logger = Logger.getLogger(BerlinModelTypesIO.class);
37
38 private static int modCount = 10000;
39
40 public boolean check(BerlinModelImportConfigurator bmiConfig){
41 boolean result = true;
42 logger.warn("Checking for Types not yet implemented");
43 //result &= checkArticlesWithoutJournal(bmiConfig);
44 //result &= checkPartOfJournal(bmiConfig);
45
46 return result;
47 }
48
49 public static boolean invoke(BerlinModelImportConfigurator bmiConfig, CdmApplicationController cdmApp,
50 MapWrapper<TaxonNameBase> taxonNameMap, MapWrapper<ReferenceBase> referenceMap){
51
52 boolean result = true;
53 Set<TaxonNameBase> taxonNameStore = new HashSet<TaxonNameBase>();
54 Source source = bmiConfig.getSource();
55 INameService nameService = cdmApp.getNameService();
56
57 Map<Integer, Specimen> typeMap = new HashMap<Integer, Specimen>();
58 String dbAttrName;
59 String cdmAttrName;
60
61 logger.info("start makeTypes ...");
62
63 boolean delete = bmiConfig.isDeleteAll();
64
65 try {
66 //get data from database
67 String strQuery =
68 " SELECT TypeDesignation.*, TypeStatus.Status " +
69 " FROM TypeDesignation INNER JOIN" +
70 " TypeStatus ON TypeDesignation.TypeStatusFk = TypeStatus.TypeStatusId " +
71 " WHERE (1=1) ";
72 ResultSet rs = source.getResultSet(strQuery) ;
73
74 int i = 0;
75 //for each reference
76 while (rs.next()){
77
78 if ((i++ % modCount) == 0){ logger.info("Types handled: " + (i-1));}
79
80 int typeDesignationId = rs.getInt("typeDesignationId");
81 int nameId = rs.getInt("nameFk");
82 int typeStatusFk = rs.getInt("typeStatusFk");
83 int refFk = rs.getInt("refFk");
84 String refDetail = rs.getString("refDetail");
85 String status = rs.getString("Status");
86 String typePhrase = rs.getString("typePhrase");
87
88 //TODO
89 //TypeCache leer
90 //RejectedFlag false
91 //PublishFlag xxx
92
93
94 TaxonNameBase taxonNameBase = taxonNameMap.get(nameId);
95
96 if (taxonNameBase != null){
97 try{
98 TypeDesignationStatus typeDesignationStatus = BerlinModelTransformer.typeStatusId2TypeStatus(typeStatusFk);
99 ReferenceBase citation = referenceMap.get(refFk);
100
101 Specimen specimen = Specimen.NewInstance();
102 specimen.setTitleCache(typePhrase);
103 boolean addToAllNames = true;
104 String originalNameString = null;
105 taxonNameBase.addSpecimenTypeDesignation(specimen, typeDesignationStatus, citation, refDetail, originalNameString, addToAllNames);
106 typeMap.put(typeDesignationId, specimen);
107 taxonNameStore.add(taxonNameBase);
108
109 //TODO
110 //Update, Created, Notes, origId
111 //doIdCreatedUpdatedNotes(bmiConfig, media, rs, nameFactId);
112
113 }catch (UnknownCdmTypeException e) {
114 logger.warn("TypeStatus '" + status + "' not yet implemented");
115 }
116 }else{
117 //TODO
118 logger.warn("TaxonName for TypeDesignation " + typeDesignationId + " does not exist in store");
119 }
120 //put
121 }
122
123 result &= makeFigures(typeMap, source);
124
125
126 logger.info("Names to save: " + taxonNameStore.size());
127 nameService.saveTaxonNameAll(taxonNameStore);
128
129 logger.info("end makeTypes ...");
130 return result;
131 } catch (SQLException e) {
132 logger.error("SQLException:" + e);
133 return false;
134 }
135
136 }
137
138 private static boolean makeFigures(Map<Integer, Specimen> typeMap, Source source){
139 try {
140 //get data from database
141 String strQuery =
142 " SELECT * " +
143 " FROM TypeFigure " +
144 " WHERE (1=1) ";
145 ResultSet rs = source.getResultSet(strQuery) ;
146
147 int i = 0;
148 //for each reference
149 while (rs.next()){
150
151 if ((i++ % modCount) == 0){ logger.info("TypesFigures handled: " + (i-1));}
152
153 Integer typeFigureId = rs.getInt("typeFigureId");
154 Integer typeDesignationFk = rs.getInt("typeDesignationFk");
155 Integer collectionFk = rs.getInt("collectionFk");
156 String filename = rs.getString("filename");
157 String figurePhrase = rs.getString("figurePhrase");
158
159 String mimeType = null; //"image/jpg";
160 String suffix = null; //"jpg";
161 Media media = ImageFile.NewMediaInstance(null, null, filename, mimeType, suffix, null, null, null);
162 if (figurePhrase != null) {
163 media.addAnnotation(Annotation.NewDefaultLanguageInstance(figurePhrase));
164 }
165 Specimen typeSpecimen = typeMap.get(typeDesignationFk);
166 if (typeSpecimen != null) {
167 typeSpecimen.addMedia(media);
168 }
169
170 //mimeType + suffix
171 //TODO
172 //RefFk
173 //RefDetail
174 //VerifiedBy
175 //VerifiedWhen
176 //PrefFigureFlag
177 //PublishedFlag
178 //etc.
179 }
180 } catch (SQLException e) {
181 logger.error("SQLException:" + e);
182 return false;
183 }
184
185 return true;
186 }
187
188
189 }