Author: woonsan
Date: Wed Dec 23 14:01:58 2009
New Revision: 893517
URL: http://svn.apache.org/viewvc?rev=893517&view=rev
Log:
JS2-1057: Hierarchical space page/folder navigation. Also, changes to copy
space template folder during space creation.
Modified:
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesManager.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/page-navigator.jsp
Modified:
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesManager.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesManager.java?rev=893517&r1=893516&r2=893517&view=diff
==============================================================================
---
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesManager.java
(original)
+++
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/spaces/SpacesManager.java
Wed Dec 23 14:01:58 2009
@@ -18,7 +18,6 @@
import java.io.IOException;
import java.util.Locale;
-import java.util.Random;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
@@ -34,13 +33,14 @@
import org.apache.jetspeed.decoration.DecorationFactory;
import org.apache.jetspeed.om.folder.Folder;
import org.apache.jetspeed.om.page.Fragment;
-import org.apache.jetspeed.om.page.Page;
import org.apache.jetspeed.om.portlet.GenericMetadata;
import org.apache.jetspeed.page.PageManager;
import org.apache.jetspeed.portlets.toolbox.ThemeBean;
import org.apache.jetspeed.spaces.Spaces;
import org.apache.portals.bridges.common.GenericServletPortlet;
import org.apache.portals.messaging.PortletMessaging;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Spaces Manager
@@ -50,6 +50,12 @@
*/
public class SpacesManager extends GenericServletPortlet
{
+
+ private static final String DEFAULT_SPACE_TEMPLATE =
"/_user/template-space";
+ private static final String SPACE_TEMPLATE = "SpaceTemplate";
+
+ private static Logger log = LoggerFactory.getLogger(SpacesManager.class);
+
protected PageManager pageManager;
private PortalAdministration admin;
@@ -119,18 +125,24 @@
{
String folderName = name.replace(' ', '_');
String spacePath = "/" + folderName; // TODO: make this
configurable
- System.out.println("adding space named = " + spacePath);
- Folder folder = pageManager.newFolder(spacePath);
- folder.setDefaultDecorator(theme, Fragment.LAYOUT);
- folder.setDefaultDecorator(theme, Fragment.PORTLET);
- GenericMetadata metadata = folder.getMetadata();
+
+ String templateFolderPath =
actionRequest.getPreferences().getValue(SPACE_TEMPLATE, DEFAULT_SPACE_TEMPLATE);
+
+ if (!pageManager.folderExists(templateFolderPath))
+ {
+ throw new PortletException("Space template folder does not
exist: " + templateFolderPath);
+ }
+
+ Folder templateFolder =
pageManager.getFolder(templateFolderPath);
+ Folder spaceFolder = createSpaceFolder(spacePath,
templateFolder, null);
+
+ spaceFolder.setDefaultDecorator(theme, Fragment.LAYOUT);
+ spaceFolder.setDefaultDecorator(theme, Fragment.PORTLET);
+ GenericMetadata metadata = spaceFolder.getMetadata();
metadata.addField(Locale.ENGLISH, "space-owner",
actionRequest.getUserPrincipal().getName());
- folder.setTitle((title == null) ? name : title);
- pageManager.updateFolder(folder);
- //add default page
- Page source =
pageManager.getPage("/_user/template/space-home.psml");
- Page home = pageManager.copyPage(source, spacePath +
"/default-page.psml");
- pageManager.updatePage(home);
+ spaceFolder.setTitle((title == null) ? name : title);
+ pageManager.updateFolder(spaceFolder);
+
// TODO: remove publish to JetspeedNavigator when
replaced/removed for Space+PageNavigator
PortletMessaging.publish(actionRequest, "JetspeedNavigator",
"spaceChange", name);
PortletMessaging.publish(actionRequest, "SpaceNavigator",
"spaceChange", name);
@@ -139,19 +151,54 @@
String path = admin.getPortalURL(actionRequest,
actionResponse, spacePath);
actionResponse.sendRedirect(path);
}
- catch (Throwable t)
+ catch (Exception e)
{
- t.printStackTrace();
+ log.error("Failed to create space.", e);
}
}
- }
+ }
+
+ private String scrapeParameter(ActionRequest request, String paramName)
+ {
+ String param = request.getParameter(paramName);
+ if (param == null)
+ param = "";
+ param = param.trim();
+ return param;
+ }
- private String scrapeParameter(ActionRequest request, String paramName)
- {
- String param = request.getParameter(paramName);
- if (param == null)
- param = "";
- param = param.trim();
- return param;
- }
+ private Folder createSpaceFolder(String spacePath, Folder templateFolder,
String owner)
+ {
+ Folder spaceFolder = null;
+ boolean found = false;
+
+ try
+ {
+ spaceFolder = this.pageManager.getFolder(spacePath);
+ found = (spaceFolder != null);
+ }
+ catch (Exception ignore)
+ {
+ }
+
+ try
+ {
+ if (!found)
+ {
+ pageManager.deepCopyFolder(templateFolder, spacePath, owner);
+ }
+ else
+ {
+ pageManager.deepMergeFolder(templateFolder, spacePath, owner);
+ }
+
+ spaceFolder = pageManager.getFolder(spacePath);
+ }
+ catch (Exception e)
+ {
+ log.error("Failed to copy or merge folder.", e);
+ }
+
+ return spaceFolder;
+ }
}
\ No newline at end of file
Modified:
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/page-navigator.jsp
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/page-navigator.jsp?rev=893517&r1=893516&r2=893517&view=diff
==============================================================================
---
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/page-navigator.jsp
(original)
+++
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/view/spaces/page-navigator.jsp
Wed Dec 23 14:01:58 2009
@@ -19,6 +19,8 @@
<%...@page import="java.util.Locale"%>
<%...@page import="java.text.DecimalFormat"%>
<%...@page import="java.text.NumberFormat"%>
+<%...@page import="javax.portlet.RenderRequest"%>
+<%...@page import="javax.portlet.RenderResponse"%>
<%...@page import="org.apache.jetspeed.spaces.Space"%>
<%...@page import="org.apache.jetspeed.om.page.Page"%>
<%...@page import="org.apache.jetspeed.om.page.Link"%>
@@ -31,22 +33,19 @@
<%...@page import="org.apache.jetspeed.portlets.spaces.PageNavigator"%>
<%@ page contentType="text/html" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
-<portlet:defineObjects/>
-<%
-RequestContext rc =
(RequestContext)request.getAttribute(RequestContext.REQUEST_PORTALENV);
-Space space = (Space)renderRequest.getAttribute("space");
-Locale locale = renderRequest.getLocale();
-PageNavigator pageNavigator =
(PageNavigator)renderRequest.getAttribute("pageNavigator");
-List<MenuElement> menuElements = (List<MenuElement>)
renderRequest.getAttribute("spaceMenuElements");
-List<MenuElement> linkElements = (List<MenuElement>)
renderRequest.getAttribute("spaceLinkElements");
-%>
-<table>
- <tr><td class="portlet-section-body"><b><%=space.getTitle() %>
Space</b></td> </tr>
-<%
-for (MenuElement element : menuElements)
+<%!
+private void printMenuItem(MenuElement element,
+ int depth,
+ javax.servlet.jsp.JspWriter out,
+ RenderRequest renderRequest,
+ RenderResponse renderResponse,
+ RequestContext rc,
+ Space space,
+ PageNavigator pageNavigator) throws
java.io.IOException
{
String type = element.getElementType();
@@ -57,51 +56,126 @@
String folderUrl = folderMenu.getUrl();
String url = pageNavigator.getAbsoluteUrl(folderUrl, renderResponse,
rc);
//TODO: why the folderMenu's name is null?
- if (folderName == null) folderName =
folderUrl.substring(space.getPath().length() + 1);
- %>
- <tr>
- <td class="portlet-section-body"><a
href="<%=url%>"><%=folderName%></a></td>
- </tr>
- <%
+ if (folderName == null)
+ {
+ folderName = folderUrl;
+ try
+ {
+ folderName = folderName.substring(space.getPath().length() +
1);
+ }
+ catch (Exception ignore)
+ {
+ }
+ }
+
+ String namespace = renderResponse.getNamespace();
+ String folderId = namespace + folderUrl;
+
+ out.write("<div>");
+
+ if (depth > 0)
+ {
+ out.write("<img height='20' width='" + (depth * 16) + "' src='" +
renderRequest.getContextPath() + "/images/tree/noline.gif' align='absmiddle'
/>");
+ }
+
+ out.write("<img src='" + renderRequest.getContextPath() +
"/images/folder.gif' align='absmiddle' /> ");
+ out.write("<a folderId='" + folderId + "' href='#' onclick='return " +
namespace + "toggleFolder(this);'>" + folderName + "</a></div>");
+ out.write("\n");
+
+ List<MenuElement> childElements = (List<MenuElement>)
folderMenu.getElements();
+
+ if (childElements != null && !childElements.isEmpty())
+ {
+ out.write("<div id='" + folderId + "' style=\"DISPLAY: none\">");
+
+ for (MenuElement child : childElements)
+ {
+ printMenuItem(child, depth + 1, out, renderRequest,
renderResponse, rc, space, pageNavigator);
+ }
+
+ out.write("</div>");
+ out.write("\n");
+ }
}
else if (MenuElement.OPTION_ELEMENT_TYPE.equals(type))
- {
- MenuOption option = (MenuOption)element;
- String url = pageNavigator.getAbsoluteUrl(option.getUrl(),
renderResponse, rc);
- %>
- <tr>
- <td class="portlet-section-body"><a
href="<%=url%>"><%=element.getTitle(locale) %></a></td>
- </tr>
- <%
- }
+ {
+ MenuOption option = (MenuOption)element;
+ String url = pageNavigator.getAbsoluteUrl(option.getUrl(),
renderResponse, rc);
+
+ out.write("<div>");
+
+ if (depth > 0)
+ {
+ out.write("<img height='20' width='" + (depth * 16) + "' src='" +
renderRequest.getContextPath() + "/images/tree/noline.gif' align='absmiddle'
/>");
+ }
+
+ out.write("<img src='" + renderRequest.getContextPath() +
"/images/page.gif' align='absmiddle' /> ");
+ out.write("<a href='" + url + "'>" +
element.getTitle(renderRequest.getLocale()) + "</a>");
+
+ out.write("</div>");
+ out.write("\n");
+ }
}
%>
+
+<portlet:defineObjects/>
+<%
+RequestContext rc = (RequestContext)
request.getAttribute(RequestContext.REQUEST_PORTALENV);
+Space space = (Space) renderRequest.getAttribute("space");
+Locale locale = renderRequest.getLocale();
+PageNavigator pageNavigator = (PageNavigator)
renderRequest.getAttribute("pageNavigator");
+List<MenuElement> menuElements = (List<MenuElement>)
renderRequest.getAttribute("spaceMenuElements");
+List<MenuElement> linkElements = (List<MenuElement>)
renderRequest.getAttribute("spaceLinkElements");
+%>
+
+<script language="javascript">
+function <portlet:namespace/>toggleFolder(a) {
+ var folderId = a.getAttribute("folderId");
+ var div = document.getElementById(folderId);
+ if (div) {
+ div.style.display = (div.style.display == "none" ? "" : "none");
+ }
+ return false;
+}
+</script>
+
+<table>
<tr>
- <th class="portlet-section-header" colspan="1"></th>
+ <td class="portlet-section-body"><b><%=space.getTitle() %>
Space</b></td>
+ </tr>
+ <tr>
+ <td class="portlet-section-body">
+<%
+for (MenuElement element : menuElements)
+{
+ printMenuItem(element, 0, out, renderRequest, renderResponse, rc, space,
pageNavigator);
+}
+%>
+ </td>
</tr>
<%
if (!linkElements.isEmpty())
{
+%>
+ <tr>
+ <th class="portlet-section-header" colspan="1"></th>
+ </tr>
+ <tr>
+ <td class="portlet-section-body">
+<%
for (MenuElement element : linkElements)
{
- if
(element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE))
- {
- MenuOption option = (MenuOption)element;
- String url =
pageNavigator.getAbsoluteUrl(option.getUrl(), renderResponse, rc);
-%>
- <tr>
- <td class="portlet-section-body"><a
href="<%=url%>"><%=element.getTitle(locale) %></a></td>
- </tr>
-<%
- }
+ printMenuItem(element, 0, out, renderRequest, renderResponse, rc,
space, pageNavigator);
}
%>
- <tr>
- <th class="portlet-section-header" colspan="1"></th>
+ </td>
</tr>
<%
}
%>
+ <tr>
+ <th class="portlet-section-header" colspan="1"></th>
+ </tr>
<%
Object princ2 = renderRequest.getUserPrincipal();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]