/*******************************************************************************
* Copyright (c) 2004, 2007 IBM Corporation and Cambridge Semantics Incorporated.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* File: $Source: /cvsroot/slrp/boca/com.ibm.adtech.boca.jastor/src/com/ibm/adtech/boca/jastor/util/graph/GraphMem.java,v $
* Created by:
* Created on: 01/23/2007
* Revision: $Id: GraphMem.java 172 2007-07-31 14:22:23Z mroy $
*
* Contributors:
* IBM Corporation - initial API and implementation
* Cambridge Semantics Incorporated - Fork to Anzo
*******************************************************************************/
package org.openanzo.rdf.jastor.util.graph;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
/**
* In memory graph
*
* @author Elias Torres ( <a href="mailto:eliast@us.ibm.com">eliast@us.ibm.com </a>)
*
*/
public class GraphMem extends GraphPartBase implements IGraph {
protected Map<String, IEdge> edgesByName = new TreeMap<String, IEdge>();
protected Map<String, INode> nodesByName = new TreeMap<String, INode>();
protected LinkedList<IEdge> edges = new LinkedList<IEdge>();
protected LinkedList<INode> nodes = new LinkedList<INode>();
/**
* Create memory graph
*
* @param name
* name of graph
*/
public GraphMem(String name) {
super(name);
}
INode getNode(String name) {
return nodesByName.get(name);
}
IEdge getEdge(String name) {
return edgesByName.get(name);
}
public INode getNodeByName(String name) {
return nodesByName.get(name);
}
public IEdge getEdgeByName(String name) {
return edgesByName.get(name);
}
public void addEdge(IEdge e) {
INode source = e.getSource();
INode dest = e.getDestination();
if (!contains(source) || !contains(dest)) {
//
}
((NodeMem) source).addOutgoingEdge((EdgeMem) e);
((NodeMem) dest).addIncomingEdge((EdgeMem) e);
((EdgeMem) e).setInGraph(this);
edgesByName.put(e.getName(), e);
edges.add(e);
}
public void addNode(INode n) {
((NodeMem) n).setInGraph(this);
nodesByName.put(n.getName(), n);
nodes.add(n);
}
public boolean contains(IEdge e) {
return edges.contains(e);
}
public boolean contains(INode n) {
return nodes.contains(n);
}
public List<IEdge> edges() {
return Collections.unmodifiableList(edges);
}
public List<INode> nodes() {
return Collections.unmodifiableList(nodes);
}
public int getEdgeCount() {
return edges.size();
}
public int getNodeCount() {
return nodes.size();
}
public boolean isEmpty() {
return (nodes.size() == 0);
}
/*
* (non-Javadoc)
*
* @see com.ibm.adtech.slingshot.graph.IGraph#removeEdge(com.ibm.adtech.slingshot.graph.IEdge)
*/
public void removeEdge(IEdge e) {
if (!edges.contains(e))
return;
((EdgeMem) e).setInGraph(null);
edgesByName.remove(e.getName());
edges.remove(e);
e.getSource().removeOutgoingEdge(e);
e.getDestination().removeIncomingEdge(e);
}
/*
* (non-Javadoc)
*
* @see com.ibm.adtech.slingshot.graph.IGraph#removeNode(com.ibm.adtech.slingshot.graph.INode)
*/
public void removeNode(INode n) {
if (!nodes.contains(n))
return;
((NodeMem) n).setInGraph(null);
nodesByName.remove(n.getName());
nodes.remove(n);
for (IEdge edge : n.getIncomingEdges()) {
removeEdge(edge);
}
for (IEdge edge : n.getOutgoingEdges()) {
removeEdge(edge);
}
}
}