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
.DerivedUnitBase
;
33 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldObservation
;
34 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
35 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.IDefinedTermDao
;
36 import eu
.etaxonomy
.cdm
.persistence
.dao
.description
.IDescriptionDao
;
37 import eu
.etaxonomy
.cdm
.persistence
.dao
.occurrence
.IOccurrenceDao
;
40 * @author a.kohlbecker
45 @Transactional(readOnly
= true)
46 public class EditGeoService
implements IEditGeoService
{
47 public static final Logger logger
= Logger
.getLogger(EditGeoService
.class);
49 private static final String DEFAULT_BACK_LAYER
= "tdwg4";
52 private IDescriptionDao dao
;
55 private IGeoServiceAreaMapping areaMapping
;
57 private IDefinedTermDao termDao
;
60 public void setTermDao(IDefinedTermDao termDao
) {
61 this.termDao
= termDao
;
62 EditGeoServiceUtilities
.setTermDao(termDao
);
66 private IOccurrenceDao occurrenceDao
;
68 private Set
<Feature
> getDistributionFeatures() {
69 Set
<Feature
> distributionFeature
= new HashSet
<Feature
>();
70 Feature feature
= (Feature
) termDao
.findByUuid(Feature
.DISTRIBUTION().getUuid());
71 distributionFeature
.add(feature
);
72 return distributionFeature
;
79 * eu.etaxonomy.cdm.ext.IEditGeoService#getEditGeoServiceUrlParameterString
80 * (java.util.List, java.util.Map, int, int, java.lang.String,
81 * java.lang.String, java.util.List)
84 public String
getDistributionServiceRequestParameterString(List
<TaxonDescription
> taxonDescriptions
,
85 Map
<PresenceAbsenceTermBase
<?
>, Color
> presenceAbsenceTermColors
, int width
, int height
, String bbox
,
86 String backLayer
, List
<Language
> langs
) {
88 Set
<Distribution
> distributions
= new HashSet
<Distribution
>();
89 for (TaxonDescription taxonDescription
: taxonDescriptions
) {
90 List
<Distribution
> result
= (List
) dao
.getDescriptionElements(taxonDescription
, getDistributionFeatures(),
91 Distribution
.class, null, null, null);
92 distributions
.addAll(result
);
95 String uriParams
= getDistributionServiceRequestParameterString(distributions
, presenceAbsenceTermColors
,
96 width
, height
, bbox
, backLayer
, langs
);
103 * @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)
106 public String
getDistributionServiceRequestParameterString(Set
<Distribution
> distributions
,
107 Map
<PresenceAbsenceTermBase
<?
>, Color
> presenceAbsenceTermColors
, int width
, int height
, String bbox
,
108 String backLayer
, List
<Language
> langs
) {
110 if (backLayer
== null) {
111 backLayer
= DEFAULT_BACK_LAYER
;
113 String uriParams
= EditGeoServiceUtilities
.getDistributionServiceRequestParameterString(distributions
,
114 areaMapping
, presenceAbsenceTermColors
, width
, height
, bbox
, backLayer
, null, langs
);
122 * eu.etaxonomy.cdm.ext.IEditGeoService#getEditGeoServiceUrlParameterString
123 * (eu.etaxonomy.cdm.model.description.TaxonDescription, java.util.Map, int,
124 * int, java.lang.String, java.lang.String)
128 public String
getDistributionServiceRequestParameterString(TaxonDescription taxonDescription
,
129 Map
<PresenceAbsenceTermBase
<?
>, Color
> presenceAbsenceTermColors
, int width
, int height
, String bbox
,
130 String backLayer
, List
<Language
> langs
) {
132 List
<TaxonDescription
> taxonDescriptions
= new ArrayList
<TaxonDescription
>();
133 taxonDescriptions
.add(taxonDescription
);
135 return getDistributionServiceRequestParameterString(taxonDescriptions
, presenceAbsenceTermColors
, width
,
136 height
, bbox
, backLayer
, langs
);
142 * @see eu.etaxonomy.cdm.ext.geo.IEditGeoService#
143 * getOccurrenceServiceRequestParameterString
144 * (eu.etaxonomy.cdm.model.description.TaxonDescription, java.util.Map, int,
145 * int, java.lang.String, java.lang.String)
148 public String
getOccurrenceServiceRequestParameterString(List
<SpecimenOrObservationBase
> specimensOrObersvations
,
149 Map
<Class
<?
extends SpecimenOrObservationBase
>, Color
> specimenOrObservationTypeColors
,
150 Boolean doReturnImage
, Integer width
, Integer height
, String bbox
, String backLayer
) {
152 List
<Point
> fieldObservationPoints
= new ArrayList
<Point
>();
153 List
<Point
> derivedUnitPoints
= new ArrayList
<Point
>();
155 IndividualsAssociation individualsAssociation
;
156 DerivedUnitBase derivedUnit
;
158 for (SpecimenOrObservationBase specimenOrObservationBase
: specimensOrObersvations
) {
159 SpecimenOrObservationBase
<?
> specimenOrObservation
= occurrenceDao
160 .load(specimenOrObservationBase
.getUuid());
162 if (specimenOrObservation
instanceof FieldObservation
) {
163 fieldObservationPoints
.add(((FieldObservation
) specimenOrObservation
).getGatheringEvent()
164 .getExactLocation());
166 if (specimenOrObservation
instanceof DerivedUnitBase
<?
>) {
167 registerDerivedUnitLocations((DerivedUnitBase
) specimenOrObservation
, derivedUnitPoints
);
171 return EditGeoServiceUtilities
.getOccurrenceServiceRequestParameterString(fieldObservationPoints
,
172 derivedUnitPoints
, specimenOrObservationTypeColors
, doReturnImage
, width
, height
, bbox
, backLayer
);
178 * @param derivedUnitPoints
180 private void registerDerivedUnitLocations(DerivedUnitBase
<?
> derivedUnit
, List
<Point
> derivedUnitPoints
) {
182 Set
<SpecimenOrObservationBase
> originals
= derivedUnit
.getOriginals();
183 if (originals
!= null) {
184 for (SpecimenOrObservationBase original
: originals
) {
185 if (original
instanceof FieldObservation
) {
186 if (((FieldObservation
) original
).getGatheringEvent() != null) {
187 Point point
= ((FieldObservation
) original
).getGatheringEvent().getExactLocation();
189 // FIXME: remove next statement after
190 // DerivedUnitFacade or ABCD import is fixed
191 if (point
.getLatitude() == 0.0 && point
.getLongitude() == 0.0) {
194 derivedUnitPoints
.add(point
);
198 registerDerivedUnitLocations((DerivedUnitBase
) original
, derivedUnitPoints
);
209 * eu.etaxonomy.cdm.ext.geo.IEditGeoService#setMapping(eu.etaxonomy.cdm.
210 * model.location.NamedArea, eu.etaxonomy.cdm.ext.geo.GeoServiceArea)
213 public void setMapping(NamedArea area
, GeoServiceArea geoServiceArea
) {
214 areaMapping
.set(area
, geoServiceArea
);