package assemblers;
import models.Coordinate;
import DTO.CoordinateDTO;
/**
* Assembler for the CoordinateDTO and Coordinate classes.
*
* @see CoordinateDTO
* @see Coordinate
* @author Alex Jarvis axj7@aber.ac.uk
*/
public class CoordinateAssembler {
/**
* Writes a CoordinateDTO from a Coordinate object.
* @param coordinate
* @return
*/
public static CoordinateDTO writeDTO(Coordinate coordinate) {
if (coordinate != null) {
CoordinateDTO coordinateDTO = new CoordinateDTO();
coordinateDTO.latitude = coordinate.getLatitude();
coordinateDTO.longitude = coordinate.getLongitude();
return coordinateDTO;
}
return null;
}
/**
* Creates and returns a Coordinate from a CoordinateDTO
* @param coordinateDTO
* @return
*/
public static Coordinate createCoordinate(CoordinateDTO coordinateDTO) {
return createOrUpdateCoordinate(coordinateDTO);
}
/**
* Updates and returns a Coordinate using a CoordinateDTO
* @param coordinateDTO
* @return
*/
public static Coordinate updateCoordinate(CoordinateDTO coordinateDTO) {
return createOrUpdateCoordinate(coordinateDTO);
}
/**
* Creating and updating a Coordinate has the same logic because the unique key constraint requires
* that the application check for an existing Coordinate before creating a new one and similarly when
* updating a Coordinate.
* @param coordinateDTO
* @return
*/
private static Coordinate createOrUpdateCoordinate(CoordinateDTO coordinateDTO) {
Coordinate coordinate = Coordinate.find("byLatitudeAndLongitude", coordinateDTO.latitude, coordinateDTO.longitude).first();
if (coordinate == null) {
coordinate = new Coordinate(coordinateDTO.latitude, coordinateDTO.longitude);
coordinate.create();
}
return coordinate;
}
}