Author: chris.laprun(a)jboss.com
Date: 2007-08-24 16:52:39 -0400 (Fri, 24 Aug 2007)
New Revision: 8047
Modified:
trunk/core-admin/src/main/org/jboss/portal/core/admin/ui/AdminPropertyResolver.java
trunk/core-admin/src/main/org/jboss/portal/core/admin/ui/PortalObjectManagerBean.java
trunk/core-admin/src/main/org/jboss/portal/core/admin/ui/Refresher.java
trunk/core-admin/src/resources/portal-admin-war/WEB-INF/jsf/objectNavigation.xhtml
trunk/core/src/main/org/jboss/portal/core/impl/model/portal/PortalObjectImpl.java
trunk/core/src/main/org/jboss/portal/core/model/portal/PortalObject.java
Log:
- JBPORTAL-1644: Works only partially as I haven't been able to refresh the current
page without causing instability in the functionality (i.e. after a while, clicking on
Make default links results in seemingly random behavior with the id request parameter
passed to PortalObjectManagerBean not corresponding to the clicked link).
- Added default property on PortalObject via AdminPropertyResolver.
- Made PortalObject comparable to support for children ordering.
Modified:
trunk/core/src/main/org/jboss/portal/core/impl/model/portal/PortalObjectImpl.java
===================================================================
---
trunk/core/src/main/org/jboss/portal/core/impl/model/portal/PortalObjectImpl.java 2007-08-23
08:04:55 UTC (rev 8046)
+++
trunk/core/src/main/org/jboss/portal/core/impl/model/portal/PortalObjectImpl.java 2007-08-24
20:52:39 UTC (rev 8047)
@@ -33,11 +33,13 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -71,7 +73,7 @@
private Map childrenMap;
private Map properties;
private Map unmodifiableProperties;
- private Set accessedChildren;
+ private SortedSet accessedChildren;
public PortalObjectImpl()
{
@@ -117,6 +119,13 @@
return objectNode.getPath();
}
+ public int compareTo(Object o)
+ {
+ PortalObject po = (PortalObject)o;
+
+ return getId().compareTo(po.getId());
+ }
+
public void destroyChild(String name) throws NoSuchPortalObjectException
{
objectNode.removeChild(name);
@@ -262,7 +271,8 @@
public ChildrenIterator()
{
- Map childrenMap = objectNode.getChildren();
+ // Make sure the children are sorted for consistent ordering downstream
+ Map childrenMap = new TreeMap(objectNode.getChildren());
Collection children = childrenMap.values();
iterator = children.iterator();
}
@@ -390,7 +400,7 @@
{
if (accessedChildren == null)
{
- accessedChildren = new HashSet();
+ accessedChildren = new TreeSet();
}
return accessedChildren;
}
Modified: trunk/core/src/main/org/jboss/portal/core/model/portal/PortalObject.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/model/portal/PortalObject.java 2007-08-23
08:04:55 UTC (rev 8046)
+++ trunk/core/src/main/org/jboss/portal/core/model/portal/PortalObject.java 2007-08-24
20:52:39 UTC (rev 8047)
@@ -31,7 +31,7 @@
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
* @version $Revision$
*/
-public interface PortalObject
+public interface PortalObject extends Comparable
{
/** Portal property name that indicates the name of the default portal to lookup. */
@@ -95,7 +95,7 @@
/**
* Set a listener id.
*
- * @param listener the listener id
+ * @param listener the listener id
*/
void setListener(String listener);
@@ -132,7 +132,7 @@
*
* @param name the child name
* @throws NoSuchPortalObjectException if the child does not exist
- * @throws IllegalArgumentException if the name argument is null
+ * @throws IllegalArgumentException if the name argument is null
*/
void destroyChild(String name) throws NoSuchPortalObjectException,
IllegalArgumentException;
@@ -140,11 +140,11 @@
* Copy the portal object as a child of the specified object.
*
* @param parent the parent of the copy
- * @param name the name of the child
- * @param deep true copies recursively children
+ * @param name the name of the child
+ * @param deep true copies recursively children
* @return the newly created node child of the specified parent
* @throws DuplicatePortalObjectException if the specified parent has already a node
with such a name
- * @throws IllegalArgumentException if the specified parent is null
+ * @throws IllegalArgumentException if the specified parent is null
*/
PortalObject copy(PortalObject parent, String name, boolean deep) throws
DuplicatePortalObjectException, IllegalArgumentException;
@@ -159,7 +159,7 @@
/**
* Returns a read only map that contains the object properties.
*
- * @return a map of the object properties
+ * @return a map of the object properties
*/
Map getProperties();
@@ -174,7 +174,7 @@
/**
* Update a property declared on that object.
*
- * @param name the property name
+ * @param name the property name
* @param value the property value
* @throws IllegalArgumentException if the name argument is null
*/
@@ -183,7 +183,7 @@
/**
* Return a map that contains the object declared properties.
*
- * @return a map of the properties declared by the object
+ * @return a map of the properties declared by the object
*/
Map getDeclaredProperties();
Modified:
trunk/core-admin/src/main/org/jboss/portal/core/admin/ui/AdminPropertyResolver.java
===================================================================
---
trunk/core-admin/src/main/org/jboss/portal/core/admin/ui/AdminPropertyResolver.java 2007-08-23
08:04:55 UTC (rev 8046)
+++
trunk/core-admin/src/main/org/jboss/portal/core/admin/ui/AdminPropertyResolver.java 2007-08-24
20:52:39 UTC (rev 8047)
@@ -22,48 +22,48 @@
******************************************************************************/
package org.jboss.portal.core.admin.ui;
-import org.jboss.portal.faces.el.decorator.SimpleBeanDecorator;
+import org.jboss.portal.common.i18n.LocalizedString;
+import org.jboss.portal.common.util.IteratorStatus;
+import org.jboss.portal.common.util.MediaType;
+import org.jboss.portal.core.impl.model.content.ContentProviderRegistryService;
+import org.jboss.portal.core.model.content.ContentType;
+import org.jboss.portal.core.model.content.spi.portlet.ContentPortlet;
+import org.jboss.portal.core.model.instance.Instance;
+import org.jboss.portal.core.model.portal.PortalObject;
+import org.jboss.portal.core.model.portal.PortalObjectId;
+import org.jboss.portal.core.model.portal.PortalObjectPath;
+import org.jboss.portal.faces.el.DelegatingPropertyResolver;
+import org.jboss.portal.faces.el.decorator.AbstractBeanDecorator;
import org.jboss.portal.faces.el.decorator.AbstractPropertyDecorator;
-import org.jboss.portal.faces.el.decorator.AbstractBeanDecorator;
import org.jboss.portal.faces.el.decorator.PropertyDecorator;
-import org.jboss.portal.faces.el.DelegatingPropertyResolver;
+import org.jboss.portal.faces.el.decorator.SimpleBeanDecorator;
+import org.jboss.portal.identity.IdentityException;
import org.jboss.portal.identity.RoleModule;
-import org.jboss.portal.identity.IdentityException;
-import org.jboss.portal.common.i18n.LocalizedString;
-import org.jboss.portal.common.util.IteratorStatus;
-import org.jboss.portal.common.util.MediaType;
import org.jboss.portal.portlet.Portlet;
import org.jboss.portal.portlet.PortletInvokerException;
import org.jboss.portal.portlet.info.MetaInfo;
import org.jboss.portal.portlet.info.PortletInfo;
-import org.jboss.portal.core.model.instance.Instance;
-import org.jboss.portal.core.model.portal.PortalObject;
-import org.jboss.portal.core.model.portal.PortalObjectId;
-import org.jboss.portal.core.model.portal.PortalObjectPath;
-import org.jboss.portal.core.model.content.ContentType;
-import org.jboss.portal.core.model.content.spi.portlet.ContentPortlet;
-import org.jboss.portal.core.impl.model.content.ContentProviderRegistryService;
import org.jboss.portal.security.AuthorizationDomainRegistry;
import org.jboss.portal.security.spi.provider.AuthorizationDomain;
import org.jboss.portal.theme.LayoutService;
import org.jboss.portal.theme.PortalLayout;
-import org.jboss.portal.theme.ThemeService;
+import org.jboss.portal.theme.PortalRenderSet;
import org.jboss.portal.theme.PortalTheme;
import org.jboss.portal.theme.ServerRegistrationID;
-import org.jboss.portal.theme.PortalRenderSet;
+import org.jboss.portal.theme.ThemeService;
import javax.faces.context.FacesContext;
+import javax.faces.el.PropertyResolver;
import javax.faces.model.SelectItem;
-import javax.faces.el.PropertyResolver;
-import java.util.Set;
-import java.util.Locale;
import java.util.ArrayList;
-import java.util.List;
import java.util.Collection;
-import java.util.Map;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
-import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -216,6 +216,7 @@
{
return new ArrayList(object.getChildren(mask));
}
+
{
setProperty("portals", new
AbstractPropertyDecorator(PortalObject.class)
{
@@ -262,6 +263,22 @@
return id.toString(PortalObjectPath.LEGACY_BASE64_FORMAT);
}
});
+ portalObjectDecorator.setProperty("default", new
AbstractPropertyDecorator(PortalObject.class)
+ {
+ public Object getValue(Object bean)
+ {
+ PortalObject object = (PortalObject)bean;
+
+ // get the parent, if parent doesn't exist, consider the object as its
own parent
+ PortalObject portalObject = object.getParent();
+ if (portalObject == null)
+ {
+ portalObject = object;
+ }
+
+ return
Boolean.valueOf(object.getName().equals(portalObject.getDeclaredProperty(PortalObject.PORTAL_PROP_DEFAULT_OBJECT_NAME)));
+ }
+ });
registerDecorator(PortalObject.class, portalObjectDecorator);
//
@@ -305,7 +322,7 @@
LayoutService layoutService = (LayoutService)bean;
Collection layouts = layoutService.getLayouts();
SelectItem[] items = new SelectItem[layouts.size() + 1];
- for (IteratorStatus i = new IteratorStatus(layouts.iterator());i.hasNext();)
+ for (IteratorStatus i = new IteratorStatus(layouts.iterator());
i.hasNext();)
{
PortalLayout layout = (PortalLayout)i.next();
SelectItem item = new SelectItem();
@@ -355,7 +372,7 @@
ThemeService layoutService = (ThemeService)bean;
Collection themes = layoutService.getThemes();
SelectItem[] items = new SelectItem[themes.size() + 1];
- for (IteratorStatus i = new IteratorStatus(themes.iterator());i.hasNext();)
+ for (IteratorStatus i = new IteratorStatus(themes.iterator()); i.hasNext();)
{
PortalTheme name = (PortalTheme)i.next();
SelectItem item = new SelectItem();
Modified:
trunk/core-admin/src/main/org/jboss/portal/core/admin/ui/PortalObjectManagerBean.java
===================================================================
---
trunk/core-admin/src/main/org/jboss/portal/core/admin/ui/PortalObjectManagerBean.java 2007-08-23
08:04:55 UTC (rev 8046)
+++
trunk/core-admin/src/main/org/jboss/portal/core/admin/ui/PortalObjectManagerBean.java 2007-08-24
20:52:39 UTC (rev 8047)
@@ -22,22 +22,6 @@
******************************************************************************/
package org.jboss.portal.core.admin.ui;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.context.FacesContext;
-import javax.faces.event.ActionEvent;
-import javax.faces.model.SelectItem;
-
import org.jboss.portal.core.admin.ui.actions.AddPageAction;
import org.jboss.portal.core.admin.ui.actions.PropertyAction;
import org.jboss.portal.core.admin.ui.common.PageManagerBean;
@@ -64,13 +48,28 @@
import org.jboss.portal.theme.LayoutService;
import org.jboss.portal.theme.ThemeService;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.faces.event.ActionEvent;
+import javax.faces.model.SelectItem;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
/** The portal object manager bean. */
public class PortalObjectManagerBean implements Serializable, AddPageAction.Listener
{
/** The serialVersionUID */
private static final long serialVersionUID = -8923517554726982622L;
-
+
/** . */
private static final String CONTENT_URI = "content.uri";
@@ -363,7 +362,14 @@
public void selectObject(PortalObject po)
{
- selectObject(po.getId());
+ if (po != null)
+ {
+ selectObject(po.getId());
+ }
+ else
+ {
+ selectObject((PortalObjectId)null);
+ }
}
private void selectObject(PortalObjectId id)
@@ -389,16 +395,54 @@
selectObject();
}
+ public String makeObjectDefault()
+ {
+ PortalObjectId poid = getSelectedPortalObjectId();
+ PortalObject object = portalObjectContainer.getObject(poid);
+ if (object != null)
+ {
+ String typeName;
+ int type = object.getType();
+ if (type == PortalObject.TYPE_PORTAL || type == PortalObject.TYPE_CONTEXT)
+ {
+ typeName = "portal";
+ }
+ else if (type == PortalObject.TYPE_PAGE)
+ {
+ typeName = "page";
+ }
+ else
+ {
+ throw new IllegalArgumentException("Invalid object type to set as
default");
+ }
+
+ // select the object for now as trying to re-display the page results in
apparently random behavior
+ // i.e. id parameter don't correspond to what they should be based on the
clicked link
+ // comment the next line to try it out for yourself...
+ selectObject(poid);
+
+ PortalObject parent = object.getParent();
+ if (parent != null)
+ {
+ String name = object.getName();
+ parent.setDeclaredProperty(PortalObject.PORTAL_PROP_DEFAULT_OBJECT_NAME,
name);
+
+
+ FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
"Success",
+ "'" + name + "'" + typeName + " was
successfully set as default " + typeName);
+ FacesContext.getCurrentInstance().addMessage("status", message);
+ }
+ }
+
+ return null;
+ }
+
public String selectObject()
{
try
{
- // Get id
- Map pmap =
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
- String id = (String)pmap.get("id");
+ PortalObjectId poid = getSelectedPortalObjectId();
- // Set the state from the id
- PortalObjectId poid = PortalObjectId.parse(id,
PortalObjectPath.LEGACY_BASE64_FORMAT);
PortalObject object = portalObjectContainer.getObject(poid);
// Update state if possible
@@ -437,10 +481,20 @@
return "objects";
}
- public void selectPlugin()
+ private PortalObjectId getSelectedPortalObjectId()
{
// Get id
Map pmap =
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
+ String id = (String)pmap.get("id");
+
+ // Set the state from the id
+ return PortalObjectId.parse(id, PortalObjectPath.LEGACY_BASE64_FORMAT);
+ }
+
+ public void selectPlugin()
+ {
+ // Get plugin
+ Map pmap =
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
selectedPlugin = (String)pmap.get("plugin");
}
@@ -709,6 +763,7 @@
/**
* Helper method to recognize object type in EL easily
+ *
* @return
*/
public String getSelectedObjectType()
@@ -716,7 +771,7 @@
PortalObject object = getSelectedObject();
if (object != null)
{
- switch(object.getType())
+ switch (object.getType())
{
case PortalObject.TYPE_CONTEXT:
return "context";
Modified: trunk/core-admin/src/main/org/jboss/portal/core/admin/ui/Refresher.java
===================================================================
--- trunk/core-admin/src/main/org/jboss/portal/core/admin/ui/Refresher.java 2007-08-23
08:04:55 UTC (rev 8046)
+++ trunk/core-admin/src/main/org/jboss/portal/core/admin/ui/Refresher.java 2007-08-24
20:52:39 UTC (rev 8047)
@@ -47,54 +47,43 @@
public void beforePhase(PhaseEvent phaseEvent)
{
+ FacesContext ctx = phaseEvent.getFacesContext();
+
if (phaseEvent.getPhaseId() == PhaseId.RESTORE_VIEW)
{
- FacesContext ctx = phaseEvent.getFacesContext();
+ refreshFrom(ctx);
//
- PortalObjectManagerBean pomgr =
(PortalObjectManagerBean)ctx.getApplication().createValueBinding("#{portalobjectmgr}").getValue(ctx);
- pomgr.refresh();
-
- //
- PortalObjectManagerBean dashboardmgr =
(PortalObjectManagerBean)ctx.getApplication().createValueBinding("#{dashboardmgr}").getValue(ctx);
- dashboardmgr.refresh();
-
- //
- InstanceManagerBean instancemgr =
(InstanceManagerBean)ctx.getApplication().createValueBinding("#{instancemgr}").getValue(ctx);
- instancemgr.refresh();
-
- //
- PortletManagerBean portletmgr =
(PortletManagerBean)ctx.getApplication().createValueBinding("#{portletmgr}").getValue(ctx);
- portletmgr.refresh();
-
- //
DashboardBean dashboard =
(DashboardBean)ctx.getApplication().createValueBinding("#{dashboard}").getValue(ctx);
dashboard.actionRefresh();
}
else if (phaseEvent.getPhaseId() == PhaseId.RENDER_RESPONSE)
{
- FacesContext ctx = phaseEvent.getFacesContext();
+ refreshFrom(ctx);
//
- PortalObjectManagerBean pomgr =
(PortalObjectManagerBean)ctx.getApplication().createValueBinding("#{portalobjectmgr}").getValue(ctx);
- pomgr.refresh();
+ DashboardBean dashboard =
(DashboardBean)ctx.getApplication().createValueBinding("#{dashboard}").getValue(ctx);
+ dashboard.renderRefresh();
+ }
+ }
- //
- PortalObjectManagerBean dashboardmgr =
(PortalObjectManagerBean)ctx.getApplication().createValueBinding("#{dashboardmgr}").getValue(ctx);
- dashboardmgr.refresh();
+ private void refreshFrom(FacesContext ctx)
+ {
+ //
+ PortalObjectManagerBean pomgr =
(PortalObjectManagerBean)ctx.getApplication().createValueBinding("#{portalobjectmgr}").getValue(ctx);
+ pomgr.refresh();
- //
- InstanceManagerBean instancemgr =
(InstanceManagerBean)ctx.getApplication().createValueBinding("#{instancemgr}").getValue(ctx);
- instancemgr.refresh();
+ //
+ PortalObjectManagerBean dashboardmgr =
(PortalObjectManagerBean)ctx.getApplication().createValueBinding("#{dashboardmgr}").getValue(ctx);
+ dashboardmgr.refresh();
- //
- PortletManagerBean portletmgr =
(PortletManagerBean)ctx.getApplication().createValueBinding("#{portletmgr}").getValue(ctx);
- portletmgr.refresh();
+ //
+ InstanceManagerBean instancemgr =
(InstanceManagerBean)ctx.getApplication().createValueBinding("#{instancemgr}").getValue(ctx);
+ instancemgr.refresh();
- //
- DashboardBean dashboard =
(DashboardBean)ctx.getApplication().createValueBinding("#{dashboard}").getValue(ctx);
- dashboard.renderRefresh();
- }
+ //
+ PortletManagerBean portletmgr =
(PortletManagerBean)ctx.getApplication().createValueBinding("#{portletmgr}").getValue(ctx);
+ portletmgr.refresh();
}
public PhaseId getPhaseId()
Modified:
trunk/core-admin/src/resources/portal-admin-war/WEB-INF/jsf/objectNavigation.xhtml
===================================================================
---
trunk/core-admin/src/resources/portal-admin-war/WEB-INF/jsf/objectNavigation.xhtml 2007-08-23
08:04:55 UTC (rev 8046)
+++
trunk/core-admin/src/resources/portal-admin-war/WEB-INF/jsf/objectNavigation.xhtml 2007-08-24
20:52:39 UTC (rev 8047)
@@ -34,20 +34,29 @@
actionListener="#{portalobjectmgr.selectObject}">
<h:outputText value="Properties"/>
<f:param name="id" value="#{object.id}"/>
- </h:commandLink> | <h:commandLink
action="editPortalTheme"
-
actionListener="#{portalobjectmgr.selectObject}">
+ </h:commandLink> | <h:commandLink action="editPortalTheme"
actionListener="#{portalobjectmgr.selectObject}">
<h:outputText value="Theme"/>
<f:param name="id" value="#{object.id}"/>
- </h:commandLink><h:panelGroup
- rendered="#{(object.name != 'admin') and (object.name !=
'template') and (object.name != 'default')}"> |
- <h:commandLink action="renameObject"
actionListener="#{portalobjectmgr.selectObject}">
+ </h:commandLink>
+ <h:panelGroup
+ rendered="#{(object.name != 'admin') and (object.name !=
'template') and (object.name != 'default')}">
+ | <h:commandLink action="renameObject"
actionListener="#{portalobjectmgr.selectObject}">
<h:outputText value="Rename"/>
<f:param name="id" value="#{object.id}"/>
- </h:commandLink></h:panelGroup> | <h:commandLink
action="confirm"
-
actionListener="#{portalobjectmgr.selectObject}">
+ </h:commandLink>
+ </h:panelGroup> | <h:commandLink action="confirm"
actionListener="#{portalobjectmgr.selectObject}">
<h:outputText value="Delete"/>
<f:param name="id" value="#{object.id}"/>
</h:commandLink>
+ <c:choose>
+ <c:when test="#{not object.default}"> |
<h:commandLink action="#{portalobjectmgr.makeObjectDefault}">
+ <h:outputText value="Make Default"/>
+ <f:param name="id" value="#{object.id}"/>
+ </h:commandLink>
+ </c:when>
+ <c:otherwise> | <h:outputText value="Default"/>
+ </c:otherwise>
+ </c:choose>
</td>
</tr>
</c:forEach>
@@ -91,6 +100,15 @@
<h:outputText value="Delete"/>
<f:param name="id" value="#{object.id}"/>
</h:commandLink>
+ <c:choose>
+ <c:when test="#{not object.default}"> |
<h:commandLink action="#{portalobjectmgr.makeObjectDefault}">
+ <h:outputText value="Make Default"/>
+ <f:param name="id" value="#{object.id}"/>
+ </h:commandLink>
+ </c:when>
+ <c:otherwise> | <h:outputText value="Default"/>
+ </c:otherwise>
+ </c:choose>
</td>
</tr>
</c:forEach>