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/09/03 09:23:50 UTC

[4/7] git commit: ISIS-503: inlining methods, simplifying

ISIS-503: inlining methods, simplifying

DeweyOrderSet now acts on IdentifiedHolder, rather than FacetedMethod.


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

Branch: refs/heads/master
Commit: c8cd533721a147c46dcdb948d8cdf632673dd5ea
Parents: 04662a6
Author: Dan Haywood <da...@apache.org>
Authored: Tue Sep 3 07:03:01 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Tue Sep 3 07:03:01 2013 +0100

----------------------------------------------------------------------
 .../core/metamodel/layout/DeweyOrderSet.java    | 46 ++++-------
 .../MemberIdentifierComparator.java             |  5 +-
 .../dflt/ObjectSpecificationDefault.java        | 81 +++++++-------------
 .../ordering/memberorder/DeweyOrderSetTest.java | 17 ++--
 4 files changed, 56 insertions(+), 93 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/c8cd5337/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/DeweyOrderSet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/DeweyOrderSet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/DeweyOrderSet.java
index 25ab33f..1b69237 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/DeweyOrderSet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/DeweyOrderSet.java
@@ -33,6 +33,8 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
 import org.apache.isis.core.metamodel.layout.memberorderfacet.MemberIdentifierComparator;
@@ -73,25 +75,25 @@ import org.apache.isis.core.metamodel.layout.memberorderfacet.MemberOrderCompara
  */
 public class DeweyOrderSet implements Comparable<DeweyOrderSet>, Iterable<Object>  {
     
-    public static DeweyOrderSet createOrderSet(final List<FacetedMethod> facetedMethods) {
+    public static DeweyOrderSet createOrderSet(final List<? extends IdentifiedHolder> facetedMethods) {
 
-        final SortedMap<String, SortedSet<FacetedMethod>> sortedMembersByGroup = Maps.newTreeMap();
-        final SortedSet<FacetedMethod> nonAnnotatedGroup = Sets.newTreeSet(new MemberIdentifierComparator());
+        final SortedMap<String, SortedSet<IdentifiedHolder>> sortedMembersByGroup = Maps.newTreeMap();
+        final SortedSet<IdentifiedHolder> nonAnnotatedGroup = Sets.newTreeSet(new MemberIdentifierComparator());
 
         // spin over all the members and put them into a Map of SortedSets
         // any non-annotated members go into additional nonAnnotatedGroup set.
-        for (final FacetedMethod facetedMethod : facetedMethods) {
+        for (final IdentifiedHolder facetedMethod : facetedMethods) {
             final MemberOrderFacet memberOrder = facetedMethod.getFacet(MemberOrderFacet.class);
             if (memberOrder == null) {
                 nonAnnotatedGroup.add(facetedMethod);
                 continue;
             }
-            final SortedSet<FacetedMethod> sortedMembersForGroup = getSortedSet(sortedMembersByGroup, memberOrder.name());
+            final SortedSet<IdentifiedHolder> sortedMembersForGroup = getSortedSet(sortedMembersByGroup, memberOrder.name());
             sortedMembersForGroup.add(facetedMethod);
         }
 
         // add the non-annotated group to the first "" group.
-        final SortedSet<FacetedMethod> defaultSet = getSortedSet(sortedMembersByGroup, "");
+        final SortedSet<IdentifiedHolder> defaultSet = getSortedSet(sortedMembersByGroup, "");
         defaultSet.addAll(nonAnnotatedGroup);
 
         // create OrderSets, wiring up parents and children.
@@ -158,11 +160,10 @@ public class DeweyOrderSet implements Comparable<DeweyOrderSet>, Iterable<Object
      * @param groupName
      * @return
      */
-    private static SortedSet<FacetedMethod> getSortedSet(final SortedMap<String, SortedSet<FacetedMethod>> sortedMembersByGroup, final String groupName) {
-        SortedSet<FacetedMethod> sortedMembersForGroup;
-        sortedMembersForGroup = sortedMembersByGroup.get(groupName);
+    private static SortedSet<IdentifiedHolder> getSortedSet(final SortedMap<String, SortedSet<IdentifiedHolder>> sortedMembersByGroup, final String groupName) {
+        SortedSet<IdentifiedHolder> sortedMembersForGroup = sortedMembersByGroup.get(groupName);
         if (sortedMembersForGroup == null) {
-            sortedMembersForGroup = new TreeSet<FacetedMethod>(new MemberOrderComparator(true));
+            sortedMembersForGroup = new TreeSet<IdentifiedHolder>(new MemberOrderComparator(true));
             sortedMembersByGroup.put(groupName, sortedMembersForGroup);
         }
         return sortedMembersForGroup;
@@ -202,8 +203,6 @@ public class DeweyOrderSet implements Comparable<DeweyOrderSet>, Iterable<Object
      * <p>
      * For example, if supplied <tt>abc,def,ghi</tt> in the constructor, then
      * this will return <tt>ghi</tt>.
-     * 
-     * @return
      */
     public String getGroupName() {
         return groupName;
@@ -216,8 +215,6 @@ public class DeweyOrderSet implements Comparable<DeweyOrderSet>, Iterable<Object
      * <p>
      * For example, if supplied <tt>abc,def,ghi</tt> in the constructor, then
      * this will return the same string <tt>abc,def,ghi</tt>.
-     * 
-     * @return
      */
     public String getGroupFullName() {
         return groupFullName;
@@ -231,8 +228,6 @@ public class DeweyOrderSet implements Comparable<DeweyOrderSet>, Iterable<Object
      * <p>
      * For example, if supplied <tt>abc,def,ghi</tt> in the constructor, then
      * this will return <tt>abc,def</tt>.
-     * 
-     * @return
      */
     public String getGroupPath() {
         return groupPath;
@@ -240,9 +235,6 @@ public class DeweyOrderSet implements Comparable<DeweyOrderSet>, Iterable<Object
 
     /**
      * Splits name by comma, then title case the last component.
-     * 
-     * @param groupFullName
-     * @return
      */
     private static String deriveGroupName(final String groupFullName) {
         final StringTokenizer tokens = new StringTokenizer(groupFullName, ",", false);
@@ -260,10 +252,7 @@ public class DeweyOrderSet implements Comparable<DeweyOrderSet>, Iterable<Object
     }
 
     /**
-     * Everything upto the last comma, else empty string if none.
-     * 
-     * @param groupFullName
-     * @return
+     * Everything up to the last comma, else empty string if none.
      */
     private static String deriveGroupPath(final String groupFullName) {
         final int lastComma = groupFullName.lastIndexOf(",");
@@ -301,8 +290,6 @@ public class DeweyOrderSet implements Comparable<DeweyOrderSet>, Iterable<Object
 
     /**
      * Returns a copy of the elements, in sequence.
-     * 
-     * @return
      */
     public List<Object> elementList() {
         return new ArrayList<Object>(elements);
@@ -327,7 +314,7 @@ public class DeweyOrderSet implements Comparable<DeweyOrderSet>, Iterable<Object
         }
     }
     
-    // ///////////////////////// compareTo //////////////////////
+    // ///////////////////////// reorderChildren //////////////////////
     
     public void reorderChildren(List<String> requiredOrder) {
         final LinkedHashMap<String,DeweyOrderSet> orderSets = Maps.newLinkedHashMap();
@@ -360,10 +347,9 @@ public class DeweyOrderSet implements Comparable<DeweyOrderSet>, Iterable<Object
     }
 
 
-    
-
-
-    // ///////////////////////// compareTo //////////////////////
+    // //////////////////////////////////////
+    // compareTo, equals, hashCode, toString
+    // //////////////////////////////////////
 
     /**
      * Natural ordering is to compare by {@link #getGroupFullName()}.

http://git-wip-us.apache.org/repos/asf/isis/blob/c8cd5337/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/memberorderfacet/MemberIdentifierComparator.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/memberorderfacet/MemberIdentifierComparator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/memberorderfacet/MemberIdentifierComparator.java
index a098e9f..b9aa154 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/memberorderfacet/MemberIdentifierComparator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/memberorderfacet/MemberIdentifierComparator.java
@@ -23,18 +23,19 @@ import java.io.Serializable;
 import java.util.Comparator;
 
 import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 
 /**
  * Compares {@link FacetedMethod}) by {@link FacetedMethod#getIdentifier()}
  * 
  */
-public class MemberIdentifierComparator implements Comparator<FacetedMethod>, Serializable {
+public class MemberIdentifierComparator implements Comparator<IdentifiedHolder>, Serializable {
 
     private static final long serialVersionUID = 1L;
 
     @Override
-    public int compare(final FacetedMethod o1, final FacetedMethod o2) {
+    public int compare(final IdentifiedHolder o1, final IdentifiedHolder o2) {
         final Identifier identifier1 = o1.getIdentifier();
         final Identifier identifier2 = o2.getIdentifier();
         return identifier1.compareTo(identifier2);

http://git-wip-us.apache.org/repos/asf/isis/blob/c8cd5337/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index 89ec23f..37b264c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -46,6 +46,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
 import org.apache.isis.core.metamodel.facets.ImperativeFacetUtils;
@@ -181,13 +182,27 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
         final List<FacetedMethod> actionFacetedMethods = facetedMethodsBuilder.getActionFacetedMethods(properties);
 
         if(isNotIntrospected()) {
-            final DeweyOrderSet associationOrderSet = createAssociationOrderSetFor(this, associationFacetedMethods);
-            updateAssociations(asFlattenedAssociations(associationOrderSet));
+            final DeweyOrderSet orderSet = DeweyOrderSet.createOrderSet(associationFacetedMethods);
+            final MemberGroupLayoutFacet memberGroupLayoutFacet = this.getFacet(MemberGroupLayoutFacet.class);
+            
+            if(memberGroupLayoutFacet != null) {
+                final List<String> groupOrder = Lists.newArrayList();
+                groupOrder.addAll(memberGroupLayoutFacet.getLeft());
+                groupOrder.addAll(memberGroupLayoutFacet.getMiddle());
+                groupOrder.addAll(memberGroupLayoutFacet.getRight());
+                
+                orderSet.reorderChildren(groupOrder);
+            }
+            final List<ObjectAssociation> associations = Lists.newArrayList();
+            convertToAssociations(orderSet, associations);
+            updateAssociations(associations);
         }
 
         if(isNotIntrospected()) {
-            final DeweyOrderSet actionOrderSet = createActionOrderSetFor(this, actionFacetedMethods);
-            updateObjectActions(asObjectActions(actionOrderSet));
+            final DeweyOrderSet orderSet = DeweyOrderSet.createOrderSet(actionFacetedMethods);
+            final List<ObjectAction> actions = Lists.newArrayList();
+            convertToObjectActions(orderSet, actions);
+            updateObjectActions(actions);
         }
 
         if(isNotIntrospected()) {
@@ -199,33 +214,6 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
         }
     }
     
-    private static DeweyOrderSet createAssociationOrderSetFor(final ObjectSpecification spec, final List<FacetedMethod> associationMethods) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("MemberLayoutArrangerUsingMemberOrderFacet: createAssociationOrderSetFor " + spec.getFullIdentifier());
-        }
-
-        final DeweyOrderSet orderSet = DeweyOrderSet.createOrderSet(associationMethods);
-        final MemberGroupLayoutFacet memberGroupLayoutFacet = spec.getFacet(MemberGroupLayoutFacet.class);
-        
-        if(memberGroupLayoutFacet != null) {
-            final List<String> groupOrder = Lists.newArrayList();
-            groupOrder.addAll(memberGroupLayoutFacet.getLeft());
-            groupOrder.addAll(memberGroupLayoutFacet.getMiddle());
-            groupOrder.addAll(memberGroupLayoutFacet.getRight());
-            
-            orderSet.reorderChildren(groupOrder);
-        }
-        return orderSet;
-    }
-    
-    private static DeweyOrderSet createActionOrderSetFor(final ObjectSpecification spec, final List<FacetedMethod> actionFacetedMethodList) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("MemberLayoutArrangerUsingMemberOrderFacet: createActionOrderSetFor " + spec.getFullIdentifier());
-        }
-
-        return DeweyOrderSet.createOrderSet(actionFacetedMethodList);
-    }
-
     private boolean isNotIntrospected() {
         return !(getIntrospectionState() == IntrospectionState.INTROSPECTED);
     }
@@ -244,54 +232,41 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
         }
     }
 
-    private List<ObjectAssociation> asFlattenedAssociations(final DeweyOrderSet orderSet) {
-        if (orderSet == null) {
-            return null;
-        }
-        final List<ObjectAssociation> associations = Lists.newArrayList();
-        addAssociations(orderSet, associations);
-
-        return associations;
-    }
-
-    private void addAssociations(final DeweyOrderSet orderSet, final List<ObjectAssociation> associations) {
+    private void convertToAssociations(final DeweyOrderSet orderSet, final List<ObjectAssociation> associationsToAppendTo) {
         for (final Object element : orderSet) {
             if (element instanceof FacetedMethod) {
                 final FacetedMethod facetMethod = (FacetedMethod) element;
                 if (facetMethod.getFeatureType().isCollection()) {
-                    associations.add(createCollection(facetMethod));
+                    associationsToAppendTo.add(createCollection(facetMethod));
                 } else if (facetMethod.getFeatureType().isProperty()) {
-                    associations.add(createProperty(facetMethod));
+                    associationsToAppendTo.add(createProperty(facetMethod));
                 }
             } else if (element instanceof DeweyOrderSet) {
                 // just flatten.
                 DeweyOrderSet childOrderSet = (DeweyOrderSet) element;
-                addAssociations(childOrderSet, associations);
+                convertToAssociations(childOrderSet, associationsToAppendTo);
             } else {
                 throw new UnknownTypeException(element);
             }
         }
     }
 
-    private List<ObjectAction> asObjectActions(final DeweyOrderSet orderSet) {
-        if (orderSet == null) {
-            return null;
-        }
-        final List<ObjectAction> actions = Lists.newArrayList();
+    private void convertToObjectActions(final DeweyOrderSet orderSet, final List<ObjectAction> actionsToAppendTo) {
         for (final Object element : orderSet) {
             if (element instanceof FacetedMethod) {
                 final FacetedMethod facetedMethod = (FacetedMethod) element;
                 if (facetedMethod.getFeatureType().isAction()) {
-                    actions.add(createAction(facetedMethod));
+                    actionsToAppendTo.add(createAction(facetedMethod));
                 }
             } else if (element instanceof DeweyOrderSet) {
                 final DeweyOrderSet set = ((DeweyOrderSet) element);
-                actions.addAll(asObjectActions(set));
+                final List<ObjectAction> actions = Lists.newArrayList();
+                convertToObjectActions(set, actions);
+                actionsToAppendTo.addAll(actions);
             } else {
                 throw new UnknownTypeException(element);
             }
         }
-        return actions;
     }
 
     private OneToOneAssociationImpl createProperty(final FacetedMethod facetedMethod) {

http://git-wip-us.apache.org/repos/asf/isis/blob/c8cd5337/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/ordering/memberorder/DeweyOrderSetTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/ordering/memberorder/DeweyOrderSetTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/ordering/memberorder/DeweyOrderSetTest.java
index 38733a0..8ac5694 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/ordering/memberorder/DeweyOrderSetTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/ordering/memberorder/DeweyOrderSetTest.java
@@ -26,6 +26,7 @@ import junit.framework.TestSuite;
 
 import com.google.common.collect.ImmutableList;
 
+import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.layout.DeweyOrderSet;
 import org.apache.isis.core.progmodel.facets.members.order.MemberOrderFacetAnnotation;
@@ -64,14 +65,14 @@ public class DeweyOrderSetTest extends TestCase {
         }
     }
 
-    private final FacetedMethod lastNameMember = FacetedMethod.createForProperty(Customer.class, "Last Name");
-    private final FacetedMethod firstNameMember = FacetedMethod.createForProperty(Customer.class, "First Name");
-    private final FacetedMethod houseNumberMember = FacetedMethod.createForProperty(Customer.class, "House Number");
-    private final FacetedMethod streetNameMember = FacetedMethod.createForProperty(Customer.class, "Street Name");
-    private final FacetedMethod postalTownMember = FacetedMethod.createForProperty(Customer.class, "Postal Town");
-    private final List<FacetedMethod> lastNameAndFirstName = ImmutableList.of(lastNameMember, firstNameMember);
-    private final List<FacetedMethod> nameAndAddressMembers = ImmutableList.of(lastNameMember, firstNameMember, houseNumberMember, streetNameMember, postalTownMember);
-    private final List<FacetedMethod> lastNameFirstNameAndPostalTown = ImmutableList.of(lastNameMember, firstNameMember, postalTownMember);
+    private final IdentifiedHolder lastNameMember = FacetedMethod.createForProperty(Customer.class, "Last Name");
+    private final IdentifiedHolder firstNameMember = FacetedMethod.createForProperty(Customer.class, "First Name");
+    private final IdentifiedHolder houseNumberMember = FacetedMethod.createForProperty(Customer.class, "House Number");
+    private final IdentifiedHolder streetNameMember = FacetedMethod.createForProperty(Customer.class, "Street Name");
+    private final IdentifiedHolder postalTownMember = FacetedMethod.createForProperty(Customer.class, "Postal Town");
+    private final List<IdentifiedHolder> lastNameAndFirstName = ImmutableList.of(lastNameMember, firstNameMember);
+    private final List<IdentifiedHolder> nameAndAddressMembers = ImmutableList.of(lastNameMember, firstNameMember, houseNumberMember, streetNameMember, postalTownMember);
+    private final List<IdentifiedHolder> lastNameFirstNameAndPostalTown = ImmutableList.of(lastNameMember, firstNameMember, postalTownMember);
 
     @Override
     protected void setUp() {