1
2
3
4
5
6
7
8
9 package eu.etaxonomy.cdm.io.berlinModel.in;
10
11 import java.sql.ResultSet;
12 import java.sql.SQLException;
13 import java.util.HashMap;
14 import java.util.HashSet;
15 import java.util.Map;
16 import java.util.Set;
17
18 import org.apache.log4j.Logger;
19 import org.springframework.stereotype.Component;
20
21 import eu.etaxonomy.cdm.io.berlinModel.in.validation.BerlinModelWebMarkerImportValidator;
22 import eu.etaxonomy.cdm.io.common.ICdmIO;
23 import eu.etaxonomy.cdm.io.common.IOValidator;
24 import eu.etaxonomy.cdm.io.common.MapWrapper;
25 import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
26 import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
27 import eu.etaxonomy.cdm.model.common.CdmBase;
28 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
29 import eu.etaxonomy.cdm.model.common.Marker;
30 import eu.etaxonomy.cdm.model.common.MarkerType;
31 import eu.etaxonomy.cdm.model.taxon.Taxon;
32 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
33
34
35
36
37
38
39
40 @Component
41 public class BerlinModelWebMarkerImport extends BerlinModelImportBase {
42 private static final Logger logger = Logger.getLogger(BerlinModelWebMarkerImport.class);
43
44 private static int modCount = 2000;
45 private static final String dbTableName = "webMarker";
46 private static final String pluralString = "markers";
47
48 public BerlinModelWebMarkerImport(){
49 super();
50 }
51
52
53
54
55
56 @Override
57 protected String getIdQuery() {
58 return " SELECT markerId FROM " + getTableName();
59 }
60
61
62
63
64 @Override
65 protected String getRecordQuery(BerlinModelImportConfigurator config) {
66 String strQuery =
67 " SELECT * " +
68 " FROM webMarker INNER JOIN webTableName ON webMarker.TableNameFk = webTableName.TableNameId " +
69 " WHERE (markerId IN ("+ ID_LIST_TOKEN + ") )";
70 return strQuery;
71
72 }
73
74
75
76
77 public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state) {
78 boolean success = true ;
79
80 MapWrapper<Taxon> taxonMap = (MapWrapper<Taxon>)state.getStore(ICdmIO.TAXON_STORE);
81 Set<TaxonBase> taxaToBeSaved = new HashSet<TaxonBase>();
82
83 Map<String, DefinedTermBase> definedTermMap = state.getDbCdmDefinedTermMap();
84 ResultSet rs = partitioner.getResultSet();
85
86 int i = 0;
87
88 try{
89 while (rs.next()){
90 try{
91 if ((i++ % modCount ) == 0 && i!= 1 ){ logger.info(""+pluralString+" handled: " + (i-1));}
92
93 int markerId = rs.getInt("MarkerId");
94 int markerCategoryFk = rs.getInt("MarkerCategoryFk");
95 int rIdentifierFk = rs.getInt("RIdentifierFk");
96 String tableName = rs.getString("TableName");
97 Boolean activeFlag = rs.getBoolean("ActiveFlag");
98
99 AnnotatableEntity annotatableEntity;
100 if ("PTaxon".equals(tableName)){
101 TaxonBase<?> taxon = taxonMap.get(String.valueOf(rIdentifierFk));
102 if (taxon != null){
103 annotatableEntity = taxon;
104 taxaToBeSaved.add(taxon);
105 addMarker(annotatableEntity, activeFlag, markerCategoryFk, definedTermMap);
106 }else{
107 logger.warn("TaxonBase (RIdentifier " + rIdentifierFk + ") could not be found for marker " + markerId);
108 }
109 }else{
110 logger.warn("Marker for table " + tableName + " not yet implemented.");
111 success = false;
112 }
113
114
115 }catch(Exception ex){
116 logger.error(ex.getMessage());
117 ex.printStackTrace();
118 success = false;
119 }
120 }
121 } catch (SQLException e) {
122 logger.error("SQLException:" + e);
123 return false;
124 }
125
126 logger.info("save " + i + " "+pluralString + " ...");
127 getTaxonService().save(taxaToBeSaved);
128 return success;
129 }
130
131
132
133
134
135 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
136 String nameSpace;
137 Class cdmClass;
138 Set<String> idSet;
139 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
140
141 try{
142 Set<String> taxonIdSet = new HashSet<String>();
143 while (rs.next()){
144 int tableNameId = rs.getInt("TableNameFk");
145 if (tableNameId != 500){
146
147 logger.warn("A marker is not related to table PTaxon. This case is not handled yet!");
148 }else{
149 handleForeignKey(rs, taxonIdSet, "RIdentifierFk");
150 }
151 }
152
153
154 nameSpace = BerlinModelTaxonImport.NAMESPACE;
155 cdmClass = TaxonBase.class;
156 idSet = taxonIdSet;
157 Map<String, TaxonBase> taxonMap = (Map<String, TaxonBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
158 result.put(nameSpace, taxonMap);
159
160 } catch (SQLException e) {
161 throw new RuntimeException(e);
162 }
163 return result;
164 }
165
166
167 private boolean addMarker(AnnotatableEntity annotatableEntity, boolean activeFlag, int markerCategoryFk, Map<String, DefinedTermBase> map ){
168 MarkerType markerType = (MarkerType)map.get("webMarkerCategory_" + markerCategoryFk);
169 if (markerType == null){
170 logger.warn("MarkerType not found: " + markerCategoryFk);
171 }
172 Marker marker = Marker.NewInstance(markerType, activeFlag);
173 annotatableEntity.addMarker(marker);
174 return true;
175
176 }
177
178
179
180
181
182 @Override
183 protected boolean doCheck(BerlinModelImportState state){
184 IOValidator<BerlinModelImportState> validator = new BerlinModelWebMarkerImportValidator();
185 return validator.validate(state);
186 }
187
188
189
190
191
192 @Override
193 protected String getTableName() {
194 return dbTableName;
195 }
196
197
198
199
200 @Override
201 public String getPluralString() {
202 return pluralString;
203 }
204
205
206
207
208 protected boolean isIgnore(BerlinModelImportState state){
209 return ! state.getConfig().isDoMarker();
210 }
211
212
213 }