Changeset 29523 for main/trunk
- Timestamp:
- 2014-12-03T12:42:45+13:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/AbstractGS2DocumentRetrieve.java
r28966 r29523 229 229 if (index == -1) { 230 230 // metadata is for this node 231 Vector<String> values = info.getMultiInfo(metadata); 232 return values; 231 return info.getMultiInfo(metadata); 233 232 } 234 233 // we need to get metadata for one or more different nodes … … 236 235 String relation_id=""; 237 236 metadata = metadata.substring(index + 1); 238 if (relation.equals("parent") || relation.equals("ancestors")) { 237 if (relation.equals("root")) { 238 relation_id = OID.getTop(node_id); 239 if (relation_id.equals(node_id)) { 240 // use the current node info 241 return info.getMultiInfo(metadata); 242 } else { 243 return getMetaValuesForOID(relation_id, metadata); 244 } 245 } 246 if (relation.equals("parent")) { 239 247 relation_id = OID.getParent(node_id); 240 248 if (relation_id.equals(node_id)) { 249 // no parent 241 250 return null; 242 251 } 243 } else if (relation.equals("root")) { 244 relation_id = OID.getTop(node_id); 245 } 246 247 DBInfo relation_info; 248 if (relation_id.equals(node_id)) { 249 relation_info = info; 250 } else { 251 relation_info = this.coll_db.getInfo(relation_id); 252 } 253 if (relation_info == null) 254 { 252 return getMetaValuesForOID(relation_id, metadata); 253 } 254 255 if (relation.equals("ancestors")) { 256 if (OID.isTop(node_id)) { 255 257 return null; 256 258 } 257 258 Vector<String> values = relation_info.getMultiInfo(metadata); 259 // do resolving 260 if (!relation.equals("ancestors")){ 259 String current_id = node_id; 260 relation_id = OID.getParent(current_id); 261 Vector<String> values = new Vector<String>(); 262 while (!relation_id.equals(current_id)) { 263 264 Vector<String> more_values = getMetaValuesForOID(relation_id, metadata); 265 if (more_values != null) { 266 values.addAll(0, more_values); 267 } 268 current_id = relation_id; 269 relation_id = OID.getParent(current_id); 270 } 261 271 return values; 262 272 } 263 264 // ancestors: go up the chain 265 266 String current_id = relation_id; 267 relation_id = OID.getParent(current_id); 268 while (!relation_id.equals(current_id)) 269 { 270 relation_info = this.coll_db.getInfo(relation_id); 271 if (relation_info == null) 272 return values; 273 if (relation.equals("siblings")) { 274 String parent_id = OID.getParent(node_id); 275 if (parent_id.equals(node_id)) { 276 // no parent, therefore no siblings 277 return null; 278 } 279 // siblings is the same as asking for children of the parent 280 node_id = parent_id; 281 relation = "children"; 282 current_info = this.coll_db.getInfo(parent_id); 283 if (current_info == null) { 284 return null; 285 } 286 } 287 if (relation.equals("children")) { 288 Vector<String> values = new Vector<String>(); 289 String contains = current_info.getInfo("contains"); 290 contains = StringUtils.replace(contains, "\"", node_id); 291 String[] children = contains.split(";"); 292 for (int i = 0; i < children.length; i++) { 273 293 274 Vector<String> more_values = relation_info.getMultiInfo(metadata); 275 if (more_values != null) 276 { 277 values.addAll(0, more_values); 278 } 294 String child_id = children[i]; 295 Vector<String> more_values = getMetaValuesForOID(child_id, metadata); 296 if (more_values != null) { 297 values.addAll(more_values); 298 } 299 } 300 return values; 301 } 302 if (relation.equals("descendents")) { 303 return null; 304 } 305 // unknown relation 306 logger.error("asked for relation "+relation+" and don't understand it."); 307 return null; 308 } 309 310 // } else { 311 // if (relation.equals("parent") || relation.equals("ancestors")) { 312 // relation_id = OID.getParent(node_id); 313 // if (relation_id.equals(node_id)) { 314 // return null; 315 // } 316 // } else if (relation.equals("root")) { 317 // relation_id = OID.getTop(node_id); 318 // } 319 320 // DBInfo relation_info; 321 // if (relation_id.equals(node_id)) { 322 // relation_info = info; 323 // } else { 324 // relation_info = this.coll_db.getInfo(relation_id); 325 // } 326 // if (relation_info == null) 327 // { 328 // return null; 329 // } 330 331 // Vector<String> values = relation_info.getMultiInfo(metadata); 332 // // do resolving 333 // if (!relation.equals("ancestors")){ 334 // return values; 335 // } 336 337 // // ancestors: go up the chain 338 339 // String current_id = relation_id; 340 // relation_id = OID.getParent(current_id); 341 // while (!relation_id.equals(current_id)) 342 // { 343 // relation_info = this.coll_db.getInfo(relation_id); 344 // if (relation_info == null) 345 // return values; 346 347 // Vector<String> more_values = relation_info.getMultiInfo(metadata); 348 // if (more_values != null) 349 // { 350 // values.addAll(0, more_values); 351 // } 279 352 280 353 281 current_id = relation_id; 282 relation_id = OID.getParent(current_id); 283 } 284 return values; // for now 285 } 286 354 // current_id = relation_id; 355 // relation_id = OID.getParent(current_id); 356 // } 357 // return values; // for now 358 // } 359 360 protected Vector<String> getMetaValuesForOID(String oid, String metadata) { 361 DBInfo info = this.coll_db.getInfo(oid); 362 if (info == null) { 363 return null; 364 } 365 366 Vector<String> values = info.getMultiInfo(metadata); 367 // lets look through the values and look for [xxx] things. We need to look up metadata for them. 368 if (values == null) { return values; } 369 370 for (int j = 0; j < values.size(); j++) { 371 String val = values.elementAt(j); 372 if (val.contains("[")) { 373 // look for metadata refs 374 String [] metas = StringUtils.substringsBetween(val, "[", "]"); 375 for (int i=0; i<metas.length; i++) { 376 String meta = metas[i]; 377 String meta_val = info.getInfo(meta); 378 if (!meta_val.equals("")) { 379 val = StringUtils.replace(val,"["+meta+"]",meta_val); 380 } 381 } 382 values.set(j,val); 383 } 384 } 385 return values; 386 } 287 387 protected int getNumChildren(String node_id) 288 388 {
Note:
See TracChangeset
for help on using the changeset viewer.