/* * 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 OWLClassGraph extends LabeledMultiDigraph{ String startClass; String endClass; int nsteps; int limit; public class LinkAndPath{ ClassLink classLink; List path; public LinkAndPath(ClassLink classLink, List path){ this.classLink = classLink; this.path = path; } } public OWLClassGraph(String startClass, String endClass){ super(); this.startClass = startClass; addNode(startClass); this.endClass = endClass; addNode(endClass); nsteps = 2; limit = 1000; } public void generateGraph(List> paths){ ListIterator> pit = paths.listIterator(); while( pit.hasNext() ){ List cls = pit.next(); String start = startClass; ListIterator cit = cls.listIterator(); while ( cit.hasNext() ){ // KOKO } } } public Path[] getPaths(OWLQueryBuilderImpl qb, int mode, boolean countLink){ List> paths = searchPaths(qb, mode, countLink); Path[] patharray = new Path[paths.size()]; ListIterator> pit = paths.listIterator(); int i = 0; while ( pit.hasNext() ){ patharray[i] = new Path(); patharray[i].setStartClass(startClass); List path = pit.next(); patharray[i].setClassLinks(path); ListIterator cit = path.listIterator(); int min = Integer.MAX_VALUE; while ( cit.hasNext() ){ ClassLink cl = cit.next(); if ( cl.getNumOfLinks() < min ){ min = cl.getNumOfLinks(); } } patharray[i].setWidth(min); i++; } return patharray; } /* private List> searchPathsFromOWL(OWLQueryBuilderImpl qb){ return searchPathsEngine(qb, 0); } private List> searchPathsFromInstances(OWLQueryBuilderImpl qb){ return searchPathsEngine(qb, 1); } */ private List> searchPaths(OWLQueryBuilderImpl qb, int mode, boolean countLinks){ List> paths = new ArrayList<>(); ClassLink crrLink = new ClassLink(null,startClass,Direction.both,0); List lp = new LinkedList<>(); lp.add(new LinkAndPath(crrLink, new LinkedList())); try{ for ( int i = 0; i < nsteps; i++ ){ ListIterator lit = lp.listIterator(); List nextlp = new LinkedList<>(); while ( lit.hasNext() ){ LinkAndPath crrlp = lit.next(); if ( crrlp.classLink.getLinkedClassURI().equals(endClass) ){ continue; } ClassLink[] classLinks = null; // Mode if ( mode == 0 ){ classLinks = qb.getNextClass(null, crrlp.classLink.getLinkedClassURI(), limit, countLinks); }else if ( mode == 1 ){ classLinks = qb.getNextClassViaInstanceLink(null, crrlp.classLink.getLinkedClassURI(), limit); }else{ System.err.println("Mode is not correct."); } for ( int j = 0 ; j < classLinks.length; j++ ){ List crrpath = new LinkedList<>(crrlp.path); crrpath.add(classLinks[j]); if ( classLinks[j].getLinkedClassURI().equals(endClass) ){ paths.add(new LinkedList<>(crrpath)); } nextlp.add(new LinkAndPath(classLinks[j],crrpath)); } } lp = nextlp; } }catch(Exception e){ System.err.println(e); } return paths; } }