You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/08/23 13:22:29 UTC

[1/2] git commit: ISIS-478: working towards entity choices (not there yet)

Updated Branches:
  refs/heads/master 2ab9e6615 -> 58aff6aa3


ISIS-478: working towards entity choices (not there yet)

* refactored EntityLinkSelect2Panel so that the setChoices can be easily called for argsIfAvailable
* ReferencePanel overrides addFormComponentBehaviour and updateChoices, delegating to entityLink in both cases.


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

Branch: refs/heads/master
Commit: 1f62a90e7bb641aaa2fe3526f575f4f816f9bcb5
Parents: 2ab9e66
Author: Dan Haywood <da...@apache.org>
Authored: Wed Aug 21 22:18:45 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Wed Aug 21 22:18:45 2013 +0100

----------------------------------------------------------------------
 .../components/scalars/ScalarPanelAbstract.java |   4 +-
 .../scalars/ScalarPanelTextFieldAbstract.java   |   2 +-
 .../isisapplib/IsisBlobOrClobPanelAbstract.java |   2 +-
 .../scalars/primitive/BooleanPanel.java         |   2 +-
 .../scalars/reference/ReferencePanel.java       |  13 +-
 .../entitylink/EntityLinkSelect2Panel.java      | 104 +++++++++-------
 .../valuechoices/ValueChoicesSelect2Panel.java  |  47 ++++---
 .../adapter/util/AdapterInvokeUtils.java        |   1 -
 .../specimpl/ObjectActionParameterAbstract.java |   2 -
 .../ObjectActionParameterContributee.java       | 121 -------------------
 .../ActionParameterDefaultsFacetViaMethod.java  |   3 -
 11 files changed, 101 insertions(+), 200 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/1f62a90e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index a5d0cfd..e005ccd 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -177,7 +177,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         addCssForMetaModel();
         
         if(!subscribers.isEmpty()) {
-            addFormComponentBehaviour(new AjaxFormComponentUpdatingBehavior("onchange"){
+            addFormComponentBehavior(new AjaxFormComponentUpdatingBehavior("onchange"){
 
                 private static final long serialVersionUID = 1L;
 
@@ -195,7 +195,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
     /**
      * Mandatory hook.
      */
-    protected abstract void addFormComponentBehaviour(Behavior behavior);
+    protected abstract void addFormComponentBehavior(Behavior behavior);
 
     private void addCssForMetaModel() {
         final String cssForMetaModel = getModel().getLongName();

http://git-wip-us.apache.org/repos/asf/isis/blob/1f62a90e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index e7bca55..4f21325 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -208,7 +208,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     }
 
     @Override
-    protected void addFormComponentBehaviour(Behavior behavior) {
+    protected void addFormComponentBehavior(Behavior behavior) {
         textField.add(behavior);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/1f62a90e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index b594126..7d1f233 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -290,7 +290,7 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
     }
 
     @Override
-    protected void addFormComponentBehaviour(Behavior behavior) {
+    protected void addFormComponentBehavior(Behavior behavior) {
         fileUploadField.add(behavior);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/1f62a90e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index f626707..520f56b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -139,7 +139,7 @@ public class BooleanPanel extends ScalarPanelAbstract {
     }
 
     @Override
-    protected void addFormComponentBehaviour(Behavior behavior) {
+    protected void addFormComponentBehavior(Behavior behavior) {
         checkBox.add(behavior);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/1f62a90e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 5be6822..6a4685b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -172,10 +172,17 @@ public class ReferencePanel extends ScalarPanelAbstract {
         
         return labelIfCompact;
     }
-    
+
+    // //////////////////////////////////////
+
+    @Override
+    protected void addFormComponentBehavior(Behavior behavior) {
+        entityLink.addFormComponentBehavior(behavior);
+    }
+
     @Override
-    protected void addFormComponentBehaviour(Behavior behavior) {
-        entityLink.add(behavior);
+    public void updateChoices(ObjectAdapter[] argsIfAvailable) {
+        entityLink.updateChoices(argsIfAvailable);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/1f62a90e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
index 92270ff..7b91e01 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLinkSelect2Panel.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.viewer.wicket.ui.components.widgets.entitylink;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -32,6 +33,7 @@ import com.vaynberg.wicket.select2.Settings;
 import com.vaynberg.wicket.select2.TextChoiceProvider;
 
 import org.apache.wicket.Component;
+import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.FormComponentPanel;
 import org.apache.wicket.markup.html.link.Link;
@@ -72,9 +74,8 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
     private static final String ID_ENTITY_TITLE_NULL = "entityTitleNull";
 
     private static final String ID_ENTITY_CLEAR_LINK = "entityClearLink";
-    private static final String ID_FEEDBACK = "feedback";
     
-    private Select2Choice<ObjectAdapterMemento> autoCompleteField;
+    private Select2Choice<ObjectAdapterMemento> select2Field;
     private Link<String> entityDetailsLink;
     private Link<String> entityClearLink;
 
@@ -120,8 +121,8 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
             entityDetailsLink.setVisible(getEntityModel().getRenderingHint() == RenderingHint.REGULAR);
         }
         
-        if(autoCompleteField != null) {
-            autoCompleteField.setEnabled(mutability);
+        if(select2Field != null) {
+            select2Field.setEnabled(mutability);
         }
         
         if(isEditableWithEitherAutoCompleteOrChoices()) {
@@ -130,8 +131,8 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
     }
 
     protected void doSyncVisibilityAndUsability(boolean mutability) {
-        if(autoCompleteField != null) {
-            autoCompleteField.setEnabled(mutability);
+        if(select2Field != null) {
+            select2Field.setEnabled(mutability);
         }
 
         if(isEditableWithEitherAutoCompleteOrChoices()) {
@@ -148,7 +149,7 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
     @Override
     public String getInput() {
         final ObjectAdapter pendingElseCurrentAdapter = getEntityModel().getPendingElseCurrentAdapter();
-        return pendingElseCurrentAdapter != null? pendingElseCurrentAdapter.titleString(): "(no object)";
+        return pendingElseCurrentAdapter != null? pendingElseCurrentAdapter.titleString(null): "(no object)";
     }
 
     @Override
@@ -156,7 +157,7 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
 
         if(getEntityModel().isEditMode() && isEditableWithEitherAutoCompleteOrChoices()) {
             // flush changes to pending
-            onSelected(autoCompleteField.getConvertedInput());
+            onSelected(select2Field.getConvertedInput());
         }
 
         final ObjectAdapter pendingAdapter = getEntityModel().getPendingAdapter();
@@ -192,14 +193,6 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
             return;
         }
         
-        final ChoiceProvider<ObjectAdapterMemento> provider;
-        if (hasChoices()) {
-            provider = providerForChoices(getEntityModel());
-        } else if(hasParamOrPropertyAutoComplete()) {
-            provider = providerForParamOrPropertyAutoComplete(getEntityModel());
-        } else {
-            provider = providerForObjectAutoComplete(getEntityModel());
-        }
 
         final ModelAbstract<ObjectAdapterMemento> model = new ModelAbstract<ObjectAdapterMemento>(){
             private static final long serialVersionUID = 1L;
@@ -210,12 +203,15 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
             }
             
         };
-        autoCompleteField = new Select2Choice<ObjectAdapterMemento>(ID_AUTO_COMPLETE, model, provider);
-        final Settings settings = autoCompleteField.getSettings();
+
+        select2Field = new Select2Choice<ObjectAdapterMemento>(ID_AUTO_COMPLETE, model);
+        setChoices(null);
+        
+        final Settings settings = select2Field.getSettings();
         
         ScalarModel scalarModel = (ScalarModel) getEntityModel();
         settings.setMinimumInputLength(scalarModel.getAutoCompleteMinLength());
-        addOrReplace(autoCompleteField);
+        addOrReplace(select2Field);
         
         // no need for link, since can see in drop-down
         permanentlyHide(ID_ENTITY_ICON_AND_TITLE);
@@ -225,6 +221,7 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
         permanentlyHide(ID_ENTITY_TITLE_NULL);
     }
 
+
     abstract static class ObjectAdapterMementoProviderAbstract extends TextChoiceProvider<ObjectAdapterMemento> {
         private static final long serialVersionUID = 1L;
 
@@ -261,10 +258,8 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
         }
     }
 
-    /**
-     * @param entityModel - serializable, referenced by the AutoCompletionChoicesProvider below 
-     */
-    private static ChoiceProvider<ObjectAdapterMemento> providerForObjectAutoComplete(final EntityModel entityModel) {
+    private ChoiceProvider<ObjectAdapterMemento> providerForObjectAutoComplete() {
+        final EntityModel entityModel = getEntityModel();
         return new ObjectAdapterMementoProviderAbstract() {
 
             private static final long serialVersionUID = 1L;
@@ -280,7 +275,8 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
         };
     }
 
-    private static ChoiceProvider<ObjectAdapterMemento> providerForParamOrPropertyAutoComplete(final EntityModel entityModel) {
+    private ChoiceProvider<ObjectAdapterMemento> providerForParamOrPropertyAutoComplete() {
+        final EntityModel entityModel = getEntityModel();
         return new ObjectAdapterMementoProviderAbstract() {
             
             private static final long serialVersionUID = 1L;
@@ -303,31 +299,35 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
         };
     }
     
-    /**
-     * @param entityModel - serializable, referenced by the AutoCompletionChoicesProvider below 
-     */
-    private static ChoiceProvider<ObjectAdapterMemento> providerForChoices(final EntityModel entityModel) {
+    private ChoiceProvider<ObjectAdapterMemento> providerForChoices(final ObjectAdapter[] argsIfAvailable) {
+        
+        final List<ObjectAdapterMemento> choices = getChoiceMementos(argsIfAvailable);
+        
         return new ObjectAdapterMementoProviderAbstract() {
 
             private static final long serialVersionUID = 1L;
 
             @Override
-            protected List<ObjectAdapterMemento> obtainMementos(String term) {
-                final ScalarModel scalarModel = (ScalarModel) entityModel;
-                final boolean hasChoices = scalarModel.hasChoices();
-                if(!hasChoices) {
-                    return Collections.emptyList();
-                }
-                final List<ObjectAdapter> choices = scalarModel.getChoices(null);
-                if(choices.isEmpty()) {
-                    return Collections.emptyList();
-                }
-                // take a copy otherwise is only lazily evaluated
-                return Lists.newArrayList(Lists.transform(choices, Mementos.fromAdapter()));
+            protected List<ObjectAdapterMemento> obtainMementos(String unused) {
+                return choices;
             }
         };
     }
 
+    private List<ObjectAdapterMemento> getChoiceMementos(final ObjectAdapter[] argsIfAvailable) {
+        
+        final ScalarModel scalarModel = (ScalarModel) getEntityModel();;
+        final boolean hasChoices = scalarModel.hasChoices();
+        if(!hasChoices) {
+            return Collections.emptyList();
+        }
+        final List<ObjectAdapter> choices = scalarModel.getChoices(argsIfAvailable);
+        if(choices.isEmpty()) {
+            return Collections.emptyList();
+        }
+        // take a copy otherwise is only lazily evaluated
+        return Lists.newArrayList(Lists.transform(choices, Mementos.fromAdapter()));
+    }
 
     private void syncLinkWithInput(final ObjectAdapter adapter) {
         if (adapter != null) {
@@ -464,6 +464,28 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
                 (typeOfSpecification != null)? typeOfSpecification.getFacet(AutoCompleteFacet.class):null;
         return autoCompleteFacet != null;
     }
+
+    // //////////////////////////////////////
+
+    public void addFormComponentBehavior(Behavior behavior) {
+        select2Field.add(behavior);
+    }
+
+    public void updateChoices(ObjectAdapter[] argsIfAvailable) {
+        setChoices(argsIfAvailable);
+    }
     
-    
+    private void setChoices(final ObjectAdapter[] argsIfAvailable) {
+        
+        final ChoiceProvider<ObjectAdapterMemento> provider;
+        if (hasChoices()) {
+            provider = providerForChoices(argsIfAvailable);
+        } else if(hasParamOrPropertyAutoComplete()) {
+            provider = providerForParamOrPropertyAutoComplete();
+        } else {
+            provider = providerForObjectAutoComplete();
+        }
+        select2Field.setProvider(provider);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/1f62a90e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
index 7f04de4..a0070e3 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
@@ -60,7 +60,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
 
     private static final String ID_VALUE_ID = "valueId";
 
-    private Select2Choice<ObjectAdapterMemento> select2ChoiceField;
+    private Select2Choice<ObjectAdapterMemento> select2Field;
     private ObjectAdapterMemento pending;
 
     public ValueChoicesSelect2Panel(final String id, final ScalarModel scalarModel) {
@@ -73,9 +73,8 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
 
         final IModel<ObjectAdapterMemento> modelObject = createModel();
         
-        select2ChoiceField = new Select2Choice<ObjectAdapterMemento>(ID_VALUE_ID, modelObject);
-        final List<ObjectAdapterMemento> choicesMementos = getChoiceMementos(null);
-        setChoices(choicesMementos);
+        select2Field = new Select2Choice<ObjectAdapterMemento>(ID_VALUE_ID, modelObject);
+        setChoices(null);
 
         addStandardSemantics();
 
@@ -85,16 +84,16 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
         }
         
         addOrReplace(labelIfRegular);
-        addFeedbackTo(labelIfRegular, select2ChoiceField);
+        addFeedbackTo(labelIfRegular, select2Field);
         addAdditionalLinksTo(labelIfRegular);
         
         return labelIfRegular;
     }
 
+
     protected ChoiceProvider<ObjectAdapterMemento> newChoiceProvider(final List<ObjectAdapterMemento> choicesMementos) {
         final IModel<List<ObjectAdapterMemento>> choicesModel = newModel(choicesMementos);
-        final ChoiceProvider<ObjectAdapterMemento> choiceProvider = newChoiceProvider(choicesModel);
-        return choiceProvider;
+        return newChoiceProvider(choicesModel);
     }
 
     private IModel<List<ObjectAdapterMemento>> newModel(final List<ObjectAdapterMemento> choicesMementos) {
@@ -111,8 +110,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
         final List<ObjectAdapter> choices = scalarModel.getChoices(argumentsIfAvailable);
         
         // take a copy otherwise is only lazily evaluated
-        final List<ObjectAdapterMemento> choicesMementos = Lists.newArrayList(Lists.transform(choices, Mementos.fromAdapter()));
-        return choicesMementos;
+        return Lists.newArrayList(Lists.transform(choices, Mementos.fromAdapter()));
     }
 
     private Model<ObjectAdapterMemento> createModel() {
@@ -160,23 +158,23 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
     private void setRequiredIfSpecified() {
         final ScalarModel scalarModel = getModel();
         final boolean required = scalarModel.isRequired();
-        select2ChoiceField.setRequired(required);
+        select2Field.setRequired(required);
     }
 
     protected FormComponentLabel createFormComponentLabel() {
         final String name = getModel().getName();
-        select2ChoiceField.setLabel(Model.of(name));
+        select2Field.setLabel(Model.of(name));
 
-        final FormComponentLabel labelIfRegular = new FormComponentLabel(ID_SCALAR_IF_REGULAR, select2ChoiceField);
+        final FormComponentLabel labelIfRegular = new FormComponentLabel(ID_SCALAR_IF_REGULAR, select2Field);
 
         final String describedAs = getModel().getDescribedAs();
         if(describedAs != null) {
             labelIfRegular.add(new AttributeModifier("title", Model.of(describedAs)));
         }
 
-        final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2ChoiceField));
+        final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2Field));
         labelIfRegular.add(scalarName);
-        labelIfRegular.add(select2ChoiceField);
+        labelIfRegular.add(select2Field);
 
         return labelIfRegular;
     }
@@ -236,35 +234,36 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
 
     @Override
     protected void onBeforeRenderWhenViewMode() { // View: Read only
-        select2ChoiceField.setEnabled(false);
+        select2Field.setEnabled(false);
     }
 
     @Override
     protected void onBeforeRenderWhenEnabled() { // Edit: read/write
-        select2ChoiceField.setEnabled(true);
+        select2Field.setEnabled(true);
     }
 
     
     @Override
-    protected void addFormComponentBehaviour(Behavior behavior) {
-        select2ChoiceField.add(behavior);
+    protected void addFormComponentBehavior(Behavior behavior) {
+        select2Field.add(behavior);
     }
 
 
     // //////////////////////////////////////
 
     @Override
-    public void updateChoices(ObjectAdapter[] arguments) {
-        final List<ObjectAdapterMemento> choicesMementos = getChoiceMementos(arguments);
-        setChoices(choicesMementos);
+    public void updateChoices(ObjectAdapter[] argsIfAvailable) {
+        setChoices(argsIfAvailable);
     }
 
     /**
      * sets up the choices, also ensuring that any currently held value
      * is compatible.
      */
-    private void setChoices(final List<ObjectAdapterMemento> choicesMementos) {
-        select2ChoiceField.setProvider(newChoiceProvider(choicesMementos));
+    private void setChoices(ObjectAdapter[] argsIfAvailable) {
+        final List<ObjectAdapterMemento> choicesMementos = getChoiceMementos(argsIfAvailable);
+        
+        select2Field.setProvider(newChoiceProvider(choicesMementos));
         getModel().setPending(null);
         final ObjectAdapterMemento objectAdapterMemento = getModel().getObjectAdapterMemento();
         if(!choicesMementos.contains(objectAdapterMemento)) {
@@ -272,7 +271,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract {
                     !choicesMementos.isEmpty() 
                     ? choicesMementos.get(0) 
                     : null;
-            select2ChoiceField.getModel().setObject(newAdapterMemento);
+            select2Field.getModel().setObject(newAdapterMemento);
             getModel().setObject(
                     newAdapterMemento != null? newAdapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK): null);
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/1f62a90e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java
index 271a63f..951e29e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/util/AdapterInvokeUtils.java
@@ -26,7 +26,6 @@ import com.google.common.collect.Lists;
 
 import org.apache.isis.core.commons.lang.ListUtils;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionParameterContributee.Util;
 
 public final class AdapterInvokeUtils {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/1f62a90e/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 bcb157b..1cc406e 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
@@ -19,7 +19,6 @@
 
 package org.apache.isis.core.metamodel.specloader.specimpl;
 
-import java.util.Arrays;
 import java.util.List;
 
 import com.google.common.collect.Lists;
@@ -59,7 +58,6 @@ 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.metamodel.specloader.specimpl.ObjectActionParameterContributee.Util;
 import org.apache.isis.core.progmodel.facets.param.autocomplete.MinLengthUtil;
 
 public abstract class ObjectActionParameterAbstract implements ObjectActionParameter {

http://git-wip-us.apache.org/repos/asf/isis/blob/1f62a90e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
index dbc375e..4930fa1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
@@ -16,130 +16,9 @@
  */
 package org.apache.isis.core.metamodel.specloader.specimpl;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import com.google.common.collect.Lists;
-
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 
 
 public interface ObjectActionParameterContributee extends ObjectActionParameter {
 
-    // TODO: can probably remove this now?
-    public static class Util {
-
-        @SuppressWarnings("unused")
-        private static <T> List<T> toList(final T[] inputArray) {
-            return Lists.newArrayList(asList(inputArray));
-        }
-
-        private static <T> List<T> asList(final T[] inputArray) {
-            return inputArray != null? Arrays.asList(inputArray): Collections.<T>emptyList();
-        }
-
-        @SuppressWarnings("unused")
-        private static <T> List<T> adjust(final List<T> input, final int requiredLength, final int index, final T elementAtIndex) {
-            List<T> output;
-            if(input.isEmpty()) {
-                // nothing provided, so just create an empty list of the required length
-                output = newList(requiredLength);
-            } else if(input.size() == requiredLength) {
-                // exactly correct length, so just use
-                output = input;
-            } else if(input.size() == requiredLength - 1) {
-                // one short, so split the input at the index 
-                output = Lists.newArrayList();
-                output.addAll(input.subList(0, index));
-                output.add(null); 
-                output.addAll(input.subList(index, input.size()));
-            } else {
-                throw new IllegalArgumentException("Provided " + input.size() + " args for method taking " + requiredLength + " parameters");
-            }
-            
-            // finally, overwrite the element
-            output.set(index, elementAtIndex);
-            return output;
-        }
-
-        private static <T> List<T> newList(final int requiredLength) {
-            List<T> output;
-            output = Lists.newArrayList();
-            for(int i=0; i<requiredLength; i++) {
-                output.add(null);
-            }
-            return output;
-        }
-        
-//      @Test
-//      public void adjust_whenSameSize() throws Exception {
-//          final List<Integer> input = Arrays.asList(Integer.valueOf(0), Integer.MAX_VALUE, Integer.MIN_VALUE);
-//          final List<Integer> output = ObjectActionParameterContributee.Util.adjust(input, 3, 0, Integer.valueOf(10));
-//          
-//          assertThat(output.size(), is(3));
-//          assertThat(output.get(0), is(Integer.valueOf(10)));
-//          assertThat(output.get(1), is(Integer.MAX_VALUE));
-//          assertThat(output.get(2), is(Integer.MIN_VALUE));
-//      }
-  //    
-//      @Test
-//      public void adjust_whenEmpty() throws Exception {
-//          final List<Integer> input = Collections.emptyList();
-//          final List<Integer> output = ObjectActionParameterContributee.Util.adjust(input, 3, 0, Integer.valueOf(10));
-//          
-//          assertThat(output.size(), is(3));
-//          assertThat(output.get(0), is(Integer.valueOf(10)));
-//          assertThat(output.get(1), is(nullValue()));
-//          assertThat(output.get(2), is(nullValue()));
-//      }
-  //
-//      @Test
-//      public void adjust_whenOneLess_replaceStart() throws Exception {
-//          final List<Integer> input = Arrays.asList(Integer.MAX_VALUE, Integer.MIN_VALUE);
-//          final List<Integer> output = ObjectActionParameterContributee.Util.adjust(input, 3, 0, Integer.valueOf(10));
-//          
-//          assertThat(output.size(), is(3));
-//          assertThat(output.get(0), is(Integer.valueOf(10)));
-//          assertThat(output.get(1), is(Integer.MAX_VALUE));
-//          assertThat(output.get(2), is(Integer.MIN_VALUE));
-//      }
-  //    
-//      @Test
-//      public void adjust_whenOneLess_replaceMiddle() throws Exception {
-//          final List<Integer> input = Arrays.asList(Integer.MAX_VALUE, Integer.MIN_VALUE);
-//          final List<Integer> output = ObjectActionParameterContributee.Util.adjust(input, 3, 1, Integer.valueOf(10));
-//          
-//          assertThat(output.size(), is(3));
-//          assertThat(output.get(0), is(Integer.MAX_VALUE));
-//          assertThat(output.get(1), is(Integer.valueOf(10)));
-//          assertThat(output.get(2), is(Integer.MIN_VALUE));
-//      }
-  //    
-//      @Test
-//      public void adjust_whenOneLess_replaceEnd() throws Exception {
-//          final List<Integer> input = Arrays.asList(Integer.MAX_VALUE, Integer.MIN_VALUE);
-//          final List<Integer> output = ObjectActionParameterContributee.Util.adjust(input, 3, 2, Integer.valueOf(10));
-//          
-//          assertThat(output.size(), is(3));
-//          assertThat(output.get(0), is(Integer.MAX_VALUE));
-//          assertThat(output.get(1), is(Integer.MIN_VALUE));
-//          assertThat(output.get(2), is(Integer.valueOf(10)));
-//      }
-      
-      
-      
-
-  //  @Test
-  //  public void newList() throws Exception {
-//        final List<Object> list = ObjectActionParameterContributee.Util.newList(3);
-//        assertThat(list.size(), is(3));
-//        assertThat(list.get(0), is(nullValue()));
-//        assertThat(list.get(1), is(nullValue()));
-//        assertThat(list.get(2), is(nullValue()));
-  //  }
-
-        
-    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/1f62a90e/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
index 94242bd..fd8952d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
@@ -23,13 +23,10 @@ import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.List;
 
-import com.google.common.collect.Lists;
-
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.util.AdapterInvokeUtils;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionParameterContributee.Util;
 import org.apache.isis.core.progmodel.facets.param.defaults.ActionParameterDefaultsFacetAbstract;
 
 public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaultsFacetAbstract implements ImperativeFacet {


[2/2] git commit: ISIS-500: making EntityIconAndTitlePanel easier to subclass

Posted by da...@apache.org.
ISIS-500: making EntityIconAndTitlePanel easier to subclass

in addition:
* removed some unused ComponentFactory's
* added in example css in a ToDo app's application.css to demonstrate how to hide the icon
* make some demo code in QuickStartApplication easier to enable
* renamed PageRegistrySpi -> PageClassRegistrySpi
* added example override of PageClassList


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

Branch: refs/heads/master
Commit: 58aff6aa393e69c46aa9b7524d27776869d4f374
Parents: 1f62a90
Author: Dan Haywood <da...@apache.org>
Authored: Fri Aug 23 11:57:59 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Fri Aug 23 11:57:59 2013 +0100

----------------------------------------------------------------------
 .../viewer/wicket/viewer/IsisWicketModule.java  |   3 +-
 .../ComponentFactoryRegistrarDefault.java       |   9 --
 .../registries/pages/PageClassListDefault.java  |   4 +-
 .../pages/PageClassRegistryDefault.java         |   4 +-
 .../PageClassListDefault_Instantiation.java     |   4 +-
 .../CollectionContentsDropDownSelectorPanel.css |  21 ----
 ...CollectionContentsDropDownSelectorPanel.html |  31 -----
 ...CollectionContentsDropDownSelectorPanel.java |  48 --------
 ...ionContentsDropDownSelectorPanelFactory.java |  56 ---------
 ...ectionContentsLinksSelectorPanelFactory.java |   1 -
 .../icontitle/EntityIconAndTitlePanel.java      |  47 ++++---
 .../dropdown/EntityDropDownSelectorPanel.css    |  21 ----
 .../dropdown/EntityDropDownSelectorPanel.html   |  31 -----
 .../dropdown/EntityDropDownSelectorPanel.java   |  47 -------
 .../EntityDropDownSelectorPanelFactory.java     |  51 --------
 .../links/EntityLinksSelectorPanelFactory.java  |   1 -
 .../viewer/wicket/ui/pages/PageClassList.java   |   2 +-
 .../wicket/ui/pages/PageClassRegistrySpi.java   |  33 +++++
 .../viewer/wicket/ui/pages/PageRegistrySpi.java |  33 -----
 .../DropDownChoiceComponentFactory.java         |  95 --------------
 .../dropdown/DropDownSelectorPanelAbstract.css  |  21 ----
 .../dropdown/DropDownSelectorPanelAbstract.html |  34 -----
 .../dropdown/DropDownSelectorPanelAbstract.java | 123 -------------------
 .../java/app/PageClassListForQuickstart.java    |  61 +++++++++
 .../main/java/app/QuickStartApplication.java    |  68 ++++++----
 .../webapp/src/main/webapp/css/application.css  |  19 +++
 26 files changed, 192 insertions(+), 676 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
index 971a7d0..8f00317 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
@@ -46,7 +46,8 @@ import org.apache.isis.viewer.wicket.viewer.settings.WicketViewerSettingsDefault
  *     @Override
  *     protected void configure() {
  *         bind(ComponentFactoryRegistrar.class).to(ComponentFactoryRegistrarForMyApp.class);
- *              
+ *         bind(PageClassList.class).to(PageClassListForMyApp.class);
+ *         ...  
  *         bind(String.class).annotatedWith(Names.named("applicationName")).toInstance("My App");
  *         bind(String.class).annotatedWith(Names.named("applicationCss")).toInstance("application.css");
  *         bind(String.class).annotatedWith(Names.named("applicationJs")).toInstance("application.js");

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
index 168ff0b..f6bec25 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
@@ -34,8 +34,6 @@ import org.apache.isis.viewer.wicket.ui.components.appactions.cssmenu.AppActions
 import org.apache.isis.viewer.wicket.ui.components.bookmarkedpages.BookmarkedPagesPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.collection.CollectionPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.CollectionContentsAsAjaxTablePanelFactory;
-import org.apache.isis.viewer.wicket.ui.components.collectioncontents.icons.CollectionContentsAsIconsPanelFactory;
-import org.apache.isis.viewer.wicket.ui.components.collectioncontents.selector.dropdown.CollectionContentsDropDownSelectorPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.collectioncontents.selector.links.CollectionContentsLinksSelectorPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.collectioncontents.summary.CollectionContentsAsSummaryFactory;
 import org.apache.isis.viewer.wicket.ui.components.collectioncontents.unresolved.CollectionContentsAsUnresolvedPanelFactory;
@@ -45,7 +43,6 @@ import org.apache.isis.viewer.wicket.ui.components.entity.combined.EntityCombine
 import org.apache.isis.viewer.wicket.ui.components.entity.header.EntityHeaderPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.entity.icontitle.EntityIconAndTitlePanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.entity.properties.EntityPropertiesPanelFactory;
-import org.apache.isis.viewer.wicket.ui.components.entity.selector.dropdown.EntityDropDownSelectorPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.entity.selector.links.EntityLinksSelectorPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisBlobPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisClobPanelFactory;
@@ -117,12 +114,6 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
         componentFactories.add(new CollectionContentsLinksSelectorPanelFactory());
     }
 
-    @SuppressWarnings("unused")
-    private void addDropDownSelectorFactories(final ComponentFactoryList componentFactories) {
-        componentFactories.add(new EntityDropDownSelectorPanelFactory());
-        componentFactories.add(new CollectionContentsDropDownSelectorPanelFactory());
-    }
-
     protected void addComponentFactoriesUsingServiceLoader(final ComponentFactoryList componentFactories) {
         final ServiceLoader<ComponentFactory> serviceLoader = ServiceLoader.load(ComponentFactory.class);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
index 1254004..b057b3f 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
@@ -25,7 +25,7 @@ import org.apache.wicket.Page;
 
 import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassList;
-import org.apache.isis.viewer.wicket.ui.pages.PageRegistrySpi;
+import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistrySpi;
 import org.apache.isis.viewer.wicket.ui.pages.about.AboutPage;
 import org.apache.isis.viewer.wicket.ui.pages.action.ActionPage;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
@@ -40,7 +40,7 @@ import org.apache.isis.viewer.wicket.ui.pages.login.WicketSignInPage;
 public class PageClassListDefault implements PageClassList {
 
     @Override
-    public void registerPages(final PageRegistrySpi pageRegistry) {
+    public void registerPages(final PageClassRegistrySpi pageRegistry) {
         pageRegistry.registerPage(PageType.SIGN_IN, getSignInPageClass());
         pageRegistry.registerPage(PageType.ABOUT, getAboutPageClass());
         pageRegistry.registerPage(PageType.ENTITY, getEntityPageClass());

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassRegistryDefault.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassRegistryDefault.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassRegistryDefault.java
index d3640cb..8437e56 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassRegistryDefault.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassRegistryDefault.java
@@ -30,14 +30,14 @@ import org.apache.wicket.Page;
 import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassList;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
-import org.apache.isis.viewer.wicket.ui.pages.PageRegistrySpi;
+import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistrySpi;
 
 /**
  * Default implementation of {@link PageClassRegistry}; just delegates to an
  * underlying {@link PageClassList}.
  */
 @Singleton
-public class PageClassRegistryDefault implements PageClassRegistry, PageRegistrySpi {
+public class PageClassRegistryDefault implements PageClassRegistry, PageClassRegistrySpi {
 
     private final Map<PageType, Class<? extends Page>> pagesByType = Maps.newHashMap();
 

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_Instantiation.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_Instantiation.java b/component/viewer/wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_Instantiation.java
index 87d304f..4861d62 100644
--- a/component/viewer/wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_Instantiation.java
+++ b/component/viewer/wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_Instantiation.java
@@ -29,7 +29,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import org.apache.isis.viewer.wicket.ui.pages.PageClassList;
-import org.apache.isis.viewer.wicket.ui.pages.PageRegistrySpi;
+import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistrySpi;
 import org.apache.isis.viewer.wicket.viewer.registries.pages.PageClassListDefault;
 import org.apache.isis.viewer.wicket.viewer.registries.pages.PageClassRegistryDefault;
 
@@ -60,7 +60,7 @@ public class PageClassListDefault_Instantiation {
         final PageClassList mockPageClassList = context.mock(PageClassList.class);
         context.checking(new Expectations() {
             {
-                mockPageClassList.registerPages(with(any(PageRegistrySpi.class)));
+                mockPageClassList.registerPages(with(any(PageClassRegistrySpi.class)));
             }
         });
         new PageClassRegistryDefault(mockPageClassList);

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanel.css
deleted file mode 100644
index 2a48bfd..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanel.css
+++ /dev/null
@@ -1,21 +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.
- */
-.collectionContentsDropDownSelectorPanel select {
-	margin-bottom: 1em;
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanel.html
deleted file mode 100644
index ad7b4f0..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanel.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml"  
-      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
-      xml:lang="en"  
-      lang="en">
-	<head></head>
-	<body>
-		<wicket:extend>
-			<div wicket:id="collectionContents" class="collectionContentsDropDownSelectorPanel collectionContentsComponentType"></div>
-		</wicket:extend>
-	</body>
-</html>
-

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanel.java
deleted file mode 100644
index df1b3ae..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanel.java
+++ /dev/null
@@ -1,48 +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.viewer.wicket.ui.components.collectioncontents.selector.dropdown;
-
-import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
-import org.apache.isis.viewer.wicket.ui.ComponentFactory;
-import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.selector.dropdown.DropDownSelectorPanelAbstract;
-
-/**
- * Provides a drop-down for selecting other views that support
- * {@link ComponentType#COLLECTION_CONTENTS} with a backing
- * {@link EntityCollectionModel}.
- * 
- * <p>
- * Most of the heavy lifting is factored out into the superclass,
- * {@link DropDownSelectorPanelAbstract}.
- * 
- * <p>
- * Note that this class is {@link ComponentFactoryListDefault registered} prior
- * to any other views.
- */
-public class CollectionContentsDropDownSelectorPanel extends DropDownSelectorPanelAbstract<EntityCollectionModel> {
-
-    private static final long serialVersionUID = 1L;
-
-    public CollectionContentsDropDownSelectorPanel(final String id, final EntityCollectionModel model, final ComponentFactory factory) {
-        super(id, ComponentType.COLLECTION_CONTENTS.toString(), model, factory);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanelFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanelFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanelFactory.java
deleted file mode 100644
index 3e8239f..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/dropdown/CollectionContentsDropDownSelectorPanelFactory.java
+++ /dev/null
@@ -1,56 +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.viewer.wicket.ui.components.collectioncontents.selector.dropdown;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.model.IModel;
-
-import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
-import org.apache.isis.viewer.wicket.ui.ComponentFactory;
-import org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract;
-import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.components.collectioncontents.selector.links.CollectionContentsLinksSelectorPanelFactory;
-
-/**
- * {@link ComponentFactory} for {@link CollectionContentsDropDownSelectorPanel}.
- * 
- * <p>
- * Either this class or {@link CollectionContentsLinksSelectorPanelFactory} should be
- * registered, but not both.
- */
-public class CollectionContentsDropDownSelectorPanelFactory extends ComponentFactoryAbstract {
-
-    private static final long serialVersionUID = 1L;
-
-    public CollectionContentsDropDownSelectorPanelFactory() {
-        super(ComponentType.COLLECTION_CONTENTS);
-    }
-
-    @Override
-    public ApplicationAdvice appliesTo(final IModel<?> model) {
-        return appliesIf(model instanceof EntityCollectionModel);
-    }
-
-    @Override
-    public Component createComponent(final String id, final IModel<?> model) {
-        final EntityCollectionModel collectionModel = (EntityCollectionModel) model;
-        return new CollectionContentsDropDownSelectorPanel(id, collectionModel, this);
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanelFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanelFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanelFactory.java
index 59aa909..1a940d9 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanelFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanelFactory.java
@@ -26,7 +26,6 @@ import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.components.collectioncontents.selector.dropdown.CollectionContentsDropDownSelectorPanelFactory;
 
 /**
  * {@link ComponentFactory} for {@link CollectionContentsLinksSelectorPanel}.

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
index ecfc674..f6e30f1 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
@@ -91,28 +91,27 @@ public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
 
         final PageParameters pageParameters = EntityModel.createPageParameters(adapter);
         final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ENTITY);
+        
         final AbstractLink link = newLink(ID_ENTITY_LINK, pageClass, pageParameters);
         
-        String title = determineTitle();
-        label = new Label(ID_ENTITY_TITLE, title);
-        link.add(label);
-
-        final ResourceReference imageResource = imageCache.resourceReferenceFor(adapter);
-        image = new Image(ID_ENTITY_ICON, imageResource) {
-            private static final long serialVersionUID = 1L;
-            @Override
-            protected boolean shouldAddAntiCacheParameter() {
-                return false;
-            }
-        };
-        link.addOrReplace(image);
+        link.addOrReplace(this.label = newLabel(ID_ENTITY_TITLE));
+        link.addOrReplace(this.image = newImage(ID_ENTITY_ICON, adapter));
         
         final WebMarkupContainer entityLinkWrapper = new WebMarkupContainer(ID_ENTITY_LINK_WRAPPER);
         entityLinkWrapper.addOrReplace(link);
         return entityLinkWrapper;
     }
 
-    private String determineTitle() {
+    protected AbstractLink newLink(final String linkId, final Class<? extends Page> pageClass, final PageParameters pageParameters) {
+        return Links.newBookmarkablePageLink(linkId, pageParameters, pageClass);
+    }
+
+    protected Label newLabel(final String id) {
+        final String title = determineTitle();
+        return new Label(id, title);
+    }
+
+    protected String determineTitle() {
         EntityModel model = getModel();
         final ObjectAdapter adapter = model.getObject();
          if (adapter != null) {
@@ -129,6 +128,20 @@ public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
         }
     }
 
+    protected Image newImage(final String id, final ObjectAdapter adapter) {
+        Image image;
+        final ResourceReference imageResource = imageCache.resourceReferenceFor(adapter);
+         
+        image = new Image(id, imageResource) {
+            private static final long serialVersionUID = 1L;
+            @Override
+            protected boolean shouldAddAntiCacheParameter() {
+                return false;
+            }
+        };
+        return image;
+    }
+
     public ObjectAdapter getContextAdapterIfAny() {
         EntityModel model = getModel();
         ObjectAdapterMemento contextAdapterMementoIfAny = model.getContextAdapterIfAny();
@@ -143,11 +156,6 @@ public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
         return maxLength <= 3 ? "" : str.substring(0, maxLength - 3) + "...";
     }
 
-
-    private AbstractLink newLink(final String linkId, final Class<? extends Page> pageClass, final PageParameters pageParameters) {
-        return Links.newBookmarkablePageLink(linkId, pageParameters, pageClass);
-    }
-
     
     // ///////////////////////////////////////////////////////////////////
     // Convenience
@@ -165,7 +173,6 @@ public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
 
     @Inject
     private ImageResourceCache imageCache;
-
     protected ImageResourceCache getImageCache() {
         return imageCache;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanel.css
deleted file mode 100644
index 65cc7a0..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanel.css
+++ /dev/null
@@ -1,21 +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.
- */
-.entityDropDownSelectorPanel select {
-	margin-bottom: 1em;
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanel.html
deleted file mode 100644
index 3a0eb16..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanel.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml"  
-      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
-      xml:lang="en"  
-      lang="en">
-	<head></head>
-	<body>
-		<wicket:extend>
-			<div wicket:id="entity" class="entityDropDownSelectorPanel entityComponentType"></div>
-		</wicket:extend>
-	</body>
-</html>
-

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanel.java
deleted file mode 100644
index f6d73db..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanel.java
+++ /dev/null
@@ -1,47 +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.viewer.wicket.ui.components.entity.selector.dropdown;
-
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
-import org.apache.isis.viewer.wicket.ui.ComponentFactory;
-import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.selector.dropdown.DropDownSelectorPanelAbstract;
-
-/**
- * Provides a drop-down for selecting other views that support
- * {@link ComponentType#ENTITY} with a backing {@link EntityModel}.
- * 
- * <p>
- * Most of the heavy lifting is factored out into the superclass,
- * {@link DropDownSelectorPanelAbstract}.
- * 
- * <p>
- * Note that this class should be registered (in
- * <tt>ComponentFactoryListDefault</tt>) prior to any other views.
- */
-public class EntityDropDownSelectorPanel extends DropDownSelectorPanelAbstract<EntityModel> {
-
-    private static final long serialVersionUID = 1L;
-
-    public EntityDropDownSelectorPanel(final String id, final EntityModel model, final ComponentFactory factory) {
-        super(id, ComponentType.ENTITY.toString(), model, factory);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanelFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanelFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanelFactory.java
deleted file mode 100644
index 6a4470a..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/dropdown/EntityDropDownSelectorPanelFactory.java
+++ /dev/null
@@ -1,51 +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.viewer.wicket.ui.components.entity.selector.dropdown;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.model.IModel;
-
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
-import org.apache.isis.viewer.wicket.ui.ComponentFactory;
-import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.components.entity.EntityComponentFactoryAbstract;
-import org.apache.isis.viewer.wicket.ui.components.entity.selector.links.EntityLinksSelectorPanelFactory;
-
-/**
- * {@link ComponentFactory} for {@link EntityDropDownSelectorPanel}.
- * 
- * <p>
- * Either this selector, or {@link EntityLinksSelectorPanelFactory} should be registered;
- * but not both.
- */
-public class EntityDropDownSelectorPanelFactory extends EntityComponentFactoryAbstract {
-
-    private static final long serialVersionUID = 1L;
-
-    public EntityDropDownSelectorPanelFactory() {
-        super(ComponentType.ENTITY);
-    }
-
-    @Override
-    public Component createComponent(final String id, final IModel<?> model) {
-        final EntityModel entityModel = (EntityModel) model;
-        return new EntityDropDownSelectorPanel(id, entityModel, this);
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanelFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanelFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanelFactory.java
index 15a07e8..0f20bb5 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanelFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanelFactory.java
@@ -26,7 +26,6 @@ import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.entity.EntityComponentFactoryAbstract;
-import org.apache.isis.viewer.wicket.ui.components.entity.selector.dropdown.EntityDropDownSelectorPanelFactory;
 
 /**
  * {@link ComponentFactory} for {@link EntityLinksSelectorPanel}.

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageClassList.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageClassList.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageClassList.java
index 136c163..dd489ba 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageClassList.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageClassList.java
@@ -33,6 +33,6 @@ import org.apache.isis.viewer.wicket.model.models.PageType;
  */
 public interface PageClassList {
 
-    void registerPages(PageRegistrySpi pageRegistry);
+    void registerPages(PageClassRegistrySpi pageRegistry);
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageClassRegistrySpi.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageClassRegistrySpi.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageClassRegistrySpi.java
new file mode 100644
index 0000000..6113222
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageClassRegistrySpi.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.viewer.wicket.ui.pages;
+
+import org.apache.wicket.Page;
+
+import org.apache.isis.viewer.wicket.model.models.PageType;
+
+/**
+ * Used by {@link PageClassList} implementations to add pages into the registry.
+ */
+public interface PageClassRegistrySpi {
+
+    public void registerPage(PageType pageType, Class<? extends Page> pageClass);
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageRegistrySpi.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageRegistrySpi.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageRegistrySpi.java
deleted file mode 100644
index ea9c9d1..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageRegistrySpi.java
+++ /dev/null
@@ -1,33 +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.viewer.wicket.ui.pages;
-
-import org.apache.wicket.Page;
-
-import org.apache.isis.viewer.wicket.model.models.PageType;
-
-/**
- * Used by {@link PageClassList} implementations to add pages into the registry.
- */
-public interface PageRegistrySpi {
-
-    public void registerPage(PageType pageType, Class<? extends Page> pageClass);
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownChoiceComponentFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownChoiceComponentFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownChoiceComponentFactory.java
deleted file mode 100644
index 6a4d753..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownChoiceComponentFactory.java
+++ /dev/null
@@ -1,95 +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.viewer.wicket.ui.selector.dropdown;
-
-import java.util.List;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.markup.html.form.DropDownChoice;
-import org.apache.wicket.markup.html.form.IChoiceRenderer;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-
-import org.apache.isis.viewer.wicket.ui.ComponentFactory;
-
-/**
- * {@link ComponentFactory} for rendering a selection of
- * {@link ComponentFactory}s.
- * 
- * <p>
- * Used by {@link DropDownSelectorPanelAbstract}.
- */
-public class DropDownChoiceComponentFactory extends DropDownChoice<ComponentFactory> {
-
-    private static final long serialVersionUID = 1L;
-
-    private final IModel<?> underlyingModel;
-    private final String underlyingId;
-    private final MarkupContainer container;
-
-    private static final class ComponentFactoryChoiceRenderer implements IChoiceRenderer<ComponentFactory> {
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public Object getDisplayValue(final ComponentFactory object) {
-            return object.getName();
-        }
-
-        @Override
-        public String getIdValue(final ComponentFactory object, final int index) {
-            return Integer.toString(index);
-        }
-    }
-
-    /**
-     * @param id
-     *            - id to use for the drop down
-     * @param selectedComponentFactoryModel
-     *            - currently selected in the drop-down
-     * @param componentFactories
-     *            - list of {@link ComponentFactory}s to show in drop-down
-     * @param container
-     *            - the container that should contain the {@link Component}
-     *            created by the selected {@link ComponentFactory}
-     * @param underlyingId
-     *            - the id of the {@link Component} created
-     * @param underlyingModel
-     *            - the model for the {@link Component}
-     */
-    public DropDownChoiceComponentFactory(final String id, final Model<ComponentFactory> selectedComponentFactoryModel, final List<? extends ComponentFactory> componentFactories, final MarkupContainer container, final String underlyingId, final IModel<?> underlyingModel) {
-        super(id, selectedComponentFactoryModel, componentFactories, new ComponentFactoryChoiceRenderer());
-        this.underlyingId = underlyingId;
-        this.underlyingModel = underlyingModel;
-        this.container = container;
-    }
-
-    @Override
-    protected boolean wantOnSelectionChangedNotifications() {
-        return true;
-    }
-
-    @Override
-    protected void onSelectionChanged(final ComponentFactory newSelection) {
-        final ComponentFactory componentFactory = getModel().getObject();
-        if (componentFactory != null) {
-            container.addOrReplace(componentFactory.createComponent(underlyingId, underlyingModel));
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownSelectorPanelAbstract.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownSelectorPanelAbstract.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownSelectorPanelAbstract.css
deleted file mode 100644
index 840f3d8..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownSelectorPanelAbstract.css
+++ /dev/null
@@ -1,21 +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.
- */
-.dropDownSelectorPanel > p {
-	margin-bottom: 0.8em;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownSelectorPanelAbstract.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownSelectorPanelAbstract.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownSelectorPanelAbstract.html
deleted file mode 100644
index 13a688b..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownSelectorPanelAbstract.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-	<body>
-		<wicket:panel>
-			<div class="dropDownSelectorPanel">
-				<p wicket:id="views">
-					<select wicket:id="viewsDropDown"/>
-				</p>
-				<div class="views">
-					<wicket:child/>
-				</div>
-			</div>
-		</wicket:panel>
-	</body>
-</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownSelectorPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownSelectorPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownSelectorPanelAbstract.java
deleted file mode 100644
index 2e7a001..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/dropdown/DropDownSelectorPanelAbstract.java
+++ /dev/null
@@ -1,123 +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.viewer.wicket.ui.selector.dropdown;
-
-import java.util.List;
-
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-
-import org.apache.isis.applib.annotation.Render.Type;
-import org.apache.isis.core.metamodel.facets.members.resolve.RenderFacet;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
-import org.apache.isis.viewer.wicket.ui.ComponentFactory;
-import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.components.collectioncontents.unresolved.CollectionContentsAsUnresolvedPanelFactory;
-import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
-
-public abstract class DropDownSelectorPanelAbstract<T extends IModel<?>> extends PanelAbstract<T> {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final String ID_VIEWS = "views";
-    private static final String ID_VIEWS_DROP_DOWN = "viewsDropDown";
-
-    private final ComponentType componentType;
-
-    public DropDownSelectorPanelAbstract(final String id, final String underlyingId, final T model, final ComponentFactory factory) {
-        super(id, model);
-
-        componentType = factory.getComponentType();
-
-        addUnderlyingViews(underlyingId, model, factory);
-    }
-
-    private void addUnderlyingViews(final String underlyingId, final T model, final ComponentFactory factory) {
-        final List<ComponentFactory> componentFactories = findOtherComponentFactories(model, factory);
-
-        final ComponentFactory selectedComponentFactory = Iterables.find(componentFactories, determineInitialFactory(model));
-        if (componentFactories.size() > 1) {
-            final Model<ComponentFactory> componentFactoryModel = new Model<ComponentFactory>();
-            
-            componentFactoryModel.setObject(selectedComponentFactory);
-
-            final WebMarkupContainer views = new WebMarkupContainer(ID_VIEWS);
-            
-            final DropDownChoiceComponentFactory viewsDropDown = new DropDownChoiceComponentFactory(ID_VIEWS_DROP_DOWN, componentFactoryModel, componentFactories, this, underlyingId, model);
-            views.addOrReplace(viewsDropDown);
-
-            addOrReplace(views);
-        } else {
-            permanentlyHide(ID_VIEWS);
-        }
-        addOrReplace(selectedComponentFactory.createComponent(underlyingId, model));
-    }
-
-    private static Predicate<ComponentFactory> determineInitialFactory(IModel<?> model) {
-        return hasResolveEagerlyFacet(model) 
-                ? new Predicate<ComponentFactory>() {
-                    @Override
-                    public boolean apply(ComponentFactory input) {
-                        return !(input instanceof CollectionContentsAsUnresolvedPanelFactory);
-                    }
-                }
-                : Predicates.<ComponentFactory>alwaysTrue();
-    }
-
-    private static boolean hasResolveEagerlyFacet(IModel<?> model) {
-        if(!(model instanceof EntityCollectionModel)) {
-            return false;
-        }
-        final EntityCollectionModel entityCollectionModel = (EntityCollectionModel) model;
-        if(!entityCollectionModel.isParented()) {
-            return false;
-        }
-
-        final OneToManyAssociation collection = 
-                entityCollectionModel.getCollectionMemento().getCollection();
-        RenderFacet resolveFacet = collection.getFacet(RenderFacet.class);
-        return resolveFacet != null && resolveFacet.value() == Type.EAGERLY;
-    }
-
-    private List<ComponentFactory> findOtherComponentFactories(final T model, final ComponentFactory ignoreFactory) {
-        final List<ComponentFactory> componentFactories = getComponentFactoryRegistry().findComponentFactories(componentType, model);
-        return Lists.newArrayList(Collections2.filter(componentFactories, new Predicate<ComponentFactory>() {
-            @Override
-            public boolean apply(final ComponentFactory input) {
-                return input != ignoreFactory;
-            }
-        }));
-    }
-
-    @Override
-    public void renderHead(final IHeaderResponse response) {
-        super.renderHead(response);
-        renderHead(response, DropDownSelectorPanelAbstract.class);
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/PageClassListForQuickstart.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/PageClassListForQuickstart.java b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/PageClassListForQuickstart.java
new file mode 100644
index 0000000..b84dc46
--- /dev/null
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/PageClassListForQuickstart.java
@@ -0,0 +1,61 @@
+/**
+ *  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 app;
+
+import org.apache.wicket.Page;
+
+import org.apache.isis.viewer.wicket.ui.ComponentFactory;
+import org.apache.isis.viewer.wicket.viewer.registries.pages.PageClassListDefault;
+
+public class PageClassListForQuickstart extends PageClassListDefault {
+
+    @Override
+    protected Class<? extends Page> getSignInPageClass() {
+        // no override
+        return super.getSignInPageClass();
+    }
+    
+    @Override
+    protected Class<? extends Page> getHomePageClass() {
+        // no override
+        return super.getHomePageClass();
+    }
+
+    @Override
+    protected Class<? extends Page> getAboutPageClass() {
+        // no override
+        return super.getAboutPageClass();
+    }
+    
+    /**
+     * More typically, override using custom {@link ComponentFactory}s.
+     */
+    @Override
+    protected Class<? extends Page> getEntityPageClass() {
+        // no override
+        return super.getEntityPageClass();
+    }
+    
+    /**
+     * More typically, override using custom {@link ComponentFactory}s.
+     */
+    @Override
+    protected Class<? extends Page> getActionPageClass() {
+        // no override
+        return super.getActionPageClass();
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/QuickStartApplication.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/QuickStartApplication.java b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/QuickStartApplication.java
index c81bd82..56aa2d1 100644
--- a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/QuickStartApplication.java
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/app/QuickStartApplication.java
@@ -39,8 +39,10 @@ import org.apache.wicket.request.Response;
 import org.apache.wicket.request.http.WebRequest;
 
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistrar;
+import org.apache.isis.viewer.wicket.ui.pages.PageClassList;
 import org.apache.isis.viewer.wicket.viewer.IsisWicketApplication;
 import org.apache.isis.viewer.wicket.viewer.integration.wicket.AuthenticatedWebSessionForIsis;
+import org.apache.isis.viewer.wicket.viewer.registries.pages.PageClassListDefault;
 
 
 /**
@@ -64,32 +66,47 @@ public class QuickStartApplication extends IsisWicketApplication {
 
     private static final long serialVersionUID = 1L;
 
-//
-// uncomment for a (slightly hacky) way of allowing logins using ?user=sven&pass=pass
-//
-// for demos only, obvious
+    /**
+     * uncomment for a (slightly hacky) way of allowing logins using query args, eg:
+     * 
+     * <tt>?user=sven&pass=pass</tt>
+     * 
+     * <p>
+     * for demos only, obvious.
+     */
+    private final static boolean DEMO_MODE_USING_CREDENTIALS_AS_QUERYARGS = false;
     
-//    @Override
-//    public Session newSession(final Request request, final Response response) {
-//        AuthenticatedWebSessionForIsis s = (AuthenticatedWebSessionForIsis) super.newSession(request, response);
-//        final org.apache.wicket.util.string.StringValue user = request.getRequestParameters().getParameterValue("user");
-//        final org.apache.wicket.util.string.StringValue password = request.getRequestParameters().getParameterValue("pass");
-//        s.signIn(user.toString(), password.toString());
-//        return s;
-//    }
-//
-//    @Override
-//    public WebRequest newWebRequest(HttpServletRequest servletRequest, String filterPath) {
-//        try {
-//            String uname = servletRequest.getParameter("user");
-//            if (uname != null) {
-//                servletRequest.getSession().invalidate();
-//            }
-//        } catch (Exception e) {
-//        }
-//        WebRequest request = super.newWebRequest(servletRequest, filterPath);
-//        return request;
-//    }
+    @Override
+    public Session newSession(final Request request, final Response response) {
+        if(!DEMO_MODE_USING_CREDENTIALS_AS_QUERYARGS) {
+            return super.newSession(request, response);
+        } 
+        
+        // else demo mode
+        final AuthenticatedWebSessionForIsis s = (AuthenticatedWebSessionForIsis) super.newSession(request, response);
+        final org.apache.wicket.util.string.StringValue user = request.getRequestParameters().getParameterValue("user");
+        final org.apache.wicket.util.string.StringValue password = request.getRequestParameters().getParameterValue("pass");
+        s.signIn(user.toString(), password.toString());
+        return s;
+    }
+
+    @Override
+    public WebRequest newWebRequest(HttpServletRequest servletRequest, String filterPath) {
+        if(!DEMO_MODE_USING_CREDENTIALS_AS_QUERYARGS) {
+            return super.newWebRequest(servletRequest, filterPath);
+        } 
+
+        // else demo mode
+        try {
+            String uname = servletRequest.getParameter("user");
+            if (uname != null) {
+                servletRequest.getSession().invalidate();
+            }
+        } catch (Exception e) {
+        }
+        WebRequest request = super.newWebRequest(servletRequest, filterPath);
+        return request;
+    }
     
     @Override
     protected Module newIsisWicketModule() {
@@ -99,6 +116,7 @@ public class QuickStartApplication extends IsisWicketApplication {
             @Override
             protected void configure() {
                 bind(ComponentFactoryRegistrar.class).to(ComponentFactoryRegistrarForQuickStart.class);
+                bind(PageClassList.class).to(PageClassListForQuickstart.class);
                 
                 bind(String.class).annotatedWith(Names.named("applicationName")).toInstance("Quick Start App");
                 bind(String.class).annotatedWith(Names.named("applicationCss")).toInstance("css/application.css");

http://git-wip-us.apache.org/repos/asf/isis/blob/58aff6aa/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/css/application.css
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/css/application.css b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/css/application.css
index 1e2caf9..7124976 100644
--- a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/css/application.css
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/css/application.css
@@ -30,3 +30,22 @@ uncomment to add a logo (in an ../images directory relative to this file)
 	display: none;
 }
 */
+
+/*
+example: uncomment to hide the icon
+
+.entityIconAndTitlePanel a img {
+	display: none;
+}
+*/
+
+/*
+example: uncomment to hide the sliding bookmark panel
+
+#bookmarkedPagesSlidingDiv {
+	display: none;
+}
+.showPanelTab {
+	display: none;
+}
+*/