ref #9932 implement reference import (1st version) for Mexico Eflora import
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / mexico / MexicoEfloraCommonNameRefImport.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 package eu.etaxonomy.cdm.io.mexico;
10
11 import java.sql.ResultSet;
12 import java.sql.SQLException;
13 import java.util.HashMap;
14 import java.util.HashSet;
15 import java.util.Map;
16 import java.util.Set;
17
18 import org.apache.log4j.Logger;
19 import org.springframework.stereotype.Component;
20
21 import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelReferenceImport;
22 import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelTaxonNameImport;
23 import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
24 import eu.etaxonomy.cdm.model.common.CdmBase;
25 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
26 import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
27 import eu.etaxonomy.cdm.model.name.TaxonName;
28 import eu.etaxonomy.cdm.model.reference.Reference;
29
30 /**
31 * @author a.mueller
32 * @since 08.02.2022
33 */
34 @Component
35 public class MexicoEfloraCommonNameRefImport extends MexicoEfloraImportBase {
36
37 private static final long serialVersionUID = -1712022169834400067L;
38 private static final Logger logger = Logger.getLogger(MexicoEfloraCommonNameRefImport.class);
39
40 protected static final String NAMESPACE = "CommonNameRef";
41
42 private static final String pluralString = "common name sources";
43 private static final String dbTableName = "Eflora_RelBiblioNomComun";
44
45 public MexicoEfloraCommonNameRefImport(){
46 super(dbTableName, pluralString);
47 }
48
49 @Override
50 protected String getIdQuery(MexicoEfloraImportState state) {
51 String sql = " SELECT IdCombinado "
52 + " FROM " + dbTableName
53 + " ORDER BY IdCombinado ";
54 return sql;
55 }
56
57 @Override
58 protected String getRecordQuery(MexicoEfloraImportConfigurator config) {
59 String sqlSelect = " SELECT * ";
60 String sqlFrom = " FROM " + dbTableName;
61 String sqlWhere = " WHERE ( IdCombinado IN (" + ID_LIST_TOKEN + ") )";
62
63 String strRecordQuery =sqlSelect + " " + sqlFrom + " " + sqlWhere ;
64 return strRecordQuery;
65 }
66
67 @Override
68 public boolean doPartition(@SuppressWarnings("rawtypes") ResultSetPartitioner partitioner, MexicoEfloraImportState state) {
69
70 boolean success = true ;
71
72 @SuppressWarnings("unchecked")
73 Map<String, CommonTaxonName> commonNameMap = partitioner.getObjectMap(MexicoEfloraCommonNameImport.NAMESPACE);
74
75 @SuppressWarnings("unchecked")
76 //TODO
77 Map<String, Reference> referenceMap = partitioner.getObjectMap(MexicoEfloraRefArticlesImport.NAMESPACE);
78
79 ResultSet rs = partitioner.getResultSet();
80 try{
81 while (rs.next()){
82
83 // if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("PTaxa handled: " + (i-1));}
84
85 //create TaxonName element
86 String idCombi = rs.getString("IdCombinado");
87 int idBibliografia = rs.getInt("IdBibliografia");
88 String observaciones = rs.getString("Observaciones");
89 //needed?
90 // String idNomComun = rs.getString("IdNomComun");
91
92 try {
93 CommonTaxonName commonName = commonNameMap.get(idCombi);
94
95 Reference ref = referenceMap.get(String.valueOf(idBibliografia));
96 String detail = state.getRefDetailMap().get(idBibliografia);
97
98 DescriptionElementSource source = commonName.addPrimaryTaxonomicSource(ref, detail);
99 //TODO
100 TaxonName nameUsedInSource = getNameUsedInSource(state, observaciones);
101 source.setNameUsedInSource(nameUsedInSource);
102 //TODO other observaciones
103
104 partitioner.startDoSave();
105 } catch (Exception e) {
106 logger.warn("An exception (" +e.getMessage()+") occurred when trying to create common name for id " + idCombi + ".");
107 success = false;
108 }
109 }
110 } catch (Exception e) {
111 logger.error("SQLException:" + e);
112 return false;
113 }
114
115 logger.warn("Finished partition");
116
117 return success;
118 }
119
120 private TaxonName getNameUsedInSource(MexicoEfloraImportState state, String observaciones) {
121 // TODO Auto-generated method stub
122 return null;
123 }
124
125 @Override
126 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, MexicoEfloraImportState state) {
127
128 String nameSpace;
129 Set<String> idSet;
130 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
131
132 try{
133 Set<String> nameIdSet = new HashSet<>();
134 Set<String> referenceIdSet = new HashSet<>();
135 while (rs.next()){
136 // handleForeignKey(rs, nameIdSet, "PTNameFk");
137 // handleForeignKey(rs, referenceIdSet, "PTRefFk");
138 }
139
140 //name map
141 nameSpace = BerlinModelTaxonNameImport.NAMESPACE;
142 idSet = nameIdSet;
143 Map<String, TaxonName> nameMap = getCommonService().getSourcedObjectsByIdInSourceC(TaxonName.class, idSet, nameSpace);
144 result.put(nameSpace, nameMap);
145
146 //reference map
147 nameSpace = BerlinModelReferenceImport.REFERENCE_NAMESPACE;
148 idSet = referenceIdSet;
149 Map<String, Reference> referenceMap = getCommonService().getSourcedObjectsByIdInSourceC(Reference.class, idSet, nameSpace);
150 result.put(nameSpace, referenceMap);
151
152 } catch (SQLException e) {
153 throw new RuntimeException(e);
154 }
155 return result;
156 }
157
158 @Override
159 protected String getTableName() {
160 return dbTableName;
161 }
162
163 @Override
164 public String getPluralString() {
165 return pluralString;
166 }
167
168 @Override
169 protected boolean doCheck(MexicoEfloraImportState state){
170 return true;
171 }
172
173 @Override
174 protected boolean isIgnore(MexicoEfloraImportState state){
175 return ! state.getConfig().isDoTaxa();
176 }
177 }