package org.visico.neighborhoodpss.domain.project; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import com.google.gwt.user.client.rpc.IsSerializable; /** shared class to wrap the building polygon class. This allows saving buildings without polygons, * sending them to the server. Buildings are stored with the scenario class. On viewing or saving a * map all BuildingPolygon instances are converted to this class or generated from this class. * @author timo * */ public class BuildingDTO implements Cloneable, IsSerializable { // label is automatically created private int id; private double area; private List<GeoPointDTO> points = new ArrayList<GeoPointDTO>(); private Map<BuildingDataTypeDTO, BuildingDataDTO> data = new HashMap<BuildingDataTypeDTO, BuildingDataDTO>(); public BuildingDTO() { } public BuildingDTO (BuildingDTO toCopy) { // do not copy id - id is assigned by a database // the copy should not have yet an id to signify // that it is not yet in the db and has to created // instead of updated this.setArea(toCopy.getArea()); // need to clone the points as well Iterator<GeoPointDTO> it = toCopy.getPoints().iterator(); while (it.hasNext()) { GeoPointDTO b = it.next(); this.getPoints().add(new GeoPointDTO(b)); } for (Entry<BuildingDataTypeDTO, BuildingDataDTO> dt : toCopy.getData().entrySet()) this.getData().put(dt.getKey(), new BuildingDataDTO(dt.getValue())); } public void addVertex(double lat, double lon) { GeoPointDTO pt = new GeoPointDTO(); pt.setLatitude(lat); pt.setLongitude(lon); points.add(pt); } public List<GeoPointDTO> getPoints() { return points; } public void setPoints(ArrayList<GeoPointDTO> points) { this.points = points; } public void addPoint(GeoPointDTO p) { points.add(p); } public double getArea() { return area; } public void setArea(double area) { this.area = area; } public int getId() { return id; } public void setId(int id) { this.id = id; } public Map<BuildingDataTypeDTO, BuildingDataDTO> getData() { return data; } public void setData(Map<BuildingDataTypeDTO, BuildingDataDTO> data) { this.data = data; } }