1
2
3
4
5
6
7
8
9
10
11 package eu.etaxonomy.cdm.io.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.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
32
33
34
35
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 mapping;
43
44 private int modCount = 10000;
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 public ErmsTaxonRelationImport(){
51 super(pluralString, dbTableName, cdmTargetClass);
52 }
53
54
55
56
57 protected DbImportMapping getMapping() {
58 if (mapping == null){
59 mapping = new DbImportMapping();
60
61 mapping.addMapper(DbImportTaxIncludedInMapper.NewInstance("id", TAXON_NAMESPACE, "parentId", TAXON_NAMESPACE, "accParentId", TAXON_NAMESPACE, null));
62 mapping.addMapper(DbImportSynonymMapper.NewInstance("id", "tu_acctaxon", TAXON_NAMESPACE, null));
63 mapping.addMapper(DbImportNameTypeDesignationMapper.NewInstance("id", "tu_typetaxon", ErmsTaxonImport.NAME_NAMESPACE, "tu_typedesignationstatus"));
64
65 }
66 return mapping;
67 }
68
69
70
71
72 protected String getRecordQuery(ErmsImportConfigurator config) {
73
74 String selectAttributes = " myTaxon.id, myTaxon.tu_parent, myTaxon.tu_typetaxon, myTaxon.tu_typedesignation, " +
75 " myTaxon.tu_acctaxon, myTaxon.tu_status, parent.tu_status AS parentStatus, parent.id AS parentId, " +
76 " accParent.tu_status AS accParentStatus, accParent.id AS accParentId ";
77 String strRecordQuery =
78 " SELECT " + selectAttributes +
79 " FROM tu AS myTaxon LEFT OUTER JOIN " +
80 " tu AS accTaxon ON myTaxon.tu_acctaxon = accTaxon.id LEFT OUTER JOIN " +
81 " tu AS accParent RIGHT OUTER JOIN " +
82 " tu AS parent ON accParent.id = parent.tu_acctaxon ON myTaxon.tu_parent = parent.id " +
83 " WHERE ( myTaxon.id IN (" + ID_LIST_TOKEN + ") )";
84 return strRecordQuery;
85 }
86
87
88
89
90 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
91 String nameSpace;
92 Class cdmClass;
93 Set<String> idSet;
94 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
95
96 try{
97 Set<String> taxonIdSet = new HashSet<String>();
98 Set<String> nameIdSet = new HashSet<String>();
99 while (rs.next()){
100 handleForeignKey(rs, taxonIdSet, "parentId");
101 handleForeignKey(rs, taxonIdSet, "accParentId");
102 handleForeignKey(rs, taxonIdSet, "tu_acctaxon");
103 handleForeignKey(rs, taxonIdSet, "id");
104 handleForeignKey(rs, nameIdSet, "tu_typetaxon");
105 handleForeignKey(rs, nameIdSet, "id");
106 }
107
108
109 nameSpace = ErmsTaxonImport.NAME_NAMESPACE;
110 cdmClass = TaxonNameBase.class;
111 idSet = nameIdSet;
112 Map<String, TaxonNameBase> nameMap = (Map<String, TaxonNameBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
113 result.put(nameSpace, nameMap);
114
115
116
117 nameSpace = ErmsTaxonImport.TAXON_NAMESPACE;
118 cdmClass = TaxonBase.class;
119 idSet = taxonIdSet;
120 Map<String, TaxonBase> taxonMap = (Map<String, TaxonBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
121 result.put(nameSpace, taxonMap);
122
123 } catch (SQLException e) {
124 throw new RuntimeException(e);
125 }
126 return result;
127 }
128
129
130
131
132
133 public boolean checkIgnoreMapper(IDbImportMapper mapper, ResultSet rs) throws SQLException{
134 boolean result = false;
135 if (mapper instanceof DbImportTaxIncludedInMapper){
136 int tu_status = rs.getInt("tu_status");
137 if (tu_status != 1){
138 result = true;
139 }
140 }else if (mapper instanceof DbImportSynonymMapper){
141 int tu_status = rs.getInt("tu_status");
142 if (tu_status == 1){
143 result = true;
144 }else{
145 return false;
146 }
147 }else if (mapper instanceof DbImportNameTypeDesignationMapper){
148 Object tu_typeTaxon = rs.getObject("tu_typetaxon");
149 if (tu_typeTaxon == null){
150 return true;
151 }
152 }
153 return result;
154 }
155
156
157
158
159 public TaxonBase createObject(ResultSet rs, ErmsImportState state) throws SQLException {
160
161 return null;
162 }
163
164
165
166
167
168 @Override
169 protected boolean doCheck(ErmsImportState state){
170
171
172 return true;
173 }
174
175
176
177
178
179 protected boolean isIgnore(ErmsImportState state){
180 return ! state.getConfig().isDoRelTaxa();
181 }
182
183
184
185 }