Author: roy.russo(a)jboss.com
Date: 2006-11-27 14:16:41 -0500 (Mon, 27 Nov 2006)
New Revision: 5725
Modified:
trunk/core/src/main/org/jboss/portal/core/portlet/dashboard/Configurator.java
trunk/core/src/resources/portal-core-war/WEB-INF/jsp/dashboard/editpage.jsp
Log:
JBPORTAL-993 - move window functionality added.
Modified: trunk/core/src/main/org/jboss/portal/core/portlet/dashboard/Configurator.java
===================================================================
---
trunk/core/src/main/org/jboss/portal/core/portlet/dashboard/Configurator.java 2006-11-27
18:30:43 UTC (rev 5724)
+++
trunk/core/src/main/org/jboss/portal/core/portlet/dashboard/Configurator.java 2006-11-27
19:16:41 UTC (rev 5725)
@@ -27,6 +27,8 @@
import org.jboss.portal.core.model.portal.PortalObject;
import org.jboss.portal.core.model.portal.PortalObjectContainer;
import org.jboss.portal.core.model.portal.Window;
+import org.jboss.portal.theme.LayoutService;
+import org.jboss.portal.theme.PortalLayout;
import org.jboss.portal.theme.ThemeConstants;
import org.jboss.portlet.JBossActionRequest;
import org.jboss.portlet.JBossActionResponse;
@@ -39,8 +41,14 @@
import javax.portlet.PortletSecurityException;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
+import java.util.SortedSet;
+import java.util.TreeSet;
/**
* @author <a href="mailto:roy.russo@jboss.com">Roy Russo</a>
@@ -54,6 +62,8 @@
private PortalObjectContainer portalObjectContainer;
+ private LayoutService layoutService;
+
private static final int MOVE_UP = 0;
private static final int MOVE_DOWN = 1;
@@ -66,6 +76,8 @@
portalObjectContainer =
(PortalObjectContainer)getPortletContext().getAttribute("PortalObjectContainer");
+ layoutService =
(LayoutService)getPortletContext().getAttribute("LayoutService");
+
if (instanceContainer == null)
{
throw new PortletException("No InstanceContainer found");
@@ -74,6 +86,10 @@
{
throw new PortletException("No PortalObjectContainer found");
}
+ if (layoutService == null)
+ {
+ throw new PortletException("No LayoutService found");
+ }
}
protected void doView(JBossRenderRequest req, JBossRenderResponse resp)
@@ -84,28 +100,42 @@
List left_instances = new ArrayList();
List center_instances = new ArrayList();
List right_instances = new ArrayList();
+
Page page =
portalObjectContainer.getContext().getPortal("dashboard").getPage(req.getUser().getUserName());
- for (Iterator i = page.getChildren().iterator(); i.hasNext();)
+ try
{
- PortalObject object = (PortalObject)i.next();
- if (object.getType() == PortalObject.TYPE_WINDOW)
+ Map windowMap = getWindows(page);
+ List regions = new ArrayList(windowMap.keySet());
+ Collections.sort(regions);
+
+ for (Iterator i = regions.iterator(); i.hasNext();)
{
- Window window = (Window)object;
- String region = object.getProperty(ThemeConstants.PORTAL_PROP_REGION);
- if (region.equals("left"))
+ String region = (String)i.next();
+
+ TreeSet windows = (TreeSet)windowMap.get(region);
+ for (Iterator j = windows.iterator(); j.hasNext();)
{
- left_instances.add(window.getInstanceRef());
+ Window window = (Window)j.next();
+ if (region.equals("left"))
+ {
+ left_instances.add(window);
+ System.out.println(window.getInstanceRef() + ":" +
window.getDeclaredProperty(ThemeConstants.PORTAL_PROP_ORDER));
+ }
+ else if (region.equals("center"))
+ {
+ center_instances.add(window);
+ }
+ else if (region.equals("right"))
+ {
+ right_instances.add(window);
+ }
}
- else if (region.equals("center"))
- {
- center_instances.add(window.getInstanceRef());
- }
- else if (region.equals("right"))
- {
- right_instances.add(window.getInstanceRef());
- }
}
}
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
resp.setContentType("text/html");
req.setAttribute("available_instances", available_instances);
@@ -149,44 +179,26 @@
else if ("remove".equals(op))
{
String fromRegion = actionRequest.getParameter("fromRegion");
- String[] removeInstances = null;
+ String[] removeWindows = null;
if ("left".equals(fromRegion))
{
- removeInstances =
actionRequest.getParameterValues("left_instances");
+ removeWindows =
actionRequest.getParameterValues("left_instances");
}
else if ("center".equals(fromRegion))
{
- removeInstances =
actionRequest.getParameterValues("center_instances");
+ removeWindows =
actionRequest.getParameterValues("center_instances");
}
else if ("right".equals(fromRegion))
{
- removeInstances =
actionRequest.getParameterValues("right_instances");
+ removeWindows =
actionRequest.getParameterValues("right_instances");
}
Page page =
portalObjectContainer.getContext().getPortal("dashboard").getPage(actionRequest.getUser().getUserName());
- List removeWindows = new ArrayList();
- for (Iterator i = page.getChildren().iterator(); i.hasNext();)
- {
- PortalObject object = (PortalObject)i.next();
- if (object.getType() == PortalObject.TYPE_WINDOW)
- {
- Window window = (Window)object;
- String region = object.getProperty(ThemeConstants.PORTAL_PROP_REGION);
- String instance = window.getInstanceRef();
- for (int j = 0; j < removeInstances.length; j++)
- {
- if (instance.equalsIgnoreCase(removeInstances[j]) &&
fromRegion.equalsIgnoreCase(region))
- {
- removeWindows.add(window.getName());
- }
- }
- }
- }
try
{
- for (int i = 0; i < removeWindows.size(); i++)
+ for (int i = 0; i < removeWindows.length; i++)
{
- page.destroyChild((String)removeWindows.get(i));
+ page.destroyChild((String)removeWindows[i]);
}
}
catch (Exception e)
@@ -194,23 +206,36 @@
// todo
}
}
- else if ("up".equals(op))
+ else if ("up".equals(op) || "down".equals(op))
{
String sortRegion = actionRequest.getParameter("sortRegion");
- String[] moveRegion = null;
+ String[] moveWindows = null;
if ("left".equals(sortRegion))
{
- moveRegion = actionRequest.getParameterValues("left_instances");
+ moveWindows = actionRequest.getParameterValues("left_instances");
}
else if ("center".equals(sortRegion))
{
- moveRegion = actionRequest.getParameterValues("center_instances");
+ moveWindows =
actionRequest.getParameterValues("center_instances");
}
else if ("right".equals(sortRegion))
{
- moveRegion = actionRequest.getParameterValues("right_instances");
+ moveWindows = actionRequest.getParameterValues("right_instances");
}
+ Page page =
portalObjectContainer.getContext().getPortal("dashboard").getPage(actionRequest.getUser().getUserName());
+ for (int i = 0; i < moveWindows.length; i++)
+ {
+ Window window = page.getWindow(moveWindows[i]);
+ if ("up".equals(op))
+ {
+ window.setDeclaredProperty(ThemeConstants.PORTAL_PROP_ORDER,
Integer.toString(getOrder(window) - 1));
+ }
+ else if ("down".equals(op))
+ {
+ window.setDeclaredProperty(ThemeConstants.PORTAL_PROP_ORDER,
Integer.toString(getOrder(window) + 1));
+ }
+ }
}
}
@@ -218,4 +243,64 @@
{
return (int)(100 * Math.random());
}
+
+ /** Returns a <Region,<Window>SortedSet>Map. */
+ private Map getWindows(Page page) throws Exception
+ {
+ // Get the layout
+ String layoutId = page.getProperty(ThemeConstants.PORTAL_PROP_LAYOUT);
+ PortalLayout layout = layoutService.getLayout(layoutId, false);
+
+ LinkedHashMap windows = new LinkedHashMap();
+ for (Iterator i = layout.getLayoutInfo().getRegionNames().iterator();
i.hasNext();)
+ {
+ String region = (String)i.next();
+ windows.put(region, new TreeSet(comparator));
+ }
+ windows.put("unknown", new TreeSet(comparator));
+
+ for (Iterator j = page.getChildren().iterator(); j.hasNext();)
+ {
+ PortalObject object = (PortalObject)j.next();
+ if (object.getType() == PortalObject.TYPE_WINDOW)
+ {
+ String region = object.getProperty(ThemeConstants.PORTAL_PROP_REGION);
+ if (!windows.containsKey(region))
+ {
+ region = "unknown";
+ }
+ SortedSet set = (SortedSet)windows.get(region);
+ set.add(object);
+ }
+ }
+ return windows;
+ }
+
+ /** Compares two windows according to their order. */
+ private static final Comparator comparator = new Comparator()
+ {
+ public int compare(Object o1, Object o2)
+ {
+ Window w1 = (Window)o1;
+ Window w2 = (Window)o2;
+ int sign = getOrder(w1) - getOrder(w2);
+ if (sign == 0)
+ {
+ sign = w1.getId().compareTo(w2.getId());
+ }
+ return sign;
+ }
+ };
+
+ private static int getOrder(Window w)
+ {
+ try
+ {
+ return
Integer.parseInt(w.getDeclaredProperty(ThemeConstants.PORTAL_PROP_ORDER));
+ }
+ catch (NumberFormatException e)
+ {
+ return Integer.MAX_VALUE;
+ }
+ }
}
Modified: trunk/core/src/resources/portal-core-war/WEB-INF/jsp/dashboard/editpage.jsp
===================================================================
--- trunk/core/src/resources/portal-core-war/WEB-INF/jsp/dashboard/editpage.jsp 2006-11-27
18:30:43 UTC (rev 5724)
+++ trunk/core/src/resources/portal-core-war/WEB-INF/jsp/dashboard/editpage.jsp 2006-11-27
19:16:41 UTC (rev 5725)
@@ -1,5 +1,6 @@
<%@ page import="org.jboss.portal.core.model.instance.Instance" %>
<%@ page import="java.util.List" %>
+<%@ page import="org.jboss.portal.core.model.portal.Window" %>
<%@ page language="java"
extends="org.jboss.portal.core.servlet.jsp.PortalJsp" %>
<%@ taglib
uri="http://java.sun.com/portlet" prefix="portlet"
%>
<%@ taglib uri="/WEB-INF/portal-lib.tld" prefix="n" %>
@@ -113,9 +114,10 @@
<%
for (int i = 0; i < left_instances.size(); i++)
{
- String instance = (String)left_instances.get(i);
+ Window window = (Window)left_instances.get(i);
+ //String instance = (String)left_instances.get(i);
%>
- <option value="<%= instance %>"><%= instance%>
+ <option value="<%= window.getName() %>"><%=
window.getInstanceRef() %>
</option>
<%
}
@@ -140,9 +142,10 @@
<%
for (int i = 0; i < center_instances.size(); i++)
{
- String instance = (String)center_instances.get(i);
+ Window window = (Window)center_instances.get(i);
+ //String instance = (String)center_instances.get(i);
%>
- <option value="<%= instance %>"><%= instance%>
+ <option value="<%= window.getName() %>"><%=
window.getInstanceRef() %>
</option>
<%
}
@@ -165,9 +168,10 @@
<%
for (int i = 0; i < right_instances.size(); i++)
{
- String instance = (String)right_instances.get(i);
+ Window window = (Window)right_instances.get(i);
+ //String instance = (String)right_instances.get(i);
%>
- <option value="<%= instance %>"><%= instance%>
+ <option value="<%= window.getName() %>"><%=
window.getInstanceRef() %>
</option>
<%
}