Revision 1513
Added by Jing Tao over 21 years ago
src/edu/ucsb/nceas/metacat/PermissionController.java | ||
---|---|---|
366 | 366 |
} |
367 | 367 |
}//if |
368 | 368 |
}//for |
369 |
// merge the subtree if a subtree is another subtree'subtree |
|
370 |
resultUnaccessableSubTree = mergeIntoBigSubtree(resultUnaccessableSubTree); |
|
369 | 371 |
return resultUnaccessableSubTree; |
370 | 372 |
}//hasUnaccessableSubtree |
371 | 373 |
|
374 |
|
|
375 |
/* |
|
376 |
* A method to merge nested subtree into bigger one. For example subtree b |
|
377 |
* is a subtree of subtree a. And user doesn't have read permission for both |
|
378 |
* so we only use subtree a is enough. |
|
379 |
*/ |
|
380 |
private Hashtable mergeIntoBigSubtree(Hashtable unAccessSubTree) |
|
381 |
{ |
|
382 |
Hashtable newSubTreeHash = new Hashtable(); |
|
383 |
boolean needDelete = false; |
|
384 |
// check the parameters |
|
385 |
if (unAccessSubTree == null || unAccessSubTree.isEmpty()) |
|
386 |
{ |
|
387 |
return newSubTreeHash; |
|
388 |
} |
|
389 |
else |
|
390 |
{ |
|
391 |
// look every subtree start point and stop point, to see if it is embedded |
|
392 |
// in another one. If embedded, they are equavelent and we can use bigger |
|
393 |
// one to replace smaller one |
|
394 |
Enumeration en = unAccessSubTree.elements(); |
|
395 |
while (en.hasMoreElements()) |
|
396 |
{ |
|
397 |
SubTree tree = (SubTree)en.nextElement(); |
|
398 |
String treeId = tree.getSubTreeId(); |
|
399 |
long startId = tree.getStartNodeId(); |
|
400 |
long endId = tree.getEndNodeId(); |
|
401 |
|
|
402 |
Enumeration enu = unAccessSubTree.elements(); |
|
403 |
while (enu.hasMoreElements()) |
|
404 |
{ |
|
405 |
SubTree subTree = (SubTree)enu.nextElement(); |
|
406 |
String subTreeId= subTree.getSubTreeId(); |
|
407 |
long subTreeStartId = subTree.getStartNodeId(); |
|
408 |
long subTreeEndId = subTree.getEndNodeId(); |
|
409 |
//compare and if the first subtree is a subtree of the second |
|
410 |
// one, set neeDelete true |
|
411 |
if (startId > subTreeStartId && endId < subTreeEndId) |
|
412 |
{ |
|
413 |
needDelete = true; |
|
414 |
MetaCatUtil.debugMessage("the subtree: "+ treeId + |
|
415 |
" need to be get rid of from unaccessable"+ |
|
416 |
" subtree list becuase it is a subtree of"+ |
|
417 |
" another subtree in the list", 45); |
|
418 |
break; |
|
419 |
}//if |
|
420 |
}//while |
|
421 |
// if not need to delete, put the subtree into hash |
|
422 |
if (!needDelete) |
|
423 |
{ |
|
424 |
newSubTreeHash.put(treeId, tree); |
|
425 |
} |
|
426 |
//reset needDelete |
|
427 |
needDelete = false; |
|
428 |
}//while |
|
429 |
return newSubTreeHash; |
|
430 |
}//else |
|
431 |
} |
|
432 |
|
|
372 | 433 |
/** |
373 | 434 |
* Check if a document id is a access document. Access document need user |
374 | 435 |
* has "all" permission to access it. |
Also available in: Unified diff
Add code to handle if a unaccessable subtree is another subtree of unaccessable subtree.