Index: /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/LabeledMultiDigraph.java
===================================================================
--- /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/LabeledMultiDigraph.java (revision 267)
+++ /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/LabeledMultiDigraph.java (revision 273)
@@ -13,15 +13,16 @@
 
 public class LabeledMultiDigraph {
-    List<List<LabeledEdge>> adjlist;
+    //List<List<LabeledEdge>> adjlist;
+    List<Map<Integer,List<LabeledEdge>>> labelededges;
     List<String> labels;
     HashMap<String,Integer> labelednodes;
-    List<Map<Integer,List<LabeledEdge>>> gadjlist; // grouped adj list: node, node-edge list
+    //List<Map<Integer,List<LabeledEdge>>> gadjlist; // grouped adj list: node, node-edge list
     
     public class LabeledEdge{
-        Integer node;
+        boolean direction;
         Object label;
         
-        public LabeledEdge(Integer node, Object label){
-            this.node = node;
+        public LabeledEdge(boolean dir, Object label){
+            this.direction = dir;
             this.label = label;
         }
@@ -33,8 +34,9 @@
     
     public LabeledMultiDigraph(){
-        adjlist = new ArrayList<List<LabeledEdge>>();
+        //adjlist = new ArrayList<List<LabeledEdge>>();
+        labelededges = new ArrayList<Map<Integer,List<LabeledEdge>>>();
         labels = new LinkedList<String>();
         labelednodes = new HashMap<String, Integer>();
-        gadjlist = new ArrayList<Map<Integer,List<LabeledEdge>>>();
+        //gadjlist = new ArrayList<Map<Integer,List<LabeledEdge>>>();
     }
     
@@ -42,23 +44,30 @@
         labelednodes.put(label, labels.size());
         labels.add(label);
-        adjlist.add(new LinkedList<LabeledEdge>());
-        gadjlist.add(new HashMap<Integer, List<LabeledEdge>>());
+        //adjlist.add(new LinkedList<LabeledEdge>());
+        //gadjlist.add(new HashMap<Integer, List<LabeledEdge>>());
+        labelededges.add(new HashMap<Integer, List<LabeledEdge>>());
     }
     
-    public void addEdge(Integer node1, Integer node2, Object elabel){
+    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);
         
-        Map<Integer, List<LabeledEdge>> edges = gadjlist.get(node1);
-        List<LabeledEdge> sedge = edges.get(node2);
-        if ( sedge == null ){
-            sedge = new LinkedList<LabeledEdge>();
-            edges.put(node2, sedge);
+        //LabeledEdge edge = new LabeledEdge(node2,elabel);
+        //adjlist.get(node1).add(edge);
+        List<LabeledEdge> edgesf = labelededges.get(node1).get(node2);
+        if ( edgesf == null ){
+            edgesf = new LinkedList<LabeledEdge>();
+            labelededges.get(node1).put(node2, edgesf);
         }
-        sedge.add(edge);
+        edgesf.add(new LabeledEdge(true, elabel));
+        
+        List<LabeledEdge> edgesr = labelededges.get(node2).get(node1);
+        if ( edgesr == null ){
+            edgesr = new LinkedList<LabeledEdge>();
+            labelededges.get(node2).put(node1, edgesr);
+        }
+        edgesr.add(new LabeledEdge(false, elabel));
     }
 }
Index: /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java
===================================================================
--- /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java (revision 271)
+++ /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java (revision 273)
@@ -17,33 +17,5 @@
     List<String> nodeType;
     String sparqlEndpoint;
-    Map<String, Boolean> checkedpaths;
     
-    /*
-    public class LinkAndPath{
-        String originalClassURI; // originalClasssURI -classLink.propertyURI-> classLink.linkedClassURL
-        ClassLink classLink;
-        List<ClassLink> path;
-        Set<String> classURIs; // apearing class URIs in the path
-        
-        
-        public LinkAndPath(ClassLink classLink, List<ClassLink> path){
-           this.classLink = classLink;
-           this.path = path;
-        }
-        
-        public LinkAndPath(ClassLink classLink, List<ClassLink> path, String originalClassURI){
-           this.classLink = classLink;
-           this.path = path;
-           this.originalClassURI = originalClassURI;
-        }
-
-        public LinkAndPath(ClassLink classLink, List<ClassLink> path, String originalClassURI, Set<String> classURIs){
-           this.classLink = classLink;
-           this.path = path;
-           this.originalClassURI = originalClassURI;
-           this.classURIs = classURIs;
-        }
-    }*/
-
     public OWLClassGraph(){ // not used
         super();
@@ -57,20 +29,10 @@
     }
     
-    /*
-    public OWLClassGraph(RDFSchemaAnalyzer rdfsa, String sparqlEndpoint, String startClass){ // used
+    public OWLClassGraph(RDFSchemaAnalyzerFactory rdfsaf){ 
         super();
         nodeType = new LinkedList<String>();
-        setPartClassGraph(rdfsa, sparqlEndpoint, startClass);
+        //setClassGraph(rdfsaf);
     }
-    */
-
-    public int getNumberOfEdge(String url){
-        Integer node = labelednodes.get(url);
-        if (node == null){
-            return 0;
-        }
-        return adjlist.get(node).size();
-    }
-        
+    
     public Path[] getPaths(String startClass, String endClass){
         List<List<ClassLink>> paths = searchPaths(startClass, endClass);
@@ -93,5 +55,4 @@
             }
             // using length of path
-            //int rankwidth = (int) ( ( min * nsteps )/ crrpath.size() );
             path.setWidth(500000 - crrpath.size()*100000 + min);
             sortedpaths.add(path);
@@ -110,6 +71,4 @@
     
     private List<List<ClassLink>> searchPaths(String startClass, String endClass){
-        //int asked = 0;
-        checkedpaths = new HashMap<String, Boolean>();
         List<List<ClassLink>> paths = new ArrayList<>();
         Integer snode = labelednodes.get(startClass);
@@ -118,6 +77,4 @@
         
         ListIterator<List<Integer>> pit = simplePaths.listIterator();
-        //System.out.println("SPATH:");
-        //System.out.println(simplePaths.size());
         while( pit.hasNext()){
             List<Integer> spath = pit.next();
@@ -142,5 +99,5 @@
                 List<Integer> crrpath = lit.next();
                 Integer crrnode = crrpath.get(crrpath.size()-1);
-                Set<Integer> nexts = gadjlist.get(crrnode).keySet();
+                Set<Integer> nexts = labelededges.get(crrnode).keySet();
                 Iterator<Integer> nit = nexts.iterator();
                 while( nit.hasNext() ){
@@ -157,5 +114,5 @@
 	    }
             lp = nextlp;
-        }        
+        }
         return simplePaths;
     }
@@ -168,5 +125,5 @@
         String startClass = this.labels.get(start);
         Integer end = spit.next();
-        List<LabeledEdge> edges = gadjlist.get(start).get(end);
+        List<LabeledEdge> edges = labelededges.get(start).get(end);
         ListIterator<LabeledEdge> eit = edges.listIterator();
         while ( eit.hasNext() ){
@@ -179,5 +136,5 @@
             end = spit.next();
             // start-end
-            edges = gadjlist.get(start).get(end);
+            edges = labelededges.get(start).get(end);
             List<List<ClassLink>> tmppaths = new LinkedList<List<ClassLink>>();            
             // current path
@@ -195,5 +152,5 @@
             paths = tmppaths;
             start = end;
-        }        
+        }
         return paths;
     }
@@ -233,105 +190,4 @@
             }
         }       
-    }
-
-    /*
-    public void setPartClassGraph(RDFSchemaAnalyzer rdfsa, String sparqlEndpoint, String startClass){
-        // set endpoint
-        this.sparqlEndpoint = sparqlEndpoint;
-        visited = new HashSet<Integer>();
-        edgeweight = new LinkedList<Map<Integer,Integer>>();
-        nodeweight = new LinkedList<Integer>();
-        // setNodes for all classes
-        SClass[] classes = null;
-        try{
-           classes = rdfsa.getOWLClasses(null, null, null, true);
-        }catch(Exception e){
-           System.err.println(e); return;
-        }
-        for (int i = 0 ; i < classes.length; i++){
-           addNode(classes[i].getClassURI());
-           nodeType.add("class");
-           edgeweight.add(new HashMap<Integer,Integer>());
-           nodeweight.add(classes[i].getNumOfInstances());
-        }
-        // setEdges
-        Integer snode = labelednodes.get(startClass);
-        Set<Integer> nodes = new HashSet<Integer>();
-        nodes.add(snode);
-        visited.add(snode);
-        for (int i = 0 ; i < nsteps; i++ ){
-            Iterator<Integer> nit = nodes.iterator();
-            Set<Integer> nextnodes = new HashSet<Integer>();
-            while ( nit.hasNext() ){
-                Integer crr = nit.next();
-                try{
-                    ClassLink[] classLinks = rdfsa.getNextClass(null, labels.get(crr), limit, true);
-                    for (int j = 0 ; j < classLinks.length; j++){
-                        Integer nn = labelednodes.get(classLinks[j].getLinkedClassURI());
-                        if ( nn == null ){
-                            continue;
-                        }
-                        if ( !visited.contains(nn) ){
-                            nextnodes.add(nn);
-                        }
-                        addEdge(crr, nn, classLinks[j]);
-                        updateWeight(crr, nn, classLinks[j]);
-                    }
-                }catch(Exception e){
-                    e.printStackTrace();
-                }
-            }
-            nodes = nextnodes;
-            visited.addAll(nodes);
-        }
-        // cut visited
-        Iterator<Integer> nit = visited.iterator();
-        while(nit.hasNext()){
-            Integer node = nit.next();
-            if ( ! node.equals(snode) ){
-                List<List<Integer>> paths = searchSimplePaths(snode, node);
-                if ( paths.isEmpty()){
-                    nit.remove();
-                }
-            }
-        }
-    }       
-    */
-    /*
-    private void updateWeight(Integer node1, Integer node2, ClassLink edge){
-        Map<Integer, Integer> weight = edgeweight.get(node1);
-        Integer crr = weight.get(node2);
-        if (crr == null ){
-            crr = edge.getNumOfLinkedClassInstances();
-            weight.put(node2, crr);           
-        }
-        if ( crr < edge.getNumOfLinkedClassInstances() ){
-            crr = edge.getNumOfLinkedClassInstances();
-            weight.put(node2, crr);
-        }
-        weight = edgeweight.get(node2);
-        crr = weight.get(node1);
-        if (crr == null ){
-            crr = edge.getNumOfOriginClassInstances();
-            weight.put(node1, crr);
-        }
-        if ( crr < edge.getNumOfOriginClassInstances() ){
-            crr = edge.getNumOfOriginInstances();
-            weight.put(node1, crr);
-        }
-    }
-    
-    public List<String> getReachableClasses(){
-        List<String> clURIs = new LinkedList<String>();
-        if ( visited == null ){
-            return null;
-        }
-        Iterator<Integer> vit = visited.iterator();
-        while( vit.hasNext() ){
-            Integer vn = vit.next();
-            clURIs.add(labels.get(vn));
-        }
-        return clURIs;
-    }
-    */
+    }    
 }
Index: /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/QueryPathGenerator.java
===================================================================
--- /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/QueryPathGenerator.java (revision 271)
+++ /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/OWL/QueryPathGenerator.java (revision 273)
@@ -17,5 +17,5 @@
 public class QueryPathGenerator {
     private RDFSchemaAnalyzerFactory factory = null;
-    private HashMap<String, RDFSchemaAnalyzer> analyzers = null;
+    RDFSchemaAnalyzer analyzer = null;
     private OWLClassGraph graph;
 
@@ -24,42 +24,22 @@
     private static final String CDIR = "cdata";
     private static final String ODIR = "owldata";
-            
+    
     public QueryPathGenerator(){
         factory = new RDFSchemaAnalyzerFactory(CDIR);
+        try{
+            analyzer = factory.create();
+        }catch(Exception e){
+            System.err.println(e);            
+        }
     }
 
-    /*
-    public QueryPathGenerator(String sparqlEndpoint){
-        factory = new RDFSchemaAnalyzerFactory(CDIR);
-        setSPARQLendpoint(sparqlEndpoint);
-    }
-    */
-    
-    /*public void setOWLClassGraph(String startClass){
-        graph = new OWLClassGraph(analyzer, sparqlEndpoint, startClass);
-    }*/
-    
-    public SClass[] getClassesByEndpoint(String ep){
-        RDFSchemaAnalyzer analyzer = analyzers.get(ep);
-        try {
-            return analyzer.getOWLClasses(null, null);
-        }catch(Exception e){
-            System.err.println(e);
-            return null;
-        }
-    } 
-
-    public SClass[] getClasses(String keyword){
-        return getClassList(keyword).toArray(new SClass[0]);
+    public SClass[] getClasses(){
+        return getClassList().toArray(new SClass[0]);
     }
 
-    public List<SClass> getClassList(String keyword){
-        Iterator<RDFSchemaAnalyzer> ait = analyzers.values().iterator();
-        List<SClass> cl = new LinkedList<SClass>();
+    public List<SClass> getClassList(){
+        List<SClass> cl = null;
         try {
-            while ( ait.hasNext() ){
-                RDFSchemaAnalyzer analyzer = ait.next();
-                cl.addAll(analyzer.getOWLClassList(null, null));
-            }
+            cl = new LinkedList<SClass>(analyzer.getOWLClassList(null, null));
         }catch(Exception e){
             System.err.println(e);
@@ -79,24 +59,7 @@
     }
     
-    /*
-    public void setSPARQLendpoint(String sparqlEndpoint){
-        this.sparqlEndpoint = sparqlEndpoint;
-        setAnalyzer();
-    }
-    */
-    
     public RDFSchemaAnalyzerFactory getFactory(){
         return factory;
     }
-
-    /*
-    private void setAnalyzer(){
-        try {
-            analyzer = factory.create(sparqlEndpoint);
-        } catch (Exception e) {
-            System.err.println(e);
-        }
-    }
-    */
     
     public String getClassLabel(String classURI){
@@ -210,7 +173,7 @@
             String label = getClassLabel(uri);
             StringBuilder classbuilder = new StringBuilder(label);
-            classbuilder.append("  ");
+            classbuilder.append("\t");
             classbuilder.append(classes[i].getNumOfInstances());
-            classbuilder.append("  ");
+            classbuilder.append("\t");
             classbuilder.append(uri);
             sortedClasses.add(classbuilder.toString());
Index: /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/www/PLServlet.java
===================================================================
--- /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/www/PLServlet.java (revision 268)
+++ /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/www/PLServlet.java (revision 273)
@@ -85,5 +85,5 @@
             qpg = new QueryPathGenerator();
         }
-        SClass[] classes = qpg.getClasses(null);
+        SClass[] classes = qpg.getClasses();
         qpg.setClassLabels(classes);
         
Index: /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/www/CLServlet.java
===================================================================
--- /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/www/CLServlet.java (revision 268)
+++ /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/www/CLServlet.java (revision 273)
@@ -75,43 +75,28 @@
 	PrintWriter out = response.getWriter();
         String ep = request.getParameter("ep");
+        String classURI = request.getParameter("class");
         
         HttpSession session = request.getSession();
         QueryPathGenerator qpg = (QueryPathGenerator)session.getAttribute("qpg");
         SortedSet<String> sortedClasses = null;
+        SClass[] classes = null;
+        JsonBuilderFactory jbfactory = Json.createBuilderFactory(null);
+        JsonObjectBuilder job = jbfactory.createObjectBuilder();
+        JsonArray ja = null;
                 
         if ( qpg == null ){
             qpg = new QueryPathGenerator();
         }
-        if ( ep == null ){
-            JsonBuilderFactory jbfactory = Json.createBuilderFactory(null);
-            JsonObjectBuilder job = jbfactory.createObjectBuilder();
-
-            String[] eplist = qpg.getFactory().getEndpointURIList();
-            for ( int i = 0; i < eplist.length; i++ ){
-                try{
-                    SClass[] classes = qpg.getClassesByEndpoint(eplist[i]);
-                    sortedClasses = qpg.getSortedClasses(classes);
-                    JsonArray ja = getJsonArrayFromSortedClasses(jbfactory, sortedClasses);
-                    job.add(eplist[i], ja);                    
-                }catch(Exception e){
-                    System.err.println(e);
-                }
+        if ( classURI == null ){
+            try{
+                classes = qpg.getClasses();
+            }catch(Exception e){
+                System.err.println(e);
             }
-            JsonObject jo = job.build();
-            out.print(jo);
-            return;
-        }
-        String classURI = request.getParameter("class");
-        SClass[] classes = null;
-        if ( classURI != null ){
-            //qpg.setOWLClassGraph(classURI); // KOKO
-            //classes = qpg.getReachableClasses();
         }else{
-            classes = qpg.getClasses(null);
+            //classes = qpg.getAdjclasses(classURI);
         }
         sortedClasses = qpg.getSortedClasses(classes);
-        
-        JsonBuilderFactory jbfactory = Json.createBuilderFactory(null);
-        JsonArray ja = getJsonArrayFromSortedClasses(jbfactory, sortedClasses);
+        ja = getJsonArrayFromSortedClasses(jbfactory, sortedClasses);
         out.print(ja);
     }
@@ -148,5 +133,5 @@
         while( cit.hasNext() ){
             String classinfo = cit.next();
-            String[] data = classinfo.split("  "); 
+            String[] data = classinfo.split("\t"); 
             if (data.length != 3 ){
                 System.out.println("data is wrong?");
@@ -164,5 +149,5 @@
         while( cit.hasNext() ){
             String classinfo = cit.next();
-            String[] data = classinfo.split("  "); 
+            String[] data = classinfo.split("\t"); 
             if (data.length != 3 ){
                 System.out.println("data is wrong?");
Index: /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/www/SPServlet.java
===================================================================
--- /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/www/SPServlet.java (revision 267)
+++ /SPARQLBuilderWWW2016/src/java/org/biohackathon/SPARQLBuilder/www/SPServlet.java (revision 273)
@@ -165,8 +165,7 @@
 	//			 numOfOriginClassInstances,  numOfLinkedClassInstances,
 	//			false, false);
-             ClassLink classLink =new ClassLink(propertyURI, linkedClassURI, linkedLiteralDatatypeURI, myDirection, 
+             ClassLink classLink = new ClassLink(propertyURI, linkedClassURI, linkedLiteralDatatypeURI, myDirection, 
 				 0,  0,  0,
-				 0,  0,
-				false, false);
+				 0,  0);
             System.out.println(classLink.getDirection().toString());  
            list.add(classLink);
