Project

General

Profile

Download (6.75 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.TaxonName;
30
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
31
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
32

    
33
/**
34
 * @author a.mueller
35
 * @since 09.03.2010
36
 */
37
@Component
38
public class ErmsTaxonRelationImport extends ErmsImportBase<TaxonBase<?>> implements ICheckIgnoreMapper{
39

    
40
    private static final long serialVersionUID = 4092728796922591257L;
41

    
42
    @SuppressWarnings("unused")
43
	private static final Logger logger = Logger.getLogger(ErmsTaxonRelationImport.class);
44

    
45
	private DbImportMapping<ErmsImportState, ErmsImportConfigurator> mapping;
46

    
47
	private static final String pluralString = "taxon relations";
48
	private static final String dbTableName = "tu";
49

    
50
	private static final Class<?> cdmTargetClass = TaxonBase.class;
51

    
52
	private ErmsImportState state;  //ERMS import will never run in more then one instance
53

    
54
	public ErmsTaxonRelationImport(){
55
		super(pluralString, dbTableName, cdmTargetClass);
56
	}
57

    
58
	@Override
59
	protected DbImportMapping<ErmsImportState, ErmsImportConfigurator> getMapping() {
60
		if (mapping == null){
61
			mapping = new DbImportMapping<ErmsImportState, ErmsImportConfigurator>();
62

    
63
			mapping.addMapper(DbImportTaxIncludedInMapper.NewInstance("id", TAXON_NAMESPACE, "parentId", TAXON_NAMESPACE, "accParentId", TAXON_NAMESPACE, null));//there is only one tree
64

    
65
			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);
66
			mapping.addMapper(DbImportSynonymMapper.NewInstance("id", "tu_acctaxon", TAXON_NAMESPACE, null, taxonRelationshipType));
67
			mapping.addMapper(DbImportNameTypeDesignationMapper.NewInstance("id", "tu_typetaxon", ErmsImportBase.NAME_NAMESPACE, "tu_typedesignationstatus"));
68
//			mapping.addMapper(DbNotYetImplementedMapper.NewInstance("tu_acctaxon"));
69
		}
70
		return mapping;
71
	}
72

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

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

    
95
	@Override
96
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, ErmsImportState state) {
97
		String nameSpace;
98
		Class<?> cdmClass;
99
		Set<String> idSet;
100
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
101

    
102
		try{
103
			Set<String> taxonIdSet = new HashSet<>();
104
			Set<String> nameIdSet = new HashSet<>();
105
			while (rs.next()){
106
				handleForeignKey(rs, taxonIdSet, "parentId");
107
				handleForeignKey(rs, taxonIdSet, "accParentId");
108
				handleForeignKey(rs, taxonIdSet, "tu_acctaxon");
109
				handleForeignKey(rs, taxonIdSet, "id");
110
				handleForeignKey(rs, nameIdSet, "tu_typetaxon");
111
				handleForeignKey(rs, nameIdSet, "id");
112
			}
113

    
114
			//name map
115
			nameSpace = ErmsImportBase.NAME_NAMESPACE;
116
			cdmClass = TaxonName.class;
117
			idSet = nameIdSet;
118
			@SuppressWarnings("unchecked")
119
            Map<String, TaxonName> nameMap = (Map<String, TaxonName>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
120
			result.put(nameSpace, nameMap);
121

    
122
			//taxon map
123
			nameSpace = ErmsImportBase.TAXON_NAMESPACE;
124
			cdmClass = TaxonBase.class;
125
			idSet = taxonIdSet;
126
			@SuppressWarnings("unchecked")
127
            Map<String, TaxonBase<?>> taxonMap = (Map<String, TaxonBase<?>>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
128
			result.put(nameSpace, taxonMap);
129

    
130
			return result;
131

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

    
137
	@Override
138
    public boolean checkIgnoreMapper(IDbImportMapper mapper, ResultSet rs) throws SQLException{
139
		boolean result = false;
140
		if (mapper instanceof DbImportTaxIncludedInMapper){
141
			//old
142
//			int tu_status = rs.getInt("tu_status");
143
//			if (tu_status != 1){
144
//				result = true;
145
//			}
146

    
147
			int id = rs.getInt("id");
148
			if (state.getAcceptedTaxaKeys().contains(id)){
149
				return false;
150
			}else{
151
				return true;
152
			}
153
		}else if (mapper instanceof DbImportSynonymMapper){
154
			//old
155
//			int tu_status = rs.getInt("tu_status");
156
//			if (tu_status == 1){
157
//				result = true;
158
//			}else{
159
//				return false;
160
//			}t.tu_acctaxon <> t.id
161

    
162
			int id = rs.getInt("id");
163
			Object accTaxonId = rs.getObject("tu_acctaxon");
164
			if (accTaxonId == null){
165
				return true;
166
			}else{
167
				int accId = Integer.valueOf(String.valueOf(accTaxonId));
168
				return accId == id;
169
			}
170
		}else if (mapper instanceof DbImportNameTypeDesignationMapper){
171
			Object tu_typeTaxon = rs.getObject("tu_typetaxon");
172
			if (tu_typeTaxon == null){
173
				return true;
174
			}
175
		}
176
		return result;
177
	}
178

    
179

    
180
	@Override
181
	protected boolean doCheck(ErmsImportState state){
182
//		IOValidator<ErmsImportState> validator = new ErmsTaxonImportValidator();
183
//		return validator.validate(state);
184
		return true;
185
	}
186

    
187
	@Override
188
	protected boolean isIgnore(ErmsImportState state){
189
		return ! state.getConfig().isDoRelTaxa();
190
	}
191
}
(14-14/17)