3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.ext
.geo
;
12 import java
.awt
.Color
;
13 import java
.io
.IOException
;
14 import java
.io
.Reader
;
15 import java
.util
.ArrayList
;
16 import java
.util
.HashSet
;
17 import java
.util
.List
;
20 import java
.util
.UUID
;
22 import org
.apache
.log4j
.Logger
;
23 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
24 import org
.springframework
.stereotype
.Service
;
25 import org
.springframework
.transaction
.annotation
.Transactional
;
27 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
28 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
29 import eu
.etaxonomy
.cdm
.model
.description
.Distribution
;
30 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
31 import eu
.etaxonomy
.cdm
.model
.description
.IndividualsAssociation
;
32 import eu
.etaxonomy
.cdm
.model
.description
.PresenceAbsenceTermBase
;
33 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
34 import eu
.etaxonomy
.cdm
.model
.location
.NamedArea
;
35 import eu
.etaxonomy
.cdm
.model
.location
.Point
;
36 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
37 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldUnit
;
38 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
39 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
40 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.IDefinedTermDao
;
41 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.ITermVocabularyDao
;
42 import eu
.etaxonomy
.cdm
.persistence
.dao
.description
.IDescriptionDao
;
43 import eu
.etaxonomy
.cdm
.persistence
.dao
.occurrence
.IOccurrenceDao
;
46 * @author a.kohlbecker
51 @Transactional(readOnly
= true)
52 public class EditGeoService
implements IEditGeoService
{
53 public static final Logger logger
= Logger
.getLogger(EditGeoService
.class);
55 // private static final String DEFAULT_BACK_LAYER = "tdwg4";
58 private IDescriptionDao dao
;
61 private IGeoServiceAreaMapping areaMapping
;
63 private IDefinedTermDao termDao
;
66 private ITermVocabularyDao vocabDao
;
69 public void setTermDao(IDefinedTermDao termDao
) {
70 this.termDao
= termDao
;
71 EditGeoServiceUtilities
.setTermDao(termDao
);
75 private IOccurrenceDao occurrenceDao
;
77 private Set
<Feature
> getDistributionFeatures() {
78 Set
<Feature
> distributionFeature
= new HashSet
<Feature
>();
79 Feature feature
= (Feature
) termDao
.findByUuid(Feature
.DISTRIBUTION().getUuid());
80 distributionFeature
.add(feature
);
81 return distributionFeature
;
88 * eu.etaxonomy.cdm.ext.IEditGeoService#getEditGeoServiceUrlParameterString
89 * (java.util.List, java.util.Map, int, int, java.lang.String,
90 * java.lang.String, java.util.List)
93 public String
getDistributionServiceRequestParameterString(List
<TaxonDescription
> taxonDescriptions
,
94 Map
<PresenceAbsenceTermBase
<?
>, Color
> presenceAbsenceTermColors
, int width
, int height
, String bbox
,
95 String backLayer
, List
<Language
> langs
) {
97 Set
<Distribution
> distributions
= new HashSet
<Distribution
>();
98 for (TaxonDescription taxonDescription
: taxonDescriptions
) {
99 List
<Distribution
> result
= (List
) dao
.getDescriptionElements(
100 taxonDescription
, null,
101 getDistributionFeatures(),
106 distributions
.addAll(result
);
109 String uriParams
= getDistributionServiceRequestParameterString(distributions
, presenceAbsenceTermColors
,
110 width
, height
, bbox
, backLayer
, langs
);
117 * @see eu.etaxonomy.cdm.ext.geo.IEditGeoService#getDistributionServiceRequestParameterString(java.util.Set, java.util.Map, int, int, java.lang.String, java.lang.String, java.util.List)
120 public String
getDistributionServiceRequestParameterString(Set
<Distribution
> distributions
,
121 Map
<PresenceAbsenceTermBase
<?
>, Color
> presenceAbsenceTermColors
, int width
, int height
, String bbox
,
122 String backLayer
, List
<Language
> langs
) {
124 // if (backLayer == null) {
125 // backLayer = DEFAULT_BACK_LAYER;
127 String uriParams
= EditGeoServiceUtilities
.getDistributionServiceRequestParameterString(distributions
,
128 areaMapping
, presenceAbsenceTermColors
, width
, height
, bbox
, backLayer
, null, langs
);
136 * eu.etaxonomy.cdm.ext.IEditGeoService#getEditGeoServiceUrlParameterString
137 * (eu.etaxonomy.cdm.model.description.TaxonDescription, java.util.Map, int,
138 * int, java.lang.String, java.lang.String)
142 public String
getDistributionServiceRequestParameterString(TaxonDescription taxonDescription
,
143 Map
<PresenceAbsenceTermBase
<?
>, Color
> presenceAbsenceTermColors
, int width
, int height
, String bbox
,
144 String backLayer
, List
<Language
> langs
) {
146 List
<TaxonDescription
> taxonDescriptions
= new ArrayList
<TaxonDescription
>();
147 taxonDescriptions
.add(taxonDescription
);
149 return getDistributionServiceRequestParameterString(taxonDescriptions
, presenceAbsenceTermColors
, width
,
150 height
, bbox
, backLayer
, langs
);
156 * @see eu.etaxonomy.cdm.ext.geo.IEditGeoService#
157 * getOccurrenceServiceRequestParameterString
158 * (eu.etaxonomy.cdm.model.description.TaxonDescription, java.util.Map, int,
159 * int, java.lang.String, java.lang.String)
162 public String
getOccurrenceServiceRequestParameterString(List
<SpecimenOrObservationBase
> specimensOrObersvations
,
163 Map
<SpecimenOrObservationType
, Color
> specimenOrObservationTypeColors
,
164 Boolean doReturnImage
, Integer width
, Integer height
, String bbox
, String backLayer
) {
166 List
<Point
> fieldUnitPoints
= new ArrayList
<Point
>();
167 List
<Point
> derivedUnitPoints
= new ArrayList
<Point
>();
169 IndividualsAssociation individualsAssociation
;
170 DerivedUnit derivedUnit
;
172 for (SpecimenOrObservationBase specimenOrObservationBase
: specimensOrObersvations
) {
173 SpecimenOrObservationBase
<?
> specimenOrObservation
= occurrenceDao
174 .load(specimenOrObservationBase
.getUuid());
176 if (specimenOrObservation
instanceof FieldUnit
) {
177 fieldUnitPoints
.add(((FieldUnit
) specimenOrObservation
).getGatheringEvent()
178 .getExactLocation());
180 if (specimenOrObservation
instanceof DerivedUnit
) {
181 registerDerivedUnitLocations((DerivedUnit
) specimenOrObservation
, derivedUnitPoints
);
185 return EditGeoServiceUtilities
.getOccurrenceServiceRequestParameterString(fieldUnitPoints
,
186 derivedUnitPoints
, specimenOrObservationTypeColors
, doReturnImage
, width
, height
, bbox
, backLayer
);
192 * @param derivedUnitPoints
194 private void registerDerivedUnitLocations(DerivedUnit derivedUnit
, List
<Point
> derivedUnitPoints
) {
196 Set
<SpecimenOrObservationBase
> originals
= derivedUnit
.getOriginals();
197 if (originals
!= null) {
198 for (SpecimenOrObservationBase original
: originals
) {
199 if (original
instanceof FieldUnit
) {
200 if (((FieldUnit
) original
).getGatheringEvent() != null) {
201 Point point
= ((FieldUnit
) original
).getGatheringEvent().getExactLocation();
203 // FIXME: remove next statement after
204 // DerivedUnitFacade or ABCD import is fixed
205 if (point
.getLatitude() == 0.0 && point
.getLongitude() == 0.0) {
208 derivedUnitPoints
.add(point
);
212 registerDerivedUnitLocations((DerivedUnit
) original
, derivedUnitPoints
);
223 * eu.etaxonomy.cdm.ext.geo.IEditGeoService#setMapping(eu.etaxonomy.cdm.
224 * model.location.NamedArea, eu.etaxonomy.cdm.ext.geo.GeoServiceArea)
227 public void setMapping(NamedArea area
, GeoServiceArea geoServiceArea
) {
228 areaMapping
.set(area
, geoServiceArea
);
234 * @see eu.etaxonomy.cdm.ext.geo.IEditGeoService#mapShapeFileToNamedAreas(java.io.Reader, java.util.List, java.lang.String, eu.etaxonomy.cdm.model.common.TermVocabulary)
237 @Transactional(readOnly
=false)
238 public Map
<NamedArea
, String
> mapShapeFileToNamedAreas(Reader csvReader
, List
<String
> idSearchFields
, String wmsLayerName
, UUID areaVocabularyUuid
) throws IOException
{
239 TermVocabulary
<NamedArea
> areaVocabulary
= vocabDao
.load(areaVocabularyUuid
);
240 ShpAttributesToNamedAreaMapper mapper
= new ShpAttributesToNamedAreaMapper(areaVocabulary
, areaMapping
);
241 Map
<NamedArea
, String
> resultMap
= mapper
.readCsv(csvReader
, idSearchFields
, wmsLayerName
);
242 vocabDao
.saveOrUpdate(areaVocabulary
);