taylor 2004/11/26 10:52:38
Modified: components/locator/src/java/org/apache/jetspeed/profiler/impl
JetspeedProfiledPageContext.java
components/page-manager/src/test/org/apache/jetspeed/page
TestCastorXmlPageManager.java
components/page-manager/src/java/org/apache/jetspeed/page/impl
CastorXmlPageManager.java AbstractPageManager.java
components/page-manager/src/java/org/apache/jetspeed/page/document
NodeSetImpl.java
components/page-manager/src/java/org/apache/jetspeed/om/folder/impl
FolderImpl.java
Log:
Nested Document Sets implementation in page manager, decorators, templates,
and demo site.
- Addition of getAll() method to jetspeed API Folder interface.
- Changes to CastorXmlPageManager/FolderImpl implementation and associated
unit tests for updating and removing PSML pages.
- Improved indenting in left menu pane for Tigris layout.
Note that an updated profiler/page manager design document is contained in
the "new" zip file.
To test nested document sets:
Login as user/user and validate nested document set named "More Pages"
appears within "Top Pages" and contains a new page and link to the Tigris
sample page.
patch from Randy Watler
Reviewed by: [EMAIL PROTECTED]
CVS: ----------------------------------------------------------------------
CVS: PR:
CVS: If this change addresses a PR in the problem report tracking
CVS: database, then enter the PR number(s) here.
CVS: Obtained from:
CVS: If this change has been taken from another system, such as NCSA,
CVS: then name the system in this line, otherwise delete it.
CVS: Submitted by:
CVS: If this code has been contributed to Apache by someone else; i.e.,
CVS: they sent us a patch or a new module, then include their name/email
CVS: address here. If this is your work then delete this line.
CVS: Reviewed by:
CVS: If we are doing pre-commit code reviews and someone else has
CVS: reviewed your changes, include their name(s) here.
CVS: If you have not had it reviewed then delete this line.
Revision Changes Path
1.3 +20 -7
jakarta-jetspeed-2/components/locator/src/java/org/apache/jetspeed/profiler/impl/JetspeedProfiledPageContext.java
Index: JetspeedProfiledPageContext.java
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/components/locator/src/java/org/apache/jetspeed/profiler/impl/JetspeedProfiledPageContext.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- JetspeedProfiledPageContext.java 15 Oct 2004 06:49:43 -0000 1.2
+++ JetspeedProfiledPageContext.java 26 Nov 2004 18:52:37 -0000 1.3
@@ -150,14 +150,27 @@
{
if ((name != null) && (documentSet != null) && (nodes != null))
{
- if (this.documentSets == null)
- {
- this.documentSetNames = new ArrayList(12);
- this.documentSets = new HashMap(12);
- }
+ addDocumentSet(name, documentSet, nodes);
this.documentSetNames.add(name);
- this.documentSets.put(name, new DocumentSetEntry(documentSet,
nodes));
}
+ }
+
+ public void setNestedDocumentSet(String name, DocumentSet documentSet,
NodeSet nodes)
+ {
+ if ((name != null) && (documentSet != null) && (nodes != null))
+ {
+ addDocumentSet(name, documentSet, nodes);
+ }
+ }
+
+ private void addDocumentSet(String name, DocumentSet documentSet,
NodeSet nodes)
+ {
+ if (this.documentSets == null)
+ {
+ this.documentSetNames = new ArrayList(12);
+ this.documentSets = new HashMap(12);
+ }
+ this.documentSets.put(name, new DocumentSetEntry(documentSet,
nodes));
}
private class DocumentSetEntry
1.17 +20 -21
jakarta-jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/TestCastorXmlPageManager.java
Index: TestCastorXmlPageManager.java
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/TestCastorXmlPageManager.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- TestCastorXmlPageManager.java 19 Nov 2004 03:06:44 -0000 1.16
+++ TestCastorXmlPageManager.java 26 Nov 2004 18:52:37 -0000 1.17
@@ -58,7 +58,7 @@
*/
public class TestCastorXmlPageManager extends TestCase
{
- private String testId = "test002";
+ private String testId = "/test002.psml";
protected CastorXmlPageManager pageManager;
protected DirectoryHelper dirHelper;
@@ -174,9 +174,9 @@
public void testGetPage() throws Exception
{
- Page testpage = pageManager.getPage("test001");
+ Page testpage = pageManager.getPage("/test001.psml");
assertNotNull(testpage);
- assertTrue(testpage.getId().equals("test001"));
+ assertTrue(testpage.getId().equals("/test001.psml"));
assertTrue(testpage.getTitle().equals("Test Page"));
assertTrue(testpage.getDefaultSkin().equals("test-skin"));
assertTrue(testpage.getDefaultDecorator(Fragment.LAYOUT).equals("test-layout"));
@@ -332,13 +332,12 @@
exceptionFound = true;
}
assertTrue(exceptionFound);
-
}
public void testFolders() throws Exception
{
- Folder folder1 = pageManager.getFolder("folder1");
+ Folder folder1 = pageManager.getFolder("/folder1");
assertNotNull(folder1);
assertEquals(2, folder1.getFolders().size());
@@ -346,17 +345,17 @@
// Test that the folders are naturally orderd
Folder folder2 = (Folder) childItr.next();
assertEquals("default-page.psml", folder2.getDefaultPage(true));
- assertEquals("folder1/folder2", folder2.getPath());
+ assertEquals("/folder1/folder2", folder2.getPath());
assertEquals("folder2", folder2.getName());
Folder folder3 = (Folder) childItr.next();
- assertEquals("folder1/folder3", folder3.getPath());
+ assertEquals("/folder1/folder3", folder3.getPath());
assertEquals("test001.psml", folder3.getDefaultPage(true));
assertEquals(1, folder2.getPages().size());
assertEquals(2, folder3.getPages().size());
// Check link order
- Iterator linkItr = folder3.getAllNodes().iterator();
+ Iterator linkItr = folder3.getAll().iterator();
assertEquals("Jetspeed2Wiki.link", ((Link)linkItr.next()).getName());
assertEquals("Jetspeed2.link", ((Link)linkItr.next()).getName());
assertEquals("apache_portals.link",
((Link)linkItr.next()).getName());
@@ -366,41 +365,41 @@
//Test FolderSet with both absolute and relative names
- assertNotNull(folder1.getFolders().get("folder1/folder2"));
+ assertNotNull(folder1.getFolders().get("/folder1/folder2"));
assertNotNull(folder1.getFolders().get("folder2"));
- assertEquals(folder1.getFolders().get("folder1/folder2"),
folder1.getFolders().get("folder2"));
+ assertEquals(folder1.getFolders().get("/folder1/folder2"),
folder1.getFolders().get("folder2"));
//Test PageSet with both absolute and relative names
-
assertNotNull(folder3.getPages().get("folder1/folder3/test001.psml"));
+
assertNotNull(folder3.getPages().get("/folder1/folder3/test001.psml"));
assertNotNull(folder3.getPages().get("test001.psml"));
- assertEquals("test001.psml",
folder3.getPages().get("folder1/folder3/test001.psml").getName());
+ assertEquals("test001.psml",
folder3.getPages().get("/folder1/folder3/test001.psml").getName());
assertTrue(folder3.isHidden());
assertTrue(folder3.getPage("default-page.psml").isHidden());
assertTrue(folder3.getLinks().get("Jetspeed2.link").isHidden());
assertFalse(folder3.getLinks().get("apache.link").isHidden());
- assertNotNull(folder3.getAllNodes().get("Jetspeed2.link"));
-
assertNull(folder3.getAllNodes().exclusiveSubset("Jetspeed2\\.link").get("Jetspeed2.link"));
-
assertNull(folder3.getAllNodes().inclusiveSubset("apache\\.link").get("Jetspeed2.link"));
-
assertNotNull(folder3.getAllNodes().inclusiveSubset("apache\\.link").get("apache.link"));
+ assertNotNull(folder3.getAll().get("Jetspeed2.link"));
+
assertNull(folder3.getAll().exclusiveSubset("Jetspeed2\\.link").get("Jetspeed2.link"));
+
assertNull(folder3.getAll().inclusiveSubset("apache\\.link").get("Jetspeed2.link"));
+
assertNotNull(folder3.getAll().inclusiveSubset("apache\\.link").get("apache.link"));
}
public void testFolderMetaData() throws Exception
{
- Folder folder1French = pageManager.getFolder("folder1");
+ Folder folder1French = pageManager.getFolder("/folder1");
;
assertEquals("Titre francais pour la chemise 1",
folder1French.getTitle(Locale.FRENCH));
assertEquals("Titre francais pour la chemise 1",
folder1French.getTitle(Locale.FRANCE));
- Folder folder1English = pageManager.getFolder("folder1");
+ Folder folder1English = pageManager.getFolder("/folder1");
assertEquals("English Title for Folder 1",
folder1English.getTitle(Locale.ENGLISH));
// check that default works
- Folder folder1German = pageManager.getFolder("folder1");
+ Folder folder1German = pageManager.getFolder("/folder1");
assertEquals("Default Title for Folder 1",
folder1German.getTitle(Locale.GERMAN));
@@ -413,7 +412,7 @@
public void testPageMetaData() throws Exception
{
- Page page = pageManager.getPage("default-page.psml");
+ Page page = pageManager.getPage("/default-page.psml");
assertNotNull(page);
String frenchTitle = page.getTitle(Locale.FRENCH);
assertNotNull(frenchTitle);
@@ -425,7 +424,7 @@
public void testLinks() throws Exception
{
- Link link = pageManager.getLink("apache_portals.link");
+ Link link = pageManager.getLink("/apache_portals.link");
assertNotNull(link);
assertEquals("http://portals.apache.org", link.getUrl());
assertEquals("Apache Portals Website", link.getTitle());
1.24 +173 -47
jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/CastorXmlPageManager.java
Index: CastorXmlPageManager.java
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/CastorXmlPageManager.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- CastorXmlPageManager.java 23 Nov 2004 00:01:31 -0000 1.23
+++ CastorXmlPageManager.java 26 Nov 2004 18:52:37 -0000 1.24
@@ -325,13 +325,10 @@
{
// expand and profile each document set
DocumentSet documentSet = (DocumentSet)
documentSetsIter.next();
- NodeSetImpl documentSetNodes = null;
- documentSetNodes =
expandAndProfileDocumentSet(pageContext.getLocators(), documentSet,
documentSetNodes);
+ NodeSetImpl documentSetNodes =
expandAndProfileDocumentSet(pageContext.getLocators(), documentSet, null, "",
documentSetNames, documentSetNodeSets);
if (documentSetNodes != null)
{
documentSets.add(documentSet);
- documentSetNames.put(documentSet,
documentSet.getUrl());
- documentSetNodeSets.put(documentSet,
documentSetNodes);
}
}
}
@@ -478,12 +475,10 @@
// expand document set using default
document set order
NodeSetImpl documentSetNodes = new
NodeSetImpl(null, documentComparator);
- documentSetNodes =
expandDocumentSet(documentSet, documentSetNodes);
+ documentSetNodes =
expandDocumentSet(documentSet, documentSetNodes, "", documentSetNames,
documentSetNodeSets);
if (documentSetNodes != null)
{
documentSets.add(documentSet);
- documentSetNames.put(documentSet,
documentSetPath);
- documentSetNodeSets.put(documentSet,
documentSetNodes);
}
}
}
@@ -512,7 +507,7 @@
populateProfiledPageContext(cachedPageContext, pageContext);
}
- private NodeSetImpl expandAndProfileDocumentSet(Map profileLocators,
DocumentSet documentSet, NodeSetImpl expandedNodes)
+ private NodeSetImpl expandAndProfileDocumentSet(Map profileLocators,
DocumentSet documentSet, NodeSetImpl expandedNodes, String
documentSetNamePrefix, Map documentSetNames, Map documentSetNodeSets)
{
// expand and profile document set using document set or default
// navigation profile locator
@@ -534,38 +529,101 @@
}
}
- // initialized expanded nodes collection with profiled
document/folder ordering
+ // prepare expanded nodes set with profiled document/folder ordering
if (expandedNodes == null)
{
// get document/folder ordering
List documentOrder = null;
- Iterator pathsIter = searchPaths.iterator();
- while ((documentOrder == null) && pathsIter.hasNext())
- {
- String folderPath = (String) pathsIter.next();
- if (folderPath.endsWith(Folder.PATH_SEPARATOR) &&
(folderPath.length() > 1))
- {
- folderPath = folderPath.substring(0,
folderPath.length()-1);
- }
- try
- {
- FolderImpl folder = (FolderImpl)
setProfiledNodePathAndUrl((AbstractNode) folderHandler.getFolder(folderPath));
- if ((folder.getMetaData() != null) &&
(folder.getMetaData().getDocumentOrder() != null) &&
- ! folder.getMetaData().getDocumentOrder().isEmpty())
+
+ // if document set is composed of a single path and might match
+ // more than one document, attempt to use path to determine
+ // document ordering if it is not root relative
+ List documentPaths = documentSet.getDefaultedDocumentPaths();
+ if (documentPaths.size() == 1)
+ {
+ DocumentSetPath documentSetPath = (DocumentSetPath)
documentPaths.get(0);
+ if (documentSetPath.isRegexp())
+ {
+ // enforce assumption that document set paths are
absolute
+ // and extract folder
+ String documentFolderPath =
forceAbsoluteDocumentSetPath(documentSetPath.getPath());
+ int lastSlashIndex =
documentFolderPath.lastIndexOf(Folder.PATH_SEPARATOR_CHAR);
+ if (lastSlashIndex > 2)
{
- documentOrder =
folder.getMetaData().getDocumentOrder();
+ // non-root document path
+ documentFolderPath = documentFolderPath.substring(0,
lastSlashIndex);
+
+ // iterate over search paths formed with document
path
+ Iterator pathsIter = searchPaths.iterator();
+ while ((documentOrder == null) &&
pathsIter.hasNext())
+ {
+ // search folder path
+ String folderPath = (String) pathsIter.next();
+ if (folderPath.endsWith(Folder.PATH_SEPARATOR))
+ {
+ folderPath = folderPath.substring(0,
folderPath.length()-1) + documentFolderPath;
+ }
+ else
+ {
+ folderPath = folderPath + documentFolderPath;
+ }
+
+ // check folder for document order
+ try
+ {
+ FolderImpl folder = (FolderImpl)
setProfiledNodePathAndUrl((AbstractNode) folderHandler.getFolder(folderPath));
+ if ((folder.getMetaData() != null) &&
(folder.getMetaData().getDocumentOrder() != null) &&
+ !
folder.getMetaData().getDocumentOrder().isEmpty())
+ {
+ documentOrder =
folder.getMetaData().getDocumentOrder();
+ }
+ }
+ catch (NodeException ne)
+ {
+ }
+ }
}
}
- catch (NodeException ne)
+ }
+
+ // fallback to root search paths to determine document ordering
+ if (documentOrder == null)
+ {
+ Iterator pathsIter = searchPaths.iterator();
+ while ((documentOrder == null) && pathsIter.hasNext())
{
+ // root search folder path
+ String folderPath = (String) pathsIter.next();
+ if (folderPath.endsWith(Folder.PATH_SEPARATOR) &&
(folderPath.length() > 1))
+ {
+ folderPath = folderPath.substring(0,
folderPath.length()-1);
+ }
+
+ // check folder for document order
+ try
+ {
+ FolderImpl folder = (FolderImpl)
setProfiledNodePathAndUrl((AbstractNode) folderHandler.getFolder(folderPath));
+ if ((folder.getMetaData() != null) &&
(folder.getMetaData().getDocumentOrder() != null) &&
+ !
folder.getMetaData().getDocumentOrder().isEmpty())
+ {
+ documentOrder =
folder.getMetaData().getDocumentOrder();
+ }
+ }
+ catch (NodeException ne)
+ {
+ }
}
}
- Comparator documentComparator = new
DocumentOrderComparator(documentOrder);
// create ordered node set
+ Comparator documentComparator = new
DocumentOrderComparator(documentOrder);
expandedNodes = new NodeSetImpl(null, documentComparator);
}
+ // save doucument set name, (limits recursive expansion)
+ String name = documentSetNamePrefix + documentSet.getUrl();
+ documentSetNames.put(documentSet, name);
+
// profile each document path using profile locator search paths
Iterator documentSetPathsIter =
documentSet.getDefaultedDocumentPaths().iterator();
while (documentSetPathsIter.hasNext())
@@ -607,15 +665,31 @@
Iterator pathNodesIter =
filterDocumentSet(folderHandler.getNodes(searchPath, regexp, null)).iterator();
while (pathNodesIter.hasNext())
{
- expandedNodes =
addUniqueOrDescribedUrlNode(expandedNodes,
setProfiledNodePathAndUrl((AbstractNode) pathNodesIter.next()));
+ AbstractNode pathNode =
setProfiledNodePathAndUrl((AbstractNode) pathNodesIter.next());
+ if (!(pathNode instanceof DocumentSet))
+ {
+ // add expanded document
+ expandedNodes =
addUniqueOrDescribedUrlNode(expandedNodes, pathNode);
+ }
+ else if (!documentSetNames.containsKey(pathNode))
+ {
+ // expand unique nested document set
+ if (expandAndProfileDocumentSet(profileLocators,
(DocumentSet)pathNode, null, name, documentSetNames, documentSetNodeSets) !=
null)
+ {
+ // add expanded document set
+ expandedNodes =
addUniqueOrDescribedUrlNode(expandedNodes, pathNode);
+ }
+ }
}
}
catch (NodeException ne)
{
}
}
-
}
+
+ // save and return expanded nodes
+ documentSetNodeSets.put(documentSet, expandedNodes);
return expandedNodes;
}
@@ -1274,7 +1348,7 @@
}
}
- private NodeSetImpl expandDocumentSet(DocumentSet documentSet,
NodeSetImpl expandedNodes)
+ private NodeSetImpl expandDocumentSet(DocumentSet documentSet,
NodeSetImpl expandedNodes, String documentSetNamePrefix, Map documentSetNames,
Map documentSetNodeSets)
{
// ignore document sets with profiling locator specified
if (documentSet.getProfileLocatorName() != null)
@@ -1283,12 +1357,18 @@
return null;
}
- // expand document set against managed repository only without
- // profiling; ignores document set profiling rules as well
+ // prepare expanded nodes set
if (expandedNodes == null)
{
expandedNodes = new NodeSetImpl(null);
}
+
+ // save doucument set name, (limits recursive expansion)
+ String name = documentSetNamePrefix + documentSet.getUrl();
+ documentSetNames.put(documentSet, name);
+
+ // expand document set against managed repository only without
+ // profiling; ignores document set profiling rules as well
Iterator documentSetPathsIter =
documentSet.getDefaultedDocumentPaths().iterator();
while (documentSetPathsIter.hasNext())
{
@@ -1310,12 +1390,32 @@
{
Iterator pathNodesIter =
filterDocumentSet(folderHandler.getNodes(path, regexp, null)).iterator();
while (pathNodesIter.hasNext())
- expandedNodes.add((AbstractNode) pathNodesIter.next());
+ {
+ AbstractNode pathNode = (AbstractNode)
pathNodesIter.next();
+ if (!(pathNode instanceof DocumentSet))
+ {
+ // add expanded document
+ expandedNodes.add(pathNode);
+ }
+ else if (!documentSetNames.containsKey(pathNode))
+ {
+ // expand unique nested document set
+ NodeSetImpl nodes = new NodeSetImpl(null,
expandedNodes.getComparator());
+ if (expandDocumentSet((DocumentSet)pathNode, nodes,
name, documentSetNames, documentSetNodeSets) != null)
+ {
+ // add expanded document set
+ expandedNodes.add(pathNode);
+ }
+ }
+ }
}
catch (NodeException ne)
{
}
}
+
+ // save and return expanded nodes
+ documentSetNodeSets.put(documentSet, expandedNodes);
return expandedNodes;
}
@@ -1361,20 +1461,20 @@
while (!filterRequired && setIter.hasNext())
{
AbstractNode node = (AbstractNode) setIter.next();
- filterRequired = (! (node instanceof Page) && ! (node instanceof
Folder) && ! (node instanceof Link));
+ filterRequired = (! (node instanceof Page) && ! (node instanceof
Folder) && ! (node instanceof Link) && ! (node instanceof DocumentSet));
}
if (! filterRequired)
{
return set;
}
- // filter expanded document set for pages, folders, and links
+ // filter expanded document set for pages, folders, links, and
document sets
NodeSet filteredSet = new NodeSetImpl(null);
setIter = set.iterator();
while (setIter.hasNext())
{
AbstractNode node = (AbstractNode) setIter.next();
- if ((node instanceof Page) || (node instanceof Folder) || (node
instanceof Link))
+ if ((node instanceof Page) || (node instanceof Folder) || (node
instanceof Link) || (node instanceof DocumentSet))
{
filteredSet.add(node);
}
@@ -1397,7 +1497,7 @@
public Page getPage(String path) throws PageNotFoundException,
FolderNotFoundException, NodeException
{
// get page via folder, (access checked in Folder.getPage())
- Folder folder = getNodeFolder(path);
+ FolderImpl folder = getNodeFolder(path);
return folder.getPage(getNodeName(path));
}
@@ -1411,9 +1511,19 @@
public void registerPage(Page page) throws JetspeedException
{
// make sure path and related members are set
- if (page.getPath() == null)
+ if ((page.getPath() == null) && (page.getId() != null))
{
- page.setPath(page.getId());
+ String path = page.getId();
+ if (!path.startsWith(Folder.PATH_SEPARATOR))
+ {
+ path = Folder.PATH_SEPARATOR + path;
+ }
+ if (!path.endsWith(Page.DOCUMENT_TYPE))
+ {
+ path += Page.DOCUMENT_TYPE;
+ }
+ page.setId(path);
+ page.setPath(path);
}
if (page.getPath() != null)
{
@@ -1422,16 +1532,27 @@
log.error("Page paths and ids must match!");
return;
}
- setProfiledNodePathAndUrl((AbstractNode)page);
- Folder folder = getNodeFolder(page.getPath());
- page.setParent(folder);
}
+ else
+ {
+ log.error("Page paths and ids must be set!");
+ return;
+ }
+ setProfiledNodePathAndUrl((AbstractNode)page);
// check for edit access
page.checkAccess(SecuredResource.EDIT_ACTION);
// register page
handlerFactory.getDocumentHandler(Page.DOCUMENT_TYPE).updateDocument(page);
+
+ // update folder
+ FolderImpl folder = getNodeFolder(page.getPath());
+ if (!folder.getAllNodes().contains(page))
+ {
+ folder.getAllNodes().add(page);
+ }
+ page.setParent(folder);
}
/**
@@ -1460,6 +1581,11 @@
// remove page
handlerFactory.getDocumentHandler(Page.DOCUMENT_TYPE).removeDocument(page);
+
+ // update folder
+ FolderImpl folder = getNodeFolder(page.getPath());
+ ((NodeSetImpl)folder.getAllNodes()).remove(page);
+ page.setParent(null);
}
/**
@@ -1478,7 +1604,7 @@
public Link getLink(String path) throws DocumentNotFoundException,
UnsupportedDocumentTypeException, FolderNotFoundException, NodeException
{
// get link via folder, (access checked in Folder.getLink())
- Folder folder = getNodeFolder(path);
+ FolderImpl folder = getNodeFolder(path);
return folder.getLink(getNodeName(path));
}
@@ -1498,7 +1624,7 @@
public DocumentSet getDocumentSet(String path) throws
DocumentNotFoundException, UnsupportedDocumentTypeException,
FolderNotFoundException, NodeException
{
// get document set via folder, (access checked in
Folder.getDocumentSet())
- Folder folder = getNodeFolder(path);
+ FolderImpl folder = getNodeFolder(path);
return folder.getDocumentSet(getNodeName(path));
}
@@ -1517,7 +1643,7 @@
public PageSecurity getPageSecurity() throws DocumentNotFoundException,
UnsupportedDocumentTypeException, FolderNotFoundException, NodeException
{
// get page security via folder, (always allow access)
- Folder folder = getNodeFolder(Folder.PATH_SEPARATOR);
+ FolderImpl folder = getNodeFolder(Folder.PATH_SEPARATOR);
return folder.getPageSecurity();
}
@@ -1542,14 +1668,14 @@
return folderHandler.getFolder(folderPath);
}
- private Folder getNodeFolder(String nodePath) throws NodeException,
InvalidFolderException
+ private FolderImpl getNodeFolder(String nodePath) throws NodeException,
InvalidFolderException
{
int folderIndex = nodePath.lastIndexOf(Folder.PATH_SEPARATOR);
if (folderIndex > 0)
{
- return folderHandler.getFolder(nodePath.substring(0,
folderIndex));
+ return (FolderImpl)
folderHandler.getFolder(nodePath.substring(0, folderIndex));
}
- return folderHandler.getFolder(Folder.PATH_SEPARATOR);
+ return (FolderImpl) folderHandler.getFolder(Folder.PATH_SEPARATOR);
}
private String getNodeName(String nodePath)
1.10 +64 -17
jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/AbstractPageManager.java
Index: AbstractPageManager.java
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/AbstractPageManager.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- AbstractPageManager.java 23 Nov 2004 00:01:32 -0000 1.9
+++ AbstractPageManager.java 26 Nov 2004 18:52:37 -0000 1.10
@@ -208,6 +208,7 @@
public NodeSet documentSets;
public Map documentSetNames;
public Map documentSetNodeSets;
+ public NodeSet nestedDocumentSets;
public CacheablePageContext(Page page, Folder folder, NodeSet
siblingPages, Folder parentFolder, NodeSet siblingFolders, NodeSet rootLinks,
NodeSet documentSets, Map documentSetNames, Map documentSetNodeSets)
{
@@ -221,6 +222,27 @@
this.documentSetNames = documentSetNames;
this.documentSetNodeSets = documentSetNodeSets;
+ // compute nested document sets nodes set: these
+ // do not appear in the document set but are mapped
+ // in docuemnt set names/node sets
+ if ((this.documentSetNames != null) && (this.documentSets !=
null) && (this.documentSetNames.size() > this.documentSets.size()))
+ {
+ Iterator mappedIter =
this.documentSetNames.entrySet().iterator();
+ while (mappedIter.hasNext())
+ {
+ Map.Entry mappedEntry = (Map.Entry)mappedIter.next();
+ DocumentSet documentSet =
(DocumentSet)mappedEntry.getKey();
+ if (!this.documentSets.contains(documentSet))
+ {
+ if (this.nestedDocumentSets == null)
+ {
+ this.nestedDocumentSets = new NodeSetImpl(null);
+ }
+ this.nestedDocumentSets.add(documentSet);
+ }
+ }
+ }
+
// debug profiled page context elements
if (log.isDebugEnabled())
{
@@ -267,27 +289,39 @@
Iterator debugIter = this.documentSets.iterator();
while (debugIter.hasNext())
{
- DocumentSet debug = (DocumentSet) debugIter.next();
- String debugName = (String)
this.documentSetNames.get(debug);
- NodeSet debugNodes = (NodeSet)
this.documentSetNodeSets.get(debug);
- String debugMessage = "document set " + debug + ",
name = " + debugName + ", nodes = {";
- Iterator nodesIter = debugNodes.iterator();
- if (nodesIter.hasNext())
- {
- debugMessage += ((Node)
nodesIter.next()).getUrl();
- }
- while (nodesIter.hasNext())
+ log.debug("CacheablePageContext(), " +
debugDocumentSetMessage((DocumentSet)debugIter.next()));
+ }
+ if ((this.nestedDocumentSets != null) &&
(this.nestedDocumentSets.size() > 0))
+ {
+ debugIter = this.nestedDocumentSets.iterator();
+ while (debugIter.hasNext())
{
- debugMessage += ", " + ((Node)
nodesIter.next()).getUrl();
+ log.debug("CacheablePageContext(), nested " +
debugDocumentSetMessage((DocumentSet)debugIter.next()));
}
- debugMessage += "}, url = " + debug.getUrl();
- log.debug("CacheablePageContext(), " + debugMessage);
}
}
else
log.debug("CacheablePageContext(),
documentSets/documentSetNames/documentSetNodeSets = null/empty");
}
}
+
+ private String debugDocumentSetMessage(DocumentSet debug)
+ {
+ String debugName = (String) this.documentSetNames.get(debug);
+ NodeSet debugNodes = (NodeSet)
this.documentSetNodeSets.get(debug);
+ String debugMessage = "document set " + debug + ", name = " +
debugName + ", nodes = {";
+ Iterator nodesIter = debugNodes.iterator();
+ if (nodesIter.hasNext())
+ {
+ debugMessage += ((Node) nodesIter.next()).getUrl();
+ }
+ while (nodesIter.hasNext())
+ {
+ debugMessage += ", " + ((Node) nodesIter.next()).getUrl();
+ }
+ debugMessage += "}, url = " + debug.getUrl();
+ return debugMessage;
+ }
}
protected void populateProfiledPageContext(CacheablePageContext
cachedPageContext, ProfiledPageContext pageContext)
@@ -305,10 +339,23 @@
Iterator documentSetIter =
checkAccess(cachedPageContext.documentSets,
SecuredResource.VIEW_ACTION).iterator();
while (documentSetIter.hasNext())
{
- DocumentSet documentSet = (DocumentSet)
documentSetIter.next();
- String documentSetName = (String)
cachedPageContext.documentSetNames.get(documentSet);
- NodeSet documentSetNodes = checkAccess((NodeSet)
cachedPageContext.documentSetNodeSets.get(documentSet),
SecuredResource.VIEW_ACTION);
+ // populate root document set
+ DocumentSet documentSet =
(DocumentSet)documentSetIter.next();
+ String documentSetName =
(String)cachedPageContext.documentSetNames.get(documentSet);
+ NodeSet documentSetNodes =
checkAccess((NodeSet)cachedPageContext.documentSetNodeSets.get(documentSet),
SecuredResource.VIEW_ACTION);
pageContext.setDocumentSet(documentSetName, documentSet,
documentSetNodes);
+ }
+ if (cachedPageContext.nestedDocumentSets != null)
+ {
+ Iterator nestedDocumentSetIter =
checkAccess(cachedPageContext.nestedDocumentSets,
SecuredResource.VIEW_ACTION).iterator();
+ while (nestedDocumentSetIter.hasNext())
+ {
+ // populate nested document set
+ DocumentSet documentSet =
(DocumentSet)nestedDocumentSetIter.next();
+ String documentSetName =
(String)cachedPageContext.documentSetNames.get(documentSet);
+ NodeSet documentSetNodes =
checkAccess((NodeSet)cachedPageContext.documentSetNodeSets.get(documentSet),
SecuredResource.VIEW_ACTION);
+ pageContext.setNestedDocumentSet(documentSetName,
documentSet, documentSetNodes);
+ }
}
}
}
1.7 +38 -4
jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/document/NodeSetImpl.java
Index: NodeSetImpl.java
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/document/NodeSetImpl.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- NodeSetImpl.java 21 Oct 2004 02:28:07 -0000 1.6
+++ NodeSetImpl.java 26 Nov 2004 18:52:37 -0000 1.7
@@ -105,13 +105,12 @@
*/
public void add( Node node )
{
- nodes.put(node.getPath(), node);
String path = node.getPath();
+ nodes.put(path, node);
if (subsets.containsKey(node.getType()))
{
((NodeSet) subsets.get(node.getType())).add(node);
}
-
}
/**
@@ -119,7 +118,7 @@
* size
* </p>
*
- * @see org.apache.jetspeed.om.page.DocumentSet#size()
+ * @see org.apache.jetspeed.page.document.NodeSet#size()
* @return
*/
public int size()
@@ -277,5 +276,40 @@
patternCache.put(regex, pattern);
return pattern;
}
+ }
+
+ /**
+ * <p>
+ * contains
+ * </p>
+ *
+ * @see org.apache.jetspeed.page.document.NodeSet#contains()
+ * @return
+ */
+ public boolean contains( Node node )
+ {
+ return nodes.values().contains(node);
+ }
+
+ /**
+ * <p>
+ * remove
+ * </p>
+ *
+ * @param node to remove
+ * @return removed node
+ */
+ public Node remove(Node node)
+ {
+ String path = node.getPath();
+ if (nodes.get(path) == node)
+ {
+ nodes.remove(path);
+ if (subsets.containsKey(node.getType()))
+ {
+ ((NodeSetImpl) subsets.get(node.getType())).remove(node);
+ }
+ }
+ return null;
}
}
1.21 +61 -9
jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/folder/impl/FolderImpl.java
Index: FolderImpl.java
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/folder/impl/FolderImpl.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- FolderImpl.java 23 Nov 2004 00:01:31 -0000 1.20
+++ FolderImpl.java 26 Nov 2004 18:52:38 -0000 1.21
@@ -494,17 +494,56 @@
return getPageSecurity(false);
}
- /**
- * <p>
- * getMetaData
- * </p>
+ /*
+ * (non-Javadoc)
*
- * @see org.apache.jetspeed.om.folder.Folder#getMetaData()
- * @return
+ * @see org.apache.jetspeed.om.folder.Folder#getAll()
*/
- public FolderMetaData getMetaData()
+ public NodeSet getAll() throws FolderNotFoundException, DocumentException
{
- return metadata;
+ // return secure set of all nodes: disable access checks on
+ // folders to facilitate navigation, but enforce on documents
+ // while creating filtered nodes
+ NodeSet nodes = getAllNodes();
+ NodeSet filteredNodes = null;
+ Iterator checkAccessIter = nodes.iterator();
+ while (checkAccessIter.hasNext())
+ {
+ Node node = (Node)checkAccessIter.next();
+ try
+ {
+ ((AbstractNode)
node).checkAccess(SecuredResource.VIEW_ACTION);
+ if (filteredNodes != null)
+ {
+ filteredNodes.add(node);
+ }
+ }
+ catch (SecurityException se)
+ {
+ if (filteredNodes == null)
+ {
+ filteredNodes = new NodeSetImpl(getPath(),
((NodeSetImpl) nodes).getComparator());
+ Iterator copyIter = nodes.iterator();
+ while (copyIter.hasNext())
+ {
+ Node copyNode = (Node)copyIter.next();
+ if (copyNode != node)
+ {
+ filteredNodes.add(copyNode);
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (filteredNodes != null)
+ {
+ return filteredNodes;
+ }
+ return nodes;
}
/**
@@ -584,6 +623,19 @@
}
return allNodes;
+ }
+
+ /**
+ * <p>
+ * getMetaData
+ * </p>
+ *
+ * @see org.apache.jetspeed.om.folder.Folder#getMetaData()
+ * @return
+ */
+ public FolderMetaData getMetaData()
+ {
+ return metadata;
}
/**
* <p>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]