package com.bitmonlab.osiris.api.core.map.assemblers;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import com.bitmonlab.osiris.api.core.map.transferobject.LineStringDTO;
import com.bitmonlab.osiris.api.core.map.transferobject.PointDTO;
import com.bitmonlab.osiris.commons.map.model.geojson.LineString;
import com.bitmonlab.osiris.commons.map.model.geojson.Point;
import com.bitmonlab.osiris.core.assembler.Assembler;
import com.bitmonlab.osiris.core.assembler.AssemblyException;
import com.bitmonlab.osiris.core.assembler.SimpleAssembler;
@Named("LineStringAssembler")
public class LineStringAssemblerImpl extends SimpleAssembler<LineStringDTO, LineString>{
@Inject
@Named("PointAssembler")
private Assembler<PointDTO, Point> pointAssembler;
public LineStringAssemblerImpl() {
super(LineStringDTO.class,LineString.class);
}
@Override
public LineString createDomainObject(LineStringDTO lineStringDTO) throws AssemblyException{
LineString lineString = new LineString();
List<List<Double>> collectionCoordinates = new ArrayList<List<Double>>();
Collection<PointDTO> collectionPointDTO=lineStringDTO.getCollectionPointDTO();
for(PointDTO pointDTO: collectionPointDTO){
Point point=pointAssembler.createDomainObject(pointDTO);
List<Double> coordinates=point.getCoordinates();
collectionCoordinates.add(coordinates);
}
lineString.setCoordinates(collectionCoordinates);
if(lineStringDTO.getCentroidDTO()!=null){
List<Double> centroid = new ArrayList<Double>();
centroid.add(lineStringDTO.getCentroidDTO().getLongitude());
centroid.add(lineStringDTO.getCentroidDTO().getLatitude());
lineString.setCentroid(centroid);
}
return lineString;
}
@Override
public LineStringDTO createDataTransferObject(LineString lineString) throws AssemblyException{
LineStringDTO lineStringDTO = new LineStringDTO();
List<PointDTO> collectionPointDTO = new ArrayList<PointDTO>();
List<List<Double>> collectionCoordinates=lineString.getCoordinates();
for(List<Double> coordinates: collectionCoordinates){
Point point=new Point();
point.setCoordinates(coordinates);
PointDTO pointDTO=pointAssembler.createDataTransferObject(point);
collectionPointDTO.add(pointDTO);
}
lineStringDTO.setCollectionPointDTO(collectionPointDTO);
if(lineString.getCentroid()!=null){
PointDTO centroidPointDTO=new PointDTO();
centroidPointDTO.setLongitude(lineString.getCentroid().get(0));
centroidPointDTO.setLatitude(lineString.getCentroid().get(1));
lineStringDTO.setCentroidDTO(centroidPointDTO);
}
return lineStringDTO;
}
@Override
public Collection<LineStringDTO> createDataTransferObjects(Collection<LineString> lineStrings) throws AssemblyException{
Collection<LineStringDTO> lineStringsDTO = new ArrayList<LineStringDTO>();
for(LineString lineString:lineStrings){
lineStringsDTO.add(createDataTransferObject(lineString));
}
return lineStringsDTO;
}
}