Author: julien(a)jboss.com
Date: 2008-07-01 18:58:36 -0400 (Tue, 01 Jul 2008)
New Revision: 11246
Modified:
modules/presentation/trunk/portal/src/main/artifacts/presentation-portal-war/WEB-INF/jboss-beans.xml
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/PresentationServerImpl.java
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutElement.java
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutElementContext.java
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutStore.java
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutStructure.java
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/node/PortalNodeManager.java
Log:
added remove capabilities to back end model which is going to allow to play with refresh
capabilities and test how well it works (or not)
Modified:
modules/presentation/trunk/portal/src/main/artifacts/presentation-portal-war/WEB-INF/jboss-beans.xml
===================================================================
---
modules/presentation/trunk/portal/src/main/artifacts/presentation-portal-war/WEB-INF/jboss-beans.xml 2008-07-01
22:16:51 UTC (rev 11245)
+++
modules/presentation/trunk/portal/src/main/artifacts/presentation-portal-war/WEB-INF/jboss-beans.xml 2008-07-01
22:58:36 UTC (rev 11246)
@@ -160,6 +160,7 @@
<parameter><inject
bean="PortalNodeAdapter"/></parameter>
<parameter><inject
bean="StructuralStateContext"/></parameter>
<parameter><inject
bean="ContentHandlerRegistry"/></parameter>
+ <parameter><inject bean="LayoutStore"/></parameter>
</constructor>
</bean>
Modified:
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/PresentationServerImpl.java
===================================================================
---
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/PresentationServerImpl.java 2008-07-01
22:16:51 UTC (rev 11245)
+++
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/PresentationServerImpl.java 2008-07-01
22:58:36 UTC (rev 11246)
@@ -28,6 +28,8 @@
import org.jboss.portal.presentation.portal.model.node.PageNode;
import org.jboss.portal.presentation.portal.model.node.PortalNodeManager;
import org.jboss.portal.presentation.portal.model.content.PageContentContextImpl;
+import org.jboss.portal.presentation.portal.model.layout.LayoutStore;
+import org.jboss.portal.presentation.portal.model.layout.LayoutElement;
import org.jboss.portal.presentation.impl.state.structural.adapter.StructuralAdapter;
import org.jboss.portal.presentation.portal.content.protocol.ContentAction;
import org.jboss.portal.presentation.portal.content.ContentHandlerRegistry;
@@ -63,6 +65,9 @@
private PortalNodeManager portalNodeManager;
/** . */
+ private LayoutStore layoutStore;
+
+ /** . */
private StructuralAdapter structuralAdapter;
/** . */
@@ -75,12 +80,14 @@
PortalNodeManager portalNodeManager,
StructuralAdapter structuralAdapter,
StructuralStateContext structuralStateContext,
- ContentHandlerRegistry contentHandlerRegistry)
+ ContentHandlerRegistry contentHandlerRegistry,
+ LayoutStore layoutStore)
{
this.portalNodeManager = portalNodeManager;
this.structuralAdapter = structuralAdapter;
this.structuralStateContext = structuralStateContext;
this.contentHandlerRegistry = contentHandlerRegistry;
+ this.layoutStore = layoutStore;
}
public StructuralStateContext getStructuralStateContext()
@@ -132,9 +139,18 @@
}
else if (objectAction instanceof DestroyUIObjectAction)
{
- targetNode.getParent().destroyChild(targetNode.getName());
+ LayoutElement referent = layoutStore.findElementByRef(targetNode.getId());
//
+ if (referent != null)
+ {
+ layoutStore.destroyElement(referent.getId());
+ }
+
+ //
+ portalNodeManager.destroy(targetNode.getId());
+
+ //
return new PresentationResponse(new ShowUIObjectResponse(targetId));
}
else if (objectAction instanceof LinkActivation)
Modified:
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutElement.java
===================================================================
---
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutElement.java 2008-07-01
22:16:51 UTC (rev 11245)
+++
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutElement.java 2008-07-01
22:58:36 UTC (rev 11246)
@@ -61,7 +61,7 @@
final void unregister()
{
- throw new NotYetImplemented("No need for now");
+ this.context = null;
}
public final LayoutStructure getStructure()
Modified:
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutElementContext.java
===================================================================
---
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutElementContext.java 2008-07-01
22:16:51 UTC (rev 11245)
+++
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutElementContext.java 2008-07-01
22:58:36 UTC (rev 11246)
@@ -61,4 +61,9 @@
{
store.register(element);
}
+
+ void unregister(LayoutElement element)
+ {
+ store.unregister(element);
+ }
}
Modified:
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutStore.java
===================================================================
---
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutStore.java 2008-07-01
22:16:51 UTC (rev 11245)
+++
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutStore.java 2008-07-01
22:58:36 UTC (rev 11246)
@@ -25,6 +25,8 @@
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.ConcurrentHashMap;
import java.util.Map;
+import java.util.List;
+import java.util.LinkedList;
/**
* @author <a href="mailto:julien@jboss-portal.org">Julien
Viet</a>
@@ -54,13 +56,85 @@
}
/**
- * Locate a layout object by its id.
+ * Destroy a specified element and its descendants. Returns the set of references
held
+ * by the graph.
*
+ * @param id the element id
+ * @throws IllegalArgumentException if the argument is null
+ * @throws IllegalStateException if the element does not exist
+ * @return the set of references
+ */
+ public List<String> destroyElement(String id) throws IllegalArgumentException,
IllegalStateException
+ {
+ if (id == null)
+ {
+ throw new IllegalArgumentException("No null element id accepted");
+ }
+
+ //
+ LayoutElementContext targetContext = contextsById.get(id);
+ LayoutElement targetElement = targetContext.getObject();
+ LinkedList<String> references = new LinkedList<String>();
+
+ //
+ if (targetElement instanceof LayoutStructure)
+ {
+ LayoutStructure structure = (LayoutStructure)targetElement;
+
+ //
+ for (LayoutElement element : structure.getElements())
+ {
+ references.addAll(destroyElement(element.getId()));
+ }
+ }
+
+ //
+ LayoutStructure structure = targetElement.getStructure();
+ if (structure == null)
+ {
+ unregister(targetElement);
+ }
+ else
+ {
+ structure.removeElement(targetElement);
+ }
+
+ //
+ String objectRef = null;
+ if (targetElement instanceof SimpleStructure)
+ {
+ objectRef = ((SimpleStructure)targetElement).getObjectRef();
+ }
+ else if (targetElement instanceof SimpleElement)
+ {
+ objectRef = ((SimpleElement)targetElement).getRef();
+ }
+
+ //
+ if (objectRef != null)
+ {
+ references.addLast(objectRef);
+ }
+
+ //
+ return references;
+ }
+
+ /**
+ * Locate a layout object by its id or return null.
+ *
* @param id the layout object id
* @return a layout object
+ * @throws IllegalArgumentException if the argument is null
*/
- public LayoutElement getElement(String id)
+ public LayoutElement getElement(String id) throws IllegalArgumentException
{
+ if (id == null)
+ {
+ throw new IllegalArgumentException("No null element id accepted");
+ }
+
+ //
LayoutElementContext context = contextsById.get(id);
//
@@ -68,13 +142,20 @@
}
/**
- * Locate a layout object by the reference.
+ * Locate a layout object by the reference or return null.
*
* @param ref the reference
* @return a layout object
+ * @throws IllegalArgumentException if the argument is null
*/
public LayoutElement findElementByRef(String ref)
{
+ if (ref == null)
+ {
+ throw new IllegalArgumentException("No null element ref accepted");
+ }
+
+ //
LayoutElementContext context = contextsByObjectRef.get(ref);
//
@@ -90,8 +171,6 @@
//
String objectRef = null;
-
- //
if (element instanceof SimpleStructure)
{
objectRef = ((SimpleStructure)element).getObjectRef();
@@ -110,4 +189,35 @@
//
element.register(context);
}
+
+ void unregister(LayoutElement element)
+ {
+ LayoutElementContext context = contextsById.remove(element.getId());
+
+ //
+ if (context == null)
+ {
+ throw new IllegalStateException("No such element with id " +
element.getId());
+ }
+
+ //
+ String objectRef = null;
+ if (element instanceof SimpleStructure)
+ {
+ objectRef = ((SimpleStructure)element).getObjectRef();
+ }
+ else if (element instanceof SimpleElement)
+ {
+ objectRef = ((SimpleElement)element).getRef();
+ }
+
+ //
+ if (objectRef != null)
+ {
+ contextsByObjectRef.remove(objectRef);
+ }
+
+ //
+ element.unregister();
+ }
}
Modified:
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutStructure.java
===================================================================
---
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutStructure.java 2008-07-01
22:16:51 UTC (rev 11245)
+++
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/layout/LayoutStructure.java 2008-07-01
22:58:36 UTC (rev 11246)
@@ -73,7 +73,7 @@
{
if (element.structure != null)
{
- throw new IllegalArgumentException("Layout element is already attached to a
layout");
+ throw new IllegalArgumentException("Layout element is already attached to a
structure");
}
// Wire
@@ -83,4 +83,19 @@
// Register and contextualize
getContext().register(element);
}
+
+ public void removeElement(LayoutElement element)
+ {
+ if (element.structure != this)
+ {
+ throw new IllegalArgumentException("Layout element not attached to this
structure");
+ }
+
+ //
+ getContext().unregister(element);
+
+ // Unwire
+ element.structure = null;
+ elements.remove(element);
+ }
}
Modified:
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/node/PortalNodeManager.java
===================================================================
---
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/node/PortalNodeManager.java 2008-07-01
22:16:51 UTC (rev 11245)
+++
modules/presentation/trunk/portal/src/main/java/org/jboss/portal/presentation/portal/model/node/PortalNodeManager.java 2008-07-01
22:58:36 UTC (rev 11246)
@@ -79,6 +79,12 @@
PortalNode node = nodes.get(objectId);
//
+ if (node == null)
+ {
+ throw new IllegalStateException("No such node to destroy " +
objectId);
+ }
+
+ //
PortalNode parent = node.getParent();
//