Project

General

Profile

Download (5.89 KB) Statistics
| Branch: | Revision:
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
	@Override
53
	protected String getIdQuery(BerlinModelImportState state) {
54
		String result = " SELECT markerId FROM " + getTableName();
55
		if (state.getConfig().getWebMarkerFilter() != null){
56
			result += " WHERE " +  state.getConfig().getWebMarkerFilter();
57
		}
58
		return result;
59
	}
60

    
61
	@Override
62
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
63
		String strQuery = 
64
			" SELECT *  " +
65
            " FROM webMarker INNER JOIN webTableName ON webMarker.TableNameFk = webTableName.TableNameId " +
66
            " WHERE (markerId IN ("+ ID_LIST_TOKEN + ") )";
67
		return strQuery;
68
	}
69

    
70
	@Override
71
	public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state) {
72
		boolean success = true ;
73
	
74
		Map<String, TaxonBase> taxonMap = (Map<String, TaxonBase>) partitioner.getObjectMap(BerlinModelTaxonImport.NAMESPACE);
75
		Set<TaxonBase> taxaToBeSaved = new HashSet<TaxonBase>(); 
76
		
77
		Map<String, DefinedTermBase> definedTermMap = state.getDbCdmDefinedTermMap();
78
		ResultSet rs = partitioner.getResultSet();
79
		
80
		int i = 0;
81
		//for each reference
82
		try{
83
			while (rs.next()){
84
				try{
85
					if ((i++ % modCount ) == 0 && i!= 1 ){ logger.info(""+pluralString+" handled: " + (i-1));}
86
					//
87
					int markerId = rs.getInt("MarkerId");
88
					int markerCategoryFk = rs.getInt("MarkerCategoryFk");
89
					int rIdentifierFk = rs.getInt("RIdentifierFk");
90
					String tableName = rs.getString("TableName");
91
					Boolean activeFlag = rs.getBoolean("ActiveFlag");
92
					
93
					AnnotatableEntity annotatableEntity;
94
					if ("PTaxon".equals(tableName)){
95
						TaxonBase<?> taxon = taxonMap.get(String.valueOf(rIdentifierFk));
96
						if (taxon != null){
97
							annotatableEntity = taxon;
98
							taxaToBeSaved.add(taxon);
99
							addMarker(annotatableEntity, activeFlag, markerCategoryFk, definedTermMap);
100
						}else{
101
							logger.warn("TaxonBase (RIdentifier " + rIdentifierFk + ") could not be found for marker " + markerId);
102
						}
103
					}else{
104
						logger.warn("Marker for table " + tableName + " not yet implemented.");
105
						success = false;
106
					}
107
					
108
					
109
				}catch(Exception ex){
110
					logger.error(ex.getMessage());
111
					ex.printStackTrace();
112
					success = false;
113
				}
114
			} //while rs.hasNext()
115
		} catch (SQLException e) {
116
			logger.error("SQLException:" +  e);
117
			return false;
118
		}
119

    
120
		logger.info("save " + i + " "+pluralString + " ...");
121
		getTaxonService().saveOrUpdate(taxaToBeSaved);
122
		return success;
123
	}
124
		
125
	@Override
126
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
127
		String nameSpace;
128
		Class<?> cdmClass;
129
		Set<String> idSet;
130
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
131
		
132
		try{
133
			Set<String> taxonIdSet = new HashSet<String>();
134
			while (rs.next()){
135
				int tableNameId = rs.getInt("TableNameFk");
136
				if (tableNameId != 500){
137
					//TODO
138
					logger.warn("A marker is not related to table PTaxon. This case is not handled yet!");
139
				}else{
140
					handleForeignKey(rs, taxonIdSet, "RIdentifierFk");
141
				}
142
			}
143
	
144
			//taxon map
145
			nameSpace = BerlinModelTaxonImport.NAMESPACE;
146
			cdmClass = TaxonBase.class;
147
			idSet = taxonIdSet;
148
			Map<String, TaxonBase> taxonMap = (Map<String, TaxonBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
149
			result.put(nameSpace, taxonMap);
150
			
151
		} catch (SQLException e) {
152
			throw new RuntimeException(e);
153
		}
154
		return result;
155
	}
156

    
157
	private boolean addMarker(AnnotatableEntity annotatableEntity, boolean activeFlag, int markerCategoryFk, Map<String, DefinedTermBase> map ){
158
		MarkerType markerType = (MarkerType)map.get("webMarkerCategory_" + markerCategoryFk);
159
		if (markerType == null){
160
			logger.warn("MarkerType not found: " + markerCategoryFk);
161
		}
162
		Marker marker = Marker.NewInstance(markerType, activeFlag);
163
		annotatableEntity.addMarker(marker);
164
		return true;
165

    
166
	}
167
	
168
	@Override
169
	protected boolean doCheck(BerlinModelImportState state){
170
		IOValidator<BerlinModelImportState> validator = new BerlinModelWebMarkerImportValidator();
171
		return validator.validate(state);
172
	}
173
	
174
	@Override
175
	protected boolean isIgnore(BerlinModelImportState state){
176
		return ! state.getConfig().isDoMarker();
177
	}
178
}
(21-21/21)