00d4fe7c7c4c82a0fec9af9abdababb1a34465fc
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / mexico / MexicoEfloraDistributionRefImport.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.List;
16 import java.util.Map;
17 import java.util.Set;
18 import java.util.UUID;
19
20 import org.apache.log4j.Logger;
21 import org.springframework.stereotype.Component;
22
23 import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
24 import eu.etaxonomy.cdm.model.common.CdmBase;
25 import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
26 import eu.etaxonomy.cdm.model.description.Distribution;
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 MexicoEfloraDistributionRefImport extends MexicoEfloraImportBase {
36
37 private static final long serialVersionUID = -3358763003286536675L;
38 private static final Logger logger = Logger.getLogger(MexicoEfloraDistributionRefImport.class);
39
40 protected static final String NAMESPACE = "DistributionRef";
41
42 private static final String pluralString = "distribution sources";
43 private static final String dbTableName = "Eflora_RelRegionBibliografia";
44
45 public MexicoEfloraDistributionRefImport(){
46 super(dbTableName, pluralString);
47 }
48
49 @Override
50 protected String getIdQuery(MexicoEfloraImportState state) {
51 String sql = " SELECT IdDist "
52 + " FROM " + dbTableName
53 + " ORDER BY IdDist ";
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 ( IdDist 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, Distribution> distributionMap = partitioner.getObjectMap(MexicoEfloraDistributionImport.NAMESPACE);
74
75 @SuppressWarnings("unchecked")
76 Map<String, Reference> referenceMap = partitioner.getObjectMap(MexicoEfloraReferenceImportBase.NAMESPACE);
77
78 ResultSet rs = partitioner.getResultSet();
79 try{
80 while (rs.next()){
81
82 // if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("PTaxa handled: " + (i-1));}
83
84 //create TaxonName element
85 String idCombi = rs.getString("IdDist");
86 int idBibliografia = rs.getInt("IdBibliografia");
87 String observaciones = rs.getString("Observaciones");
88
89 try {
90 Distribution distribution = distributionMap.get(idCombi);
91 if (distribution == null) {
92 logger.warn("Distribution not found for " + idCombi);
93 continue;
94 }
95 Reference ref = referenceMap.get(String.valueOf(idBibliografia));
96 String detail = state.getRefDetailMap().get(idBibliografia);
97
98
99 DescriptionElementSource source = distribution.addPrimaryTaxonomicSource(ref, detail);
100 //TODO nameUsedInSource for distribution
101 if (source!= null) {
102 TaxonName nameUsedInSource = getNameUsedInSource(state, observaciones);
103 source.setNameUsedInSource(nameUsedInSource);
104 //TODO other observaciones
105 } else {
106 logger.warn("Source not found for " + idCombi + " and bibID: " + idBibliografia);
107 }
108
109 partitioner.startDoSave();
110 // taxaToSave.add(taxonBase);
111 } catch (Exception e) {
112 e.printStackTrace();
113 logger.warn("An exception (" +e.getMessage()+") occurred when trying to create common name for id " + idCombi + ".");
114 success = false;
115 }
116 }
117 } catch (Exception e) {
118 logger.error("SQLException:" + e);
119 return false;
120 }
121
122 logger.warn("Partition finished");
123 return success;
124 }
125
126 private TaxonName getNameUsedInSource(MexicoEfloraImportState state, String observaciones) {
127 // TODO Auto-generated method stub
128 return null;
129 }
130
131 @Override
132 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, MexicoEfloraImportState state) {
133
134 String nameSpace;
135 Set<String> idSet;
136 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
137
138 try{
139 Set<String> distributionIdSet = new HashSet<>();
140 Set<String> referenceIdSet = new HashSet<>();
141 while (rs.next()){
142 handleForeignKey(rs, referenceIdSet, "IdBibliografia");
143 handleForeignKey(rs,distributionIdSet, "IdDist");
144 }
145
146 //distribution map
147 nameSpace = MexicoEfloraDistributionImport.NAMESPACE;
148 Map<UUID,String> uuidMap = new HashMap<>();
149 distributionIdSet.stream().forEach(dId->uuidMap.put(state.getDistributionMap().get(dId),dId));
150 @SuppressWarnings({ "rawtypes", "unchecked" })
151 List<Distribution> distributions = (List)getDescriptionElementService().find(uuidMap.keySet());
152 Map<String, Distribution> distributionMap = new HashMap<>();
153 distributions.stream().forEach(d->distributionMap.put(uuidMap.get(d.getUuid()), d));
154 result.put(nameSpace, distributionMap);
155
156 //reference map
157 nameSpace = MexicoEfloraReferenceImportBase.NAMESPACE;
158 idSet = referenceIdSet;
159 Map<String, Reference> referenceMap = getCommonService().getSourcedObjectsByIdInSourceC(Reference.class, idSet, nameSpace);
160 result.put(nameSpace, referenceMap);
161
162 } catch (SQLException e) {
163 throw new RuntimeException(e);
164 }
165 return result;
166 }
167
168 @Override
169 protected String getTableName() {
170 return dbTableName;
171 }
172
173 @Override
174 public String getPluralString() {
175 return pluralString;
176 }
177
178 @Override
179 protected boolean doCheck(MexicoEfloraImportState state){
180 return true;
181 }
182
183 @Override
184 protected boolean isIgnore(MexicoEfloraImportState state){
185 return ! state.getConfig().isDoTaxa();
186 }
187 }