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
.Point
;
31 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnitBase
;
32 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldObservation
;
33 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
34 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
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
;
54 private IDefinedTermDao termDao
;
57 public void setTermDao(IDefinedTermDao termDao
) {
58 this.termDao
= termDao
;
59 EditGeoServiceUtilities
.setTermDao(termDao
);
63 private IOccurrenceDao occurrenceDao
;
66 private Set
<Feature
> getDistributionFeatures() {
67 Set
<Feature
> distributionFeature
= new HashSet
<Feature
>();
68 Feature feature
= (Feature
) termDao
.findByUuid(Feature
.DISTRIBUTION().getUuid());
69 distributionFeature
.add(feature
);
70 return distributionFeature
;
74 * @see eu.etaxonomy.cdm.ext.IEditGeoService#getEditGeoServiceUrlParameterString(java.util.List, java.util.Map, int, int, java.lang.String, java.lang.String, java.util.List)
76 public String
getDistributionServiceRequestParameterString(
77 List
<TaxonDescription
> taxonDescriptions
,
78 Map
<PresenceAbsenceTermBase
<?
>, Color
> presenceAbsenceTermColors
,
79 int width
, int height
, String bbox
, String backLayer
,
80 List
<Language
> langs
) {
81 Set
<Distribution
> distributions
= new HashSet
<Distribution
>();
82 for(TaxonDescription taxonDescription
: taxonDescriptions
){
83 List
<Distribution
> result
= (List
)dao
.getDescriptionElements(taxonDescription
, getDistributionFeatures(), Distribution
.class, null, null, null);
84 distributions
.addAll(result
);
87 if(backLayer
== null){
88 backLayer
= DEFAULT_BACK_LAYER
;
90 String uriParams
= EditGeoServiceUtilities
.getDistributionServiceRequestParameterString(distributions
, presenceAbsenceTermColors
, width
, height
, bbox
, backLayer
, null, langs
);
96 * @see eu.etaxonomy.cdm.ext.IEditGeoService#getEditGeoServiceUrlParameterString(eu.etaxonomy.cdm.model.description.TaxonDescription, java.util.Map, int, int, java.lang.String, java.lang.String)
98 public String
getDistributionServiceRequestParameterString(
99 TaxonDescription taxonDescription
,
100 Map
<PresenceAbsenceTermBase
<?
>, Color
> presenceAbsenceTermColors
,
101 int width
, int height
, String bbox
, String backLayer
,
102 List
<Language
> langs
) {
104 List
<TaxonDescription
> taxonDescriptions
= new ArrayList
<TaxonDescription
>();
105 taxonDescriptions
.add(taxonDescription
);
107 return getDistributionServiceRequestParameterString(taxonDescriptions
, presenceAbsenceTermColors
, width
, height
, bbox
, backLayer
, langs
);
111 * @see eu.etaxonomy.cdm.api.service.IEditGeoService#getEditGeoServiceUrlParameterString(eu.etaxonomy.cdm.model.taxon.Taxon, java.util.Map, int, int, java.lang.String, java.lang.String)
113 public String
getDistributionServiceRequestParameterString(Taxon taxon
,
114 Map
<PresenceAbsenceTermBase
<?
>, Color
> presenceAbsenceTermColors
, int width
, int height
, String bbox
,
116 List
<Language
> langs
) {
118 List
<TaxonDescription
> taxonDescriptions
= dao
.getTaxonDescriptions(taxon
, null, null, null, null, null);
120 Set
<Distribution
> distCollection
= new HashSet
<Distribution
>();
121 // get descriptions elements for each description
122 for (TaxonDescription td
: taxonDescriptions
) {
123 List
<Distribution
> dists
= (List
)dao
.getDescriptionElements(td
, getDistributionFeatures(), Distribution
.class, null, null, null);
124 distCollection
.addAll(dists
);
126 // generate the uri parameter string
127 if(backLayer
== null){
128 backLayer
= DEFAULT_BACK_LAYER
;
130 String uriParams
= EditGeoServiceUtilities
.getDistributionServiceRequestParameterString(distCollection
,
131 presenceAbsenceTermColors
, width
, height
, bbox
, backLayer
, null, langs
);
137 * @see eu.etaxonomy.cdm.ext.geo.IEditGeoService#getOccurrenceServiceRequestParameterString(eu.etaxonomy.cdm.model.description.TaxonDescription, java.util.Map, int, int, java.lang.String, java.lang.String)
140 public String
getOccurrenceServiceRequestParameterString(
141 List
<SpecimenOrObservationBase
> specimensOrObersvations
,
142 Map
<Class
<?
extends SpecimenOrObservationBase
>, Color
> specimenOrObservationTypeColors
, Boolean doReturnImage
,
143 Integer width
, Integer height
, String bbox
, String backLayer
) {
145 List
<Point
> fieldObservationPoints
= new ArrayList
<Point
>();
146 List
<Point
> derivedUnitPoints
= new ArrayList
<Point
>();
148 IndividualsAssociation individualsAssociation
;
149 DerivedUnitBase derivedUnit
;
151 for(SpecimenOrObservationBase specimenOrObservationBase
: specimensOrObersvations
){
152 SpecimenOrObservationBase
<?
> specimenOrObservation
= occurrenceDao
.load(specimenOrObservationBase
.getUuid());
154 if(specimenOrObservation
instanceof FieldObservation
){
155 fieldObservationPoints
.add(((FieldObservation
)specimenOrObservation
).getGatheringEvent().getExactLocation());
157 if(specimenOrObservation
instanceof DerivedUnitBase
<?
>){
158 registerDerivedUnitLocations((DerivedUnitBase
)specimenOrObservation
, derivedUnitPoints
);
162 return EditGeoServiceUtilities
.getOccurrenceServiceRequestParameterString(
163 fieldObservationPoints
, derivedUnitPoints
,
164 specimenOrObservationTypeColors
, doReturnImage
, width
,
165 height
, bbox
, backLayer
);
171 * @param derivedUnitPoints
173 private void registerDerivedUnitLocations(DerivedUnitBase
<?
> derivedUnit
,
174 List
<Point
> derivedUnitPoints
) {
176 Set
<SpecimenOrObservationBase
> originals
= derivedUnit
.getOriginals();
177 if(originals
!= null){
178 for (SpecimenOrObservationBase original
: originals
) {
179 if (original
instanceof FieldObservation
) {
180 Point point
= ((FieldObservation
) original
).getGatheringEvent().getExactLocation();
182 //FIXME: remove next statement after DerivedUnitFacade or ABCD import is fixed
183 if(point
.getLatitude() == 0.0 && point
.getLongitude() == 0.0){
186 derivedUnitPoints
.add(point
);
189 registerDerivedUnitLocations((DerivedUnitBase
) original
, derivedUnitPoints
);