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/17 08:44:02 UTC

git commit: ISIS-74: removed BoundedFacet

Updated Branches:
  refs/heads/master d82f3d3c7 -> 6d3562286


ISIS-74: removed BoundedFacet

instead, @Bounded implies a ChoicesFacet on the type, from which are derived
PropertyChoicesFacet or ActionParameterChoicesFacet (same as handling of
enums).

Also removed use of deprecated Filter interface in ToDoItem, using guava
Predicate instead.


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

Branch: refs/heads/master
Commit: 6d35622866ad4b6290892913ea85ce762f707e30
Parents: d82f3d3
Author: Dan Haywood <da...@apache.org>
Authored: Tue Sep 17 07:43:44 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Tue Sep 17 07:43:44 2013 +0100

----------------------------------------------------------------------
 .../dnd/tree/ClosedObjectNodeSpecification.java |   7 +-
 .../isis/viewer/dnd/tree/TreeDisplayRules.java  |   9 +-
 .../model/util/ObjectAdapterFunctions.java      |  22 +---
 .../core/metamodel/adapter/ObjectAdapter.java   |  61 +++++++++
 .../metamodel/facets/choices/ChoicesFacet.java  |  14 +++
 .../facets/object/bounded/BoundedFacet.java     |  39 ------
 .../object/bounded/BoundedFacetUtils.java       |  32 -----
 .../object/bounded/ChoicesFacetUtils.java       |  39 ++++++
 .../core/metamodel/spec/ObjectAdapterUtils.java |  36 +++---
 .../specloader/ObjectReflectorDefault.java      |   4 +-
 .../specloader/specimpl/ObjectActionImpl.java   |   8 +-
 .../specimpl/ObjectActionParameterAbstract.java |  18 ++-
 ...jectActionParameterParseableContributee.java |   2 +-
 .../specimpl/OneToOneAssociationImpl.java       |  21 ++--
 .../apache/isis/core/metamodel/util/Dump.java   |   6 +-
 .../object/bounded/BoundedFacetAbstract.java    |  75 -----------
 .../facets/object/bounded/BoundedFacetImpl.java |  36 ------
 .../ChoicesFacetFromBoundedAbstract.java        | 124 +++++++++++++++++++
 .../BoundedAnnotationFacetFactory.java          |  23 ++--
 .../annotation/BoundedFacetAnnotation.java      |  31 -----
 .../ChoicesFacetFromBoundedAnnotation.java      |  33 +++++
 .../markerifc/BoundedFacetMarkerInterface.java  |  31 -----
 .../BoundedMarkerInterfaceFacetFactory.java     |  17 ++-
 ...cesFacetFromBoundedFacetMarkerInterface.java |  33 +++++
 ...acetDerivedFromChoicesFacetFacetFactory.java |   3 +-
 ...acetDerivedFromChoicesFacetFacetFactory.java |   3 +-
 .../BoundedAnnotationFacetFactoryTest.java      |   6 +-
 .../BoundedMarkerInterfaceFacetFactoryTest.java |   6 +-
 .../dom/src/main/java/dom/todo/ToDoItem.java    |  33 +++--
 29 files changed, 429 insertions(+), 343 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/ClosedObjectNodeSpecification.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/ClosedObjectNodeSpecification.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/ClosedObjectNodeSpecification.java
index 2363173..4a59069 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/ClosedObjectNodeSpecification.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/ClosedObjectNodeSpecification.java
@@ -23,7 +23,7 @@ import java.util.List;
 
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacetUtils;
+import org.apache.isis.core.metamodel.facets.object.bounded.ChoicesFacetUtils;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -73,7 +73,10 @@ class ClosedObjectNodeSpecification extends NodeSpecification {
                 return CAN_OPEN;
             }
 
-            if (showObjectContents && fields.get(i).isOneToOneAssociation() && !(BoundedFacetUtils.isBoundedSet(object.getSpecification()))) {
+            // TODO: rather than looking for the ChoicesFacet on the type, 
+            // should look for the appropriate PropertyChoicesFacet, ActionParameterChoicesFacet or 
+            // PropertyAutoCompleteFacet or ActionParameterAutoCompleteFacet
+            if (showObjectContents && fields.get(i).isOneToOneAssociation() && !(ChoicesFacetUtils.hasChoices(object.getSpecification()))) {
                 return CAN_OPEN;
             }
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/TreeDisplayRules.java
----------------------------------------------------------------------
diff --git a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/TreeDisplayRules.java b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/TreeDisplayRules.java
index 4e4479b..bc5e938 100644
--- a/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/TreeDisplayRules.java
+++ b/component/viewer/dnd/impl/src/main/java/org/apache/isis/viewer/dnd/tree/TreeDisplayRules.java
@@ -22,7 +22,7 @@ package org.apache.isis.viewer.dnd.tree;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Allow;
 import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacetUtils;
+import org.apache.isis.core.metamodel.facets.object.bounded.ChoicesFacetUtils;
 import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.viewer.dnd.drawing.Location;
 import org.apache.isis.viewer.dnd.view.UserAction;
@@ -80,8 +80,11 @@ public class TreeDisplayRules {
         return showCollectionsOnly;
     }
 
-    public static boolean canDisplay(final ObjectAdapter object) {
-        final boolean lookupView = object != null && BoundedFacetUtils.isBoundedSet(object.getSpecification());
+    private static boolean canDisplay(final ObjectAdapter object) {
+        // TODO: rather than looking for the ChoicesFacet on the type, 
+        // should look for the appropriate PropertyChoicesFacet, ActionParameterChoicesFacet or 
+        // PropertyAutoCompleteFacet or ActionParameterAutoCompleteFacet
+        final boolean lookupView = object != null && ChoicesFacetUtils.hasChoices(object.getSpecification());
         final boolean showNonCollections = !TreeDisplayRules.isCollectionsOnly();
         final boolean objectView = object instanceof ObjectAdapter && showNonCollections;
         final boolean collectionView = object.getSpecification().isParentedOrFreeCollection();

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectAdapterFunctions.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectAdapterFunctions.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectAdapterFunctions.java
index f764faf..72f1230 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectAdapterFunctions.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectAdapterFunctions.java
@@ -24,9 +24,6 @@ import com.google.common.base.Function;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 
 public final class ObjectAdapterFunctions {
@@ -34,13 +31,12 @@ public final class ObjectAdapterFunctions {
     private ObjectAdapterFunctions() {
     }
 
+    /**
+     * Use {@link ObjectAdapter.Functions}
+     */
+    @Deprecated
     public static Function<Object, ObjectAdapter> fromPojo(final AdapterManager adapterManager) {
-        return new Function<Object, ObjectAdapter>() {
-            @Override
-            public ObjectAdapter apply(final Object pojo) {
-                return adapterManager.adapterFor(pojo);
-            }
-        };
+        return ObjectAdapter.Functions.adapterForUsing(adapterManager);
     }
 
     public static Function<ObjectAdapterMemento, ObjectAdapter> fromMemento() {
@@ -63,12 +59,4 @@ public final class ObjectAdapterFunctions {
         };
     }
 
-    private static AdapterManager getAdapterManager() {
-        return getPersistenceSession().getAdapterManager();
-    }
-
-    private static PersistenceSession getPersistenceSession() {
-        return IsisContext.getPersistenceSession();
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index e1690ba..7178e11 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -19,6 +19,11 @@
 
 package org.apache.isis.core.metamodel.adapter;
 
+import java.util.List;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.oid.AggregatedOid;
 import org.apache.isis.core.metamodel.adapter.oid.CollectionOid;
@@ -238,6 +243,62 @@ public interface ObjectAdapter extends Instance, org.apache.isis.applib.annotati
     boolean respondToChangesInPersistentObjects();
 
 
+    
+    
+    public final class Util {
+
+        private Util() {
+        }
+
+        public static Object unwrap(final ObjectAdapter adapter) {
+            return adapter != null ? adapter.getObject() : null;
+        }
+
+        public static String unwrapAsString(final ObjectAdapter adapter) {
+            final Object obj = unwrap(adapter);
+            if (obj == null) {
+                return null;
+            }
+            if (!(obj instanceof String)) {
+                return null;
+            }
+            return (String) obj;
+        }
+
+
+        public static List<Object> unwrap(final List<ObjectAdapter> adapters) {
+            List<Object> objects = Lists.newArrayList();
+            for (ObjectAdapter adapter : adapters) {
+                objects.add(unwrap(adapter));
+            }
+            return objects;
+        }
+
+    }
+
+    
+    public static class Functions {
+        
+        private Functions(){}
+
+        public static Function<ObjectAdapter, Object> getObject() {
+            return new Function<ObjectAdapter, Object>() {
+                @Override
+                public Object apply(ObjectAdapter input) {
+                    return Util.unwrap(input);
+                }
+            };
+        }
+        
+        public static Function<Object, ObjectAdapter> adapterForUsing(final AdapterManager adapterManager) {
+            return new Function<Object, ObjectAdapter>() {
+                @Override
+                public ObjectAdapter apply(final Object pojo) {
+                    return adapterManager.adapterFor(pojo);
+                }
+            };
+        }
+    }
 
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/choices/ChoicesFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/choices/ChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/choices/ChoicesFacet.java
index 066969f..06ae97f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/choices/ChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/choices/ChoicesFacet.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.facets.choices;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 public interface ChoicesFacet extends Facet {
 
@@ -29,4 +30,17 @@ public interface ChoicesFacet extends Facet {
      */
     public Object[] getChoices(ObjectAdapter adapter);
 
+    
+    
+    public static class Util {
+
+        private Util() {
+        }
+
+        public static boolean hasChoices(final ObjectSpecification specification) {
+            return specification.getFacet(ChoicesFacet.class) != null;
+        }
+
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bounded/BoundedFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bounded/BoundedFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bounded/BoundedFacet.java
deleted file mode 100644
index d261a6b..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bounded/BoundedFacet.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.bounded;
-
-import org.apache.isis.core.metamodel.facets.MarkerFacet;
-import org.apache.isis.core.metamodel.interactions.DisablingInteractionAdvisor;
-import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
-
-/**
- * Whether the number of instances of this class is bounded.
- * 
- * <p>
- * Typically viewers will interpret this information by displaying all instances
- * of the class in a drop-down list box or similar widget.
- * 
- * <p>
- * In the standard Apache Isis Programming Model, corresponds to annotating the
- * member with <tt>@Bounded</tt>.
- */
-public interface BoundedFacet extends MarkerFacet, DisablingInteractionAdvisor, ValidatingInteractionAdvisor {
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bounded/BoundedFacetUtils.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bounded/BoundedFacetUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bounded/BoundedFacetUtils.java
deleted file mode 100644
index abd5dcc..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bounded/BoundedFacetUtils.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.bounded;
-
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-
-public class BoundedFacetUtils {
-
-    private BoundedFacetUtils() {
-    }
-
-    public static boolean isBoundedSet(final ObjectSpecification specification) {
-        return specification.getFacet(BoundedFacet.class) != null;
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bounded/ChoicesFacetUtils.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bounded/ChoicesFacetUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bounded/ChoicesFacetUtils.java
new file mode 100644
index 0000000..104aa68
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bounded/ChoicesFacetUtils.java
@@ -0,0 +1,39 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.object.bounded;
+
+import org.apache.isis.core.metamodel.facets.choices.ChoicesFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+public class ChoicesFacetUtils {
+
+    private ChoicesFacetUtils() {
+    }
+
+    /**
+     * 
+     * @deprecated - use {@link ChoicesFacet.Util}
+     */
+    @Deprecated
+    public static boolean hasChoices(final ObjectSpecification specification) {
+        return ChoicesFacet.Util.hasChoices(specification);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectAdapterUtils.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectAdapterUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectAdapterUtils.java
index b33aed8..9f54613 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectAdapterUtils.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectAdapterUtils.java
@@ -22,36 +22,38 @@ import com.google.common.collect.Lists;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 
+/**
+ * @deprecated - use {@link ObjectAdapter.Util} instead
+ */
+@Deprecated
 public final class ObjectAdapterUtils {
 
     private ObjectAdapterUtils() {
     }
 
+    /**
+     * @deprecated - use {@link ObjectAdapter.Util} instead
+     */
+    @Deprecated
     public static Object unwrapObject(final ObjectAdapter adapter) {
-        if (adapter == null) {
-            return null;
-        }
-        return adapter.getObject();
+        return ObjectAdapter.Util.unwrap(adapter);
     }
 
+    /**
+     * @deprecated - use {@link ObjectAdapter.Util} instead
+     */
+    @Deprecated
     public static String unwrapObjectAsString(final ObjectAdapter adapter) {
-        final Object obj = unwrapObject(adapter);
-        if (obj == null) {
-            return null;
-        }
-        if (!(obj instanceof String)) {
-            return null;
-        }
-        return (String) obj;
+        return ObjectAdapter.Util.unwrapAsString(adapter);
     }
 
 
+    /**
+     * @deprecated - use {@link ObjectAdapter.Util} instead
+     */
+    @Deprecated
     public static List<Object> unwrapObjects(final List<ObjectAdapter> adapters) {
-        List<Object> objects = Lists.newArrayList();
-        for (ObjectAdapter adapter : adapters) {
-            objects.add(unwrapObject(adapter));
-        }
-        return objects;
+        return ObjectAdapter.Util.unwrap(adapters);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/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 e7f3bd0..787fdb3 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
@@ -58,7 +58,7 @@ import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetdecorator.FacetDecorator;
 import org.apache.isis.core.metamodel.facetdecorator.FacetDecoratorSet;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacetUtils;
+import org.apache.isis.core.metamodel.facets.object.bounded.ChoicesFacetUtils;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContextAware;
@@ -656,7 +656,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
             StringBuffer str = new StringBuffer();
             str.append(spec.isAbstract() ? "A" : ".");
             str.append(spec.isService() ? "S" : ".");
-            str.append(BoundedFacetUtils.isBoundedSet(spec) ? "B" : ".");
+            str.append(ChoicesFacetUtils.hasChoices(spec) ? "B" : ".");
             str.append(spec.isParentedOrFreeCollection() ? "C" : ".");
             str.append(spec.isNotCollection() ? "O" : ".");
             str.append(spec.isParseable() ? "P" : ".");

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
index 3f8847e..3595768 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
@@ -51,7 +51,7 @@ import org.apache.isis.core.metamodel.facets.actions.exploration.ExplorationFace
 import org.apache.isis.core.metamodel.facets.actions.invoke.ActionInvocationFacet;
 import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacetUtils;
+import org.apache.isis.core.metamodel.facets.object.bounded.ChoicesFacetUtils;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
 import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
 import org.apache.isis.core.metamodel.interactions.ActionInvocationContext;
@@ -454,7 +454,9 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
                 for (int j = 0; j < parameterChoicesPojos[i].length; j++) {
                     parameterChoicesAdapters[i][j] = adapterFor(parameterChoicesPojos[i][j]);
                 }
-            } else if (BoundedFacetUtils.isBoundedSet(paramSpec)) {
+            } else 
+                // now incorporated into above choices processing (BoundedFacet is no more) 
+                /*if (BoundedFacetUtils.isBoundedSet(paramSpec)) {
                 final QueryFindAllInstances<ObjectAdapter> query = new QueryFindAllInstances<ObjectAdapter>(paramSpec.getFullIdentifier());
                 final List<ObjectAdapter> allInstancesAdapter = getQuerySubmitter().allMatchingQuery(query);
                 parameterChoicesAdapters[i] = new ObjectAdapter[allInstancesAdapter.size()];
@@ -462,7 +464,7 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
                 for (final ObjectAdapter adapter : allInstancesAdapter) {
                     parameterChoicesAdapters[i][j++] = adapter;
                 }
-            } else if (paramSpec.isNotCollection()) {
+            } else */ if (paramSpec.isNotCollection()) {
                 parameterChoicesAdapters[i] = new ObjectAdapter[0];
             } else {
                 throw new UnknownTypeException(paramSpec);

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 2278c9c..425fc94 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -47,7 +47,7 @@ import org.apache.isis.core.metamodel.facets.TypedHolder;
 import org.apache.isis.core.metamodel.facets.describedas.DescribedAsFacet;
 import org.apache.isis.core.metamodel.facets.mandatory.MandatoryFacet;
 import org.apache.isis.core.metamodel.facets.named.NamedFacet;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacetUtils;
+import org.apache.isis.core.metamodel.facets.object.bounded.ChoicesFacetUtils;
 import org.apache.isis.core.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacet;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
 import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
@@ -59,6 +59,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.progmodel.facets.object.bounded.ChoicesFacetFromBoundedAbstract;
 import org.apache.isis.core.progmodel.facets.param.autocomplete.MinLengthUtil;
 
 public abstract class ObjectActionParameterAbstract implements ObjectActionParameter {
@@ -269,9 +270,11 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
                 adapters.add(getAdapterMap().adapterFor(choice));
             }
         }
-        if (adapters.size() == 0 && BoundedFacetUtils.isBoundedSet(getSpecification())) {
+        /* // now incorporated into above choices processing (BoundedFacet is no more)
+        if (adapters.size() == 0 && ChoicesFacetUtils.hasChoices(getSpecification())) {
             addAllInstancesForType(adapters);
         }
+        */
         return adapters.toArray(new ObjectAdapter[0]);
     }
 
@@ -289,7 +292,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
     @Override
     public boolean hasChoices() {
         final ActionParameterChoicesFacet choicesFacet = getFacet(ActionParameterChoicesFacet.class);
-        return choicesFacet != null || BoundedFacetUtils.isBoundedSet(getSpecification());
+        return choicesFacet != null;
     }
 
     @Override
@@ -313,9 +316,12 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
                 adapters.add(getAdapterMap().adapterFor(choice));
             }
         }
-        if (adapters.size() == 0 && BoundedFacetUtils.isBoundedSet(getSpecification())) {
+        // now incorporated into above choices processing (BoundedFacet is no more)
+        /* 
+           if (adapters.size() == 0 && BoundedFacetUtils.isBoundedSet(getSpecification())) {
             addAllInstancesForType(adapters);
         }
+        */
         return adapters.toArray(new ObjectAdapter[0]);
     }
     
@@ -385,6 +391,10 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
         }
     }
 
+    /**
+     * unused - incorporated into the {@link ChoicesFacetFromBoundedAbstract}
+     */
+    @SuppressWarnings("unused")
     private <T> void addAllInstancesForType(final List<ObjectAdapter> adapters) {
         final Query<T> query = new QueryFindAllInstances<T>(getSpecification().getFullIdentifier());
         final List<ObjectAdapter> allInstancesAdapter = getQuerySubmitter().allMatchingQuery(query);

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
index 8048b70..8f019fa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
@@ -24,7 +24,7 @@ import com.google.common.collect.Lists;
 
 import org.apache.isis.core.commons.lang.ListExtensions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacetUtils;
+import org.apache.isis.core.metamodel.facets.object.bounded.ChoicesFacetUtils;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
 import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
index e7df574..9016094 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
@@ -21,6 +21,8 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
 
 import java.util.List;
 
+import com.google.common.collect.Lists;
+
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.query.QueryFindAllInstances;
@@ -36,7 +38,7 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.mandatory.MandatoryFacet;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacetUtils;
+import org.apache.isis.core.metamodel.facets.object.bounded.ChoicesFacetUtils;
 import org.apache.isis.core.metamodel.facets.properties.autocomplete.PropertyAutoCompleteFacet;
 import org.apache.isis.core.metamodel.facets.properties.choices.PropertyChoicesFacet;
 import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
@@ -237,8 +239,7 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
 
     @Override
     public boolean hasChoices() {
-        final PropertyChoicesFacet propertyChoicesFacet = getFacet(PropertyChoicesFacet.class);
-        return propertyChoicesFacet != null || BoundedFacetUtils.isBoundedSet(getSpecification());
+        return getFacet(PropertyChoicesFacet.class) != null;
     }
 
     @Override
@@ -246,14 +247,14 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
         final PropertyChoicesFacet propertyChoicesFacet = getFacet(PropertyChoicesFacet.class);
         final Object[] pojoOptions = propertyChoicesFacet == null ? null : propertyChoicesFacet.getChoices(ownerAdapter, getSpecificationLookup());
         if (pojoOptions != null) {
-            final ObjectAdapter[] options = new ObjectAdapter[pojoOptions.length];
-            for (int i = 0; i < options.length; i++) {
-                options[i] = getAdapterManager().adapterFor(pojoOptions[i]);
-            }
-            return options;
-        } else if (BoundedFacetUtils.isBoundedSet(getSpecification())) {
+            List<ObjectAdapter> adapters = Lists.transform(
+                    Lists.newArrayList(pojoOptions), ObjectAdapter.Functions.adapterForUsing(getAdapterManager()));
+            return adapters.toArray(new ObjectAdapter[]{});
+        } 
+        // // now incorporated into above choices processing (BoundedFacet is no more)
+        /* else if (BoundedFacetUtils.isBoundedSet(getSpecification())) {
             return options();
-        }
+        } */
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
index d14a468..686f377 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
@@ -34,7 +34,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacetUtils;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacetUtils;
+import org.apache.isis.core.metamodel.facets.object.bounded.ChoicesFacetUtils;
 import org.apache.isis.core.metamodel.facets.object.cached.CachedFacetUtils;
 import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacetUtils;
 import org.apache.isis.core.metamodel.spec.ActionType;
@@ -318,8 +318,8 @@ public final class Dump {
         if (specification.isAbstract()) {
             str.append("Abstract ");
         }
-        if (BoundedFacetUtils.isBoundedSet(specification)) {
-            str.append("Bounded ");
+        if (ChoicesFacetUtils.hasChoices(specification)) {
+            str.append("WithChoices ");
         }
         if (CachedFacetUtils.isCached(specification)) {
             str.append("Cached ");

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetAbstract.java
deleted file mode 100644
index c287054..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetAbstract.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.progmodel.facets.object.bounded;
-
-import org.apache.isis.applib.events.UsabilityEvent;
-import org.apache.isis.applib.events.ValidityEvent;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.MarkerFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacet;
-import org.apache.isis.core.metamodel.interactions.ObjectValidityContext;
-import org.apache.isis.core.metamodel.interactions.UsabilityContext;
-import org.apache.isis.core.metamodel.interactions.ValidityContext;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-
-public abstract class BoundedFacetAbstract extends MarkerFacetAbstract implements BoundedFacet {
-
-    public static Class<? extends Facet> type() {
-        return BoundedFacet.class;
-    }
-
-    public BoundedFacetAbstract(final FacetHolder holder) {
-        super(type(), holder);
-    }
-
-    /**
-     * Hook method for subclasses to override.
-     */
-    public abstract String disabledReason(ObjectAdapter objectAdapter);
-
-    @Override
-    public String invalidates(final ValidityContext<? extends ValidityEvent> context) {
-        if (!(context instanceof ObjectValidityContext)) {
-            return null;
-        }
-        final ObjectAdapter target = context.getTarget();
-        if(target == null) {
-            return null;
-        }
-        
-        // ensure that the target is of the correct type
-        if(!(getFacetHolder() instanceof ObjectSpecification)) {
-            // should never be the case
-            return null;
-        }
-        
-        final ObjectSpecification objectSpec = (ObjectSpecification) getFacetHolder();
-        return objectSpec == target.getSpecification()? null: "Invalid type";
-    }
-
-    @Override
-    public String disables(final UsabilityContext<? extends UsabilityEvent> context) {
-        final ObjectAdapter target = context.getTarget();
-        return disabledReason(target);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetImpl.java
deleted file mode 100644
index 2c9bc23..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetImpl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.progmodel.facets.object.bounded;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public class BoundedFacetImpl extends BoundedFacetAbstract {
-
-    public BoundedFacetImpl(final FacetHolder holder) {
-        super(holder);
-    }
-
-    @Override
-    public String disabledReason(final ObjectAdapter inObject) {
-        return "Bounded";
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/ChoicesFacetFromBoundedAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/ChoicesFacetFromBoundedAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/ChoicesFacetFromBoundedAbstract.java
new file mode 100644
index 0000000..6f618e5
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/ChoicesFacetFromBoundedAbstract.java
@@ -0,0 +1,124 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.progmodel.facets.object.bounded;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.apache.isis.applib.events.UsabilityEvent;
+import org.apache.isis.applib.events.ValidityEvent;
+import org.apache.isis.applib.marker.Bounded;
+import org.apache.isis.applib.query.Query;
+import org.apache.isis.applib.query.QueryFindAllInstances;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.choices.ChoicesFacet;
+import org.apache.isis.core.metamodel.interactions.DisablingInteractionAdvisor;
+import org.apache.isis.core.metamodel.interactions.ObjectValidityContext;
+import org.apache.isis.core.metamodel.interactions.UsabilityContext;
+import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
+import org.apache.isis.core.metamodel.interactions.ValidityContext;
+import org.apache.isis.core.metamodel.spec.ObjectAdapterUtils;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+/**
+ * A fixed number of choices because the number of instances of this class is bounded.
+ * 
+ * <p>
+ * Typically viewers will interpret this information by displaying all instances
+ * of the class in a drop-down list box or similar widget.
+ * 
+ * <p>
+ * In the standard Apache Isis Programming Model, corresponds to annotating the
+ * member with {@link org.apache.isis.applib.annotation.Bounded Bounded} annotation
+ * or implementing the {@link Bounded} marker interface.
+ */
+public abstract class ChoicesFacetFromBoundedAbstract extends FacetAbstract implements ChoicesFacet, DisablingInteractionAdvisor, ValidatingInteractionAdvisor {
+
+    public static Class<? extends Facet> type() {
+        return ChoicesFacet.class;
+    }
+
+    private final QuerySubmitter querySubmitter;
+    
+    public ChoicesFacetFromBoundedAbstract(final FacetHolder holder, final QuerySubmitter querySubmitter) {
+        super(type(), holder, Derivation.NOT_DERIVED);
+        this.querySubmitter = querySubmitter;
+    }
+
+    protected QuerySubmitter getQuerySubmitter() {
+        return querySubmitter;
+    }
+
+    @Override
+    public String invalidates(final ValidityContext<? extends ValidityEvent> context) {
+        if (!(context instanceof ObjectValidityContext)) {
+            return null;
+        }
+        final ObjectAdapter target = context.getTarget();
+        if(target == null) {
+            return null;
+        }
+        
+        // ensure that the target is of the correct type
+        if(!(getFacetHolder() instanceof ObjectSpecification)) {
+            // should never be the case
+            return null;
+        }
+        
+        final ObjectSpecification objectSpec = getObjectSpecification();
+        return objectSpec == target.getSpecification()? null: "Invalid type";
+    }
+
+    private ObjectSpecification getObjectSpecification() {
+        return (ObjectSpecification) getFacetHolder();
+    }
+
+    @Override
+    public String disables(final UsabilityContext<? extends UsabilityEvent> context) {
+        final ObjectAdapter target = context.getTarget();
+        return disabledReason(target);
+    }
+
+    /**
+     * Optional hook method for subclasses to override.
+     */
+    public String disabledReason(final ObjectAdapter inObject) {
+        return "Bounded";
+    }
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @Override
+    public Object[] getChoices(ObjectAdapter adapter) {
+        final Query query = new QueryFindAllInstances(getObjectSpecification().getFullIdentifier());
+        final List<ObjectAdapter> allInstancesAdapter = getQuerySubmitter().allMatchingQuery(query);
+        final List<ObjectAdapter> adapters = Lists.newArrayList(allInstancesAdapter.iterator());
+        final List<Object> pojos = Lists.transform(adapters, ObjectAdapter.Functions.getObject());
+        return Lists.newArrayList(pojos).toArray();
+    }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/BoundedAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/BoundedAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/BoundedAnnotationFacetFactory.java
index c90b6d4..239cc27 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/BoundedAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/BoundedAnnotationFacetFactory.java
@@ -20,27 +20,36 @@
 package org.apache.isis.core.progmodel.facets.object.bounded.annotation;
 
 import org.apache.isis.applib.annotation.Bounded;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitterAware;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacet;
+import org.apache.isis.core.metamodel.facets.choices.ChoicesFacet;
 
-public class BoundedAnnotationFacetFactory extends FacetFactoryAbstract {
+public class BoundedAnnotationFacetFactory extends FacetFactoryAbstract implements QuerySubmitterAware {
+
+    private QuerySubmitter querySubmitter;
 
     public BoundedAnnotationFacetFactory() {
         super(FeatureType.OBJECTS_ONLY);
     }
 
     @Override
-    public void process(final ProcessClassContext processClassContaxt) {
-        final Bounded annotation = Annotations.getAnnotation(processClassContaxt.getCls(), Bounded.class);
-        FacetUtil.addFacet(create(annotation, processClassContaxt.getFacetHolder()));
+    public void process(final ProcessClassContext processClassContext) {
+        final Bounded annotation = Annotations.getAnnotation(processClassContext.getCls(), Bounded.class);
+        FacetUtil.addFacet(create(annotation, processClassContext.getFacetHolder()));
+    }
+
+    private ChoicesFacet create(final Bounded annotation, final FacetHolder holder) {
+        return annotation == null ? null : new ChoicesFacetFromBoundedAnnotation(holder, querySubmitter);
     }
 
-    private BoundedFacet create(final Bounded annotation, final FacetHolder holder) {
-        return annotation == null ? null : new BoundedFacetAnnotation(holder);
+    @Override
+    public void setQuerySubmitter(final QuerySubmitter querySubmitter) {
+        this.querySubmitter = querySubmitter;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/BoundedFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/BoundedFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/BoundedFacetAnnotation.java
deleted file mode 100644
index fa74dee..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/BoundedFacetAnnotation.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.progmodel.facets.object.bounded.annotation;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.progmodel.facets.object.bounded.BoundedFacetImpl;
-
-public class BoundedFacetAnnotation extends BoundedFacetImpl {
-
-    public BoundedFacetAnnotation(final FacetHolder holder) {
-        super(holder);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/ChoicesFacetFromBoundedAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/ChoicesFacetFromBoundedAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/ChoicesFacetFromBoundedAnnotation.java
new file mode 100644
index 0000000..7d41be0
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/annotation/ChoicesFacetFromBoundedAnnotation.java
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.progmodel.facets.object.bounded.annotation;
+
+import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.progmodel.facets.object.bounded.ChoicesFacetFromBoundedAbstract;
+
+public class ChoicesFacetFromBoundedAnnotation extends ChoicesFacetFromBoundedAbstract {
+
+    public ChoicesFacetFromBoundedAnnotation(final FacetHolder holder, QuerySubmitter querySubmitter) {
+        super(holder, querySubmitter);
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/BoundedFacetMarkerInterface.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/BoundedFacetMarkerInterface.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/BoundedFacetMarkerInterface.java
deleted file mode 100644
index e7357c4..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/BoundedFacetMarkerInterface.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.progmodel.facets.object.bounded.markerifc;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.progmodel.facets.object.bounded.BoundedFacetImpl;
-
-public class BoundedFacetMarkerInterface extends BoundedFacetImpl {
-
-    public BoundedFacetMarkerInterface(final FacetHolder holder) {
-        super(holder);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/BoundedMarkerInterfaceFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/BoundedMarkerInterfaceFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/BoundedMarkerInterfaceFacetFactory.java
index 424c8c7..f81c3cf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/BoundedMarkerInterfaceFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/BoundedMarkerInterfaceFacetFactory.java
@@ -22,13 +22,17 @@ package org.apache.isis.core.progmodel.facets.object.bounded.markerifc;
 import java.lang.reflect.Method;
 
 import org.apache.isis.applib.marker.Bounded;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.adapter.QuerySubmitterAware;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacet;
+import org.apache.isis.core.metamodel.facets.choices.ChoicesFacet;
 
-public class BoundedMarkerInterfaceFacetFactory extends FacetFactoryAbstract {
+public class BoundedMarkerInterfaceFacetFactory extends FacetFactoryAbstract implements QuerySubmitterAware {
+
+    private QuerySubmitter querySubmitter;
 
     public BoundedMarkerInterfaceFacetFactory() {
         super(FeatureType.OBJECTS_ONLY);
@@ -40,12 +44,17 @@ public class BoundedMarkerInterfaceFacetFactory extends FacetFactoryAbstract {
         FacetUtil.addFacet(create(implementsMarker, processClassContaxt.getFacetHolder()));
     }
 
-    private BoundedFacet create(final boolean implementsMarker, final FacetHolder holder) {
-        return implementsMarker ? new BoundedFacetMarkerInterface(holder) : null;
+    private ChoicesFacet create(final boolean implementsMarker, final FacetHolder holder) {
+        return implementsMarker ? new ChoicesFacetFromBoundedFacetMarkerInterface(holder, querySubmitter) : null;
     }
 
     public boolean recognizes(final Method method) {
         return false;
     }
 
+    @Override
+    public void setQuerySubmitter(QuerySubmitter querySubmitter) {
+        this.querySubmitter = querySubmitter;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/ChoicesFacetFromBoundedFacetMarkerInterface.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/ChoicesFacetFromBoundedFacetMarkerInterface.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/ChoicesFacetFromBoundedFacetMarkerInterface.java
new file mode 100644
index 0000000..ecde14c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/markerifc/ChoicesFacetFromBoundedFacetMarkerInterface.java
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.progmodel.facets.object.bounded.markerifc;
+
+import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.progmodel.facets.object.bounded.ChoicesFacetFromBoundedAbstract;
+
+public class ChoicesFacetFromBoundedFacetMarkerInterface extends ChoicesFacetFromBoundedAbstract {
+
+    public ChoicesFacetFromBoundedFacetMarkerInterface(
+            final FacetHolder holder, final QuerySubmitter querySubmitter) {
+        super(holder, querySubmitter);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/enums/ParameterChoicesFacetDerivedFromChoicesFacetFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/enums/ParameterChoicesFacetDerivedFromChoicesFacetFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/enums/ParameterChoicesFacetDerivedFromChoicesFacetFacetFactory.java
index 7fd8b58..139a6fb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/enums/ParameterChoicesFacetDerivedFromChoicesFacetFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/choices/enums/ParameterChoicesFacetDerivedFromChoicesFacetFacetFactory.java
@@ -25,6 +25,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
+import org.apache.isis.core.metamodel.facets.choices.ChoicesFacet;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
 
 public class ParameterChoicesFacetDerivedFromChoicesFacetFacetFactory extends FacetFactoryAbstract implements AdapterManagerAware {
@@ -39,7 +40,7 @@ public class ParameterChoicesFacetDerivedFromChoicesFacetFacetFactory extends Fa
     public void processParams(final ProcessParameterContext processParameterContext) {
         final Class<?> paramType = processParameterContext.getMethod().getParameterTypes()[processParameterContext.getParamNum()];
 
-        if (!paramType.isEnum()) {
+        if(!getSpecificationLoader().loadSpecification(paramType).containsDoOpFacet(ChoicesFacet.class)) {
             return;
         }
         

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory.java
index 63820ec..526c269 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory.java
@@ -24,6 +24,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.choices.ChoicesFacet;
 
 public class PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory extends FacetFactoryAbstract implements AdapterManagerAware {
 
@@ -38,7 +39,7 @@ public class PropertyChoicesFacetDerivedFromChoicesFacetFacetFactory extends Fac
 
         final Class<?> returnType = processMethodContext.getMethod().getReturnType();
 
-        if (!returnType.isEnum()) {
+        if(!getSpecificationLoader().loadSpecification(returnType).containsDoOpFacet(ChoicesFacet.class)) {
             return;
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedAnnotationFacetFactoryTest.java
index a4d41ea..d3461f0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedAnnotationFacetFactoryTest.java
@@ -22,7 +22,7 @@ package org.apache.isis.core.progmodel.facets.object.bounded;
 import org.apache.isis.applib.annotation.Bounded;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacet;
+import org.apache.isis.core.metamodel.facets.choices.ChoicesFacet;
 import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.progmodel.facets.object.bounded.annotation.BoundedAnnotationFacetFactory;
 
@@ -50,9 +50,9 @@ public class BoundedAnnotationFacetFactoryTest extends AbstractFacetFactoryTest
 
         facetFactory.process(new ProcessClassContext(Customer.class, null, methodRemover, facetedMethod));
 
-        final Facet facet = facetedMethod.getFacet(BoundedFacet.class);
+        final Facet facet = facetedMethod.getFacet(ChoicesFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof BoundedFacetAbstract);
+        assertTrue(facet instanceof ChoicesFacetFromBoundedAbstract);
 
         assertNoMethodsRemoved();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedMarkerInterfaceFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedMarkerInterfaceFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedMarkerInterfaceFacetFactoryTest.java
index f90f532..97f8bc1 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedMarkerInterfaceFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedMarkerInterfaceFacetFactoryTest.java
@@ -22,7 +22,7 @@ package org.apache.isis.core.progmodel.facets.object.bounded;
 import org.apache.isis.applib.marker.Bounded;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.object.bounded.BoundedFacet;
+import org.apache.isis.core.metamodel.facets.choices.ChoicesFacet;
 import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.progmodel.facets.object.bounded.markerifc.BoundedMarkerInterfaceFacetFactory;
 
@@ -49,9 +49,9 @@ public class BoundedMarkerInterfaceFacetFactoryTest extends AbstractFacetFactory
 
         facetFactory.process(new ProcessClassContext(Customer.class, null, methodRemover, facetedMethod));
 
-        final Facet facet = facetedMethod.getFacet(BoundedFacet.class);
+        final Facet facet = facetedMethod.getFacet(ChoicesFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof BoundedFacetAbstract);
+        assertTrue(facet instanceof ChoicesFacetFromBoundedAbstract);
 
         assertNoMethodsRemoved();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/6d356228/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
index c22b960..0d00408 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
@@ -19,7 +19,6 @@
 package dom.todo;
 
 import java.math.BigDecimal;
-import java.text.DecimalFormat;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -34,7 +33,8 @@ import javax.jdo.annotations.VersionStrategy;
 import javax.jdo.spi.PersistenceCapable;
 
 import com.google.common.base.Objects;
-import com.google.common.collect.Lists;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
 import com.google.common.collect.Ordering;
 
 import org.joda.time.LocalDate;
@@ -50,7 +50,6 @@ import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.annotation.MinLength;
 import org.apache.isis.applib.annotation.MultiLine;
 import org.apache.isis.applib.annotation.Named;
-import org.apache.isis.applib.annotation.NotPersisted;
 import org.apache.isis.applib.annotation.ObjectType;
 import org.apache.isis.applib.annotation.Optional;
 import org.apache.isis.applib.annotation.Programmatic;
@@ -62,8 +61,6 @@ import org.apache.isis.applib.annotation.Render.Type;
 import org.apache.isis.applib.annotation.SortedBy;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.clock.Clock;
-import org.apache.isis.applib.filter.Filter;
-import org.apache.isis.applib.filter.Filters;
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.TitleBuffer;
 import org.apache.isis.applib.value.Blob;
@@ -93,6 +90,7 @@ import org.apache.isis.applib.value.Blob;
 @Audited
 @PublishedObject(ToDoItemChangedPayloadFactory.class)
 @AutoComplete(repository=ToDoItems.class, action="autoComplete") // default unless overridden by autoCompleteNXxx() method
+//@Bounded - if there were a small number of instances only (overrides autoComplete functionality)
 @Bookmarkable
 public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3: uncomment to use https://github.com/danhaywood/isis-wicket-gmap3
 
@@ -541,39 +539,38 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
     // Filters (static methods)
     // //////////////////////////////////////
 
-    @SuppressWarnings("unchecked")
-    public static Filter<ToDoItem> thoseDue() {
-        return Filters.and(Filters.not(thoseComplete()), new Filter<ToDoItem>() {
+    public static Predicate<ToDoItem> thoseDue() {
+        return Predicates.and(Predicates.not(thoseComplete()), new Predicate<ToDoItem>() {
             @Override
-            public boolean accept(final ToDoItem t) {
+            public boolean apply(final ToDoItem t) {
                 return t.isDue();
             }
         });
     }
 
-    public static Filter<ToDoItem> thoseComplete() {
-        return new Filter<ToDoItem>() {
+    public static Predicate<ToDoItem> thoseComplete() {
+        return new Predicate<ToDoItem>() {
             @Override
-            public boolean accept(final ToDoItem t) {
+            public boolean apply(final ToDoItem t) {
                 return t.isComplete();
             }
         };
     }
 
-    public static Filter<ToDoItem> thoseOwnedBy(final String currentUser) {
-        return new Filter<ToDoItem>() {
+    public static Predicate<ToDoItem> thoseOwnedBy(final String currentUser) {
+        return new Predicate<ToDoItem>() {
             @Override
-            public boolean accept(final ToDoItem toDoItem) {
+            public boolean apply(final ToDoItem toDoItem) {
                 return Objects.equal(toDoItem.getOwnedBy(), currentUser);
             }
 
         };
     }
 
-    public static Filter<ToDoItem> thoseSimilarTo(final ToDoItem toDoItem) {
-        return new Filter<ToDoItem>() {
+    public static Predicate<ToDoItem> thoseSimilarTo(final ToDoItem toDoItem) {
+        return new Predicate<ToDoItem>() {
             @Override
-            public boolean accept(final ToDoItem eachToDoItem) {
+            public boolean apply(final ToDoItem eachToDoItem) {
                 return Objects.equal(toDoItem.getCategory(), eachToDoItem.getCategory()) && 
                        Objects.equal(toDoItem.getOwnedBy(), eachToDoItem.getOwnedBy()) &&
                        eachToDoItem != toDoItem;