package org.visico.neighborhoodpss.gwt.server.project.db; import java.io.Serializable; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; import org.visico.neighborhoodpss.domain.project.BuildingDTO; import org.visico.neighborhoodpss.domain.project.GeoPointDTO; /** 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 * */ @Entity @Table(name="BUILDING") public class Building implements Serializable { // label is automatically created @Id @GeneratedValue private int id; @Transient private double area; @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name="building_id") private List<GeoPoint> points = new ArrayList<GeoPoint>(); @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name="building_id") private List<BuildingData> data = new ArrayList<BuildingData>(); @Transient private BuildingDTO dto_object = null; /** * */ private static final long serialVersionUID = -6838190883337046022L; public Building(BuildingDTO b) { this.dto_object = b; this.setArea(b.getArea()); this.setId(b.getId()); ArrayList<GeoPoint> pts = new ArrayList<GeoPoint>(); Iterator<GeoPointDTO> it = b.getPoints().iterator(); while (it.hasNext()) { pts.add(new GeoPoint(it.next())); } this.setPoints(pts); } public Building() { } public List<GeoPoint> getPoints() { return points; } public void setPoints(ArrayList<GeoPoint> points) { this.points = points; } 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 List<BuildingData> getData() { return data; } public void setData(List<BuildingData> data) { this.data = data; } public void update_dtoIds() { this.dto_object.setId(this.id); Iterator<GeoPoint> pit = this.points.iterator(); while(pit.hasNext()) { GeoPoint pt = pit.next(); pt.update_dtoIds(); } for (BuildingData d : data) { d.update_dtoIds(); } } public BuildingDTO getDto_object() { if (dto_object == null) { dto_object = new BuildingDTO(); dto_object.setId(this.getId()); dto_object.setArea(this.getArea()); for (GeoPoint p : points) dto_object.addPoint(p.getDto_object()); for (BuildingData d : data) { dto_object.getData().put(d.getType().getDto_object(), d.getDto_object()); } } return dto_object; } public void setDto_object(BuildingDTO dto_object) { this.dto_object = dto_object; } }