Revision 252dab9b
Added by Andreas Müller over 8 years ago
app-import/src/main/java/eu/etaxonomy/cdm/io/edaphobase/EdaphobaseTaxonImport.java | ||
---|---|---|
10 | 10 |
package eu.etaxonomy.cdm.io.edaphobase; |
11 | 11 |
|
12 | 12 |
import java.sql.ResultSet; |
13 |
import java.sql.SQLException; |
|
14 |
import java.util.HashMap; |
|
15 |
import java.util.HashSet; |
|
16 |
import java.util.List; |
|
13 | 17 |
import java.util.Map; |
18 |
import java.util.Set; |
|
19 |
import java.util.UUID; |
|
14 | 20 |
|
15 | 21 |
import org.apache.log4j.Logger; |
22 |
import org.codehaus.plexus.util.StringUtils; |
|
16 | 23 |
import org.springframework.stereotype.Component; |
17 | 24 |
|
25 |
import eu.etaxonomy.cdm.io.common.IPartitionedIO; |
|
26 |
import eu.etaxonomy.cdm.io.common.ImportHelper; |
|
18 | 27 |
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner; |
28 |
import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException; |
|
29 |
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase; |
|
19 | 30 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
31 |
import eu.etaxonomy.cdm.model.name.Rank; |
|
32 |
import eu.etaxonomy.cdm.model.name.ZoologicalName; |
|
33 |
import eu.etaxonomy.cdm.model.reference.Reference; |
|
34 |
import eu.etaxonomy.cdm.model.taxon.Synonym; |
|
35 |
import eu.etaxonomy.cdm.model.taxon.Taxon; |
|
36 |
import eu.etaxonomy.cdm.model.taxon.TaxonBase; |
|
20 | 37 |
|
21 | 38 |
/** |
22 | 39 |
* @author a.mueller |
... | ... | |
25 | 42 |
*/ |
26 | 43 |
@Component |
27 | 44 |
public class EdaphobaseTaxonImport extends EdaphobaseImportBase { |
28 |
|
|
29 |
@SuppressWarnings("unused") |
|
45 |
private static final long serialVersionUID = -9138378836474086070L; |
|
30 | 46 |
private static final Logger logger = Logger.getLogger(EdaphobaseTaxonImport.class); |
31 | 47 |
|
32 | 48 |
private static final String tableName = "tax_taxon"; |
33 | 49 |
|
34 | 50 |
private static final String pluralString = "taxa"; |
35 | 51 |
|
52 |
private static final Object AUTHOR_NAMESPACE = "tax_author_name"; |
|
53 |
|
|
36 | 54 |
/** |
37 | 55 |
* @param tableName |
38 | 56 |
* @param pluralString |
... | ... | |
41 | 59 |
super(tableName, pluralString); |
42 | 60 |
} |
43 | 61 |
|
62 |
@Override |
|
63 |
protected String getIdQuery(EdaphobaseImportState state) { |
|
64 |
return "SELECT DISTINCT taxon_id FROM tax_taxon t " |
|
65 |
+ " ORDER BY taxon_id"; |
|
66 |
} |
|
67 |
|
|
68 |
@Override |
|
69 |
protected String getRecordQuery(EdaphobaseImportConfigurator config) { |
|
70 |
String result = " SELECT DISTINCT t.*, r.value as rankStr, pr.value as parentRankStr, ppr.value as grandParentRankStr, " |
|
71 |
+ " pt.name as parentName, ppt.name as grandParentName " |
|
72 |
+ " FROM tax_taxon t " |
|
73 |
+ " LEFT JOIN tax_taxon pt ON t.parent_taxon_fk = pt.taxon_id " |
|
74 |
+ " LEFT JOIN tax_taxon ppt ON pt.parent_taxon_fk = ppt.taxon_id" |
|
75 |
+ " LEFT OUTER JOIN tax_rank_en r ON r.element_id = t.tax_rank_fk " |
|
76 |
+ " LEFT OUTER JOIN tax_rank_en pr ON pr.element_id = pt.tax_rank_fk " |
|
77 |
+ " LEFT OUTER JOIN tax_rank_en ppr ON pr.element_id = ppt.tax_rank_fk " |
|
78 |
+ " WHERE t.taxon_id IN (@IDSET)"; |
|
79 |
result = result.replace("@IDSET", IPartitionedIO.ID_LIST_TOKEN); |
|
80 |
return result; |
|
81 |
} |
|
82 |
|
|
83 |
@Override |
|
84 |
protected void doInvoke(EdaphobaseImportState state) { |
|
85 |
super.doInvoke(state); |
|
86 |
} |
|
87 |
|
|
88 |
|
|
44 | 89 |
@Override |
45 | 90 |
public boolean doPartition(ResultSetPartitioner partitioner, EdaphobaseImportState state) { |
46 |
// TODO Auto-generated method stub |
|
47 |
return false; |
|
91 |
ResultSet rs = partitioner.getResultSet(); |
|
92 |
Set<TaxonBase> taxaToSave = new HashSet<>(); |
|
93 |
try { |
|
94 |
while (rs.next()){ |
|
95 |
Integer id = nullSafeInt(rs, "taxon_id"); |
|
96 |
Integer year = nullSafeInt(rs, "tax_year"); |
|
97 |
boolean isBrackets = rs.getBoolean("tax_brackets"); |
|
98 |
String remark = rs.getString("remark"); |
|
99 |
String nameStr = rs.getString("name"); |
|
100 |
String authorName = rs.getString("tax_author_name"); |
|
101 |
//parentTaxonFk |
|
102 |
//rankFk |
|
103 |
//document |
|
104 |
boolean isValid = rs.getBoolean("valid"); |
|
105 |
boolean idDeleted = rs.getBoolean("deleted"); |
|
106 |
String displayString = rs.getString("display_string"); |
|
107 |
Integer version = nullSafeInt(rs, "versionfield"); |
|
108 |
String pages = rs.getString("pages"); |
|
109 |
String treeIndex = rs.getString("path_to_root"); |
|
110 |
// Integer rankFk = nullSafeInt(rs, "tax_rank_fk"); |
|
111 |
String nameAddition = rs.getString("name_addition"); |
|
112 |
String officialRemark = rs.getString("official_remark"); |
|
113 |
boolean isGroup = rs.getBoolean("taxonomic_group"); |
|
114 |
String rankStr = rs.getString("rankStr"); |
|
115 |
String parentRankStr = rs.getString("parentRankStr"); |
|
116 |
String grandParentRankStr = rs.getString("grandParentRankStr"); |
|
117 |
String parentNameStr = rs.getString("parentName"); |
|
118 |
String grandParentNameStr = rs.getString("grandParentName"); |
|
119 |
|
|
120 |
|
|
121 |
TaxonBase<?> taxonBase; |
|
122 |
Reference<?> sec = null; //TODO |
|
123 |
|
|
124 |
//Name etc. |
|
125 |
Rank rank = makeRank(state, rankStr); |
|
126 |
ZoologicalName name = ZoologicalName.NewInstance(rank); |
|
127 |
setNamePart(nameStr, rank, name); |
|
128 |
Rank parentRank = makeRank(state, parentRankStr); |
|
129 |
setNamePart(parentNameStr, parentRank, name); |
|
130 |
Rank parentParentRank = makeRank(state, grandParentRankStr); |
|
131 |
setNamePart(grandParentNameStr, parentParentRank, name); |
|
132 |
|
|
133 |
//Authors |
|
134 |
if (StringUtils.isNotBlank(authorName)){ |
|
135 |
TeamOrPersonBase<?> author = state.getRelatedObject(AUTHOR_NAMESPACE, authorName, TeamOrPersonBase.class); |
|
136 |
if (author == null){ |
|
137 |
logger.warn("Author not found in state: " + authorName); |
|
138 |
}else{ |
|
139 |
if (isBrackets){ |
|
140 |
name.setBasionymAuthorship(author); |
|
141 |
name.setOriginalPublicationYear(year); |
|
142 |
}else{ |
|
143 |
name.setCombinationAuthorship(author); |
|
144 |
name.setPublicationYear(year); |
|
145 |
} |
|
146 |
} |
|
147 |
} |
|
148 |
|
|
149 |
|
|
150 |
if (isValid){ |
|
151 |
taxonBase = Taxon.NewInstance(name, sec); |
|
152 |
}else{ |
|
153 |
taxonBase = Synonym.NewInstance(name, sec); |
|
154 |
} |
|
155 |
taxaToSave.add(taxonBase); |
|
156 |
|
|
157 |
//remarks |
|
158 |
doNotes(taxonBase, remark); |
|
159 |
|
|
160 |
//id |
|
161 |
ImportHelper.setOriginalSource(taxonBase, state.getTransactionalSourceReference(), id, TAXON_NAMESPACE); |
|
162 |
ImportHelper.setOriginalSource(name, state.getTransactionalSourceReference(), id, TAXON_NAMESPACE); |
|
163 |
|
|
164 |
} |
|
165 |
} catch (SQLException e) { |
|
166 |
// TODO Auto-generated catch block |
|
167 |
e.printStackTrace(); |
|
168 |
} |
|
169 |
|
|
170 |
getTaxonService().saveOrUpdate(taxaToSave); |
|
171 |
return true; |
|
48 | 172 |
} |
49 | 173 |
|
50 |
/* (non-Javadoc) |
|
51 |
* @see eu.etaxonomy.cdm.io.common.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet, eu.etaxonomy.cdm.io.common.IPartitionedState) |
|
52 |
*/ |
|
174 |
|
|
53 | 175 |
@Override |
54 | 176 |
public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, |
55 | 177 |
EdaphobaseImportState state) { |
56 |
// TODO Auto-generated method stub |
|
57 |
return null; |
|
178 |
Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>(); |
|
179 |
Map<String, TeamOrPersonBase<?>> authorMap = new HashMap<>(); |
|
180 |
Set<String> authorSet = new HashSet<>(); |
|
181 |
try { |
|
182 |
while (rs.next()){ |
|
183 |
String authorStr = rs.getString("tax_author_name"); |
|
184 |
authorSet.add(authorStr); |
|
185 |
} |
|
186 |
} catch (SQLException e) { |
|
187 |
e.printStackTrace(); |
|
188 |
} |
|
189 |
|
|
190 |
//Authors |
|
191 |
Set<UUID> uuidSet = new HashSet<>(); |
|
192 |
for (String authorStr : authorSet){ |
|
193 |
UUID uuid = state.getAuthorUuid(authorStr); |
|
194 |
uuidSet.add(uuid); |
|
195 |
} |
|
196 |
List<TeamOrPersonBase<?>> authors = (List)getAgentService().find(uuidSet); |
|
197 |
Map<UUID, TeamOrPersonBase<?>> authorUuidMap = new HashMap<>(); |
|
198 |
for (TeamOrPersonBase<?> author : authors){ |
|
199 |
authorUuidMap.put(author.getUuid(), author); |
|
200 |
} |
|
201 |
|
|
202 |
for (String authorStr : authorSet){ |
|
203 |
UUID uuid = state.getAuthorUuid(authorStr); |
|
204 |
TeamOrPersonBase<?> author = authorUuidMap.get(uuid); |
|
205 |
authorMap.put(authorStr, author); |
|
206 |
} |
|
207 |
result.put(AUTHOR_NAMESPACE, authorMap); |
|
208 |
|
|
209 |
return result; |
|
58 | 210 |
} |
59 | 211 |
|
60 |
@Override |
|
61 |
protected String getRecordQuery(EdaphobaseImportConfigurator config) { |
|
62 |
// TODO Auto-generated method stub |
|
63 |
return null; |
|
212 |
private void setNamePart(String nameStr, Rank rank, ZoologicalName name) { |
|
213 |
if (rank != null){ |
|
214 |
if (rank.isSupraGeneric() || rank.isGenus()){ |
|
215 |
if (StringUtils.isBlank(name.getGenusOrUninomial())){ |
|
216 |
name.setGenusOrUninomial(nameStr); |
|
217 |
} |
|
218 |
}else if (rank.isInfraGeneric()){ |
|
219 |
if (StringUtils.isBlank(name.getInfraGenericEpithet())){ |
|
220 |
name.setInfraGenericEpithet(nameStr); |
|
221 |
} |
|
222 |
}else if (rank.isSpeciesAggregate() || rank.isSpecies()){ |
|
223 |
if (StringUtils.isBlank(name.getSpecificEpithet())){ |
|
224 |
name.setSpecificEpithet(nameStr); |
|
225 |
} |
|
226 |
}else if (rank.isInfraSpecific()){ |
|
227 |
if (StringUtils.isBlank(name.getInfraSpecificEpithet())){ |
|
228 |
name.setInfraSpecificEpithet(nameStr); |
|
229 |
} |
|
230 |
} |
|
231 |
} |
|
64 | 232 |
} |
65 | 233 |
|
66 |
@Override |
|
67 |
protected String getIdQuery(EdaphobaseImportState state) { |
|
68 |
// TODO Auto-generated method stub |
|
69 |
return null; |
|
234 |
private Rank makeRank(EdaphobaseImportState state, String rankStr) { |
|
235 |
Rank rank = null; |
|
236 |
try { |
|
237 |
rank = state.getTransformer().getRankByKey(rankStr); |
|
238 |
} catch (UndefinedTransformerMethodException e) { |
|
239 |
e.printStackTrace(); |
|
240 |
} |
|
241 |
return rank; |
|
70 | 242 |
} |
71 | 243 |
|
72 | 244 |
@Override |
Also available in: Unified diff
Latest changes for Edaphobase import