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.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
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.GeoEdgeDTO;
import org.visico.neighborhoodpss.domain.project.GeoNetworkDTO;
import org.visico.neighborhoodpss.domain.project.NodeDTO;
@Entity
@Table(name="GEONETWORK")
public class GeoNetwork extends Network implements Cloneable, Serializable
{
/**
*
*/
private static final long serialVersionUID = 5457475366073332784L;
@Transient
private GeoNetworkDTO dto_object = null;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="network_id")
private List<Node> nodes = new ArrayList<Node>();
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="network_id")
private List<GeoEdge> edges = new ArrayList<GeoEdge>();
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "NETWORK_BUILDING",
joinColumns = @JoinColumn(name="network_id"),
inverseJoinColumns = @JoinColumn(name = "building_id")
)
private List<Building> buildings = new ArrayList<Building>();
public List<Node> getNodes() {
return nodes;
}
public void setNodes(List<Node> nodes) {
this.nodes = nodes;
}
public List<GeoEdge> getEdges() {
return edges;
}
public void setEdges(List<GeoEdge> edges) {
this.edges = edges;
}
public List<Building> getBuildings() {
return buildings;
}
public void setBuildings(List<Building> buildings) {
this.buildings = buildings;
}
public GeoNetwork()
{
}
public GeoNetwork(GeoNetworkDTO dto)
{
this.dto_object = dto;
this.setId(dto.getId());
this.setName(dto.getName());
this.setColor(dto.getColor());
ArrayList<Node> nds = new ArrayList<Node>();
Iterator<NodeDTO> nit = dto.getNodes().iterator();
while(nit.hasNext())
{
nds.add(new Node(nit.next()));
}
this.setNodes(nds);
ArrayList<GeoEdge> eds = new ArrayList<GeoEdge>();
Iterator<GeoEdgeDTO> eit = dto.getEdges().iterator();
while(eit.hasNext())
{
eds.add(new GeoEdge(eit.next()));
}
this.setEdges(eds);
}
public void update_dtoIds() {
this.dto_object.setId(this.id);
this.dto_object.setColor(this.getColor());
Iterator<Node> nit = this.nodes.iterator();
while(nit.hasNext())
{
Node n = nit.next();
n.update_dtoIds();
}
Iterator<GeoEdge> eit = this.edges.iterator();
while(eit.hasNext())
{
GeoEdge e = eit.next();
e.update_dtoIds();
}
Iterator<Building> bit = this.buildings.iterator();
while(bit.hasNext())
{
Building b = bit.next();
b.update_dtoIds();
}
}
public GeoNetworkDTO getDto_object() {
if (dto_object == null)
{
dto_object = new GeoNetworkDTO();
dto_object.setId(this.getId());
dto_object.setName(this.getName());
dto_object.setColor(this.getColor());
for (Node n : nodes)
dto_object.addNode(n.getDto_object());
for (GeoEdge e : edges)
dto_object.addEdge(e.getDto_object());
}
return dto_object;
}
public void setDto_object(GeoNetworkDTO dto_object) {
this.dto_object = dto_object;
}
}