| 124 | |
| 125 | private List<List<ClassLink>> searchPathsWithCut(OWLQueryBuilderImpl qb){ |
| 126 | List<List<ClassLink>> paths = new ArrayList<>(); |
| 127 | ClassLink crrLink = new ClassLink(null,startClass,Direction.both,0); |
| 128 | List<LinkAndPath> lp = new LinkedList<>(); |
| 129 | lp.add(new LinkAndPath(crrLink, new LinkedList<ClassLink>())); |
| 130 | try{ |
| 131 | for ( int i = 0; i < nsteps; i++ ){ |
| 132 | ListIterator<LinkAndPath> lit = lp.listIterator(); |
| 133 | List<LinkAndPath> nextlp = new LinkedList<>(); |
| 134 | while ( lit.hasNext() ){ |
| 135 | LinkAndPath crrlp = lit.next(); |
| 136 | ClassLink[] classLinks = null; |
| 137 | classLinks = qb.getNextClassViaInstanceLink(null, crrlp.classLink.getLinkedClassURI(), limit); |
| 138 | for ( int j = 0 ; j < classLinks.length; j++ ){ |
| 139 | List<ClassLink> crrpath = new LinkedList<>(crrlp.path); |
| 140 | crrpath.add(classLinks[j]); |
| 141 | if ( classLinks[j].getLinkedClassURI().equals(endClass) ){ |
| 142 | paths.add(new LinkedList<>(crrpath)); |
| 143 | continue; |
| 144 | } |
| 145 | boolean con = false; |
| 146 | double cont = 1.0; |
| 147 | if ( cont > th ){ // shrink |
| 148 | con = true; |
| 149 | } |
| 150 | if ( crrlp.converge == true && con == false ){ // converge & 縲diverge |
| 151 | continue; // cut |
| 152 | } |
| 153 | nextlp.add(new LinkAndPath(classLinks[j], crrpath, con)); |
| 154 | } |
| 155 | } |
| 156 | lp = nextlp; |
| 157 | } |
| 158 | }catch(Exception e){ |
| 159 | System.err.println(e); |
| 160 | } |
| 161 | return paths; |
| 162 | } |
| 163 | |