latest EMRS import changes
[cdmlib-apps.git] / cdm-pesi / src / main / java / eu / etaxonomy / cdm / io / pesi / erms / ErmsTaxonRelationImport.java
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
33 /**
34 * @author a.mueller
35 * @created 09.03.2010
36 * @version 1.0
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 /* (non-Javadoc)
57 * @see eu.etaxonomy.cdm.io.erms.ErmsImportBase#getMapping()
58 */
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 mapping.addMapper(DbImportSynonymMapper.NewInstance("id", "tu_acctaxon", TAXON_NAMESPACE, null, true));
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 /* (non-Javadoc)
98 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
99 */
100 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
101 String nameSpace;
102 Class<?> cdmClass;
103 Set<String> idSet;
104 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
105
106 try{
107 Set<String> taxonIdSet = new HashSet<String>();
108 Set<String> nameIdSet = new HashSet<String>();
109 while (rs.next()){
110 handleForeignKey(rs, taxonIdSet, "parentId");
111 handleForeignKey(rs, taxonIdSet, "accParentId");
112 handleForeignKey(rs, taxonIdSet, "tu_acctaxon");
113 handleForeignKey(rs, taxonIdSet, "id");
114 handleForeignKey(rs, nameIdSet, "tu_typetaxon");
115 handleForeignKey(rs, nameIdSet, "id");
116 }
117
118 //name map
119 nameSpace = ErmsTaxonImport.NAME_NAMESPACE;
120 cdmClass = TaxonNameBase.class;
121 idSet = nameIdSet;
122 Map<String, TaxonNameBase> nameMap = (Map<String, TaxonNameBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
123 result.put(nameSpace, nameMap);
124
125
126 //taxon map
127 nameSpace = ErmsTaxonImport.TAXON_NAMESPACE;
128 cdmClass = TaxonBase.class;
129 idSet = taxonIdSet;
130 Map<String, TaxonBase> taxonMap = (Map<String, TaxonBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
131 result.put(nameSpace, taxonMap);
132
133 } catch (SQLException e) {
134 throw new RuntimeException(e);
135 }
136 return result;
137 }
138
139
140 /* (non-Javadoc)
141 * @see eu.etaxonomy.cdm.io.erms.ICheckIgnoreMapper#checkIgnoreMapper(eu.etaxonomy.cdm.io.common.mapping.IDbImportMapper, java.sql.ResultSet)
142 */
143 public boolean checkIgnoreMapper(IDbImportMapper mapper, ResultSet rs) throws SQLException{
144 boolean result = false;
145 if (mapper instanceof DbImportTaxIncludedInMapper){
146 //old
147 // int tu_status = rs.getInt("tu_status");
148 // if (tu_status != 1){
149 // result = true;
150 // }
151
152 int id = rs.getInt("id");
153 if (state.getAcceptedTaxaKeys().contains(id)){
154 return false;
155 }else{
156 return true;
157 }
158 }else if (mapper instanceof DbImportSynonymMapper){
159 //old
160 // int tu_status = rs.getInt("tu_status");
161 // if (tu_status == 1){
162 // result = true;
163 // }else{
164 // return false;
165 // }t.tu_acctaxon <> t.id
166
167 int id = rs.getInt("id");
168 Object accTaxonId = rs.getObject("tu_acctaxon");
169 if (accTaxonId == null){
170 return true;
171 }else{
172 int accId = Integer.valueOf(String.valueOf(accTaxonId));
173 return accId == id;
174 }
175 }else if (mapper instanceof DbImportNameTypeDesignationMapper){
176 Object tu_typeTaxon = rs.getObject("tu_typetaxon");
177 if (tu_typeTaxon == null){
178 return true;
179 }
180 }
181 return result;
182 }
183
184 /* (non-Javadoc)
185 * @see eu.etaxonomy.cdm.io.common.mapping.IMappingImport#createObject(java.sql.ResultSet, eu.etaxonomy.cdm.io.common.ImportStateBase)
186 */
187 public TaxonBase createObject(ResultSet rs, ErmsImportState state) throws SQLException {
188 // not needed
189 return null;
190 }
191
192
193
194 /* (non-Javadoc)
195 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
196 */
197 @Override
198 protected boolean doCheck(ErmsImportState state){
199 // IOValidator<ErmsImportState> validator = new ErmsTaxonImportValidator();
200 // return validator.validate(state);
201 return true;
202 }
203
204
205 /* (non-Javadoc)
206 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
207 */
208 protected boolean isIgnore(ErmsImportState state){
209 return ! state.getConfig().isDoRelTaxa();
210 }
211
212
213
214 }