/**
* This file is part of Path Computation Element Emulator (PCEE).
*
* PCEE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PCEE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PCEE. If not, see <http://www.gnu.org/licenses/>.
*/
package com.graph.graphcontroller.impl;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import com.graph.elements.edge.EdgeElement;
import com.graph.elements.vertex.VertexElement;
import com.graph.graphcontroller.Gcontroller;
import com.graph.jdsl.impl.JDSLGraphImpl;
import com.graph.logger.GraphLogger;
public class GcontrollerImpl implements Gcontroller{
/**JDSL Graph Implementation*/
protected JDSLGraphImpl graph;
public GcontrollerImpl(){
graph= new JDSLGraphImpl();
}
private static final String classIdentifier = "Gcontroller";
public boolean aConnectingEdge(String vertexID1, String vertexID2) {
return graph.edgeExists(vertexID1, vertexID2);
}
public boolean aConnectingEdge(VertexElement vertex1, VertexElement vertex2) {
return graph.edgeExists(vertex1.getVertexID(), vertex2.getVertexID());
}
public EdgeElement getConnectingEdge(String sourceID, String destinationID) {
return graph.getConnectingEdge(sourceID, destinationID);
}
public EdgeElement getConnectingEdge(VertexElement source, VertexElement destination) {
return graph.getConnectingEdge(source.getVertexID(), destination.getVertexID());
}
public EdgeElement getEdge(String edgeID) {
return graph.getEdgeElement(edgeID);
}
public VertexElement getVertex(String vertexID) {
return graph.getVertexElement(vertexID);
}
public Set<EdgeElement> getEdgeSet() {
Set<EdgeElement> edgeSet = new HashSet<EdgeElement>();
Iterator<String> iter = getEdgeIDSet().iterator();
while (iter.hasNext()){
edgeSet.add(graph.getEdgeElement(iter.next()));
}
return edgeSet;
}
public Set<VertexElement> getVertexSet() {
Set<VertexElement> vertexSet = new HashSet<VertexElement>();
Iterator<String> iter = getVertexIDSet().iterator();
while (iter.hasNext()){
vertexSet.add(graph.getVertexElement(iter.next()));
}
return vertexSet;
}
public Set<String> getEdgeIDSet() {
return graph.getEdgeIdSet();
}
public Set<String> getVertexIDSet() {
return graph.getVertexIdSet();
}
public void addVertex(VertexElement vertex) {
if (this.vertexExists(vertex)==false){
this.graph.addVertex(vertex);
}
else
GraphLogger.logMsg("Vertex already exists", classIdentifier);
}
/**Function to add an edge in the graph. Also responsible for inserting the edges in the VertexElements*/
public void addEdge(EdgeElement edge) {
// if (this.aConnectingEdge(edge.getSourceVertex(), edge.getDestinationVertex())==false){
if (this.graph.addEdge(edge))
{
edge.getSourceVertex().insertConnectedEdge(edge);
edge.getDestinationVertex().insertConnectedEdge(edge);
}
else
GraphLogger.logMsg("Error inserting edge in the graph", classIdentifier);
// }
// else
// Logger.logMsg("Edge already exists", classIdentifier);
}
public boolean vertexExists(String vertexID) {
return this.getVertexIDSet().contains(vertexID);
}
public boolean vertexExists(VertexElement vertex) {
return this.getVertexIDSet().contains(vertex.getVertexID());
}
public Gcontroller createCopy() {
Gcontroller newController = new GcontrollerImpl();
Iterator<VertexElement> iter = this.getVertexSet().iterator();
while(iter.hasNext()){
VertexElement newVertex = iter.next().copyVertexElement(newController);
newController.addVertex(newVertex);
}
Iterator<EdgeElement> iter1 = this.getEdgeSet().iterator();
while(iter1.hasNext()){
EdgeElement newEdge = iter1.next().copyEdgeElement(newController);
newController.addEdge(newEdge);
}
return newController;
}
public ArrayList<EdgeElement> allConnectingEdges(String vertexID1,
String vertexID2) {
return graph.allConnectingEdges(vertexID1, vertexID2);
}
public ArrayList<EdgeElement> allConnectingEdges(VertexElement vertexID1,
VertexElement vertexID2) {
return graph.allConnectingEdges(vertexID1.getVertexID(), vertexID2.getVertexID());
}
}