X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/9cdb45885dfed520e16741174fd992c5b574ec8d..453635b62bfc47b6cc387d5251d1c110f5fab82c:/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoService.java diff --git a/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoService.java b/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoService.java index 6976e660bf..7ee9e71c03 100644 --- a/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoService.java +++ b/cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoService.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2009 EDIT -* European Distributed Institute of Taxonomy +* European Distributed Institute of Taxonomy * http://www.e-taxonomy.eu -* +* * The contents of this file are subject to the Mozilla Public License Version 1.1 * See LICENSE.TXT at the top of this package for the full license terms. */ @@ -27,6 +27,7 @@ import eu.etaxonomy.cdm.model.description.Feature; import eu.etaxonomy.cdm.model.description.IndividualsAssociation; import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase; import eu.etaxonomy.cdm.model.description.TaxonDescription; +import eu.etaxonomy.cdm.model.location.NamedArea; import eu.etaxonomy.cdm.model.location.Point; import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase; import eu.etaxonomy.cdm.model.occurrence.FieldObservation; @@ -44,153 +45,168 @@ import eu.etaxonomy.cdm.persistence.dao.occurrence.IOccurrenceDao; @Service @Transactional(readOnly=true) public class EditGeoService implements IEditGeoService{ - public static final Logger logger = Logger.getLogger(EditGeoService.class); - - private static final String DEFAULT_BACK_LAYER = "tdwg4"; - - @Autowired - private IDescriptionDao dao; - - private IDefinedTermDao termDao; - - @Autowired - public void setTermDao(IDefinedTermDao termDao) { - this.termDao = termDao; - EditGeoServiceUtilities.setTermDao(termDao); - } - - @Autowired - private IOccurrenceDao occurrenceDao; - - - private Set getDistributionFeatures() { - Set distributionFeature = new HashSet(); - Feature feature = (Feature) termDao.findByUuid(Feature.DISTRIBUTION().getUuid()); - distributionFeature.add(feature); - return distributionFeature; - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.ext.IEditGeoService#getEditGeoServiceUrlParameterString(java.util.List, java.util.Map, int, int, java.lang.String, java.lang.String, java.util.List) - */ - public String getDistributionServiceRequestParameterString( - List taxonDescriptions, - Map, Color> presenceAbsenceTermColors, - int width, int height, String bbox, String backLayer, - List langs) { - Set distributions = new HashSet(); - for(TaxonDescription taxonDescription : taxonDescriptions){ - List result = (List)dao.getDescriptionElements(taxonDescription, getDistributionFeatures(), Distribution.class, null, null, null); - distributions.addAll(result); - } - - if(backLayer == null){ - backLayer = DEFAULT_BACK_LAYER; - } - String uriParams = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(distributions, presenceAbsenceTermColors, width, height, bbox, backLayer, null, langs); - - return uriParams; - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.ext.IEditGeoService#getEditGeoServiceUrlParameterString(eu.etaxonomy.cdm.model.description.TaxonDescription, java.util.Map, int, int, java.lang.String, java.lang.String) - */ - public String getDistributionServiceRequestParameterString( - TaxonDescription taxonDescription, - Map, Color> presenceAbsenceTermColors, - int width, int height, String bbox, String backLayer, - List langs) { - - List taxonDescriptions = new ArrayList(); - taxonDescriptions.add(taxonDescription); - - return getDistributionServiceRequestParameterString(taxonDescriptions, presenceAbsenceTermColors, width, height, bbox, backLayer, langs); - } - - /* (non-Javadoc) - * @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) - */ - public String getDistributionServiceRequestParameterString(Taxon taxon, - Map, Color> presenceAbsenceTermColors, int width, int height, String bbox, - String backLayer, - List langs) { - - List taxonDescriptions = dao.getTaxonDescriptions(taxon, null, null, null, null, null); - - Set distCollection = new HashSet(); - // get descriptions elements for each description - for (TaxonDescription td : taxonDescriptions) { - List dists = (List)dao.getDescriptionElements(td, getDistributionFeatures(), Distribution.class, null, null, null); - distCollection.addAll(dists); - } - // generate the uri parameter string - if(backLayer == null){ - backLayer = DEFAULT_BACK_LAYER; - } - String uriParams = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(distCollection, - presenceAbsenceTermColors, width, height, bbox, backLayer, null, langs); - - return uriParams; - } - - /* (non-Javadoc) - * @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) - */ - @Override - public String getOccurrenceServiceRequestParameterString( - List specimensOrObersvations, - Map, Color> specimenOrObservationTypeColors, Boolean doReturnImage, - Integer width, Integer height, String bbox, String backLayer) { - - List fieldObservationPoints = new ArrayList(); - List derivedUnitPoints = new ArrayList(); - - IndividualsAssociation individualsAssociation; - DerivedUnitBase derivedUnit; - - for(SpecimenOrObservationBase specimenOrObservationBase : specimensOrObersvations){ - SpecimenOrObservationBase specimenOrObservation = occurrenceDao.load(specimenOrObservationBase.getUuid()); - - if(specimenOrObservation instanceof FieldObservation){ - fieldObservationPoints.add(((FieldObservation)specimenOrObservation).getGatheringEvent().getExactLocation()); - } - if(specimenOrObservation instanceof DerivedUnitBase){ - registerDerivedUnitLocations((DerivedUnitBase)specimenOrObservation, derivedUnitPoints); - } - } - - return EditGeoServiceUtilities.getOccurrenceServiceRequestParameterString( - fieldObservationPoints, derivedUnitPoints, - specimenOrObservationTypeColors, doReturnImage , width, - height, bbox, backLayer); - - } - - /** - * @param derivedUnit - * @param derivedUnitPoints - */ - private void registerDerivedUnitLocations(DerivedUnitBase derivedUnit, - List derivedUnitPoints) { - - Set originals = derivedUnit.getOriginals(); - if(originals != null){ - for (SpecimenOrObservationBase original : originals) { - if (original instanceof FieldObservation) { - Point point = ((FieldObservation) original).getGatheringEvent().getExactLocation(); - if(point != null){ - //FIXME: remove next statement after DerivedUnitFacade or ABCD import is fixed - if(point.getLatitude() == 0.0 && point.getLongitude() == 0.0){ - continue; - } - derivedUnitPoints.add(point); - } - } else { - registerDerivedUnitLocations((DerivedUnitBase) original, derivedUnitPoints); - } - } - } - - } + public static final Logger logger = Logger.getLogger(EditGeoService.class); + + private static final String DEFAULT_BACK_LAYER = "tdwg4"; + + @Autowired + private IDescriptionDao dao; + + + @Autowired + private IGeoServiceAreaMapping areaMapping; + + private IDefinedTermDao termDao; + + @Autowired + public void setTermDao(IDefinedTermDao termDao) { + this.termDao = termDao; + EditGeoServiceUtilities.setTermDao(termDao); + } + + @Autowired + private IOccurrenceDao occurrenceDao; + + + private Set getDistributionFeatures() { + Set distributionFeature = new HashSet(); + Feature feature = (Feature) termDao.findByUuid(Feature.DISTRIBUTION().getUuid()); + distributionFeature.add(feature); + return distributionFeature; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.ext.IEditGeoService#getEditGeoServiceUrlParameterString(java.util.List, java.util.Map, int, int, java.lang.String, java.lang.String, java.util.List) + */ + public String getDistributionServiceRequestParameterString( + List taxonDescriptions, + Map, Color> presenceAbsenceTermColors, + int width, int height, String bbox, String backLayer, + List langs) { + Set distributions = new HashSet(); + for(TaxonDescription taxonDescription : taxonDescriptions){ + List result = (List)dao.getDescriptionElements(taxonDescription, getDistributionFeatures(), Distribution.class, null, null, null); + distributions.addAll(result); + } + + if(backLayer == null){ + backLayer = DEFAULT_BACK_LAYER; + } + String uriParams = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(distributions, areaMapping, presenceAbsenceTermColors, width, height, bbox, backLayer, null, langs); + + return uriParams; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.ext.IEditGeoService#getEditGeoServiceUrlParameterString(eu.etaxonomy.cdm.model.description.TaxonDescription, java.util.Map, int, int, java.lang.String, java.lang.String) + */ + public String getDistributionServiceRequestParameterString( + TaxonDescription taxonDescription, + Map, Color> presenceAbsenceTermColors, + int width, int height, String bbox, String backLayer, + List langs) { + + List taxonDescriptions = new ArrayList(); + taxonDescriptions.add(taxonDescription); + + return getDistributionServiceRequestParameterString(taxonDescriptions, presenceAbsenceTermColors, width, height, bbox, backLayer, langs); + } + + /* (non-Javadoc) + * @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) + */ + public String getDistributionServiceRequestParameterString(Taxon taxon, + Map, Color> presenceAbsenceTermColors, int width, int height, String bbox, + String backLayer, + List langs) { + + List taxonDescriptions = dao.listTaxonDescriptions(taxon, null, null, null, null, null, null); + + Set distCollection = new HashSet(); + // get descriptions elements for each description + for (TaxonDescription td : taxonDescriptions) { + List dists = (List)dao.getDescriptionElements(td, getDistributionFeatures(), Distribution.class, null, null, null); + distCollection.addAll(dists); + } + // generate the uri parameter string + if(backLayer == null){ + backLayer = DEFAULT_BACK_LAYER; + } + String uriParams = EditGeoServiceUtilities.getDistributionServiceRequestParameterString(distCollection,areaMapping, + presenceAbsenceTermColors, width, height, bbox, backLayer, null, langs); + + return uriParams; + } + + /* (non-Javadoc) + * @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) + */ + @Override + public String getOccurrenceServiceRequestParameterString( + List specimensOrObersvations, + Map, Color> specimenOrObservationTypeColors, Boolean doReturnImage, + Integer width, Integer height, String bbox, String backLayer) { + + List fieldObservationPoints = new ArrayList(); + List derivedUnitPoints = new ArrayList(); + + IndividualsAssociation individualsAssociation; + DerivedUnitBase derivedUnit; + + for(SpecimenOrObservationBase specimenOrObservationBase : specimensOrObersvations){ + SpecimenOrObservationBase specimenOrObservation = occurrenceDao.load(specimenOrObservationBase.getUuid()); + + if(specimenOrObservation instanceof FieldObservation){ + fieldObservationPoints.add(((FieldObservation)specimenOrObservation).getGatheringEvent().getExactLocation()); + } + if(specimenOrObservation instanceof DerivedUnitBase){ + registerDerivedUnitLocations((DerivedUnitBase)specimenOrObservation, derivedUnitPoints); + } + } + + return EditGeoServiceUtilities.getOccurrenceServiceRequestParameterString( + fieldObservationPoints, derivedUnitPoints, + specimenOrObservationTypeColors, doReturnImage , width, + height, bbox, backLayer); + + } + + /** + * @param derivedUnit + * @param derivedUnitPoints + */ + private void registerDerivedUnitLocations(DerivedUnitBase derivedUnit, + List derivedUnitPoints) { + + Set originals = derivedUnit.getOriginals(); + if(originals != null){ + for (SpecimenOrObservationBase original : originals) { + if (original instanceof FieldObservation) { + if (((FieldObservation) original).getGatheringEvent() != null ) { + Point point = ((FieldObservation) original).getGatheringEvent().getExactLocation(); + if(point != null){ + //FIXME: remove next statement after DerivedUnitFacade or ABCD import is fixed + if(point.getLatitude() == 0.0 && point.getLongitude() == 0.0){ + continue; + } + derivedUnitPoints.add(point); + } + } + } else { + registerDerivedUnitLocations((DerivedUnitBase) original, derivedUnitPoints); + } + } + } + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.ext.geo.IEditGeoService#setMapping(eu.etaxonomy.cdm.model.location.NamedArea, eu.etaxonomy.cdm.ext.geo.GeoServiceArea) + */ + @Override + public void setMapping(NamedArea area, GeoServiceArea geoServiceArea) { + areaMapping.set(area, geoServiceArea); + + } }