You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2012/11/16 19:01:28 UTC

svn commit: r1410514 - in /isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components: collection/ entity/collections/

Author: danhaywood
Date: Fri Nov 16 18:01:27 2012
New Revision: 1410514

URL: http://svn.apache.org/viewvc?rev=1410514&view=rev
Log:
ISIS-232: entity collection actions (incomplete)

Modified:
    isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html
    isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
    isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.html
    isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java

Modified: isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html
URL: http://svn.apache.org/viewvc/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html?rev=1410514&r1=1410513&r2=1410514&view=diff
==============================================================================
--- isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html (original)
+++ isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html Fri Nov 16 18:01:27 2012
@@ -26,6 +26,17 @@
 	<body>
 		<wicket:panel>
 			<div class="collectionPanel collectionNameAndContentsComponentType">
+				<div class="actions panel">
+	  				<table>
+	      	   			<tbody>
+	      	      			<tr>
+	      						<td>
+	      			      			<span class="groupedActions" wicket:id="groupedActions"/>
+	      		      			</td>
+	      	     			</tr>
+	           			</tbody>
+	   			   </table>
+   			   </div>
 				<div wicket:id="collection">
 	      			<span class="collectionContents" wicket:id="collectionContents"/>
 				</div>

Modified: isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
URL: http://svn.apache.org/viewvc/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java?rev=1410514&r1=1410513&r2=1410514&view=diff
==============================================================================
--- isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java (original)
+++ isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java Fri Nov 16 18:01:27 2012
@@ -19,14 +19,37 @@
 
 package org.apache.isis.viewer.wicket.ui.components.collection;
 
+import java.util.List;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel;
 
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.filter.Filter;
+import org.apache.isis.applib.filter.Filters;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
+import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionFilters;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionContainer.Contributed;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
+import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.components.entity.EntityActionLinkFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
+import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuBuilder;
+import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuLinkFactory;
+import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.isis.viewer.wicket.ui.util.Components;
+
+import com.google.common.base.Strings;
 
 /**
  * Panel for rendering entity collection; analogous to (any concrete subclass
@@ -37,10 +60,28 @@ public class CollectionPanel extends Pan
     private static final long serialVersionUID = 1L;
 
     private static final String ID_COLLECTION = "collection";
+    private static final String ID_GROUPED_ACTIONS = "groupedActions";
     private static final String ID_FEEDBACK = "feedback";
 
-    public CollectionPanel(final String id, final EntityCollectionModel entityCollectionModel) {
-        super(id, entityCollectionModel);
+    private final EntityModel entityModel;
+    private final OneToManyAssociation otma;
+
+    private static EntityCollectionModel createEntityCollectionModel(EntityModel entityModel, OneToManyAssociation otma) {
+        return EntityCollectionModel.createParented(entityModel, otma);
+    }
+
+    public CollectionPanel(final String id, final EntityModel entityModel, OneToManyAssociation otma) {
+        this(id, entityModel, otma, createEntityCollectionModel(entityModel, otma));
+    }
+
+    public CollectionPanel(String id, EntityCollectionModel collectionModel) {
+        this(id, null, null, collectionModel);
+    }
+
+    private CollectionPanel(String id, EntityModel entityModel, OneToManyAssociation otma, EntityCollectionModel collectionModel) {
+        super(id, collectionModel);
+        this.entityModel = entityModel;
+        this.otma = otma;
 
         buildGui();
     }
@@ -50,8 +91,65 @@ public class CollectionPanel extends Pan
         final WebMarkupContainer markupContainer = new WebMarkupContainer(ID_COLLECTION);
         final Component collectionContents = getComponentFactoryRegistry().addOrReplaceComponent(markupContainer, ComponentType.COLLECTION_CONTENTS, getModel());
 
+        buildEntityActionsGui();
+        
         addOrReplace(new ComponentFeedbackPanel(ID_FEEDBACK, collectionContents));
         addOrReplace(markupContainer);
+
     }
 
+    private void buildEntityActionsGui() {
+
+        if (entityModel == null || otma == null) {
+            Components.permanentlyHide(this, ID_GROUPED_ACTIONS);
+            return;
+        }
+
+        final ObjectSpecification adapterSpec = entityModel.getTypeOfSpecification();
+        final ObjectAdapter adapter = entityModel.getObject();
+        final ObjectAdapterMemento adapterMemento = entityModel.getObjectAdapterMemento();
+        
+        @SuppressWarnings("unchecked")
+        final List<ObjectAction> userActions = adapterSpec.getObjectActions(ActionType.USER, Contributed.INCLUDED,
+                Filters.and(memberOrderOf(otma), dynamicallyVisibleFor(adapter)));
+
+        if(!userActions.isEmpty()) {
+            final CssMenuLinkFactory linkFactory = new EntityActionLinkFactory(entityModel);
+            final CssMenuBuilder cssMenuBuilder = new CssMenuBuilder(adapterMemento, getServiceAdapters(), userActions, linkFactory);
+            // TODO: i18n
+            final CssMenuPanel groupedActions = cssMenuBuilder.buildPanel(ID_GROUPED_ACTIONS, "Actions");
+
+            addOrReplace(groupedActions);
+        } else {
+            Components.permanentlyHide(this, ID_GROUPED_ACTIONS);
+        }
+    }
+
+    private Filter<ObjectAction> dynamicallyVisibleFor(final ObjectAdapter adapter) {
+        return ObjectActionFilters.dynamicallyVisible(getAuthenticationSession(), adapter, Where.ANYWHERE);
+    }
+
+    private Filter<ObjectAction> memberOrderOf(ObjectAssociation association) {
+        final String collectionName = association.getName();
+        final String collectionId = association.getId();
+        return new Filter<ObjectAction>() {
+
+            @Override
+            public boolean accept(ObjectAction t) {
+                final MemberOrderFacet memberOrderFacet = t.getFacet(MemberOrderFacet.class);
+                if(memberOrderFacet == null) {
+                    return false; 
+                }
+                final String memberOrderName = memberOrderFacet.name();
+                if(Strings.isNullOrEmpty(memberOrderName)) {
+                    return false;
+                }
+                return memberOrderName.equalsIgnoreCase(collectionName) || memberOrderName.equalsIgnoreCase(collectionId);
+            }
+        };
+    }
+
+
+
+    
 }

Modified: isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.html
URL: http://svn.apache.org/viewvc/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.html?rev=1410514&r1=1410513&r2=1410514&view=diff
==============================================================================
--- isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.html (original)
+++ isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.html Fri Nov 16 18:01:27 2012
@@ -24,18 +24,9 @@
 		    	<div wicket:id="collections">
 		    		<fieldset wicket:id="collectionGroup" class="memberGroup">
 		    			<legend wicket:id="collectionName">[collection name]</legend>
-		    			<div class="actions panel">				
-			  				<table>
-			      	   			<tbody>
-			      	      			<tr>
-			      						<td>
-			      			      			<span class="groupedActions" wicket:id="groupedActions"/>
-			      		      			</td>
-			      	     			</tr>
-			           			</tbody>
-			   			   </table>
-					    </div>
-                		<div wicket:id="collection" class="collection">[collection]</div>
+                		<div wicket:id="collection" class="collection">
+	                		[collection]
+                		</div>
                 	</fieldset>
 		    	</div>
 			</div>

Modified: isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
URL: http://svn.apache.org/viewvc/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java?rev=1410514&r1=1410513&r2=1410514&view=diff
==============================================================================
--- isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java (original)
+++ isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java Fri Nov 16 18:01:27 2012
@@ -75,7 +75,6 @@ public class EntityCollectionsPanel exte
     private static final String ID_COLLECTIONS = "collections";
     private static final String ID_COLLECTION = "collection";
 
-    private static final String ID_GROUPED_ACTIONS = "groupedActions";
 
     public EntityCollectionsPanel(final String id, final EntityModel entityModel) {
         super(id, entityModel);
@@ -128,66 +127,15 @@ public class EntityCollectionsPanel exte
         final String name = association.getName();
         fieldset.add(new Label(ID_COLLECTION_NAME, name));
 
-        buildEntityActionsGui(fieldset, association);
-
 		final OneToManyAssociation otma = (OneToManyAssociation) association;
 
-		final EntityCollectionModel entityCollectionModel = EntityCollectionModel.createParented(entityModel, otma);
-		final CollectionPanel collectionPanel = new CollectionPanel(ID_COLLECTION, entityCollectionModel);
+		final CollectionPanel collectionPanel = new CollectionPanel(ID_COLLECTION, entityModel, otma);
+
 		fieldset.addOrReplace(collectionPanel);
 
-		getComponentFactoryRegistry().addOrReplaceComponent(fieldset, ID_COLLECTION, ComponentType.COLLECTION_NAME_AND_CONTENTS, entityCollectionModel);
+		getComponentFactoryRegistry().addOrReplaceComponent(fieldset, ID_COLLECTION, ComponentType.COLLECTION_NAME_AND_CONTENTS, collectionPanel.getModel());
 	}
 
-    private void buildEntityActionsGui(WebMarkupContainer collectionRvContainer, ObjectAssociation association) {
-        
-        final EntityModel model = getModel();
-        final ObjectSpecification adapterSpec = model.getTypeOfSpecification();
-        final ObjectAdapter adapter = model.getObject();
-        final ObjectAdapterMemento adapterMemento = model.getObjectAdapterMemento();
-        
-        @SuppressWarnings("unchecked")
-        final List<ObjectAction> userActions = adapterSpec.getObjectActions(ActionType.USER, Contributed.INCLUDED,
-                Filters.and(memberOrderOf(association), dynamicallyVisibleFor(adapter)));
-
-        final CssMenuLinkFactory linkFactory = new EntityActionLinkFactory(getEntityModel());
-
-        if(!userActions.isEmpty()) {
-            final CssMenuBuilder cssMenuBuilder = new CssMenuBuilder(adapterMemento, getServiceAdapters(), userActions, linkFactory);
-            // TODO: i18n
-            final CssMenuPanel cssMenuPanel = cssMenuBuilder.buildPanel(ID_GROUPED_ACTIONS, "Actions");
-
-            collectionRvContainer.addOrReplace(cssMenuPanel);
-        } else {
-            Components.permanentlyHide(collectionRvContainer, ID_GROUPED_ACTIONS);
-        }
-    }
-
-    private Filter<ObjectAction> dynamicallyVisibleFor(final ObjectAdapter adapter) {
-        return ObjectActionFilters.dynamicallyVisible(getAuthenticationSession(), adapter, Where.ANYWHERE);
-    }
-
-    private Filter<ObjectAction> memberOrderOf(ObjectAssociation association) {
-        final String collectionName = association.getName();
-        final String collectionId = association.getId();
-        return new Filter<ObjectAction>() {
-
-            @Override
-            public boolean accept(ObjectAction t) {
-                final MemberOrderFacet memberOrderFacet = t.getFacet(MemberOrderFacet.class);
-                if(memberOrderFacet == null) {
-                    return false; 
-                }
-                final String memberOrderName = memberOrderFacet.name();
-                if(Strings.isNullOrEmpty(memberOrderName)) {
-                    return false;
-                }
-                return memberOrderName.equals(collectionName) || memberOrderName.equals(collectionId);
-            }
-        };
-    }
-
-
     private List<ObjectAssociation> visibleAssociations(final ObjectAdapter adapter, final ObjectSpecification noSpec) {
         return noSpec.getAssociations(visibleAssociationFilter(adapter));
     }