rename cdmlib-eflora -> cdm-eflora
[cdmlib-apps.git] / cdm-eflora / src / main / java / eu / etaxonomy / cdm / io / eflora / centralAfrica / checklist / CentralAfricaChecklistSynonymImport.java
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.eflora.centralAfrica.checklist;
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.common.CdmUtils;
23 import eu.etaxonomy.cdm.io.common.IOValidator;
24 import eu.etaxonomy.cdm.io.common.mapping.DbImportMapping;
25 import eu.etaxonomy.cdm.io.common.mapping.DbImportObjectCreationMapper;
26 import eu.etaxonomy.cdm.io.common.mapping.IMappingImport;
27 import eu.etaxonomy.cdm.io.eflora.centralAfrica.checklist.validation.CentralAfricaChecklistTaxonImportValidator;
28 import eu.etaxonomy.cdm.model.common.CdmBase;
29 import eu.etaxonomy.cdm.model.name.BotanicalName;
30 import eu.etaxonomy.cdm.model.name.Rank;
31 import eu.etaxonomy.cdm.model.reference.Reference;
32 import eu.etaxonomy.cdm.model.taxon.Synonym;
33 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
34 import eu.etaxonomy.cdm.model.taxon.Taxon;
35 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
36 import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;
37
38
39 /**
40 * @author a.mueller
41 * @created 20.02.2010
42 * @version 1.0
43 */
44 @Component
45 public class CentralAfricaChecklistSynonymImport extends CentralAfricaChecklistImportBase<TaxonBase> implements IMappingImport<TaxonBase, CentralAfricaChecklistImportState>{
46 private static final Logger logger = Logger.getLogger(CentralAfricaChecklistSynonymImport.class);
47
48 private NonViralNameParserImpl parser = NonViralNameParserImpl.NewInstance();
49
50
51 private DbImportMapping mapping;
52
53 //second path is not used anymore, there is now an ErmsTaxonRelationImport class instead
54 private boolean isSecondPath = false;
55
56 private int modCount = 10000;
57 private static final String pluralString = "synonyms";
58 private static final String dbTableName = "synonyms";
59 private static final Class cdmTargetClass = TaxonBase.class;
60 private static final String strOrderBy = "";
61
62 public CentralAfricaChecklistSynonymImport(){
63 super(pluralString, dbTableName, cdmTargetClass);
64 }
65
66
67
68 /* (non-Javadoc)
69 * @see eu.etaxonomy.cdm.io.erms.ErmsImportBase#getIdQuery()
70 */
71 @Override
72 protected String getIdQuery() {
73 String strQuery = " SELECT syn_id FROM " + dbTableName + strOrderBy;
74 return strQuery;
75 }
76
77
78 /* (non-Javadoc)
79 * @see eu.etaxonomy.cdm.io.erms.ErmsImportBase#getMapping()
80 */
81 protected DbImportMapping getMapping() {
82 if (mapping == null){
83 mapping = new DbImportMapping();
84
85 mapping.addMapper(DbImportObjectCreationMapper.NewInstance(this, "syn_id", SYNONYM_NAMESPACE));
86 //TODO Synonym mapper gibts es auch
87
88 }
89 return mapping;
90 }
91
92 /* (non-Javadoc)
93 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
94 */
95 @Override
96 protected String getRecordQuery(CentralAfricaChecklistImportConfigurator config) {
97 String strSelect = " SELECT * ";
98 String strFrom = " FROM " + dbTableName;
99 String strWhere = " WHERE ( syn_id IN (" + ID_LIST_TOKEN + ") )";
100 String strRecordQuery = strSelect + strFrom + strWhere + strOrderBy;
101 return strRecordQuery;
102 }
103
104
105 /* (non-Javadoc)
106 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
107 */
108 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
109 String nameSpace;
110 Class cdmClass;
111 Set<String> idSet;
112 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
113
114 try{
115 Set<String> taxonIdSet = new HashSet<String>();
116 while (rs.next()){
117 handleForeignKey(rs, taxonIdSet, "acc_id");
118 }
119
120 //taxon map
121 nameSpace = TAXON_NAMESPACE;
122 cdmClass = Taxon.class;
123 idSet = taxonIdSet;
124 Map<String, Taxon> taxonMap = (Map<String, Taxon>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
125 result.put(nameSpace, taxonMap);
126
127 } catch (SQLException e) {
128 throw new RuntimeException(e);
129 }
130 return result;
131 }
132
133
134 /* (non-Javadoc)
135 * @see eu.etaxonomy.cdm.io.common.mapping.IMappingImport#createObject(java.sql.ResultSet)
136 */
137 public TaxonBase createObject(ResultSet rs, CentralAfricaChecklistImportState state) throws SQLException {
138 BotanicalName speciesName = BotanicalName.NewInstance(Rank.SPECIES());
139
140
141 Integer accId = rs.getInt("acc_id");
142 Taxon taxon = CdmBase.deproxy(state.getRelatedObject(TAXON_NAMESPACE, String.valueOf(accId)), Taxon.class);
143
144 Reference sec = taxon.getSec();
145
146 String genusString = rs.getString("synonym genus");
147 String speciesString = rs.getString("synonym species");
148 String authorityString = rs.getString("synonym authority");
149
150 Synonym synonym = Synonym.NewInstance(speciesName, sec);
151
152 speciesName.setGenusOrUninomial(genusString);
153 speciesName.setSpecificEpithet(speciesString);
154 parser.handleAuthors(speciesName, CdmUtils.concat(" ", new String[] {"", genusString, speciesString, authorityString}), authorityString);
155
156 if (taxon != null){
157 taxon.addSynonym(synonym, SynonymRelationshipType.SYNONYM_OF());
158 }else{
159 logger.warn("Taxon (" + accId + ") not available for Synonym " + synonym.getTitleCache());
160 }
161 return synonym;
162 }
163
164
165 /* (non-Javadoc)
166 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
167 */
168 @Override
169 protected boolean doCheck(CentralAfricaChecklistImportState state){
170 IOValidator<CentralAfricaChecklistImportState> validator = new CentralAfricaChecklistTaxonImportValidator();
171 return validator.validate(state);
172 }
173
174
175 /* (non-Javadoc)
176 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
177 */
178 protected boolean isIgnore(CentralAfricaChecklistImportState state){
179 return ! state.getConfig().isDoTaxa();
180 }
181
182
183
184 }