Project

General

Profile

Download (7 KB) Statistics
| Branch: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10

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

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

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

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

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

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

    
56

    
57
	@Override
58
	protected DbImportMapping<ErmsImportState, ErmsImportConfigurator> getMapping() {
59
		if (mapping == null){
60
			mapping = new DbImportMapping<ErmsImportState, ErmsImportConfigurator>();
61
			
62
			mapping.addMapper(DbImportTaxIncludedInMapper.NewInstance("id", TAXON_NAMESPACE, "parentId", TAXON_NAMESPACE, "accParentId", TAXON_NAMESPACE, null));//there is only one tree
63
			
64
			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);
65
			mapping.addMapper(DbImportSynonymMapper.NewInstance("id", "tu_acctaxon", TAXON_NAMESPACE, null, taxonRelationshipType)); 			
66
			mapping.addMapper(DbImportNameTypeDesignationMapper.NewInstance("id", "tu_typetaxon", ErmsTaxonImport.NAME_NAMESPACE, "tu_typedesignationstatus"));
67
//			mapping.addMapper(DbNotYetImplementedMapper.NewInstance("tu_acctaxon"));
68
		}
69
		return mapping;
70
	}
71
	
72

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

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

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

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

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

    
196

    
197

    
198
}
(14-14/17)