2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.io
.faunaEuropaea
;
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
;
19 import java
.util
.UUID
;
21 import org
.apache
.log4j
.Logger
;
22 import org
.springframework
.stereotype
.Component
;
23 import org
.springframework
.transaction
.TransactionStatus
;
25 import eu
.etaxonomy
.cdm
.io
.common
.Source
;
26 import eu
.etaxonomy
.cdm
.model
.description
.Distribution
;
27 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
28 import eu
.etaxonomy
.cdm
.model
.description
.PresenceAbsenceTermBase
;
29 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
30 import eu
.etaxonomy
.cdm
.model
.location
.NamedArea
;
31 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
32 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
36 * @author a.babadshanjan
41 public class FaunaEuropaeaDistributionImport
extends FaunaEuropaeaImportBase
{
42 private static final Logger logger
= Logger
.getLogger(FaunaEuropaeaDistributionImport
.class);
46 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
49 protected boolean doCheck(FaunaEuropaeaImportState state
) {
50 boolean result
= true;
51 FaunaEuropaeaImportConfigurator fauEuConfig
= state
.getConfig();
52 logger
.warn("Checking for Distributions not yet fully implemented");
53 result
&= checkReferenceStatus(fauEuConfig
);
58 private boolean checkReferenceStatus(FaunaEuropaeaImportConfigurator fauEuConfig
) {
59 boolean result
= true;
61 Source source
= fauEuConfig
.getSource();
63 // ResultSet rs = source.getResultSet(sqlStr);
65 // } catch (SQLException e) {
66 // e.printStackTrace();
72 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doInvoke(eu.etaxonomy.cdm.io.common.IImportConfigurator, eu.etaxonomy.cdm.api.application.CdmApplicationController, java.util.Map)
75 protected boolean doInvoke(FaunaEuropaeaImportState state
) {
77 int limit
= state
.getConfig().getLimitSave();
79 /* Taxon store for retrieving taxa from and saving taxa to CDM */
80 List
<TaxonBase
> taxonList
= null;
81 /* UUID store as input for retrieving taxa from CDM */
82 Set
<UUID
> taxonUuids
= null;
83 /* Store to hold helper objects */
84 Map
<UUID
, FaunaEuropaeaDistributionTaxon
> fauEuTaxonMap
= null;
86 // Map<UUID, TaxonBase<?>> taxonMap = null;
87 // Set<TaxonBase<?>> taxonSet = null;
89 TransactionStatus txStatus
= null;
91 FaunaEuropaeaImportConfigurator fauEuConfig
= state
.getConfig();
92 Source source
= fauEuConfig
.getSource();
94 String namespace
= "Distribution";
95 boolean success
= true;
98 //make not needed maps empty
99 // Map<String, MapWrapper<? extends CdmBase>> stores = state.getStores();
100 // MapWrapper<TeamOrPersonBase<?>> authorStore = (MapWrapper<TeamOrPersonBase<?>>)stores.get(ICdmIO.TEAM_STORE);
101 // authorStore.makeEmpty();
103 if(logger
.isInfoEnabled()) { logger
.info("Start making distributions..."); }
107 " SELECT distribution.*, Area.*, Taxon.UUID " +
108 " FROM distribution INNER JOIN " +
109 " Area ON distribution.dis_ara_id = Area.ara_id INNER JOIN " +
110 " Taxon ON distribution.dis_tax_id = Taxon.TAX_ID ";
112 ResultSet rs
= source
.getResultSet(strQuery
) ;
117 if ((i
++ % limit
) == 0) {
119 txStatus
= startTransaction();
120 taxonUuids
= new HashSet
<UUID
>(limit
);
121 fauEuTaxonMap
= new HashMap
<UUID
, FaunaEuropaeaDistributionTaxon
>(limit
);
122 // taxonSet = new HashSet<TaxonBase<?>>(limit);
124 if(logger
.isInfoEnabled()) {
125 logger
.info("i = " + i
+ " - Distribution import transaction started");
129 int taxonId
= rs
.getInt("dis_tax_id");
130 int disId
= rs
.getInt("dis_id");
131 int occStatusId
= rs
.getInt("dis_present");
132 int areaId
= rs
.getInt("ara_id");
133 String areaName
= rs
.getString("ara_name");
134 String areaCode
= rs
.getString("ara_code");
135 int extraLimital
= rs
.getInt("ara_extralimital");
136 UUID currentTaxonUuid
= null;
137 if (resultSetHasColumn(rs
,"UUID")){
138 currentTaxonUuid
= UUID
.fromString(rs
.getString("UUID"));
140 currentTaxonUuid
= UUID
.randomUUID();
143 FaunaEuropaeaDistribution fauEuDistribution
= new FaunaEuropaeaDistribution();
144 // fauEuDistribution.setTaxonUuid(currentTaxonUuid);
145 // fauEuDistribution.setTaxonId(taxonId);
146 fauEuDistribution
.setDistributionId(disId
);
147 fauEuDistribution
.setOccurrenceStatusId(occStatusId
);
148 fauEuDistribution
.setAreaId(areaId
);
149 fauEuDistribution
.setAreaName(areaName
);
150 fauEuDistribution
.setAreaCode(areaCode
);
151 fauEuDistribution
.setExtraLimital(extraLimital
);
153 if (!taxonUuids
.contains(currentTaxonUuid
)) {
154 taxonUuids
.add(currentTaxonUuid
);
155 FaunaEuropaeaDistributionTaxon fauEuDistributionTaxon
=
156 new FaunaEuropaeaDistributionTaxon(currentTaxonUuid
);
157 fauEuTaxonMap
.put(currentTaxonUuid
, fauEuDistributionTaxon
);
159 if (logger
.isTraceEnabled()) {
160 logger
.trace("Taxon (" + currentTaxonUuid
+ ") already stored.");
165 fauEuTaxonMap
.get(currentTaxonUuid
).addDistribution(fauEuDistribution
);
167 if ((i
% limit
) == 0 && i
!= 1 ) {
171 taxonList
= getTaxonService().findByUuid(taxonUuids
);
173 for (TaxonBase taxonBase
: taxonList
) {
175 if (taxonBase
!= null) {
177 if (taxonBase
instanceof Taxon
) {
178 taxon
= taxonBase
.deproxy(taxonBase
, Taxon
.class);
180 logger
.warn("TaxonBase (" + taxonId
+ " is not of type Taxon but: "
181 + taxonBase
.getClass().getSimpleName());
185 TaxonDescription taxonDescription
;
186 Set
<TaxonDescription
> descriptionSet
= taxon
.getDescriptions();
187 if (descriptionSet
.size() > 0) {
188 taxonDescription
= descriptionSet
.iterator().next();
190 taxonDescription
= TaxonDescription
.NewInstance();
191 taxon
.addDescription(taxonDescription
);
194 UUID taxonUuid
= taxonBase
.getUuid();
195 FaunaEuropaeaDistributionTaxon fauEuHelperTaxon
= fauEuTaxonMap
.get(taxonUuid
);
197 for (FaunaEuropaeaDistribution fauEuHelperDistribution
: fauEuHelperTaxon
.getDistributions()) {
199 PresenceAbsenceTermBase
<?
> presenceAbsenceStatus
200 = FaunaEuropaeaTransformer
.occStatus2PresenceAbsence(fauEuHelperDistribution
.getOccurrenceStatusId());
201 NamedArea namedArea
=
202 FaunaEuropaeaTransformer
.areaId2TdwgArea(fauEuHelperDistribution
);
204 Distribution newDistribution
= Distribution
.NewInstance(namedArea
, presenceAbsenceStatus
);
205 newDistribution
.setType(Feature
.DISTRIBUTION());
206 taxonDescription
.addElement(newDistribution
);
210 if(logger
.isInfoEnabled()) { logger
.info("Saving taxa..."); }
212 getTaxonService().saveTaxonAll(taxonList
);
216 fauEuTaxonMap
= null;
217 commitTransaction(txStatus
);
219 } catch (Exception e
) {
220 logger
.warn("An exception occurred when creating distribution with id " + disId
);
225 } catch (SQLException e
) {
226 logger
.error("SQLException:" + e
);
229 if(logger
.isInfoEnabled()) { logger
.info("End making distributions..."); }
236 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
238 protected boolean isIgnore(FaunaEuropaeaImportState state
){
239 return !state
.getConfig().isDoOccurrence();