/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.biohackathon.SPARQLBuilder.OWL; /** * * @author atsuko */ import java.util.*; public class LabeledMultiDigraph { //List> adjlist; List>> labelededges; List labels; HashMap labelednodes; //List>> gadjlist; // grouped adj list: node, node-edge list public class LabeledEdge{ boolean direction; Object label; public LabeledEdge(boolean dir, Object label){ this.direction = dir; this.label = label; } public Object getLabel(){ return label; } } public LabeledMultiDigraph(){ //adjlist = new ArrayList>(); labelededges = new ArrayList>>(); labels = new LinkedList(); labelednodes = new HashMap(); //gadjlist = new ArrayList>>(); } public void addNode(String label){ labelednodes.put(label, labels.size()); labels.add(label); //adjlist.add(new LinkedList()); //gadjlist.add(new HashMap>()); labelededges.add(new HashMap>()); } public void addEdge(Integer node1, Integer node2, Object elabel){ // node 1 -> node2 if ( labels.size() < node1 || labels.size() < node2 ){ System.err.println("Error for Edge Addition: No Node for the Edge"); return; } //LabeledEdge edge = new LabeledEdge(node2,elabel); //adjlist.get(node1).add(edge); List edgesf = labelededges.get(node1).get(node2); if ( edgesf == null ){ edgesf = new LinkedList(); labelededges.get(node1).put(node2, edgesf); } edgesf.add(new LabeledEdge(true, elabel)); List edgesr = labelededges.get(node2).get(node1); if ( edgesr == null ){ edgesr = new LinkedList(); labelededges.get(node2).put(node1, edgesr); } edgesr.add(new LabeledEdge(false, elabel)); } }