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 2013/08/06 00:42:05 UTC

git commit: ISIS-469: downloaded json metadata now also includes actions

Updated Branches:
  refs/heads/master 94f071841 -> fb7446b26


ISIS-469: downloaded json metadata now also includes actions

in addition:
- some minor tweaks to CSS for prototype vs disabled actions.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/fb7446b2
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/fb7446b2
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/fb7446b2

Branch: refs/heads/master
Commit: fb7446b26dd01c8d2024d8021705a679001e7732
Parents: 94f0718
Author: Dan Haywood <da...@apache.org>
Authored: Tue Aug 6 00:41:49 2013 +0200
Committer: Dan Haywood <da...@apache.org>
Committed: Tue Aug 6 00:41:49 2013 +0200

----------------------------------------------------------------------
 .../components/widgets/cssmenu/CssMenuPanel.css |  8 +-
 .../viewer/wicket/ui/pages/PageAbstract.css     |  8 +-
 .../json/LayoutMetadataReaderFromJson.java      | 82 +++++++++++++++-----
 .../spec/feature/ObjectActionFilters.java       |  7 ++
 .../specloader/ObjectReflectorDefault.java      | 16 ++--
 5 files changed, 92 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/fb7446b2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css
index 98d7fec..b7a8279 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/CssMenuPanel.css
@@ -136,7 +136,7 @@
 }
 
 .cssMenuPanel li.cssSubMenuItem p.disabled {
-	color: gray;
+	color: lightgray;
 }
 
 .cssMenuPanel li.cssSubMenuItem {
@@ -322,5 +322,9 @@
 }
 
 .entityActions a.prototype span {
-	color: lightblue;
+	color: #CCCC00;
+	font-style: italic;
+}
+.entityActions a.prototype {
+    background-color: #20B5C2;
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fb7446b2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
index e6f900a..373c4c5 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
@@ -236,7 +236,8 @@ colors
 	}
 	
     #applicationActions .cssMenuPanel .menuh a.prototype span {
-	    color: lightblue;
+	    color: #CCCC00;
+	    font-style: italic;
 	}
 	
 	
@@ -320,8 +321,9 @@ colors
 	}
 	
     #applicationActions ul.cssSubMenuItemsPanel li.cssSubMenuItem p.disabled {
-        color: #888;
-        background-color: #F0EFEA;
+        color: lightgray;
+        /*background-color: #F0EFEA;*/
+        
     } 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/fb7446b2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
index 32aae9d..a452f1f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
@@ -22,16 +22,20 @@ import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 
 import com.google.common.base.Function;
 import com.google.common.base.Joiner;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 
 import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
+import org.apache.isis.applib.filter.Filter;
+import org.apache.isis.applib.filter.Filters;
 import org.apache.isis.core.commons.lang.ResourceUtil;
 import org.apache.isis.core.commons.lang.StringUtils;
 import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
@@ -49,6 +53,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecifications;
 import org.apache.isis.core.metamodel.spec.ObjectSpecifications.MemberGroupLayoutHint;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionContainer.Contributed;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionFilters;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActions;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
@@ -198,32 +203,30 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
         final MemberGroupLayoutFacet mglf = objectSpec.getFacet(MemberGroupLayoutFacet.class);
         final ColumnSpans columnSpans = mglf.getColumnSpans();
         
+        Set<String> actionIdsForAssociations = Sets.newTreeSet();
+        
         ColumnRepr columnRepr;
         
         columnRepr = addColumnWithSpan(metadata, columnSpans.getLeft());
-        updateColumnMemberGroups(objectSpec, MemberGroupLayoutHint.LEFT, columnRepr);
+        updateColumnMemberGroups(objectSpec, MemberGroupLayoutHint.LEFT, columnRepr, actionIdsForAssociations);
         
         columnRepr = addColumnWithSpan(metadata, columnSpans.getMiddle());
-        updateColumnMemberGroups(objectSpec, MemberGroupLayoutHint.MIDDLE, columnRepr);
+        updateColumnMemberGroups(objectSpec, MemberGroupLayoutHint.MIDDLE, columnRepr, actionIdsForAssociations);
         
         columnRepr = addColumnWithSpan(metadata, columnSpans.getRight());
-        updateColumnMemberGroups(objectSpec, MemberGroupLayoutHint.RIGHT, columnRepr);
+        updateColumnMemberGroups(objectSpec, MemberGroupLayoutHint.RIGHT, columnRepr, actionIdsForAssociations);
         
         columnRepr = addColumnWithSpan(metadata, columnSpans.getCollections());
-        
-        final List<ObjectAssociation> objectAssociations = visibleCollections(objectSpec);
-        columnRepr.collections = Maps.newLinkedHashMap();
-        for(ObjectAssociation assoc: objectAssociations) {
-            final MemberRepr memberRepr = newMemberRepr(objectSpec, assoc);
-            columnRepr.collections.put(assoc.getId(), memberRepr);
-        }
+        updateCollectionColumnRepr(objectSpec, columnRepr, actionIdsForAssociations);
 
+        addActions(objectSpec, metadata, actionIdsForAssociations);
+        
         final Gson gson = new GsonBuilder().setPrettyPrinting().create();
         return gson.toJson(metadata);
     }
 
-    private static void updateColumnMemberGroups(ObjectSpecification objectSpec, final MemberGroupLayoutHint hint, ColumnRepr columnRepr) {
-        final List<ObjectAssociation> objectAssociations = visibleProperties(objectSpec);
+    private static void updateColumnMemberGroups(ObjectSpecification objectSpec, final MemberGroupLayoutHint hint, ColumnRepr columnRepr, Set<String> actionIdsForAssociations) {
+        final List<ObjectAssociation> objectAssociations = propertiesOf(objectSpec);
         final Map<String, List<ObjectAssociation>> associationsByGroup = ObjectAssociations.groupByMemberOrderName(objectAssociations);
         
         final List<String> groupNames = ObjectSpecifications.orderByMemberGroups(objectSpec, associationsByGroup.keySet(), hint);
@@ -238,13 +241,35 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
                 continue;
             }
             for (ObjectAssociation assoc : associationsInGroup) {
-                final MemberRepr memberRepr = newMemberRepr(objectSpec, assoc);
+                final MemberRepr memberRepr = newMemberRepr(objectSpec, assoc, actionIdsForAssociations);
                 memberGroupRepr.members.put(assoc.getId(), memberRepr);
             }
         }
     }
+    private static void addActions(ObjectSpecification objectSpec, final LayoutMetadata metadata, Set<String> actionIdsForAssociations) {
+        Map<String, ActionRepr> actions = Maps.newLinkedHashMap();
+        final List<ObjectAction> actionsOf = actionsOf(objectSpec, actionIdsForAssociations);
+        for(ObjectAction action: actionsOf) {
+            actions.put(action.getId(), newActionRepr(objectSpec, action));
+        }
+        metadata.setActions(actions);
+    }
+
+    private static ActionRepr newActionRepr(ObjectSpecification objectSpec, ObjectAction action) {
+        return new ActionRepr();
+    }
 
-    private static MemberRepr newMemberRepr(ObjectSpecification objectSpec, ObjectAssociation assoc) {
+    private static void updateCollectionColumnRepr(ObjectSpecification objectSpec, ColumnRepr columnRepr, Set<String> actionIdsOfAssociations) {
+        final List<ObjectAssociation> objectAssociations = collectionsOf(objectSpec);
+        columnRepr.collections = Maps.newLinkedHashMap();
+        for(ObjectAssociation assoc: objectAssociations) {
+            final MemberRepr memberRepr = newMemberRepr(objectSpec, assoc, actionIdsOfAssociations);
+            columnRepr.collections.put(assoc.getId(), memberRepr);
+        }
+    }
+
+
+    private static MemberRepr newMemberRepr(ObjectSpecification objectSpec, ObjectAssociation assoc, Set<String> actionIdsForAssociations) {
         final MemberRepr memberRepr = new MemberRepr();
         
         final List<ObjectAction> actions = objectSpec.getObjectActions(
@@ -255,7 +280,9 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
             sortByMemberOrderFacet(actions);
             
             for (final ObjectAction action : actions) {
-                memberRepr.actions.put(action.getId(), new ActionRepr());
+                final String actionId = action.getId();
+                memberRepr.actions.put(actionId, new ActionRepr());
+                actionIdsForAssociations.add(actionId);
             }
         }
         return memberRepr;
@@ -280,11 +307,28 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader {
     }
 
     
-    private static List<ObjectAssociation> visibleProperties(final ObjectSpecification objSpec) {
-        return objSpec.getAssociations(ObjectAssociationFilters.PROPERTIES);
+    @SuppressWarnings("unchecked")
+    private static List<ObjectAssociation> propertiesOf(final ObjectSpecification objSpec) {
+        return objSpec.getAssociations(Filters.and(ObjectAssociationFilters.PROPERTIES,  ObjectAssociationFilters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE));
+    }
+    @SuppressWarnings("unchecked")
+    private static List<ObjectAssociation> collectionsOf(final ObjectSpecification objSpec) {
+        return objSpec.getAssociations(Filters.and(ObjectAssociationFilters.COLLECTIONS, ObjectAssociationFilters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE));
     }
-    private static List<ObjectAssociation> visibleCollections(final ObjectSpecification objSpec) {
-        return objSpec.getAssociations(ObjectAssociationFilters.COLLECTIONS);
+    private static List<ObjectAction> actionsOf(final ObjectSpecification objSpec, final Set<String> excludedActionIds) {
+        return objSpec.getObjectActions(ActionType.ALL_EXCEPT_SET, Contributed.INCLUDED, staticallyVisibleExcluding(excludedActionIds));
+    }
+
+    @SuppressWarnings("unchecked")
+    private static Filter<ObjectAction> staticallyVisibleExcluding(final Set<String> excludedActionIds) {
+        return Filters.and(
+                ObjectActionFilters.WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE, 
+                new Filter<ObjectAction>(){
+                    @Override
+                    public boolean accept(ObjectAction t) {
+                        return !excludedActionIds.contains(t.getId());
+                    }
+                });
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/fb7446b2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java
index d968182..45d7de9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionFilters.java
@@ -33,6 +33,13 @@ import org.apache.isis.core.progmodel.facets.actions.bulk.BulkFacet;
 
 public class ObjectActionFilters {
 
+    public static final Filter<ObjectAction> WHEN_VISIBLE_IRRESPECTIVE_OF_WHERE = new Filter<ObjectAction>() {
+        @Override
+        public boolean accept(final ObjectAction action) {
+            return !action.isAlwaysHidden();
+        }
+    };
+
     public static Filter<ObjectAction> dynamicallyVisible(final AuthenticationSession session, final ObjectAdapter target, final Where where) {
         return new Filter<ObjectAction>() {
             @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/fb7446b2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index efd9aa8..0591f1d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -351,12 +351,18 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
     public void invalidateCacheFor(Object domainObject) {
         final Class<? extends Object> cls = domainObject.getClass();
         final Class<?> substitutedType = getClassSubstitutor().getClass(cls);
-        ObjectSpecification origSpec = getCache().remove(substitutedType.getName());
         
-        final ObjectSpecification newSpec = loadSpecification(cls);
-        // ObjectSpecId is a value type, so in fact it shouldn't matter whether
-        // the original or the new Spec's SpecId is used.
-        getCache().recache(origSpec.getSpecId(), newSpec);
+        ObjectSpecification spec = loadSpecification(substitutedType);
+        while(spec != null) {
+            final Class<?> type = spec.getCorrespondingClass();
+            getCache().remove(type.getName());
+            recache(spec);
+            spec = spec.superclass(); 
+        }
+    }
+
+    private void recache(final ObjectSpecification newSpec) {
+        getCache().recache(newSpec.getSpecId(), newSpec);
     }