Project

General

Profile

Download (5.91 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.IOValidator;
23
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
24
import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
25
import eu.etaxonomy.cdm.model.common.CdmBase;
26
import eu.etaxonomy.cdm.model.common.Marker;
27
import eu.etaxonomy.cdm.model.common.MarkerType;
28
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
29
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
30

    
31
/**
32
 * @author a.mueller
33
 * @since 20.03.2008
34
 */
35
@Component
36
public class BerlinModelWebMarkerImport extends BerlinModelImportBase {
37

    
38
    private static final long serialVersionUID = 6350956896121390550L;
39
    private static final Logger logger = Logger.getLogger(BerlinModelWebMarkerImport.class);
40

    
41
	private static int modCount = 2000;
42
	private static final String dbTableName = "webMarker";
43
	private static final String pluralString = "markers";
44

    
45
	public BerlinModelWebMarkerImport(){
46
		super(dbTableName, pluralString);
47
	}
48

    
49
	@Override
50
	protected String getIdQuery(BerlinModelImportState state) {
51
		String result = " SELECT markerId FROM " + getTableName();
52
		if (state.getConfig().getWebMarkerFilter() != null){
53
			result += " WHERE " +  state.getConfig().getWebMarkerFilter();
54
		}
55
		return result;
56
	}
57

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

    
67
	@Override
68
	public boolean doPartition(@SuppressWarnings("rawtypes") ResultSetPartitioner partitioner, BerlinModelImportState state) {
69
		boolean success = true ;
70

    
71
		@SuppressWarnings({ "unchecked", "rawtypes" })
72
        Map<String, TaxonBase> taxonMap = partitioner.getObjectMap(BerlinModelTaxonImport.NAMESPACE);
73
		@SuppressWarnings("rawtypes")
74
        Set<TaxonBase> taxaToBeSaved = new HashSet<>();
75

    
76
		@SuppressWarnings("rawtypes")
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, BerlinModelImportState state) {
127

    
128
	    String nameSpace;
129
		Set<String> idSet;
130
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
131

    
132
		try{
133
			Set<String> taxonIdSet = new HashSet<>();
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
			idSet = taxonIdSet;
147
			@SuppressWarnings("rawtypes")
148
            Map<String, TaxonBase> taxonMap = getCommonService().getSourcedObjectsByIdInSourceC(TaxonBase.class, 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,
158
	        @SuppressWarnings("rawtypes") Map<String, DefinedTermBase> map ){
159
		MarkerType markerType = (MarkerType)map.get("webMarkerCategory_" + markerCategoryFk);
160
		if (markerType == null){
161
			logger.warn("MarkerType not found: " + markerCategoryFk);
162
		}
163
		Marker marker = Marker.NewInstance(markerType, activeFlag);
164
		annotatableEntity.addMarker(marker);
165
		return true;
166

    
167
	}
168

    
169
	@Override
170
	protected boolean doCheck(BerlinModelImportState state){
171
		IOValidator<BerlinModelImportState> validator = new BerlinModelWebMarkerImportValidator();
172
		return validator.validate(state);
173
	}
174

    
175
	@Override
176
	protected boolean isIgnore(BerlinModelImportState state){
177
		return ! state.getConfig().isDoMarker();
178
	}
179
}
(22-22/22)