package com.bitmonlab.osiris.api.core.map.assemblers; import java.util.ArrayList; import java.util.Collection; import javax.inject.Inject; import javax.inject.Named; import com.bitmonlab.osiris.api.core.map.exceptions.InvalidGeometry; import com.bitmonlab.osiris.api.core.map.transferobject.FeatureDTO; import com.bitmonlab.osiris.api.core.map.transferobject.GeometryDTO; import com.bitmonlab.osiris.api.core.map.transferobject.LineStringDTO; import com.bitmonlab.osiris.api.core.map.transferobject.PointDTO; import com.bitmonlab.osiris.api.core.map.transferobject.PolygonDTO; import com.bitmonlab.osiris.commons.map.model.geojson.Feature; import com.bitmonlab.osiris.commons.map.model.geojson.Geometry; import com.bitmonlab.osiris.commons.map.model.geojson.LineString; import com.bitmonlab.osiris.commons.map.model.geojson.Point; import com.bitmonlab.osiris.commons.map.model.geojson.Polygon; import com.bitmonlab.osiris.core.assembler.Assembler; import com.bitmonlab.osiris.core.assembler.AssemblyException; import com.bitmonlab.osiris.core.assembler.SimpleAssembler; @Named("FeatureAssembler") public class FeatureAssemblerImpl extends SimpleAssembler<FeatureDTO, Feature>{ @Inject @Named("LineStringAssembler") private Assembler<LineStringDTO, LineString> lineStringAssembler; @Inject @Named("PointAssembler") private Assembler<PointDTO, Point> pointAssembler; @Inject @Named("PolygonAssembler") private Assembler<PolygonDTO, Polygon> polygonAssembler; public FeatureAssemblerImpl() { super(FeatureDTO.class,Feature.class); } @Override public Feature createDomainObject(FeatureDTO featureDTO) throws AssemblyException{ Feature feature = new Feature(); feature.setProperties(featureDTO.getProperties()); feature.setPropertiesRelations(featureDTO.getPropertiesRelations()); GeometryDTO geometryDTO=featureDTO.getGeometryDTO(); Geometry geometry=null; if(geometryDTO instanceof PointDTO){ geometry=pointAssembler.createDomainObject((PointDTO)geometryDTO); } if(geometryDTO instanceof LineStringDTO){ geometry=lineStringAssembler.createDomainObject((LineStringDTO)geometryDTO); } if(geometryDTO instanceof PolygonDTO){ geometry=polygonAssembler.createDomainObject((PolygonDTO)geometryDTO); } if(geometry==null){ throw new InvalidGeometry(); } feature.setGeometry(geometry); return feature; } @Override public FeatureDTO createDataTransferObject(Feature feature) throws AssemblyException{ FeatureDTO featureDTO = new FeatureDTO(); featureDTO.setId(feature.getId()); featureDTO.setProperties(feature.getProperties()); featureDTO.setPropertiesRelations(feature.getPropertiesRelations()); Geometry geometry=feature.getGeometry(); GeometryDTO geometryDTO=null; if(geometry instanceof Point){ Point point=(Point)geometry; geometryDTO=pointAssembler.createDataTransferObject(point); } if(geometry instanceof LineString){ LineString lineString=(LineString)geometry; geometryDTO=lineStringAssembler.createDataTransferObject(lineString); } if(geometry instanceof Polygon){ Polygon polygon=(Polygon)geometry; geometryDTO=polygonAssembler.createDataTransferObject(polygon); } featureDTO.setGeometryDTO(geometryDTO); return featureDTO; } @Override public Collection<FeatureDTO> createDataTransferObjects(Collection<Feature> features) throws AssemblyException{ Collection<FeatureDTO> featuresDTO = new ArrayList<FeatureDTO>(); for(Feature feature:features){ featuresDTO.add(createDataTransferObject(feature)); } return featuresDTO; } }