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
.util
.ArrayList
;
14 import java
.util
.HashSet
;
15 import java
.util
.List
;
19 import org
.apache
.log4j
.Logger
;
20 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
21 import org
.springframework
.stereotype
.Service
;
22 import org
.springframework
.transaction
.annotation
.Transactional
;
24 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
25 import eu
.etaxonomy
.cdm
.model
.description
.Distribution
;
26 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
27 import eu
.etaxonomy
.cdm
.model
.description
.IndividualsAssociation
;
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
.location
.Point
;
32 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
33 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldUnit
;
34 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
35 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
36 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.IDefinedTermDao
;
37 import eu
.etaxonomy
.cdm
.persistence
.dao
.description
.IDescriptionDao
;
38 import eu
.etaxonomy
.cdm
.persistence
.dao
.occurrence
.IOccurrenceDao
;
41 * @author a.kohlbecker
46 @Transactional(readOnly
= true)
47 public class EditGeoService
implements IEditGeoService
{
48 public static final Logger logger
= Logger
.getLogger(EditGeoService
.class);
50 private static final String DEFAULT_BACK_LAYER
= "tdwg4";
53 private IDescriptionDao dao
;
56 private IGeoServiceAreaMapping areaMapping
;
58 private IDefinedTermDao termDao
;
61 public void setTermDao(IDefinedTermDao termDao
) {
62 this.termDao
= termDao
;
63 EditGeoServiceUtilities
.setTermDao(termDao
);
67 private IOccurrenceDao occurrenceDao
;
69 private Set
<Feature
> getDistributionFeatures() {
70 Set
<Feature
> distributionFeature
= new HashSet
<Feature
>();
71 Feature feature
= (Feature
) termDao
.findByUuid(Feature
.DISTRIBUTION().getUuid());
72 distributionFeature
.add(feature
);
73 return distributionFeature
;
80 * eu.etaxonomy.cdm.ext.IEditGeoService#getEditGeoServiceUrlParameterString
81 * (java.util.List, java.util.Map, int, int, java.lang.String,
82 * java.lang.String, java.util.List)
85 public String
getDistributionServiceRequestParameterString(List
<TaxonDescription
> taxonDescriptions
,
86 Map
<PresenceAbsenceTermBase
<?
>, Color
> presenceAbsenceTermColors
, int width
, int height
, String bbox
,
87 String backLayer
, List
<Language
> langs
) {
89 Set
<Distribution
> distributions
= new HashSet
<Distribution
>();
90 for (TaxonDescription taxonDescription
: taxonDescriptions
) {
91 List
<Distribution
> result
= (List
) dao
.getDescriptionElements(taxonDescription
, getDistributionFeatures(),
92 Distribution
.class, null, null, null);
93 distributions
.addAll(result
);
96 String uriParams
= getDistributionServiceRequestParameterString(distributions
, presenceAbsenceTermColors
,
97 width
, height
, bbox
, backLayer
, langs
);
104 * @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)
107 public String
getDistributionServiceRequestParameterString(Set
<Distribution
> distributions
,
108 Map
<PresenceAbsenceTermBase
<?
>, Color
> presenceAbsenceTermColors
, int width
, int height
, String bbox
,
109 String backLayer
, List
<Language
> langs
) {
111 if (backLayer
== null) {
112 backLayer
= DEFAULT_BACK_LAYER
;
114 String uriParams
= EditGeoServiceUtilities
.getDistributionServiceRequestParameterString(distributions
,
115 areaMapping
, presenceAbsenceTermColors
, width
, height
, bbox
, backLayer
, null, langs
);
123 * eu.etaxonomy.cdm.ext.IEditGeoService#getEditGeoServiceUrlParameterString
124 * (eu.etaxonomy.cdm.model.description.TaxonDescription, java.util.Map, int,
125 * int, java.lang.String, java.lang.String)
129 public String
getDistributionServiceRequestParameterString(TaxonDescription taxonDescription
,
130 Map
<PresenceAbsenceTermBase
<?
>, Color
> presenceAbsenceTermColors
, int width
, int height
, String bbox
,
131 String backLayer
, List
<Language
> langs
) {
133 List
<TaxonDescription
> taxonDescriptions
= new ArrayList
<TaxonDescription
>();
134 taxonDescriptions
.add(taxonDescription
);
136 return getDistributionServiceRequestParameterString(taxonDescriptions
, presenceAbsenceTermColors
, width
,
137 height
, bbox
, backLayer
, langs
);
143 * @see eu.etaxonomy.cdm.ext.geo.IEditGeoService#
144 * getOccurrenceServiceRequestParameterString
145 * (eu.etaxonomy.cdm.model.description.TaxonDescription, java.util.Map, int,
146 * int, java.lang.String, java.lang.String)
149 public String
getOccurrenceServiceRequestParameterString(List
<SpecimenOrObservationBase
> specimensOrObersvations
,
150 Map
<SpecimenOrObservationType
, Color
> specimenOrObservationTypeColors
,
151 Boolean doReturnImage
, Integer width
, Integer height
, String bbox
, String backLayer
) {
153 List
<Point
> fieldUnitPoints
= new ArrayList
<Point
>();
154 List
<Point
> derivedUnitPoints
= new ArrayList
<Point
>();
156 IndividualsAssociation individualsAssociation
;
157 DerivedUnit derivedUnit
;
159 for (SpecimenOrObservationBase specimenOrObservationBase
: specimensOrObersvations
) {
160 SpecimenOrObservationBase
<?
> specimenOrObservation
= occurrenceDao
161 .load(specimenOrObservationBase
.getUuid());
163 if (specimenOrObservation
instanceof FieldUnit
) {
164 fieldUnitPoints
.add(((FieldUnit
) specimenOrObservation
).getGatheringEvent()
165 .getExactLocation());
167 if (specimenOrObservation
instanceof DerivedUnit
) {
168 registerDerivedUnitLocations((DerivedUnit
) specimenOrObservation
, derivedUnitPoints
);
172 return EditGeoServiceUtilities
.getOccurrenceServiceRequestParameterString(fieldUnitPoints
,
173 derivedUnitPoints
, specimenOrObservationTypeColors
, doReturnImage
, width
, height
, bbox
, backLayer
);
179 * @param derivedUnitPoints
181 private void registerDerivedUnitLocations(DerivedUnit derivedUnit
, List
<Point
> derivedUnitPoints
) {
183 Set
<SpecimenOrObservationBase
> originals
= derivedUnit
.getOriginals();
184 if (originals
!= null) {
185 for (SpecimenOrObservationBase original
: originals
) {
186 if (original
instanceof FieldUnit
) {
187 if (((FieldUnit
) original
).getGatheringEvent() != null) {
188 Point point
= ((FieldUnit
) original
).getGatheringEvent().getExactLocation();
190 // FIXME: remove next statement after
191 // DerivedUnitFacade or ABCD import is fixed
192 if (point
.getLatitude() == 0.0 && point
.getLongitude() == 0.0) {
195 derivedUnitPoints
.add(point
);
199 registerDerivedUnitLocations((DerivedUnit
) original
, derivedUnitPoints
);
210 * eu.etaxonomy.cdm.ext.geo.IEditGeoService#setMapping(eu.etaxonomy.cdm.
211 * model.location.NamedArea, eu.etaxonomy.cdm.ext.geo.GeoServiceArea)
214 public void setMapping(NamedArea area
, GeoServiceArea geoServiceArea
) {
215 areaMapping
.set(area
, geoServiceArea
);