fix test source
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / berlinModel / in / BerlinModelWebMarkerImport.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
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 * @author a.mueller
37 * @created 20.03.2008
38 * @version 1.0
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(dbTableName, pluralString);
50 }
51
52
53 /* (non-Javadoc)
54 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
55 */
56 @Override
57 protected String getIdQuery(BerlinModelImportState state) {
58 String result = " SELECT markerId FROM " + getTableName();
59 if (state.getConfig().getWebMarkerFilter() != null){
60 result += " WHERE " + state.getConfig().getWebMarkerFilter();
61 }
62 return result;
63 }
64
65 /* (non-Javadoc)
66 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
67 */
68 @Override
69 protected String getRecordQuery(BerlinModelImportConfigurator config) {
70 String strQuery =
71 " SELECT * " +
72 " FROM webMarker INNER JOIN webTableName ON webMarker.TableNameFk = webTableName.TableNameId " +
73 " WHERE (markerId IN ("+ ID_LIST_TOKEN + ") )";
74 return strQuery;
75
76 }
77
78 /* (non-Javadoc)
79 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
80 */
81 public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state) {
82 boolean success = true ;
83
84 MapWrapper<Taxon> taxonMap = (MapWrapper<Taxon>)state.getStore(ICdmIO.TAXON_STORE);
85 Set<TaxonBase> taxaToBeSaved = new HashSet<TaxonBase>();
86
87 Map<String, DefinedTermBase> definedTermMap = state.getDbCdmDefinedTermMap();
88 ResultSet rs = partitioner.getResultSet();
89
90 int i = 0;
91 //for each reference
92 try{
93 while (rs.next()){
94 try{
95 if ((i++ % modCount ) == 0 && i!= 1 ){ logger.info(""+pluralString+" handled: " + (i-1));}
96 //
97 int markerId = rs.getInt("MarkerId");
98 int markerCategoryFk = rs.getInt("MarkerCategoryFk");
99 int rIdentifierFk = rs.getInt("RIdentifierFk");
100 String tableName = rs.getString("TableName");
101 Boolean activeFlag = rs.getBoolean("ActiveFlag");
102
103 AnnotatableEntity annotatableEntity;
104 if ("PTaxon".equals(tableName)){
105 TaxonBase<?> taxon = taxonMap.get(String.valueOf(rIdentifierFk));
106 if (taxon != null){
107 annotatableEntity = taxon;
108 taxaToBeSaved.add(taxon);
109 addMarker(annotatableEntity, activeFlag, markerCategoryFk, definedTermMap);
110 }else{
111 logger.warn("TaxonBase (RIdentifier " + rIdentifierFk + ") could not be found for marker " + markerId);
112 }
113 }else{
114 logger.warn("Marker for table " + tableName + " not yet implemented.");
115 success = false;
116 }
117
118
119 }catch(Exception ex){
120 logger.error(ex.getMessage());
121 ex.printStackTrace();
122 success = false;
123 }
124 } //while rs.hasNext()
125 } catch (SQLException e) {
126 logger.error("SQLException:" + e);
127 return false;
128 }
129
130 logger.info("save " + i + " "+pluralString + " ...");
131 getTaxonService().saveOrUpdate(taxaToBeSaved);
132 return success;
133 }
134
135
136 /* (non-Javadoc)
137 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
138 */
139 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
140 String nameSpace;
141 Class cdmClass;
142 Set<String> idSet;
143 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
144
145 try{
146 Set<String> taxonIdSet = new HashSet<String>();
147 while (rs.next()){
148 int tableNameId = rs.getInt("TableNameFk");
149 if (tableNameId != 500){
150 //TODO
151 logger.warn("A marker is not related to table PTaxon. This case is not handled yet!");
152 }else{
153 handleForeignKey(rs, taxonIdSet, "RIdentifierFk");
154 }
155 }
156
157 //taxon map
158 nameSpace = BerlinModelTaxonImport.NAMESPACE;
159 cdmClass = TaxonBase.class;
160 idSet = taxonIdSet;
161 Map<String, TaxonBase> taxonMap = (Map<String, TaxonBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
162 result.put(nameSpace, taxonMap);
163
164 } catch (SQLException e) {
165 throw new RuntimeException(e);
166 }
167 return result;
168 }
169
170
171 private boolean addMarker(AnnotatableEntity annotatableEntity, boolean activeFlag, int markerCategoryFk, Map<String, DefinedTermBase> map ){
172 MarkerType markerType = (MarkerType)map.get("webMarkerCategory_" + markerCategoryFk);
173 if (markerType == null){
174 logger.warn("MarkerType not found: " + markerCategoryFk);
175 }
176 Marker marker = Marker.NewInstance(markerType, activeFlag);
177 annotatableEntity.addMarker(marker);
178 return true;
179
180 }
181
182
183 /* (non-Javadoc)
184 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
185 */
186 @Override
187 protected boolean doCheck(BerlinModelImportState state){
188 IOValidator<BerlinModelImportState> validator = new BerlinModelWebMarkerImportValidator();
189 return validator.validate(state);
190 }
191
192
193 /* (non-Javadoc)
194 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
195 */
196 protected boolean isIgnore(BerlinModelImportState state){
197 return ! state.getConfig().isDoMarker();
198 }
199
200
201 }