You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by rw...@apache.org on 2005/12/06 19:03:23 UTC
svn commit: r354482 - in /portals/jetspeed-2/trunk/components/portal-site:
src/java/org/apache/jetspeed/om/folder/proxy/
src/java/org/apache/jetspeed/portalsite/impl/
src/test/org/apache/jetspeed/portalsite/ testdata/pages/folder3/
testdata/pages/folde...
Author: rwatler
Date: Tue Dec 6 10:03:15 2005
New Revision: 354482
URL: http://svn.apache.org/viewcvs?rev=354482&view=rev
Log:
allow default page to reference subfolder or '..'
Added:
portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/
portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder0/
portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder0/folder.metadata (with props)
portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/
portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/folder.metadata (with props)
portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/page0.psml (with props)
portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/page1.psml (with props)
portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/folder.metadata (with props)
Modified:
portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/om/folder/proxy/FolderProxy.java
portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java
portals/jetspeed-2/trunk/components/portal-site/src/test/org/apache/jetspeed/portalsite/TestPortalSite.java
Modified: portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/om/folder/proxy/FolderProxy.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/om/folder/proxy/FolderProxy.java?rev=354482&r1=354481&r2=354482&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/om/folder/proxy/FolderProxy.java (original)
+++ portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/om/folder/proxy/FolderProxy.java Tue Dec 6 10:03:15 2005
@@ -321,14 +321,7 @@
public String getDefaultPage(Object proxy)
{
// attempt to get explicitly specified default page
- Page defaultPage = selectDefaultPageFromAggregateFolders(proxy);
- if (defaultPage != null)
- {
- return defaultPage.getName();
- }
-
- // no default page available
- return null;
+ return selectDefaultPageFromAggregateFolders(proxy);
}
/**
@@ -645,9 +638,9 @@
* proxy folder view path
*
* @param proxy this folder proxy
- * @return selected default page proxy
+ * @return selected default page name
*/
- private Page selectDefaultPageFromAggregateFolders(Object proxy)
+ private String selectDefaultPageFromAggregateFolders(Object proxy)
{
// select most specific specified default page
// along search paths
@@ -663,17 +656,45 @@
String defaultPageName = folder.getDefaultPage();
if (defaultPageName != null)
{
- // validate and return default page if it exists
- // as child in this folder
- try
- {
- return getPage(proxy, defaultPageName);
- }
- catch (NodeException ne)
+ // validate and return default page or folder
+ // if it exists as child in this folder
+ if (defaultPageName.equals(".."))
{
+ // default parent folder
+ if (getParent() != null)
+ {
+ return defaultPageName;
+ }
}
- catch (SecurityException se)
+ else
{
+ // default page
+ try
+ {
+ getPage(proxy, defaultPageName);
+ return defaultPageName;
+ }
+ catch (NodeException ne)
+ {
+ }
+ catch (SecurityException se)
+ {
+ }
+ // default folder
+ if (!defaultPageName.endsWith(Page.DOCUMENT_TYPE))
+ {
+ try
+ {
+ getFolder(proxy, defaultPageName);
+ return defaultPageName;
+ }
+ catch (NodeException ne)
+ {
+ }
+ catch (SecurityException se)
+ {
+ }
+ }
}
}
else if (!fallbackDefaultPageNotFound)
@@ -682,7 +703,8 @@
// it exists as child in this folder
try
{
- return getPage(proxy, Folder.FALLBACK_DEFAULT_PAGE);
+ getPage(proxy, Folder.FALLBACK_DEFAULT_PAGE);
+ return Folder.FALLBACK_DEFAULT_PAGE;
}
catch (NodeException ne)
{
Modified: portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java?rev=354482&r1=354481&r2=354482&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java (original)
+++ portals/jetspeed-2/trunk/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java Tue Dec 6 10:03:15 2005
@@ -320,11 +320,12 @@
// lookup request path in view for viewable page or folder
// nodes; note: directly requested pages/folders may be hidden
+ // or not viewable
Node requestNode = null;
try
{
// try page or folder request url
- requestNode = view.getNodeProxy(requestPath, null, true, false);
+ requestNode = view.getNodeProxy(requestPath, null, false, false);
}
catch (NodeNotFoundException nnfe)
{
@@ -348,30 +349,80 @@
{
Folder requestFolder = (Folder)requestNode;
- // only request folders with pages can be
- // selected by request; otherwise, fall back to
- // parent folders assuming that immediate parents
- // will have the most appropriate default page
- NodeSet requestFolderPages = null;
+ // support subfolders specified as default pages;
+ // find highest subfolder with a default page that
+ // specifies a default folder, (not a default page).
try
{
- requestFolderPages = requestFolder.getPages();
- while (((requestFolderPages == null) || requestFolderPages.isEmpty()) && (requestFolder.getParent() != null))
+ String defaultFolderName = requestFolder.getDefaultPage();
+ if (defaultFolderName != null)
{
- requestFolder = (Folder)requestFolder.getParent();
- requestFolderPages = requestFolder.getPages();
+ // do not follow broken default folders
+ Folder defaultRequestFolder = requestFolder;
+ // follow default folders to parent folders
+ while ((defaultRequestFolder != null) && (defaultFolderName != null) &&
+ defaultFolderName.equals(".."))
+ {
+ defaultRequestFolder = (Folder)defaultRequestFolder.getParent();
+ if (defaultRequestFolder != null)
+ {
+ defaultFolderName = defaultRequestFolder.getDefaultPage();
+ }
+ else
+ {
+ defaultFolderName = null;
+ }
+ }
+ // follow default folders to subfolders
+ while ((defaultRequestFolder != null) && (defaultFolderName != null) &&
+ !defaultFolderName.endsWith(Page.DOCUMENT_TYPE) && !defaultFolderName.equals(".."))
+ {
+ defaultRequestFolder = defaultRequestFolder.getFolder(defaultFolderName);
+ defaultFolderName = defaultRequestFolder.getDefaultPage();
+ }
+ // use default request folder
+ if (defaultRequestFolder != null)
+ {
+ requestFolder = defaultRequestFolder;
+ }
}
}
catch (NodeException ne)
{
- requestFolderPages = null;
}
catch (SecurityException se)
{
- requestFolderPages = null;
+ requestFolder = null;
accessException = se;
}
- if ((requestFolderPages != null) && !requestFolderPages.isEmpty())
+
+ // only request folders with pages can be
+ // selected by request; otherwise, fall back to
+ // parent folders assuming that immediate parents
+ // will have the most appropriate default page
+ NodeSet requestFolderPages = null;
+ if (requestFolder != null)
+ {
+ try
+ {
+ requestFolderPages = requestFolder.getPages();
+ while (((requestFolderPages == null) || requestFolderPages.isEmpty()) && (requestFolder.getParent() != null))
+ {
+ requestFolder = (Folder)requestFolder.getParent();
+ requestFolderPages = requestFolder.getPages();
+ }
+ }
+ catch (NodeException ne)
+ {
+ requestFolderPages = null;
+ }
+ catch (SecurityException se)
+ {
+ requestFolderPages = null;
+ accessException = se;
+ }
+ }
+ if ((requestFolder != null) && (requestFolderPages != null) && !requestFolderPages.isEmpty())
{
// attempt to lookup last visited page by folder proxy
// path, (proxies are hashed by their path), contains
Modified: portals/jetspeed-2/trunk/components/portal-site/src/test/org/apache/jetspeed/portalsite/TestPortalSite.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal-site/src/test/org/apache/jetspeed/portalsite/TestPortalSite.java?rev=354482&r1=354481&r2=354482&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal-site/src/test/org/apache/jetspeed/portalsite/TestPortalSite.java (original)
+++ portals/jetspeed-2/trunk/components/portal-site/src/test/org/apache/jetspeed/portalsite/TestPortalSite.java Tue Dec 6 10:03:15 2005
@@ -139,11 +139,12 @@
assertEquals("/", rootFolderProxy.getName());
assertEquals("root", rootFolderProxy.getTitle());
assertEquals("/", extractFileSystemPathFromId(rootFolderProxy.getId()));
- assertEquals(3, rootFolderProxy.getFolders().size());
+ assertEquals(4, rootFolderProxy.getFolders().size());
Iterator foldersIter = rootFolderProxy.getFolders().iterator();
assertEquals("folder0", ((Folder)foldersIter.next()).getName());
assertEquals("folder1", ((Folder)foldersIter.next()).getName());
assertEquals("folder2", ((Folder)foldersIter.next()).getName());
+ assertEquals("folder3", ((Folder)foldersIter.next()).getName());
assertEquals(4, rootFolderProxy.getPages().size());
Iterator pagesIter = rootFolderProxy.getPages().iterator();
assertEquals("page2.psml", ((Page)pagesIter.next()).getName());
@@ -200,7 +201,7 @@
assertTrue(rootPageProxiesByPath.contains(rootPage0Proxy));
List rootFolderProxiesByPath = baseView.getNodeProxies("/*/", null, false, false);
assertNotNull(rootFolderProxiesByPath);
- assertEquals(3,rootFolderProxiesByPath.size());
+ assertEquals(4,rootFolderProxiesByPath.size());
assertTrue(rootFolderProxiesByPath.contains(rootFolder0Proxy));
List folderPageProxiesByPath = baseView.getNodeProxies("*/p*[0-9].psml", rootFolderProxy, false, false);
assertNotNull(folderPageProxiesByPath);
@@ -215,7 +216,7 @@
assertEquals("/", rootFolderProxy.getName());
assertEquals("user root", rootFolderProxy.getTitle());
assertEquals("/_user/user", extractFileSystemPathFromId(rootFolderProxy.getId()));
- assertEquals(3, rootFolderProxy.getFolders().size());
+ assertEquals(4, rootFolderProxy.getFolders().size());
assertEquals(4, rootFolderProxy.getPages().size());
assertEquals(2, rootFolderProxy.getLinks().size());
rootPage0Proxy = rootFolderProxy.getPage("page0.psml");
@@ -517,6 +518,17 @@
assertNotNull(requestPageProxy);
assertEquals("page0.psml", requestPageProxy.getName());
assertEquals("/folder0/page0.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
+
+ locator = new JetspeedProfileLocator();
+ locator.init(null, "/");
+ locator.add("page", false, false, "/folder3/default-folder0/");
+ locators.put(ProfileLocator.PAGE_LOCATOR, locator);
+ requestContext = sessionContext.newRequestContext(locators);
+ assertNotNull(requestContext);
+ requestPageProxy = requestContext.getPage();
+ assertNotNull(requestPageProxy);
+ assertEquals("page1.psml", requestPageProxy.getName());
+ assertEquals("/folder3/default-folder1/page1.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
}
/**
Added: portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder0/folder.metadata
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder0/folder.metadata?rev=354482&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder0/folder.metadata (added)
+++ portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder0/folder.metadata Tue Dec 6 10:03:15 2005
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Copyright 2005 The Apache Software Foundation
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<folder>
+
+ <title>default-folder0</title>
+ <short-title>default-folder0</short-title>
+
+ <default-page>..</default-page>
+
+</folder>
Propchange: portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder0/folder.metadata
------------------------------------------------------------------------------
svn:eol-style = native
Added: portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/folder.metadata
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/folder.metadata?rev=354482&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/folder.metadata (added)
+++ portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/folder.metadata Tue Dec 6 10:03:15 2005
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Copyright 2005 The Apache Software Foundation
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<folder hidden="true">
+
+ <title>default-folder1</title>
+ <short-title>default-folder1</short-title>
+
+ <default-page>page1.psml</default-page>
+
+</folder>
Propchange: portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/folder.metadata
------------------------------------------------------------------------------
svn:eol-style = native
Added: portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/page0.psml
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/page0.psml?rev=354482&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/page0.psml (added)
+++ portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/page0.psml Tue Dec 6 10:03:15 2005
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Copyright 2005 The Apache Software Foundation
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<page>
+
+ <title>/folder3/default-folder1/page0.psml</title>
+
+</page>
Propchange: portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/page0.psml
------------------------------------------------------------------------------
svn:eol-style = native
Added: portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/page1.psml
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/page1.psml?rev=354482&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/page1.psml (added)
+++ portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/page1.psml Tue Dec 6 10:03:15 2005
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Copyright 2005 The Apache Software Foundation
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<page>
+
+ <title>/folder3/default-folder1/page0.psml</title>
+
+</page>
Propchange: portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/default-folder1/page1.psml
------------------------------------------------------------------------------
svn:eol-style = native
Added: portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/folder.metadata
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/folder.metadata?rev=354482&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/folder.metadata (added)
+++ portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/folder.metadata Tue Dec 6 10:03:15 2005
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Copyright 2005 The Apache Software Foundation
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<folder hidden="true">
+
+ <title>folder3</title>
+ <short-title>folder3</short-title>
+
+ <default-page>default-folder1</default-page>
+
+</folder>
Propchange: portals/jetspeed-2/trunk/components/portal-site/testdata/pages/folder3/folder.metadata
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org