package com.bitmonlab.osiris.api.core.map.assemblers;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.inject.Named;
import com.bitmonlab.osiris.api.core.map.exceptions.LatitudeValueException;
import com.bitmonlab.osiris.api.core.map.exceptions.LongitudeValueException;
import com.bitmonlab.osiris.api.core.map.transferobject.PointDTO;
import com.bitmonlab.osiris.commons.map.model.geojson.Point;
import com.bitmonlab.osiris.core.assembler.SimpleAssembler;
@Named("PointAssembler")
public class PointAssemblerImpl extends SimpleAssembler<PointDTO, Point>{
final private Double LONGITUDE_MIN = -180.0;
final private Double LONGITUDE_MAX = 180.0;
final private Double LATITUDE_MIN = -90.0;
final private Double LATITUDE_MAX = 90.0;
public PointAssemblerImpl() {
super(PointDTO.class,Point.class);
}
@Override
public Point createDomainObject(PointDTO pointDTO) throws LongitudeValueException,LatitudeValueException{
Point point = new Point();
List<Double> coordinates = new ArrayList<Double>();
if(pointDTO.getLongitude()< LONGITUDE_MIN || pointDTO.getLongitude() > LONGITUDE_MAX){
throw new LongitudeValueException();
}
if(pointDTO.getLatitude()< LATITUDE_MIN || pointDTO.getLatitude() > LATITUDE_MAX){
throw new LatitudeValueException();
}
coordinates.add(pointDTO.getLongitude());
coordinates.add(pointDTO.getLatitude());
point.setCoordinates(coordinates);
return point;
}
@Override
public PointDTO createDataTransferObject(Point point){
PointDTO pointDTO = new PointDTO();
List<Double> coordinates=point.getCoordinates();
pointDTO.setLongitude(coordinates.get(0));
pointDTO.setLatitude(coordinates.get(1));
return pointDTO;
}
@Override
public Collection<PointDTO> createDataTransferObjects(Collection<Point> points){
Collection<PointDTO> pointsDTO = new ArrayList<PointDTO>();
for(Point point:points){
pointsDTO.add(createDataTransferObject(point));
}
return pointsDTO;
}
}