Project

General

Profile

Download (6.99 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

    
10
package eu.etaxonomy.cdm.io.pesi.erms;
11

    
12
import java.sql.ResultSet;
13
import java.sql.SQLException;
14
import java.util.HashMap;
15
import java.util.HashSet;
16
import java.util.Map;
17
import java.util.Set;
18

    
19
import org.apache.log4j.Logger;
20
import org.springframework.stereotype.Component;
21

    
22
import eu.etaxonomy.cdm.io.common.mapping.DbImportMapping;
23
import eu.etaxonomy.cdm.io.common.mapping.DbImportNameTypeDesignationMapper;
24
import eu.etaxonomy.cdm.io.common.mapping.DbImportSynonymMapper;
25
import eu.etaxonomy.cdm.io.common.mapping.DbImportTaxIncludedInMapper;
26
import eu.etaxonomy.cdm.io.common.mapping.ICheckIgnoreMapper;
27
import eu.etaxonomy.cdm.io.common.mapping.IDbImportMapper;
28
import eu.etaxonomy.cdm.model.common.CdmBase;
29
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
30
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
31
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
32

    
33
/**
34
 * @author a.mueller
35
 * @created 09.03.2010
36
 */
37
@Component
38
public class ErmsTaxonRelationImport extends ErmsImportBase<TaxonBase<?>> implements ICheckIgnoreMapper{
39
	@SuppressWarnings("unused")
40
	private static final Logger logger = Logger.getLogger(ErmsTaxonRelationImport.class);
41
	
42
	private DbImportMapping<ErmsImportState, ErmsImportConfigurator> mapping;
43
	
44
	private static final String pluralString = "taxon relations";
45
	private static final String dbTableName = "tu";
46

    
47
	private static final Class<?> cdmTargetClass = TaxonBase.class;
48
	
49
	private ErmsImportState state;  //ERMS import will never run in more then one instance
50
	
51
	public ErmsTaxonRelationImport(){
52
		super(pluralString, dbTableName, cdmTargetClass);
53
	}
54

    
55

    
56
	@Override
57
	protected DbImportMapping<ErmsImportState, ErmsImportConfigurator> getMapping() {
58
		if (mapping == null){
59
			mapping = new DbImportMapping<ErmsImportState, ErmsImportConfigurator>();
60
			
61
			mapping.addMapper(DbImportTaxIncludedInMapper.NewInstance("id", TAXON_NAMESPACE, "parentId", TAXON_NAMESPACE, "accParentId", TAXON_NAMESPACE, null));//there is only one tree
62
			
63
			TaxonRelationshipType taxonRelationshipType = getTaxonRelationshipType(state, ErmsTransformer.uuidTaxRelTypeIsTaxonSynonymOf, "is taxon synonym of", "is synonym of relation used by synonym that are of class Taxon as they can not be handled differently", null, null);
64
			mapping.addMapper(DbImportSynonymMapper.NewInstance("id", "tu_acctaxon", TAXON_NAMESPACE, null, taxonRelationshipType)); 			
65
			mapping.addMapper(DbImportNameTypeDesignationMapper.NewInstance("id", "tu_typetaxon", ErmsTaxonImport.NAME_NAMESPACE, "tu_typedesignationstatus"));
66
//			mapping.addMapper(DbNotYetImplementedMapper.NewInstance("tu_acctaxon"));
67
		}
68
		return mapping;
69
	}
70
	
71

    
72
	/* (non-Javadoc)
73
	 * @see eu.etaxonomy.cdm.io.erms.ErmsImportBase#getRecordQuery(eu.etaxonomy.cdm.io.erms.ErmsImportConfigurator)
74
	 */
75
	protected String getRecordQuery(ErmsImportConfigurator config) {
76
		//TODO get automatic by second path mappers
77
		String selectAttributes = " myTaxon.id, myTaxon.tu_parent, myTaxon.tu_typetaxon, myTaxon.tu_typedesignation, " +
78
								" myTaxon.tu_acctaxon, myTaxon.tu_status, parent.tu_status AS parentStatus, parent.id AS parentId, " + 
79
								" accParent.tu_status AS accParentStatus, accParent.id AS accParentId "; 
80
		String strRecordQuery = 
81
			" SELECT  " + selectAttributes + 
82
			" FROM tu AS myTaxon LEFT OUTER JOIN " +
83
				" tu AS accTaxon ON myTaxon.tu_acctaxon = accTaxon.id LEFT OUTER JOIN " +
84
				" tu AS accParent RIGHT OUTER JOIN "  + 
85
				" tu AS parent ON accParent.id = parent.tu_acctaxon ON myTaxon.tu_parent = parent.id " +
86
			" WHERE ( myTaxon.id IN (" + ID_LIST_TOKEN + ") )";
87
		return strRecordQuery;
88
	}
89
	
90

    
91
	@Override
92
	protected void doInvoke(ErmsImportState state) {
93
		this.state = state;
94
		super.doInvoke(state);
95
	}
96

    
97
	@Override
98
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, ErmsImportState state) {
99
		String nameSpace;
100
		Class<?> cdmClass;
101
		Set<String> idSet;
102
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
103
		
104
		try{
105
			Set<String> taxonIdSet = new HashSet<String>();
106
			Set<String> nameIdSet = new HashSet<String>();
107
			while (rs.next()){
108
				handleForeignKey(rs, taxonIdSet, "parentId");
109
				handleForeignKey(rs, taxonIdSet, "accParentId");
110
				handleForeignKey(rs, taxonIdSet, "tu_acctaxon");
111
				handleForeignKey(rs, taxonIdSet, "id");
112
				handleForeignKey(rs, nameIdSet, "tu_typetaxon");
113
				handleForeignKey(rs, nameIdSet, "id");		
114
			}
115
			
116
			//name map
117
			nameSpace = ErmsTaxonImport.NAME_NAMESPACE;
118
			cdmClass = TaxonNameBase.class;
119
			idSet = nameIdSet;
120
			Map<String, TaxonNameBase<?,?>> nameMap = (Map<String, TaxonNameBase<?,?>>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
121
			result.put(nameSpace, nameMap);
122
			
123
			
124
			//taxon map
125
			nameSpace = ErmsTaxonImport.TAXON_NAMESPACE;
126
			cdmClass = TaxonBase.class;
127
			idSet = taxonIdSet;
128
			Map<String, TaxonBase<?>> taxonMap = (Map<String, TaxonBase<?>>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
129
			result.put(nameSpace, taxonMap);
130

    
131
		} catch (SQLException e) {
132
			throw new RuntimeException(e);
133
		}
134
		return result;
135
	}
136
	
137

    
138
	/* (non-Javadoc)
139
	 * @see eu.etaxonomy.cdm.io.erms.ICheckIgnoreMapper#checkIgnoreMapper(eu.etaxonomy.cdm.io.common.mapping.IDbImportMapper, java.sql.ResultSet)
140
	 */
141
	public boolean checkIgnoreMapper(IDbImportMapper mapper, ResultSet rs) throws SQLException{
142
		boolean result = false;
143
		if (mapper instanceof DbImportTaxIncludedInMapper){
144
			//old
145
//			int tu_status = rs.getInt("tu_status");
146
//			if (tu_status != 1){
147
//				result = true;
148
//			}
149
			
150
			int id = rs.getInt("id");
151
			if (state.getAcceptedTaxaKeys().contains(id)){
152
				return false;
153
			}else{
154
				return true;
155
			}
156
		}else if (mapper instanceof DbImportSynonymMapper){
157
			//old
158
//			int tu_status = rs.getInt("tu_status");
159
//			if (tu_status == 1){
160
//				result = true;
161
//			}else{
162
//				return false;
163
//			}t.tu_acctaxon <> t.id
164
			
165
			int id = rs.getInt("id");
166
			Object accTaxonId = rs.getObject("tu_acctaxon");
167
			if (accTaxonId == null){
168
				return true;
169
			}else{
170
				int accId = Integer.valueOf(String.valueOf(accTaxonId));
171
				return accId == id;
172
			}
173
		}else if (mapper instanceof DbImportNameTypeDesignationMapper){
174
			Object tu_typeTaxon = rs.getObject("tu_typetaxon");
175
			if (tu_typeTaxon == null){
176
				return true;
177
			}
178
		}
179
		return result;
180
	}
181
	
182
	
183
	@Override
184
	protected boolean doCheck(ErmsImportState state){
185
//		IOValidator<ErmsImportState> validator = new ErmsTaxonImportValidator();
186
//		return validator.validate(state);
187
		return true;
188
	}
189
	
190
	@Override
191
	protected boolean isIgnore(ErmsImportState state){
192
		return ! state.getConfig().isDoRelTaxa();
193
	}
194

    
195

    
196

    
197
}
(14-14/17)