Changeset 22319
- Timestamp:
- 2010-06-28T17:28:42+12:00 (14 years ago)
- Location:
- main/trunk/greenstone3/src/java/org/greenstone/gsdl3
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/AbstractGS2DocumentRetrieve.java
r21663 r22319 123 123 /** if id ends in .fc, .pc etc, then translate it to the correct id */ 124 124 protected String translateId(String node_id) { 125 return this.coll_db.translateOID(node_id);125 return OID.translateOID(this.coll_db, node_id); //return this.coll_db.translateOID(node_id); 126 126 } 127 127 -
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/FedoraServiceProxy.java
r22307 r22319 53 53 */ 54 54 public class FedoraServiceProxy 55 extends ServiceRack 55 extends ServiceRack implements OID.OIDTranslatable 56 56 { 57 57 … … 417 417 protected String translateId(String id) { 418 418 if (OID.needsTranslating(id)) { 419 return translateOID(id); 420 } 421 return id;} 419 return OID.translateOID(this, id); //return translateOID(id); 420 } 421 return id; 422 } 422 423 423 424 /** if an id is not a greenstone id (an external id) then translate … … 434 435 * a suffix is expected to be present so test before using 435 436 */ 436 public String translateOID(String oid) { 437 int p = oid.lastIndexOf('.'); 438 if (p != oid.length()-3) { 439 logger.info("translateoid error: '.' is not the third to last char!!"); 440 return oid; 441 } 442 443 String top = oid.substring(0, p); 444 String suff = oid.substring(p+1); 445 446 // just in case we have multiple extensions, we must translate 447 // we process inner ones first 448 if (OID.needsTranslating(top)) { 449 top = translateOID(top); 450 } 451 if (suff.equals("pr")) { 452 return OID.getParent(top); 453 } 454 if (suff.equals("rt")) { 455 return OID.getTop(top); 456 } 457 if (suff.equals("np")) { 458 // try first child 459 460 String node_id = translateOID(top+".fc"); 461 if (!node_id.equals(top)) { 462 return node_id; 463 } 464 465 // try next sibling 466 node_id = translateOID(top+".ns"); 467 if (!node_id.equals(top)) { 468 return node_id; 469 } 470 // otherwise we keep trying parents sibling 471 String child_id = top; 472 String parent_id = OID.getParent(child_id); 473 while(!parent_id.equals(child_id)) { 474 node_id = translateOID(parent_id+".ns"); 475 if (!node_id.equals(parent_id)) { 476 return node_id; 477 } 478 child_id = parent_id; 479 parent_id = OID.getParent(child_id); 480 } 481 return top; // we couldn't get a next page, so just return the original 482 } 483 if (suff.equals("pp")) { 484 String prev_sib = translateOID(top+".ps"); 485 if (prev_sib.equals(top)) { 486 // no previous sibling, so return the parent 487 return OID.getParent(top); 488 } 489 // there is a previous sibling, so its either this section, or the last child of the last child 490 String last_child = translateOID(prev_sib+".lc"); 491 while (!last_child.equals(prev_sib)) { 492 prev_sib = last_child; 493 last_child = translateOID(prev_sib+".lc"); 494 } 495 return last_child; 496 } 497 498 int sibling_num = 0; 499 if (suff.equals("ss")) { 500 // we have to remove the sib num before we get top 501 p = top.lastIndexOf('.'); 502 sibling_num = Integer.parseInt(top.substring(p+1)); 503 top = top.substring(0, p); 504 } 505 506 // need to get info out of Fedora 507 String doc_id = top; 508 if (suff.endsWith("s")) { 509 doc_id = OID.getParent(top); 510 if (doc_id.equals(top)) { 511 // i.e. we are already at the top 512 return top; 513 } 514 } 515 437 public String processOID(String doc_id, String top, String suff, int sibling_num) { 438 516 439 // send off request to get sibling etc. information from Fedora 517 440 Element response = null; -
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/GS2Browse.java
r15326 r22319 107 107 /** if id ends in .fc, .pc etc, then translate it to the correct id */ 108 108 protected String translateId(String node_id) { 109 return this.coll_db.translateOID(node_id);109 return OID.translateOID(this.coll_db, node_id); //return this.coll_db.translateOID(node_id); 110 110 } 111 111 -
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/OID.java
r18503 r22319 19 19 package org.greenstone.gsdl3.util; 20 20 21 import org.apache.log4j.*; 22 21 23 /** utility class to handle greenstone OIDs 22 24 * … … 24 26 */ 25 27 public class OID { 28 29 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.util.OID.class.getName()); 30 31 public interface OIDTranslatable { 32 public String processOID(String doc_id, String top, String suffix, int sibling_num); 33 } 26 34 27 35 /** returns everything up to the first dot … … 102 110 return child.startsWith(parent); 103 111 } 112 113 114 /** translates relative oids into proper oids: 115 * .pr (parent), .rt (root) .fc (first child), .lc (last child), 116 * .ns (next sibling), .ps (previous sibling) 117 * .np (next page), .pp (previous page) : links sections in the order that you'd read the document 118 * a suffix is expected to be present so test before using 119 * Other classes can implement the method processOID of interface OIDTranslatable 120 * to process the oid further to handle siblings. 121 */ 122 public static String translateOID(OIDTranslatable translator, String oid) { 123 int p = oid.lastIndexOf('.'); 124 if (p != oid.length()-3) { 125 logger.info("translateoid error: '.' is not the third to last char!!"); 126 return oid; 127 } 128 129 String top = oid.substring(0, p); 130 String suff = oid.substring(p+1); 131 132 // just in case we have multiple extensions, we must translate 133 // we process inner ones first 134 if (OID.needsTranslating(top)) { 135 top = OID.translateOID(translator, top); 136 } 137 if (suff.equals("pr")) { 138 return OID.getParent(top); 139 } 140 if (suff.equals("rt")) { 141 return OID.getTop(top); 142 } 143 if (suff.equals("np")) { 144 // try first child 145 146 String node_id = OID.translateOID(translator, top+".fc"); 147 if (!node_id.equals(top)) { 148 return node_id; 149 } 150 151 // try next sibling 152 node_id = OID.translateOID(translator, top+".ns"); 153 if (!node_id.equals(top)) { 154 return node_id; 155 } 156 // otherwise we keep trying parents sibling 157 String child_id = top; 158 String parent_id = OID.getParent(child_id); 159 while(!parent_id.equals(child_id)) { 160 node_id = OID.translateOID(translator, parent_id+".ns"); 161 if (!node_id.equals(parent_id)) { 162 return node_id; 163 } 164 child_id = parent_id; 165 parent_id = OID.getParent(child_id); 166 } 167 return top; // we couldn't get a next page, so just return the original 168 } 169 if (suff.equals("pp")) { 170 String prev_sib = OID.translateOID(translator, top+".ps"); 171 if (prev_sib.equals(top)) { 172 // no previous sibling, so return the parent 173 return OID.getParent(top); 174 } 175 // there is a previous sibling, so it's either this section, or the last child of the last child 176 String last_child = OID.translateOID(translator, prev_sib+".lc"); 177 while (!last_child.equals(prev_sib)) { 178 prev_sib = last_child; 179 last_child = OID.translateOID(translator, prev_sib+".lc"); 180 } 181 return last_child; 182 } 183 184 int sibling_num = 0; 185 if (suff.equals("ss")) { 186 // we have to remove the sib num before we get top 187 p = top.lastIndexOf('.'); 188 sibling_num = Integer.parseInt(top.substring(p+1)); 189 top = top.substring(0, p); 190 } 191 192 // need to get info out of Fedora 193 String doc_id = top; 194 if (suff.endsWith("s")) { 195 doc_id = OID.getParent(top); 196 if (doc_id.equals(top)) { 197 // i.e. we are already at the top 198 return top; 199 } 200 } 201 202 return translator.processOID(doc_id, top, suff, sibling_num); 203 204 } 104 205 } -
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/SimpleCollectionDatabase.java
r16797 r22319 21 21 import org.apache.log4j.*; 22 22 23 public class SimpleCollectionDatabase {23 public class SimpleCollectionDatabase implements OID.OIDTranslatable { 24 24 25 25 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.util.SimpleCollectionDatabase.class.getName()); … … 136 136 return null; 137 137 } 138 139 /** translates relative oids into proper oids: 138 139 /** After OID.translateOID() is through, this method processes OID further 140 * to translate relative oids into proper oids: 140 141 * .pr (parent), .rt (root) .fc (first child), .lc (last child), 141 142 * .ns (next sibling), .ps (previous sibling) … … 143 144 * a suffix is expected to be present so test before using 144 145 */ 145 public String translateOID(String oid) { 146 147 int p = oid.lastIndexOf('.'); 148 if (p != oid.length()-3) { 149 logger.info("translateoid error: '.' is not the third to last char!!"); 150 return oid; 151 } 152 153 String top = oid.substring(0, p); 154 String suff = oid.substring(p+1); 155 // just in case we have multiple extensions, we must translate 156 // we process inner ones first 157 if (OID.needsTranslating(top)) { 158 top = translateOID(top); 159 } 160 if (suff.equals("pr")) { 161 return OID.getParent(top); 162 } 163 if (suff.equals("rt")) { 164 return OID.getTop(top); 165 } 166 if (suff.equals("np")) { 167 // try first child 168 String node_id = translateOID(top+".fc"); 169 if (!node_id.equals(top)) { 170 return node_id; 171 } 172 // try next sibling 173 node_id = translateOID(top+".ns"); 174 if (!node_id.equals(top)) { 175 return node_id; 176 } 177 // otherwise we keep trying parents sibling 178 String child_id = top; 179 String parent_id = OID.getParent(child_id); 180 while(!parent_id.equals(child_id)) { 181 node_id = translateOID(parent_id+".ns"); 182 if (!node_id.equals(parent_id)) { 183 return node_id; 184 } 185 child_id = parent_id; 186 parent_id = OID.getParent(child_id); 187 } 188 return top; // we couldn't get a next page, so just return the original 189 } 190 if (suff.equals("pp")) { 191 String prev_sib = translateOID(top+".ps"); 192 if (prev_sib.equals(top)) { 193 // no previous sibling, so return the parent 194 return OID.getParent(top); 195 } 196 // there is a previous sibling, so its either this section, or the last child of the last child.. 197 String last_child = translateOID(prev_sib+".lc"); 198 while (!last_child.equals(prev_sib)) { 199 prev_sib = last_child; 200 last_child = translateOID(prev_sib+".lc"); 201 } 202 return last_child; 203 } 204 205 int sibling_num = 0; 206 if (suff.equals("ss")) { 207 // we have to remove the sib num before we get top 208 p = top.lastIndexOf('.'); 209 sibling_num = Integer.parseInt(top.substring(p+1)); 210 top = top.substring(0, p); 211 } 212 213 // need to get info out of collection db - 214 String doc_id = top; 215 if (suff.endsWith("s")) { 216 doc_id = OID.getParent(top); 217 if (doc_id.equals(top)) { 218 // i.e. we are already at the top 219 return top; 220 } 221 } 222 DBInfo info = getInfo(doc_id); 146 public String processOID(String doc_id, String top, String suff, int sibling_num) { 147 DBInfo info = getInfo(doc_id); 223 148 if (info==null) { 224 149 logger.info("info is null!!"); … … 264 189 265 190 return top; 266 }191 } 267 192 }
Note:
See TracChangeset
for help on using the changeset viewer.