merging delete functionality into trunk
[cdmlib.git] / cdmlib-ext / src / main / java / eu / etaxonomy / cdm / ext / geo / EditGeoService.java
1 // $Id$
2 /**
3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
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.
9 */
10 package eu.etaxonomy.cdm.ext.geo;
11
12 import java.awt.Color;
13 import java.util.ArrayList;
14 import java.util.HashSet;
15 import java.util.List;
16 import java.util.Map;
17 import java.util.Set;
18
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;
23
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;
39
40 /**
41 * @author a.kohlbecker
42 * @date 18.06.2009
43 *
44 */
45 @Service
46 @Transactional(readOnly = true)
47 public class EditGeoService implements IEditGeoService {
48 public static final Logger logger = Logger.getLogger(EditGeoService.class);
49
50 private static final String DEFAULT_BACK_LAYER = "tdwg4";
51
52 @Autowired
53 private IDescriptionDao dao;
54
55 @Autowired
56 private IGeoServiceAreaMapping areaMapping;
57
58 private IDefinedTermDao termDao;
59
60 @Autowired
61 public void setTermDao(IDefinedTermDao termDao) {
62 this.termDao = termDao;
63 EditGeoServiceUtilities.setTermDao(termDao);
64 }
65
66 @Autowired
67 private IOccurrenceDao occurrenceDao;
68
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;
74 }
75
76 /*
77 * (non-Javadoc)
78 *
79 * @see
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)
83 */
84 @Override
85 public String getDistributionServiceRequestParameterString(List<TaxonDescription> taxonDescriptions,
86 Map<PresenceAbsenceTermBase<?>, Color> presenceAbsenceTermColors, int width, int height, String bbox,
87 String backLayer, List<Language> langs) {
88
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);
94 }
95
96 String uriParams = getDistributionServiceRequestParameterString(distributions, presenceAbsenceTermColors,
97 width, height, bbox, backLayer, langs);
98
99 return uriParams;
100 }
101
102
103 /* (non-Javadoc)
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)
105 */
106 @Override
107 public String getDistributionServiceRequestParameterString(Set<Distribution> distributions,
108 Map<PresenceAbsenceTermBase<?>, Color> presenceAbsenceTermColors, int width, int height, String bbox,
109 String backLayer, List<Language> langs) {
110
111 if (backLayer == null) {
112 backLayer = DEFAULT_BACK_LAYER;
113 }
114 String uriParams = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(distributions,
115 areaMapping, presenceAbsenceTermColors, width, height, bbox, backLayer, null, langs);
116 return uriParams;
117 }
118
119 /*
120 * (non-Javadoc)
121 *
122 * @see
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)
126 */
127 @Override
128 @Deprecated
129 public String getDistributionServiceRequestParameterString(TaxonDescription taxonDescription,
130 Map<PresenceAbsenceTermBase<?>, Color> presenceAbsenceTermColors, int width, int height, String bbox,
131 String backLayer, List<Language> langs) {
132
133 List<TaxonDescription> taxonDescriptions = new ArrayList<TaxonDescription>();
134 taxonDescriptions.add(taxonDescription);
135
136 return getDistributionServiceRequestParameterString(taxonDescriptions, presenceAbsenceTermColors, width,
137 height, bbox, backLayer, langs);
138 }
139
140 /*
141 * (non-Javadoc)
142 *
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)
147 */
148 @Override
149 public String getOccurrenceServiceRequestParameterString(List<SpecimenOrObservationBase> specimensOrObersvations,
150 Map<SpecimenOrObservationType, Color> specimenOrObservationTypeColors,
151 Boolean doReturnImage, Integer width, Integer height, String bbox, String backLayer) {
152
153 List<Point> fieldUnitPoints = new ArrayList<Point>();
154 List<Point> derivedUnitPoints = new ArrayList<Point>();
155
156 IndividualsAssociation individualsAssociation;
157 DerivedUnit derivedUnit;
158
159 for (SpecimenOrObservationBase specimenOrObservationBase : specimensOrObersvations) {
160 SpecimenOrObservationBase<?> specimenOrObservation = occurrenceDao
161 .load(specimenOrObservationBase.getUuid());
162
163 if (specimenOrObservation instanceof FieldUnit) {
164 fieldUnitPoints.add(((FieldUnit) specimenOrObservation).getGatheringEvent()
165 .getExactLocation());
166 }
167 if (specimenOrObservation instanceof DerivedUnit) {
168 registerDerivedUnitLocations((DerivedUnit) specimenOrObservation, derivedUnitPoints);
169 }
170 }
171
172 return EditGeoServiceUtilities.getOccurrenceServiceRequestParameterString(fieldUnitPoints,
173 derivedUnitPoints, specimenOrObservationTypeColors, doReturnImage, width, height, bbox, backLayer);
174
175 }
176
177 /**
178 * @param derivedUnit
179 * @param derivedUnitPoints
180 */
181 private void registerDerivedUnitLocations(DerivedUnit derivedUnit, List<Point> derivedUnitPoints) {
182
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();
189 if (point != null) {
190 // FIXME: remove next statement after
191 // DerivedUnitFacade or ABCD import is fixed
192 if (point.getLatitude() == 0.0 && point.getLongitude() == 0.0) {
193 continue;
194 }
195 derivedUnitPoints.add(point);
196 }
197 }
198 } else {
199 registerDerivedUnitLocations((DerivedUnit) original, derivedUnitPoints);
200 }
201 }
202 }
203
204 }
205
206 /*
207 * (non-Javadoc)
208 *
209 * @see
210 * eu.etaxonomy.cdm.ext.geo.IEditGeoService#setMapping(eu.etaxonomy.cdm.
211 * model.location.NamedArea, eu.etaxonomy.cdm.ext.geo.GeoServiceArea)
212 */
213 @Override
214 public void setMapping(NamedArea area, GeoServiceArea geoServiceArea) {
215 areaMapping.set(area, geoServiceArea);
216
217 }
218
219 }