package nl.helixsoft.graph; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; public class NetworkImpl implements Network { private Map<String, NodeImpl> nodes = new HashMap<String, NodeImpl>(); private List<EdgeImpl> edges = new ArrayList<EdgeImpl>(); /* (non-Javadoc) * @see uk.ac.ebi.sysbiomed.Network#createEdge(uk.ac.ebi.sysbiomed.NodeImpl, uk.ac.ebi.sysbiomed.NodeImpl, java.lang.String) */ @Override public void createEdge (Node src, Node dest, String predicate) { EdgeImpl e = new EdgeImpl (src, dest, predicate); edges.add(e); dest.getIncoming().add(e); src.getOutgoing().add(e); } /** * return all edges that run between src and dest */ public List<Edge> getEdges(Node src, Node dest) { List<Edge> result = new ArrayList<Edge>(); for (Edge e : edges) { if (e.getSrc().equals(src) && e.getDest().equals(dest)) { result.add(e); } } return result; } @Override public boolean exists(String id) { return nodes.containsKey(id); } /* (non-Javadoc) * @see uk.ac.ebi.sysbiomed.Network#createOrGetNode(java.lang.String) */ @Override public NodeImpl createOrGetNode (String name) { if (nodes.containsKey(name)) { return nodes.get(name); } else { NodeImpl n = new NodeImpl(name); nodes.put (name, n); return n; } } /* (non-Javadoc) * @see uk.ac.ebi.sysbiomed.Network#getNodes() */ @Override public Collection<NodeImpl> getNodes() { return nodes.values(); } /* (non-Javadoc) * @see uk.ac.ebi.sysbiomed.Network#getEdges() */ @Override public Collection<EdgeImpl> getEdges() { return edges; } /* (non-Javadoc) * @see uk.ac.ebi.sysbiomed.Network#getNodeAttributeSet() */ @Override public Set<String> getNodeAttributeSet() { Set<String> result = new HashSet<String>(); for (Node n : nodes.values()) { result.addAll (n.getAttributeSet()); } return result; } /* (non-Javadoc) * @see uk.ac.ebi.sysbiomed.Network#getNodeAttribute(java.lang.String) */ @Override public Map<String, Object> getNodeAttribute (String key) { Map<String, Object> result = new HashMap<String, Object>(); for (Node n : nodes.values()) { if (n.hasAttribute(key)) { result.put ("" + n.getId(), n.getAttribute(key)); } } return result; } }