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/03/15 18:09:04 UTC

git commit: ISIS-364: suppress parts of title if context adapter

Updated Branches:
  refs/heads/master c4de8708f -> fef459a9b


ISIS-364: suppress parts of title if context adapter

* also get rid of the HiddenFacetInTablesInferredFromTitleAnnotation (since this supercedes this)


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

Branch: refs/heads/master
Commit: fef459a9b1e187d0fc1fd319e3f3b14e79ad3f2d
Parents: c4de870
Author: Dan Haywood <da...@apache.org>
Authored: Fri Mar 15 17:08:41 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Fri Mar 15 17:08:41 2013 +0000

----------------------------------------------------------------------
 .../viewer/wicket/model/models/EntityModel.java    |   14 ++
 .../CollectionContentsAsAjaxTablePanel.java        |    7 +-
 .../columns/ObjectAdapterTitleColumn.java          |   16 ++-
 .../entity/icontitle/EntityIconAndTitlePanel.java  |   10 ++-
 .../widgets/entitylink/EntityLinkSelect2Panel.java |    2 +
 .../isis/viewer/wicket/ui/pages/PageAbstract.css   |    4 +
 .../IsisConfigurationBuilderResourceStreams.java   |    2 +-
 .../isis/core/metamodel/adapter/ObjectAdapter.java |   15 ++-
 .../metamodel/facets/object/title/TitleFacet.java  |   16 +++-
 .../facets/object/title/TitleFacetAbstract.java    |   11 ++
 .../core/metamodel/spec/ObjectSpecification.java   |   16 ++-
 .../specimpl/ObjectSpecificationAbstract.java      |   11 ++-
 .../facets/object/title/TitleFacetUsingParser.java |   10 ++
 ...enFacetInTablesInferredFromTitleAnnotation.java |   33 -----
 .../annotation/TitleAnnotationFacetFactory.java    |   25 +----
 .../annotation/TitleFacetViaTitleAnnotation.java   |   74 ++++++-----
 .../testspec/ObjectSpecificationStub.java          |    8 +-
 .../facets/AbstractFacetFactoryJUnit4TestCase.java |    2 +-
 .../TitleAnnotationFacetFactoryTest.java           |   95 ++++-----------
 .../runtime/persistence/adapter/PojoAdapter.java   |   26 ++---
 .../src/main/java/app/QuickStartApplication.java   |   19 ---
 21 files changed, 199 insertions(+), 217 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index c0f8d76..5827fa8 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -301,6 +301,18 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
         this.renderingHint = renderingHint;
     }
 
+    public ObjectAdapterMemento getContextAdapterIfAny() {
+        return contextAdapterIfAny;
+    }
+    
+    /**
+     * Used as a hint when the {@link #getRenderingHint()} is {@link RenderingHint#PARENTED_TITLE_COLUMN},
+     * provides a context adapter to obtain the title.
+     */
+    public void setContextAdapterIfAny(ObjectAdapterMemento contextAdapterIfAny) {
+        this.contextAdapterIfAny = contextAdapterIfAny;
+    }
+    
     public Mode getMode() {
         return mode;
     }
@@ -440,6 +452,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
     }
     
     private final PendingModel pendingModel;
+    private ObjectAdapterMemento contextAdapterIfAny;
 
     public ObjectAdapter getPendingElseCurrentAdapter() {
         return pendingModel.getPendingElseCurrentAdapter();
@@ -474,4 +487,5 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
 
 
 
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
index 4421d7a..f969949 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
@@ -48,6 +48,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActions;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.viewer.wicket.model.common.SelectionHandler;
+import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel.RenderingHint;
 import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ColumnAbstract;
@@ -89,7 +90,7 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl
         List<ObjectAction> bulkActions = determineBulkActions();
 
         addToggleboxColumnIfRequired(columns, bulkActions);
-        addTitleColumn(columns, model.isParented()? RenderingHint.PARENTED_TITLE_COLUMN: RenderingHint.STANDALONE_TITLE_COLUMN);
+        addTitleColumn(columns, model.getParentObjectAdapterMemento());
         addPropertyColumnsIfRequired(columns);
         addSelectedButtonIfRequired(columns);
 
@@ -154,8 +155,8 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl
     }
 
 
-    private static void addTitleColumn(final List<IColumn<ObjectAdapter,String>> columns, RenderingHint renderingHint) {
-        columns.add(new ObjectAdapterTitleColumn(renderingHint));
+    private static void addTitleColumn(final List<IColumn<ObjectAdapter,String>> columns, ObjectAdapterMemento parentAdapterMementoIfAny) {
+        columns.add(new ObjectAdapterTitleColumn(parentAdapterMementoIfAny));
     }
 
     private void addPropertyColumnsIfRequired(final List<IColumn<ObjectAdapter,String>> columns) {

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterTitleColumn.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterTitleColumn.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterTitleColumn.java
index c65ca6e..96e744e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterTitleColumn.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterTitleColumn.java
@@ -25,6 +25,7 @@ import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.IModel;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel.RenderingHint;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
@@ -33,15 +34,15 @@ import org.apache.isis.viewer.wicket.ui.ComponentType;
 public class ObjectAdapterTitleColumn extends ColumnAbstract<ObjectAdapter> {
 
     private static final long serialVersionUID = 1L;
-    private final RenderingHint renderingHint;
+    private final ObjectAdapterMemento parentAdapterMementoIfAny;
 
-    private static String columnName(RenderingHint renderingHint) {
-        return (renderingHint.isInParentedTableTitleColumn()? "Related ":"") + "Object";
+    private static String columnName(ObjectAdapterMemento parentAdapterMementoIfAny) {
+        return (parentAdapterMementoIfAny != null? "Related ":"") + "Object";
     }
 
-    public ObjectAdapterTitleColumn(RenderingHint renderingHint) {
-        super(columnName(renderingHint)); // i18n
-        this.renderingHint = renderingHint;
+    public ObjectAdapterTitleColumn(ObjectAdapterMemento parentAdapterMementoIfAny) {
+        super(columnName(parentAdapterMementoIfAny)); // i18n
+        this.parentAdapterMementoIfAny = parentAdapterMementoIfAny;
     }
 
     @Override
@@ -53,7 +54,8 @@ public class ObjectAdapterTitleColumn extends ColumnAbstract<ObjectAdapter> {
     private Component createComponent(final String id, final IModel<ObjectAdapter> rowModel) {
         final ObjectAdapter adapter = rowModel.getObject();
         final EntityModel model = new EntityModel(adapter);
-        model.setRenderingHint(renderingHint);
+        model.setRenderingHint(parentAdapterMementoIfAny != null? RenderingHint.PARENTED_TITLE_COLUMN: RenderingHint.STANDALONE_TITLE_COLUMN);
+        model.setContextAdapterIfAny(parentAdapterMementoIfAny);
         final ComponentFactory componentFactory = findComponentFactory(ComponentType.ENTITY_LINK, model);
         return componentFactory.createComponent(id, model);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/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 5a0a5d9..e10bc93 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
@@ -30,7 +30,9 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.ResourceReference;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
+import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
 import org.apache.isis.viewer.wicket.model.models.PageType;
@@ -114,7 +116,7 @@ public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
         EntityModel model = getModel();
         final ObjectAdapter adapter = model.getObject();
          if (adapter != null) {
-            String titleString = adapter.titleString();
+            String titleString = adapter.titleString(getContextAdapterIfAny());
             if(model.getRenderingHint().isInStandaloneTableTitleColumn()) {
                 return abbreviated(titleString, getSettings().getTitleLengthInStandaloneTables());
             }
@@ -126,6 +128,12 @@ public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
             return "(no object)";
         }
     }
+
+    public ObjectAdapter getContextAdapterIfAny() {
+        EntityModel model = getModel();
+        ObjectAdapterMemento contextAdapterMementoIfAny = model.getContextAdapterIfAny();
+        return contextAdapterMementoIfAny != null? contextAdapterMementoIfAny.getObjectAdapter(ConcurrencyChecking.NO_CHECK): null;
+    }
     
     static String abbreviated(final String str, final int maxLength) {
         int length = str.length();

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/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 30c1701..8dc6852 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
@@ -35,6 +35,7 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.FormComponentPanel;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel;
+import org.apache.wicket.model.IModel;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
@@ -337,6 +338,7 @@ public class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAda
 
     private void addOrReplaceIconAndTitle(ObjectAdapter pendingOrCurrentAdapter) {
         final EntityModel entityModelForLink = new EntityModel(pendingOrCurrentAdapter);
+        entityModelForLink.setContextAdapterIfAny(getEntityModel().getContextAdapterIfAny());
         entityModelForLink.setRenderingHint(getEntityModel().getRenderingHint());
         final ComponentFactory componentFactory = getComponentFactoryRegistry().findComponentFactory(ComponentType.ENTITY_ICON_AND_TITLE, entityModelForLink);
         final Component component = componentFactory.createComponent(entityModelForLink);

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
index 1cdadb5..0566fb9 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
@@ -326,6 +326,10 @@ form fieldset .okButton {
 	margin:0px;
 	padding:0px;
 }
+.myBlockContainer fieldset:not(:first-child) {
+    margin-top: 30px
+}
+
 
 .myBlockContainer legend {
 	color:#423D37;

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
index 6575d6b..1ee0fd4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationBuilderResourceStreams.java
@@ -189,7 +189,7 @@ public class IsisConfigurationBuilderResourceStreams implements IsisConfiguratio
     protected void loadConfigurationResource(final IsisConfigurationDefault configuration, final String configurationResource, final NotFoundPolicy notFoundPolicy) {
         try {
             final PropertiesReader propertiesReader = loadConfigurationResource(resourceStreamSource, configurationResource);
-            LOG.info("loading properies from " + configurationResource);
+            LOG.info("loading properties from " + configurationResource);
             configuration.add(propertiesReader.getProperties());
             configurationResourcesFound.add(configurationResource);
             return;

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index 2a5a9e2..e1690ba 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -25,6 +25,7 @@ import org.apache.isis.core.metamodel.adapter.oid.CollectionOid;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
 import org.apache.isis.core.metamodel.spec.ElementSpecificationProvider;
 import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -51,12 +52,24 @@ public interface ObjectAdapter extends Instance, org.apache.isis.applib.annotati
     Object getObject();
 
     /**
-     * Returns the title to display this object with, which is usually got from
+     * Returns the title to display this object with, usually obtained from
      * the wrapped {@link #getObject() domain object}.
+     * 
+     * @deprecated - use {@link #titleString(ObjectAdapter)}
      */
+    @Deprecated
     String titleString();
 
     /**
+     * Returns the title to display this object with, rendered within the context
+     * of some other adapter.
+     * 
+     * <p>
+     * @see TitleFacet#title(ObjectAdapter, ObjectAdapter, org.apache.isis.applib.profiles.Localization)
+     */
+    String titleString(ObjectAdapter contextAdapter);
+
+    /**
      * Return an {@link Instance} of the specified {@link Specification} with
      * respect to this {@link ObjectAdapter}.
      * 

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacet.java
index 19bf698..bb76b08 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacet.java
@@ -38,5 +38,19 @@ import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
  */
 public interface TitleFacet extends Facet {
 
-    String title(final ObjectAdapter object, Localization localization);
+    /**
+     * Provide a title for the target object, with respect to the specified {@link Localization}.
+     */
+    String title(final ObjectAdapter targetAdapter, Localization localization);
+
+    /**
+     * Provide a title for the target object, in the context of the context object, with respect to the specified {@link Localization}.
+     * 
+     * <p>
+     * For example, if the title is of an object within a parented collection, then the
+     * context object would be the parent.  Thus, the title might be shortened so that it does not
+     * needlessly incorporate the title of the parent (context) object.
+     */
+    String title(final ObjectAdapter contextAdapter, final ObjectAdapter targetAdapter, Localization localization);
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacetAbstract.java
index 99aa14d..0b1dc30 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleFacetAbstract.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.metamodel.facets.object.title;
 
+import org.apache.isis.applib.profiles.Localization;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -32,4 +34,13 @@ public abstract class TitleFacetAbstract extends FacetAbstract implements TitleF
     public TitleFacetAbstract(final FacetHolder holder) {
         super(type(), holder, Derivation.NOT_DERIVED);
     }
+
+    /**
+     * Default implementation that simply delegates to {@link #title(ObjectAdapter, Localization)}.
+     */
+    @Override
+    public String title(ObjectAdapter contextAdapter, ObjectAdapter targetAdapter, Localization localization) {
+        return title(targetAdapter, localization);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index f7ee214..553db32 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -63,9 +63,6 @@ import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitut
  * subclasses, which in turn reference their superclass) they need be created
  * first, and then later work out its internals. Hence we create
  * {@link ObjectSpecification}s as we need them, and then introspect them later.
- * 
- * <p>
- * REVIEW: why is there no Help method for classes?
  */
 public interface ObjectSpecification extends Specification, ObjectActionContainer, ObjectAssociationContainer, Hierarchical, Dirtiable, DefaultProvider {
 
@@ -169,10 +166,22 @@ public interface ObjectSpecification extends Specification, ObjectActionContaine
      * <p>
      * Corresponds to the {@link TitleFacet#value()) value} of
      * {@link TitleFacet}; is not necessarily immutable.
+     * 
+     * @deprecated use {@link #getTitle(ObjectAdapter, ObjectAdapter, Localization)}
      */
+    @Deprecated
     String getTitle(ObjectAdapter adapter, Localization localization);
 
     /**
+     * Returns the title to display of target adapter, rendered within the context
+     * of some other adapter (if any).
+     * 
+     * <p>
+     * @see TitleFacet#title(ObjectAdapter, ObjectAdapter, org.apache.isis.applib.profiles.Localization)
+     */
+    String getTitle(ObjectAdapter contextAdapterIfAny, ObjectAdapter targetAdapter, Localization localization);
+
+    /**
      * Returns the name of an icon to use for the specified object.
      * 
      * <p>
@@ -327,4 +336,5 @@ public interface ObjectSpecification extends Specification, ObjectActionContaine
 
 
 
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 0b3fd9e..2a0fce8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -378,9 +378,14 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
     // //////////////////////////////////////////////////////////////////////
 
     @Override
-    public String getTitle(final ObjectAdapter adapter, final Localization localization) {
+    public String getTitle(final ObjectAdapter targetAdapter, final Localization localization) {
+        return getTitle(null, targetAdapter, localization);
+    }
+
+    @Override
+    public String getTitle(ObjectAdapter contextAdapterIfAny, ObjectAdapter targetAdapter, Localization localization) {
         if (titleFacet != null) {
-            final String titleString = titleFacet.title(adapter, localization);
+            final String titleString = titleFacet.title(contextAdapterIfAny, targetAdapter, localization);
             if (titleString != null && !titleString.equals("")) {
                 return titleString;
             }
@@ -388,6 +393,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         return (this.isService() ? "" : "Untitled ") + getSingularName();
     }
 
+
     @Override
     public String getIconName(final ObjectAdapter reference) {
         return iconFacet == null ? null : iconFacet.iconName(reference);
@@ -1003,4 +1009,5 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         return specificationLookup;
     }
 
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetUsingParser.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetUsingParser.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetUsingParser.java
index 6f1b4de..1d95f8e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetUsingParser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/TitleFacetUsingParser.java
@@ -57,6 +57,14 @@ public class TitleFacetUsingParser extends FacetAbstract implements TitleFacet {
         return parser.displayTitleOf(object, localization);
     }
 
+    @Override
+    public String title(ObjectAdapter contextAdapter, ObjectAdapter targetAdapter, Localization localization) {
+        return title(targetAdapter, localization);
+    }
+
+    /**
+     * not API
+     */
     public String title(final ObjectAdapter adapter, final String usingMask) {
         if (adapter == null) {
             return null;
@@ -69,6 +77,7 @@ public class TitleFacetUsingParser extends FacetAbstract implements TitleFacet {
         return parser.displayTitleOf(object, usingMask);
     }
 
+
     // //////////////////////////////////////////////////////
     // Dependencies (from constructor)
     // //////////////////////////////////////////////////////
@@ -80,4 +89,5 @@ public class TitleFacetUsingParser extends FacetAbstract implements TitleFacet {
         return dependencyInjector;
     }
 
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/HiddenFacetInTablesInferredFromTitleAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/HiddenFacetInTablesInferredFromTitleAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/HiddenFacetInTablesInferredFromTitleAnnotation.java
deleted file mode 100644
index cb944c3..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/HiddenFacetInTablesInferredFromTitleAnnotation.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.core.progmodel.facets.object.title.annotation;
-
-import org.apache.isis.applib.annotation.When;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.progmodel.facets.members.hidden.HiddenFacetImpl;
-
-public class HiddenFacetInTablesInferredFromTitleAnnotation extends HiddenFacetImpl {
-
-    public HiddenFacetInTablesInferredFromTitleAnnotation(FacetHolder holder) {
-        super(When.ALWAYS, Where.ALL_TABLES, holder);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
index 957170b..8362098 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
@@ -32,14 +32,10 @@ import org.apache.isis.core.metamodel.adapter.LocalizationProvider;
 import org.apache.isis.core.metamodel.adapter.LocalizationProviderAware;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
-import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.methodutils.MethodScope;
 import org.apache.isis.core.progmodel.facets.MethodFinderUtils;
 import org.apache.isis.core.progmodel.facets.fallback.FallbackFacetFactory;
@@ -51,7 +47,7 @@ public class TitleAnnotationFacetFactory extends FacetFactoryAbstract implements
     private LocalizationProvider localizationProvider;
 
     public TitleAnnotationFacetFactory() {
-        super(FeatureType.OBJECTS_AND_PROPERTIES);
+        super(FeatureType.OBJECTS_ONLY);
     }
 
     /**
@@ -82,25 +78,6 @@ public class TitleAnnotationFacetFactory extends FacetFactoryAbstract implements
         FacetUtil.addFacet(new TitleFacetViaTitleAnnotation(titleComponents, facetHolder, adapterManager, localizationProvider));
     }
 
-    /**
-     * Any property annotated with <tt>Title</tt> is hidden by default in tables.
-     */
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-        final FacetedMethod facetHolder = processMethodContext.getFacetHolder();
-        if(facetHolder.containsFacet(HiddenFacet.class)) {
-            // don't overwrite any facet already installed
-            return;
-        }
-        // otherwise, install hidden facet if this property annotated with @Title
-        final Title annotation = Annotations.getAnnotation(processMethodContext.getMethod(), Title.class);
-        FacetUtil.addFacet(create(annotation, facetHolder));
-    }
-
-    private Facet create(final Title annotation, final FacetHolder holder) {
-        return annotation != null ? new HiddenFacetInTablesInferredFromTitleAnnotation(holder) : null;
-    }
-
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
index 384fc47..44df5e9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
@@ -23,12 +23,14 @@ import java.lang.reflect.Method;
 import java.util.List;
 
 import com.google.common.base.Function;
+import com.google.common.base.Objects;
 import com.google.common.base.Strings;
 
 import org.apache.log4j.Logger;
 
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.profiles.Localization;
+import org.apache.isis.core.commons.lang.StringUtils;
 import org.apache.isis.core.metamodel.adapter.LocalizationProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
@@ -96,25 +98,52 @@ public class TitleFacetViaTitleAnnotation extends TitleFacetAbstract {
     }
 
     @Override
-    public String title(final ObjectAdapter owningAdapter, final Localization localization) {
+    public String title(final ObjectAdapter targetAdapter, final Localization localization) {
+        return title(null, targetAdapter, localization);
+    }
+
+    private String titleOf(final ObjectAdapter adapter) {
+        if (adapter == null) {
+            return null;
+        }
+        return adapter.titleString(null);
+    }
+
+    public List<TitleComponent> getComponents() {
+        return components;
+    }
+
+    private static String abbreviated(final String str, final int maxLength) {
+        return str.length() < maxLength ? str : str.substring(0, maxLength - 3) + "...";
+    }
+
+    @Override
+    public String title(ObjectAdapter contextAdapter, ObjectAdapter targetAdapter, Localization localization) {
         final StringBuilder stringBuilder = new StringBuilder();
 
         try {
             for (final TitleComponent component : this.components) {
-                String title = null;
-                final Object titlePart = AdapterInvokeUtils.invoke(component.getMethod(), owningAdapter);
-                if (titlePart != null) {
-                    // use either titleFacet...
-                    title = titleOf(titlePart);
-                    if (Strings.isNullOrEmpty(title)) {
-                        // or the toString() otherwise
-                        title = titlePart.toString().trim();
-                    }
-                }
+                final Object titlePart = AdapterInvokeUtils.invoke(component.getMethod(), targetAdapter);
+                if (titlePart == null) {
+                    continue;
+                } 
+                // ignore context, if provided
+                final ObjectAdapter titlePartAdapter = adapterManager.adapterFor(titlePart);
+                if(Objects.equal(contextAdapter, titlePartAdapter)) {
+                    continue;
+                } 
+                String title = titleOf(titlePartAdapter);
                 if (Strings.isNullOrEmpty(title)) {
+                    // ... use the toString() otherwise
+                    // (mostly for benefit of testing...)
+                    title = titlePart.toString().trim();
+                }
+                if(StringUtils.isNullOrEmpty(title)) {
                     continue;
                 }
-                stringBuilder.append(component.getPrepend());
+                if(stringBuilder.length() > 0) {
+                    stringBuilder.append(component.getPrepend());
+                }
                 stringBuilder.append(abbreviated(title, component.abbreviateTo));
                 stringBuilder.append(component.getAppend());
             }
@@ -125,25 +154,4 @@ public class TitleFacetViaTitleAnnotation extends TitleFacetAbstract {
             return "Failed Title";
         }
     }
-
-    private String titleOf(final Object domainObject) {
-        final ObjectAdapter adapter = adapterManager.adapterFor(domainObject);
-        if (adapter == null) {
-            return null;
-        }
-        final ObjectSpecification returnSpec = adapter.getSpecification();
-        if (!returnSpec.containsFacet(TitleFacet.class)) {
-            return null;
-        }
-        return returnSpec.getTitle(adapter, localizationProvider.getLocalization());
-    }
-
-    public List<TitleComponent> getComponents() {
-        return components;
-    }
-
-    private static String abbreviated(final String str, final int maxLength) {
-        return str.length() < maxLength ? str : str.substring(0, maxLength - 3) + "...";
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 753a4ba..859977d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -264,7 +264,12 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
     }
 
     @Override
-    public String getTitle(final ObjectAdapter adapter, final Localization localization) {
+    public String getTitle(final ObjectAdapter targetAdapter, final Localization localization) {
+        return getTitle(null, targetAdapter, localization);
+    }
+
+    @Override
+    public String getTitle(ObjectAdapter contextAdapterIfAny, ObjectAdapter targetAdapter, Localization localization) {
         return title;
     }
 
@@ -483,4 +488,5 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
     }
 
 
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/AbstractFacetFactoryJUnit4TestCase.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/AbstractFacetFactoryJUnit4TestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/AbstractFacetFactoryJUnit4TestCase.java
index 2a0dce7..b63c9d2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/AbstractFacetFactoryJUnit4TestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/AbstractFacetFactoryJUnit4TestCase.java
@@ -45,7 +45,7 @@ import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
 public abstract class AbstractFacetFactoryJUnit4TestCase {
 
     @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_ONLY);
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
 
     @Mock
     protected SpecificationLoaderSpi reflector;

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
index 399a642..c519e50 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/ident/title/annotation/TitleAnnotationFacetFactoryTest.java
@@ -26,55 +26,45 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.jmock.integration.junit4.JMock;
-import org.jmock.integration.junit4.JUnit4Mockery;
+import org.jmock.auto.Mock;
 import org.junit.After;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
 
 import org.apache.isis.applib.annotation.Title;
-import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.adapter.LocalizationDefault;
 import org.apache.isis.core.metamodel.adapter.LocalizationProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
-import org.apache.isis.core.metamodel.facets.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryJUnit4TestCase;
 import org.apache.isis.core.progmodel.facets.object.title.annotation.TitleAnnotationFacetFactory;
 import org.apache.isis.core.progmodel.facets.object.title.annotation.TitleFacetViaTitleAnnotation;
 import org.apache.isis.core.progmodel.facets.object.title.annotation.TitleFacetViaTitleAnnotation.TitleComponent;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.ClassUnderTest;
 
-@RunWith(JMock.class)
-public class TitleAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
-
-    private final Mockery context = new JUnit4Mockery();
-    private ObjectAdapter objectAdapter;
+public class TitleAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
 
+    @ClassUnderTest
     private TitleAnnotationFacetFactory facetFactory;
 
+    @Mock
+    private ObjectAdapter mockObjectAdapter;
+    @Mock
     private SpecificationLoader mockSpecificationLookup;
+    @Mock
     private AdapterManager mockAdapterMap;
+    @Mock
     private LocalizationProvider mockLocalizationProvider;
 
     @Before
-    @Override
     public void setUp() throws Exception {
-        super.setUp();
-
-        mockSpecificationLookup = context.mock(SpecificationLoader.class);
-        mockAdapterMap = context.mock(AdapterManager.class);
-        mockLocalizationProvider = context.mock(LocalizationProvider.class);
-
-        objectAdapter = context.mock(ObjectAdapter.class);
 
-        facetFactory = new TitleAnnotationFacetFactory();
+        facetFactory = context.getClassUnderTest();
         facetFactory.setAdapterManager(mockAdapterMap);
         facetFactory.setSpecificationLookup(mockSpecificationLookup);
         facetFactory.setLocalizationProvider(mockLocalizationProvider);
@@ -109,13 +99,13 @@ public class TitleAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
         facetFactory.process(new ProcessClassContext(Customer.class, methodRemover, facetedMethod));
 
         final Facet facet = facetedMethod.getFacet(TitleFacet.class);
-        assertNotNull(facet);
-        assertTrue(facet instanceof TitleFacetViaTitleAnnotation);
+        Assert.assertNotNull(facet);
+        Assert.assertTrue(facet instanceof TitleFacetViaTitleAnnotation);
         final TitleFacetViaTitleAnnotation titleFacetViaTitleAnnotation = (TitleFacetViaTitleAnnotation) facet;
 
         final List<Method> titleMethods = Arrays.asList(Customer.class.getMethod("someTitle"));
         for (int i = 0; i < titleMethods.size(); i++) {
-            assertEquals(titleMethods.get(i), titleFacetViaTitleAnnotation.getComponents().get(i).getMethod());
+            Assert.assertEquals(titleMethods.get(i), titleFacetViaTitleAnnotation.getComponents().get(i).getMethod());
         }
     }
 
@@ -144,26 +134,26 @@ public class TitleAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
         facetFactory.process(new ProcessClassContext(Customer2.class, methodRemover, facetedMethod));
 
         final Facet facet = facetedMethod.getFacet(TitleFacet.class);
-        assertNotNull(facet);
-        assertTrue(facet instanceof TitleFacetViaTitleAnnotation);
+        Assert.assertNotNull(facet);
+        Assert.assertTrue(facet instanceof TitleFacetViaTitleAnnotation);
         final TitleFacetViaTitleAnnotation titleFacetViaTitleAnnotation = (TitleFacetViaTitleAnnotation) facet;
 
         final List<Method> titleMethods = Arrays.asList(Customer2.class.getMethod("titleElement1"), Customer2.class.getMethod("titleElement3"), Customer2.class.getMethod("titleElement2"));
 
         final List<TitleComponent> components = titleFacetViaTitleAnnotation.getComponents();
         for (int i = 0; i < titleMethods.size(); i++) {
-            assertEquals(titleMethods.get(i), components.get(i).getMethod());
+            Assert.assertEquals(titleMethods.get(i), components.get(i).getMethod());
         }
 
         final Customer2 customer = new Customer2();
 
         context.checking(new Expectations() {
             {
-                allowing(objectAdapter).getObject();
+                allowing(mockObjectAdapter).getObject();
                 will(returnValue(customer));
             }
         });
-        final String title = titleFacetViaTitleAnnotation.title(objectAdapter, mockLocalizationProvider.getLocalization());
+        final String title = titleFacetViaTitleAnnotation.title(mockObjectAdapter, mockLocalizationProvider.getLocalization());
         assertThat(title, is("titleElement1. titleElement3,titleElement2"));
     }
 
@@ -175,7 +165,7 @@ public class TitleAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
 
         facetFactory.process(new ProcessClassContext(Customer3.class, methodRemover, facetedMethod));
 
-        assertNull(facetedMethod.getFacet(TitleFacet.class));
+        Assert.assertNull(facetedMethod.getFacet(TitleFacet.class));
     }
 
     public static class Customer4 {
@@ -234,11 +224,11 @@ public class TitleAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
 
         context.checking(new Expectations() {
             {
-                allowing(objectAdapter).getObject();
+                allowing(mockObjectAdapter).getObject();
                 will(returnValue(customer));
             }
         });
-        final String title = titleFacetViaTitleAnnotation.title(objectAdapter, mockLocalizationProvider.getLocalization());
+        final String title = titleFacetViaTitleAnnotation.title(mockObjectAdapter, mockLocalizationProvider.getLocalization());
         assertThat(title, is("titleElement1 titleElement3 titleElement5 3 this needs to be trimmed"));
     }
 
@@ -255,44 +245,5 @@ public class TitleAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
         }
     }
 
-    @Test
-    public void hiddenFacetAnnotationInferredFromTitleAnnotation() throws Exception {
-
-        final Method propertyMethod = findMethod(Customer5.class, "titleProperty");
-        
-        facetFactory.process(new ProcessMethodContext(Customer5.class, propertyMethod, methodRemover, facetedMethod));
-
-        final Customer5 customer = new Customer5();
-
-        context.checking(new Expectations() {
-            {
-                allowing(objectAdapter).getObject();
-                will(returnValue(customer));
-            }
-        });
-        final HiddenFacet facet = facetedMethod.getFacet(HiddenFacet.class);
-        assertNotNull(facet);
-        assertThat(facet.where(), is(Where.ALL_TABLES));
-    }
-
-
-    @Test
-    public void hiddenFacetAnnotationNotInferredIfTitleAnnotationNotPresent() throws Exception {
-
-        final Method propertyMethod = findMethod(Customer5.class, "otherProperty");
-        
-        facetFactory.process(new ProcessMethodContext(Customer5.class, propertyMethod, methodRemover, facetedMethod));
-
-        final Customer5 customer = new Customer5();
-
-        context.checking(new Expectations() {
-            {
-                allowing(objectAdapter).getObject();
-                will(returnValue(customer));
-            }
-        });
-        final HiddenFacet facet = facetedMethod.getFacet(HiddenFacet.class);
-        assertNull(facet);
-    }
     
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index eeedea7..04503c1 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -40,6 +40,7 @@ import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
 import org.apache.isis.core.metamodel.spec.ElementSpecificationProvider;
 import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.InstanceAbstract;
@@ -371,15 +372,20 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
      */
     @Override
     public String titleString() {
+        return titleString(null);
+    }
+
+    @Override
+    public String titleString(ObjectAdapter contextAdapterIfAny) {
         if (getSpecification().isParentedOrFreeCollection()) {
             final CollectionFacet facet = getSpecification().getFacet(CollectionFacet.class);
             return collectionTitleString(facet);
         } else {
-            return objectTitleString();
+            return objectTitleString(contextAdapterIfAny);
         }
     }
 
-    private String objectTitleString() {
+    private String objectTitleString(ObjectAdapter contextAdapterIfAny) {
         if (isNew()) {
             return "";
         } 
@@ -387,19 +393,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
             return (String) getObject();
         }
         final ObjectSpecification specification = getSpecification();
-        String title = specification.getTitle(this, localization);
-        
-        // looking at the implementation of the preceding code, this can never happen;
-        // and removing it means we can get rid of the dependency on PersistenceSession.
-        
-//        if (title == null) {
-//            if (resolveState.isGhost()) {
-//                if (LOG.isInfoEnabled()) {
-//                    LOG.info("attempting to use unresolved object; resolving it immediately: oid=" + this.getOid());
-//                }
-//                getPersistenceSession().resolveImmediately(this);
-//            }
-//        }
+        String title = specification.getTitle(contextAdapterIfAny, this, localization);
         
         if (title == null) {
             title = getDefaultTitle();
@@ -552,4 +546,6 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
         return authenticationSession;
     }
 
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fef459a9/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/java/app/QuickStartApplication.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/java/app/QuickStartApplication.java b/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/java/app/QuickStartApplication.java
index a5ea693..bf3ab6d 100644
--- a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/java/app/QuickStartApplication.java
+++ b/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/java/app/QuickStartApplication.java
@@ -90,25 +90,6 @@ public class QuickStartApplication extends IsisWicketApplication {
         return Modules.override(isisDefaults).with(quickstartOverrides);
     }
 
-    public static class Archive {
-        private final String name;
-        private final String url;
-        
-        public Archive(String name, String url) {
-            this.name = name;
-            this.url = url;
-        }
-        
-        public String getName() {
-            return name;
-        }
-        public String getUrl() {
-            return url;
-        }
-        
-    }
-
-    
     private static String readLines(final String resourceName) {
         try {
             List<String> readLines = Resources.readLines(Resources.getResource(QuickStartApplication.class, resourceName), Charset.defaultCharset());