Project

General

Profile

Download (6.69 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
	
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
}
(21-21/21)