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);
}