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 2012/09/11 10:01:25 UTC

svn commit: r1383280 [1/2] - in /incubator/isis/trunk/framework: core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/ runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/...

Author: danhaywood
Date: Tue Sep 11 08:01:24 2012
New Revision: 1383280

URL: http://svn.apache.org/viewvc?rev=1383280&view=rev
Log:
ISIS-232, ISIS-266, ISIS-267

* new EntityIconAndTitle panel, to factor out commonality (ISIS-232)
* moved responsibility to looking up entity icon from cache into EntityModel (ISIS-232)
* indicate mandatory fields (ISIS-232)
* made show/hide button more discrete (ISIS-232)
* BoundedFacetAbstract fix (ISIS-266)
* Generalized the handling of Memento updating resolved object adapters (ISIS-267)

Added:
    incubator/isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ImageResourceCache.java
      - copied, changed from r1383275, incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/imagecache/ImageCache.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.css
      - copied, changed from r1383275, incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.css
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.html
      - copied, changed from r1383275, incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.html
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanelFactory.java
Removed:
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/imagecache/ImageCache.java
Modified:
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetAbstract.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/FrameworkSynchronizer.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlObjectStore.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistorUtil.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentType.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/imagecache/ImageCacheAccessor.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.css
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.html
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForObjectAdapterMementos.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForValueMementos.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.css
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.html
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/formcomponent/FormComponentPanelAbstract.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/DropDownChoiceComponentFactory.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Links.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketUnsecuredApplication.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/imagecache/ImageCacheClassPath.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryListDefault.java

Modified: incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetAbstract.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetAbstract.java (original)
+++ incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bounded/BoundedFacetAbstract.java Tue Sep 11 08:01:24 2012
@@ -29,6 +29,7 @@ import org.apache.isis.core.metamodel.fa
 import org.apache.isis.core.metamodel.interactions.ObjectValidityContext;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.ValidityContext;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 public abstract class BoundedFacetAbstract extends MarkerFacetAbstract implements BoundedFacet {
 
@@ -43,7 +44,7 @@ public abstract class BoundedFacetAbstra
     /**
      * Hook method for subclasses to override.
      */
-    public abstract String disabledReason(ObjectAdapter no);
+    public abstract String disabledReason(ObjectAdapter objectAdapter);
 
     @Override
     public String invalidates(final ValidityContext<? extends ValidityEvent> context) {
@@ -51,7 +52,18 @@ public abstract class BoundedFacetAbstra
             return null;
         }
         final ObjectAdapter target = context.getTarget();
-        return disabledReason(target);
+        if(target == null) {
+            return null;
+        }
+        
+        // ensure that the target is of the correct type
+        if(!(getFacetHolder() instanceof ObjectSpecification)) {
+            // should never be the case
+            return null;
+        }
+        
+        final ObjectSpecification objectSpec = (ObjectSpecification) getFacetHolder();
+        return objectSpec == target.getSpecification()? null: "Invalid type";
     }
 
     @Override

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/FrameworkSynchronizer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/FrameworkSynchronizer.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/FrameworkSynchronizer.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/FrameworkSynchronizer.java Tue Sep 11 08:01:24 2012
@@ -89,7 +89,7 @@ public class FrameworkSynchronizer {
                 }
                 if(!adapter.isResolved()) {
                     PersistorUtil.startResolving(adapter);
-                    PersistorUtil.endResolving(adapter);
+                    PersistorUtil.toEndState(adapter);
                 }
                 adapter.setVersion(datastoreVersion);
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoCollectionMapper.java Tue Sep 11 08:01:24 2012
@@ -117,7 +117,7 @@ public class AutoCollectionMapper extend
             collectionFacet.init(collectionAdapter, list.toArray(new ObjectAdapter[list.size()]));
             rs.close();
         } finally {
-            PersistorUtil.endResolving(collectionAdapter);
+            PersistorUtil.toEndState(collectionAdapter);
         }
     }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/AutoMapper.java Tue Sep 11 08:01:24 2012
@@ -324,7 +324,7 @@ public class AutoMapper extends Abstract
              */
             adapter.setVersion(versionMapping.getLock(rs));
         } finally {
-            PersistorUtil.endResolving(adapter);
+            PersistorUtil.toEndState(adapter);
         }
     }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ForeignKeyCollectionMapper.java Tue Sep 11 08:01:24 2012
@@ -208,7 +208,7 @@ public class ForeignKeyCollectionMapper 
             collectionFacet.init(collectionAdapter, list.toArray(new ObjectAdapter[list.size()]));
             
         } finally {
-            PersistorUtil.endResolving(collectionAdapter);
+            PersistorUtil.toEndState(collectionAdapter);
         }
 
         // TODO: Need to finalise this behaviour. At the moment, all
@@ -265,7 +265,7 @@ public class ForeignKeyCollectionMapper 
             }
             adapter.setVersion(versionMapping.getLock(rs));
         } finally {
-            PersistorUtil.endResolving(adapter);
+            PersistorUtil.toEndState(adapter);
         }
     }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/sql/sql-impl/src/main/java/org/apache/isis/runtimes/dflt/objectstores/sql/auto/ReversedAutoAssociationMapper.java Tue Sep 11 08:01:24 2012
@@ -126,7 +126,7 @@ public class ReversedAutoAssociationMapp
             collectionFacet.init(collectionAdapter, list.toArray(new ObjectAdapter[list.size()]));
             rs.close();
         } finally {
-            PersistorUtil.endResolving(collectionAdapter);
+            PersistorUtil.toEndState(collectionAdapter);
         }
 
     }
@@ -149,7 +149,7 @@ public class ReversedAutoAssociationMapp
             object.setVersion(versionMapping.getLock(rs));
             
         } finally {
-            PersistorUtil.endResolving(object);
+            PersistorUtil.toEndState(object);
         }
     }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlObjectStore.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlObjectStore.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlObjectStore.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/xml/src/main/java/org/apache/isis/runtimes/dflt/objectstores/xml/XmlObjectStore.java Tue Sep 11 08:01:24 2012
@@ -178,7 +178,7 @@ public class XmlObjectStore implements O
             }
             adapter.setVersion(data.getVersion());
         } finally {
-            PersistorUtil.endResolving(adapter);
+            PersistorUtil.toEndState(adapter);
         }
     }
 
@@ -254,7 +254,7 @@ public class XmlObjectStore implements O
             final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(collectionAdapter);
             facet.init(collectionAdapter, elements);
         } finally {
-            PersistorUtil.endResolving(collectionAdapter);
+            PersistorUtil.toEndState(collectionAdapter);
         }
     }
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java Tue Sep 11 08:01:24 2012
@@ -34,6 +34,7 @@ import org.apache.isis.core.commons.ensu
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.exceptions.UnknownTypeException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.ResolveState;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
@@ -292,12 +293,11 @@ public class Memento implements Serializ
         
         if (!dataIsTransient) {
             try {
-                PersistorUtil.startResolving(objectAdapter);
+                PersistorUtil.startResolvingOrUpdating(objectAdapter);
                 updateFields(objectAdapter, data);
             } finally {
-                PersistorUtil.endResolving(objectAdapter);
+                PersistorUtil.toEndState(objectAdapter);
             }
-            
         } else if (objectAdapter.isTransient() && dataIsTransient) {
             updateFields(objectAdapter, data);
             

Modified: incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistorUtil.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistorUtil.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistorUtil.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/PersistorUtil.java Tue Sep 11 08:01:24 2012
@@ -21,7 +21,6 @@ package org.apache.isis.runtimes.dflt.ru
 
 import org.apache.log4j.Logger;
 
-import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ResolveState;
 
@@ -36,12 +35,24 @@ public class PersistorUtil {
     // update resolve state
     // //////////////////////////////////////////////////////////////////
 
-    public static void startResolving(final ObjectAdapter adapter) {
-        final ResolveState state = ResolveState.RESOLVING;
-        if (LOG.isTraceEnabled()) {
-            LOG.trace("start " + adapter + " as " + state.name());
+    public static void startResolvingOrUpdating(ObjectAdapter objectAdapter) {
+        if(objectAdapter.canTransitionToResolving()) {
+            startResolving(objectAdapter);
+        } else {
+            startUpdating(objectAdapter);
         }
-        adapter.changeState(state);
+    }
+
+    public static void startResolving(final ObjectAdapter adapter) {
+        changeTo(adapter, ResolveState.RESOLVING);
+    }
+
+    public static void startUpdating(final ObjectAdapter adapter) {
+        changeTo(adapter, ResolveState.UPDATING);
+    }
+
+    private static void changeTo(final ObjectAdapter adapter, final ResolveState state) {
+        changeTo("start ", adapter, state);
     }
 
     /**
@@ -49,13 +60,16 @@ public class PersistorUtil {
      * as specified by the second parameter. Attempting to specify any other
      * state throws a run time exception.
      */
-    public static void endResolving(final ObjectAdapter adapter) {
-        final ResolveState endState = adapter.getResolveState().getEndState();
-        Assert.assertNotNull("end state required", endState);
+    public static void toEndState(final ObjectAdapter adapter) {
+        changeTo("end ", adapter, adapter.getResolveState().getEndState());
+    }
+
+    private static void changeTo(final String direction, final ObjectAdapter adapter, final ResolveState state) {
         if (LOG.isTraceEnabled()) {
-            LOG.trace("end " + adapter + " as " + endState.name());
+            LOG.trace(direction + adapter + " as " + state.name());
         }
-        adapter.changeState(endState);
+        adapter.changeState(state);
     }
 
+
 }

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java Tue Sep 11 08:01:24 2012
@@ -25,6 +25,7 @@ import java.util.Map;
 import com.google.common.collect.Maps;
 
 import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.PackageResource;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
@@ -32,6 +33,7 @@ import org.apache.isis.core.metamodel.ad
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
@@ -348,7 +350,38 @@ public class EntityModel extends ModelAb
         toViewMode();
     }
 
-    
+
+    // //////////////////////////////////////////////////////////
+    // lookupImageResource
+    // //////////////////////////////////////////////////////////
+
+    public PackageResource lookupImageResource(final ImageResourceCache imageResourceCache) {
+        PackageResource imageResource = null;
+        try {
+            final ObjectAdapter objectAdapter = getObject();
+            ObjectSpecification typeOfSpec = objectAdapter.getSpecification();
+            final IconFacet iconFacet = typeOfSpec.getFacet(IconFacet.class);
+            if (iconFacet != null) {
+                final String iconName = iconFacet.iconName(objectAdapter);
+                imageResource = imageResourceCache.findImageResource(iconName);
+            }
+            if(imageResource != null) {
+                return imageResource;
+            }
+            typeOfSpec = getTypeOfSpecification();
+            imageResource = imageResourceCache.findImage(typeOfSpec);
+            if(imageResource != null) {
+                return imageResource;
+            }
+            return null;
+        } finally {
+            if(imageResource != null) {
+                imageResource.setCacheable(true);
+            }
+        }
+    }
+
+
     // //////////////////////////////////////////////////////////
     // Dependencies (from context)
     // //////////////////////////////////////////////////////////

Copied: incubator/isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ImageResourceCache.java (from r1383275, incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/imagecache/ImageCache.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ImageResourceCache.java?p2=incubator/isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ImageResourceCache.java&p1=incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/imagecache/ImageCache.java&r1=1383275&r2=1383280&rev=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/imagecache/ImageCache.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ImageResourceCache.java Tue Sep 11 08:01:24 2012
@@ -17,15 +17,15 @@
  *  under the License.
  */
 
-package org.apache.isis.viewer.wicket.ui.app.imagecache;
+package org.apache.isis.viewer.wicket.model.models;
 
 import org.apache.wicket.markup.html.PackageResource;
 
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
-public interface ImageCache {
+public interface ImageResourceCache {
 
     public PackageResource findImage(ObjectSpecification objectSpec);
 
-    public PackageResource findImage(String imageName);
+    public PackageResource findImageResource(String imageName);
 }

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentType.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentType.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentType.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentType.java Tue Sep 11 08:01:24 2012
@@ -57,6 +57,10 @@ public enum ComponentType {
      */
     ENTITY,
     /**
+     * Icon and title for a single entity.
+     */
+    ENTITY_ICON_AND_TITLE,
+    /**
      * Title, icon and action list for a single entity.
      */
     ENTITY_SUMMARY,

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/imagecache/ImageCacheAccessor.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/imagecache/ImageCacheAccessor.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/imagecache/ImageCacheAccessor.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/imagecache/ImageCacheAccessor.java Tue Sep 11 08:01:24 2012
@@ -19,8 +19,10 @@
 
 package org.apache.isis.viewer.wicket.ui.app.imagecache;
 
+import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
+
 public interface ImageCacheAccessor {
 
-    ImageCache getImageCache();
+    ImageResourceCache getImageCache();
 
 }

Copied: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.css (from r1383275, incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.css)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.css?p2=incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.css&p1=incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.css&r1=1383275&r2=1383280&rev=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.css (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.css Tue Sep 11 08:01:24 2012
@@ -1,48 +1,48 @@
-/*
- *  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.
- */
-.entitySummary {
-}
-
-div.entitySummary {
-	/*padding:1em;*/
-}
-
-div.entitySummary .iconAndTitle {
-	float: left;
-    padding:1em;
-}
-
-div.entitySummary .actions {
-	float: left;
-    padding:1em;
-	padding-top: 1.54em; 
-	padding-left: 50px;
-}
-
-.entitySummary .entityImage {
-}
-
-.entitySummary .entityTitle {
-	font-size: x-large;
-}
-
-div.entitySummary .clear {
-    clear: both;
-}
-
+/*
+ *  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.
+ */
+.entitySummary {
+}
+
+div.entitySummary {
+	/*padding:1em;*/
+}
+
+div.entitySummary .iconAndTitle {
+	float: left;
+    padding:1em;
+}
+
+div.entitySummary .actions {
+	float: left;
+    padding:1em;
+	padding-top: 1.54em; 
+	padding-left: 50px;
+}
+
+.entitySummary .entityImage {
+}
+
+.entitySummary .entityTitle {
+	font-size: x-large;
+}
+
+div.entitySummary .clear {
+    clear: both;
+}
+

Copied: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.html (from r1383275, incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.html)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.html?p2=incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.html&p1=incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.html&r1=1383275&r2=1383280&rev=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.html (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.html Tue Sep 11 08:01:24 2012
@@ -1,44 +1,32 @@
-<?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>
-	<body>
-		<wicket:panel>
-			<div class="entitySummary">
-			     <div class="iconAndTitle panel">
-    				<img wicket:id="entityImage" class="entityImage"/>
-    				<label wicket:id=entityTitle" class="entityTitle">[title]</label>
-                 </div>
-                <div class="actions panel">				
-    				<table>
-        	   			<tbody>
-        	      			<tr>
-        						<td>
-        			      			<span class="entityActions" wicket:id="entityActions"/>
-        		      			</td>
-        	     			</tr>
-             			</tbody>
-      			   </table>
-  			   </div>
-  			   <div class="clear"/>
-			</div>
-		</wicket:panel>
-	</body>
-</html>
-
+<?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>
+	<body>
+		<wicket:panel>
+		     <span wicket:id="entityLinkWrapper">
+				<a href="#" wicket:id="entityLink">
+					<img wicket:id="entityImage" class="entityImage"/>
+					<span wicket:id="entityTitle" class="entityTitle">[title]</span>
+				</a>
+			</span>
+		</wicket:panel>
+	</body>
+</html>
+

Added: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.java?rev=1383280&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.java (added)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanel.java Tue Sep 11 08:01:24 2012
@@ -0,0 +1,146 @@
+/*
+ *  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.blocks.icontitle;
+
+import com.google.inject.Inject;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.PackageResource;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.image.Image;
+import org.apache.wicket.markup.html.link.AbstractLink;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.viewer.wicket.model.models.EntityModel;
+import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
+import org.apache.isis.viewer.wicket.ui.components.entity.blocks.action.EntityActionLinkFactory;
+import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
+import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
+import org.apache.isis.viewer.wicket.ui.pages.PageType;
+import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
+import org.apache.isis.viewer.wicket.ui.util.Links;
+
+/**
+ * {@link PanelAbstract Panel} representing the icon and title of an entity,
+ * as per the provided {@link EntityModel}.
+ */
+public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final String ID_ENTITY_LINK_WRAPPER = "entityLinkWrapper";
+    private static final String ID_ENTITY_LINK = "entityLink";
+    private static final String ID_ENTITY_TITLE = "entityTitle";
+    private static final String ID_ENTITY_ICON = "entityImage";
+
+
+    private ImageResourceCache imageCache;
+
+    private Label label;
+    private Image image;
+
+    public EntityIconAndTitlePanel(final String id, final EntityModel entityModel) {
+        super(id, entityModel);
+    }
+
+    /**
+     * For the {@link EntityActionLinkFactory}.
+     */
+    public EntityModel getEntityModel() {
+        return getModel();
+    }
+
+    @Override
+    protected void onBeforeRender() {
+        buildGui();
+        super.onBeforeRender();
+    }
+
+    private void buildGui() {
+        addOrReplaceLinkWrapper();
+    }
+
+    private void addOrReplaceLinkWrapper() {
+        final WebMarkupContainer entityLinkWrapper = addOrReplaceLinkWrapper(getModel());
+        addOrReplace(entityLinkWrapper);
+    }
+
+    private WebMarkupContainer addOrReplaceLinkWrapper(final EntityModel entityModel) {
+        final ObjectAdapter adapter = entityModel.getObject();
+
+        final PageParameters pageParameters = EntityModel.createPageParameters(adapter);
+        final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ENTITY);
+        final AbstractLink link = newLink(ID_ENTITY_LINK, pageClass, pageParameters);
+        
+        label = new Label(ID_ENTITY_TITLE, determineTitle());
+        link.add(label);
+        final PackageResource imageResource = entityModel.lookupImageResource(getImageCache());
+        
+        if (imageResource != null) {
+            image = new Image(ID_ENTITY_ICON, imageResource);
+            link.addOrReplace(image);
+        } else {
+            permanentlyHide(ID_ENTITY_ICON);
+        }
+        
+        
+        final WebMarkupContainer entityLinkWrapper = new WebMarkupContainer(ID_ENTITY_LINK_WRAPPER);
+        entityLinkWrapper.addOrReplace(link);
+        return entityLinkWrapper;
+    }
+
+    private String determineTitle() {
+        final ObjectAdapter adapter = getModel().getObject();
+         // TODO: i18n
+        return adapter != null ? adapter.titleString() : "(no object)";
+    }
+
+    private AbstractLink newLink(final String linkId, final Class<? extends Page> pageClass, final PageParameters pageParameters) {
+        return Links.newBookmarkablePageLink(linkId, pageParameters, pageClass);
+    }
+
+    
+    // ///////////////////////////////////////////////////////////////////
+    // Convenience
+    // ///////////////////////////////////////////////////////////////////
+
+    protected PageClassRegistry getPageClassRegistry() {
+        final PageClassRegistryAccessor pcra = (PageClassRegistryAccessor) getApplication();
+        return pcra.getPageClassRegistry();
+    }
+
+
+    // ///////////////////////////////////////////////
+    // Dependency Injection
+    // ///////////////////////////////////////////////
+
+    protected ImageResourceCache getImageCache() {
+        return imageCache;
+    }
+
+    @Inject
+    public void setImageCache(final ImageResourceCache imageCache) {
+        this.imageCache = imageCache;
+    }
+
+}

Added: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanelFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanelFactory.java?rev=1383280&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanelFactory.java (added)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/icontitle/EntityIconAndTitlePanelFactory.java Tue Sep 11 08:01:24 2012
@@ -0,0 +1,46 @@
+/*
+ *  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.blocks.icontitle;
+
+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;
+
+/**
+ * {@link ComponentFactory} for {@link EntityIconAndTitlePanel}.
+ */
+public class EntityIconAndTitlePanelFactory extends EntityComponentFactoryAbstract {
+
+    private static final long serialVersionUID = 1L;
+
+    public EntityIconAndTitlePanelFactory() {
+        super(ComponentType.ENTITY_ICON_AND_TITLE);
+    }
+
+    @Override
+    public Component createComponent(final String id, final IModel<?> model) {
+        final EntityModel entityModel = (EntityModel) model;
+        return new EntityIconAndTitlePanel(id, entityModel);
+    }
+}

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.css
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.css?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.css (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.css Tue Sep 11 08:01:24 2012
@@ -31,11 +31,14 @@ div.entitySummary .iconAndTitle {
 div.entitySummary .actions {
 	float: left;
     padding:1em;
-	padding-top: 1.54em; 
+    
+	padding-top: 1.8em; 
 	padding-left: 50px;
 }
 
 .entitySummary .entityImage {
+	width: 32px;
+	height: 32px;
 }
 
 .entitySummary .entityTitle {

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.html
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.html?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.html (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.html Tue Sep 11 08:01:24 2012
@@ -22,8 +22,7 @@
 		<wicket:panel>
 			<div class="entitySummary">
 			     <div class="iconAndTitle panel">
-    				<img wicket:id="entityImage" class="entityImage"/>
-    				<label wicket:id=entityTitle" class="entityTitle">[title]</label>
+			         <span wicket:id="entityIconAndTitle">[icon and title]</span>
                  </div>
                 <div class="actions panel">				
     				<table>

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/blocks/summary/EntitySummaryPanel.java Tue Sep 11 08:01:24 2012
@@ -23,26 +23,35 @@ import java.util.List;
 
 import com.google.inject.Inject;
 
+import org.apache.wicket.Component;
+import org.apache.wicket.Page;
+import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.PackageResource;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.image.Image;
+import org.apache.wicket.markup.html.link.AbstractLink;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
 import org.apache.isis.core.metamodel.spec.ActionType;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionContainer.Contributed;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
-import org.apache.isis.viewer.wicket.ui.app.imagecache.ImageCache;
+import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
+import org.apache.isis.viewer.wicket.ui.ComponentFactory;
+import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actions.ActionInvokeHandler;
 import org.apache.isis.viewer.wicket.ui.components.entity.blocks.action.EntityActionLinkFactory;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuBuilder;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel;
+import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
+import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
+import org.apache.isis.viewer.wicket.ui.pages.PageType;
 import org.apache.isis.viewer.wicket.ui.pages.action.ActionPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.isis.viewer.wicket.ui.util.Links;
 
 /**
  * {@link PanelAbstract Panel} representing the summary details (title, icon and
@@ -52,13 +61,11 @@ public class EntitySummaryPanel extends 
 
     private static final long serialVersionUID = 1L;
 
-    private static final String ID_ENTITY_TITLE = "entityTitle";
-    private static final String ID_ENTITY_IMAGE = "entityImage";
     private static final String ID_ENTITY_ACTIONS = "entityActions";
 
     private final EntityActionLinkFactory linkFactory;
 
-    private ImageCache imageCache;
+    private ImageResourceCache imageCache;
 
     public EntitySummaryPanel(final String id, final EntityModel entityModel) {
         super(id, entityModel);
@@ -79,47 +86,17 @@ public class EntitySummaryPanel extends 
     }
 
     private void buildGui() {
-        addOrReplaceTitleAndImage();
+        addOrReplaceIconAndTitle();
         buildEntityActionsGui();
     }
 
-    private void addOrReplaceTitleAndImage() {
-        final String titleString = determineTitle();
-        addOrReplace(new Label(ID_ENTITY_TITLE, titleString));
-        addOrReplaceImage();
-    }
-
-    private String determineTitle() {
-        final ObjectAdapter adapter = getModel().getObject();
-        final String titleString = adapter != null ? adapter.titleString() : "(no object)"; // TODO:
-                                                                                            // i18n
-        return titleString;
-    }
-
-    private void addOrReplaceImage() {
-        final ObjectAdapter adapter = getModel().getObject();
-        ObjectSpecification typeOfSpec;
-        PackageResource imageResource = null;
-        if (adapter != null) {
-            typeOfSpec = adapter.getSpecification();
-            final IconFacet iconFacet = typeOfSpec.getFacet(IconFacet.class);
-            if (iconFacet != null) {
-                final String iconName = iconFacet.iconName(adapter);
-                imageResource = getImageCache().findImage(iconName);
-            }
-        }
-        if (imageResource == null) {
-            typeOfSpec = getModel().getTypeOfSpecification();
-            imageResource = getImageCache().findImage(typeOfSpec);
-        }
-
-        if (imageResource != null) {
-            addOrReplace(new Image(ID_ENTITY_IMAGE, imageResource));
-        } else {
-            permanentlyHide(ID_ENTITY_IMAGE);
-        }
+    private void addOrReplaceIconAndTitle() {
+        final ComponentFactory componentFactory = getComponentFactoryRegistry().findComponentFactory(ComponentType.ENTITY_ICON_AND_TITLE, getEntityModel());
+        final Component component = componentFactory.createComponent(getEntityModel());
+        addOrReplace(component);
     }
 
+
     private void buildEntityActionsGui() {
         final EntityModel model = getModel();
         final ObjectAdapter adapter = model.getObject();
@@ -142,16 +119,27 @@ public class EntitySummaryPanel extends 
         setResponsePage(new ActionPage(actionModel));
     }
 
+    
+    // ///////////////////////////////////////////////////////////////////
+    // Convenience
+    // ///////////////////////////////////////////////////////////////////
+
+    protected PageClassRegistry getPageClassRegistry() {
+        final PageClassRegistryAccessor pcra = (PageClassRegistryAccessor) getApplication();
+        return pcra.getPageClassRegistry();
+    }
+
+
     // ///////////////////////////////////////////////
     // Dependency Injection
     // ///////////////////////////////////////////////
 
-    protected ImageCache getImageCache() {
+    protected ImageResourceCache getImageCache() {
         return imageCache;
     }
 
     @Inject
-    public void setImageCache(final ImageCache imageCache) {
+    public void setImageCache(final ImageResourceCache imageCache) {
         this.imageCache = imageCache;
     }
 

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java Tue Sep 11 08:01:24 2012
@@ -21,6 +21,7 @@ package org.apache.isis.viewer.wicket.ui
 
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
+import org.apache.wicket.behavior.IBehavior;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.FormComponentLabel;
@@ -35,6 +36,7 @@ import org.apache.isis.core.metamodel.fa
 import org.apache.isis.core.metamodel.facets.typicallen.TypicalLengthFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
 /**
  * Adapter for {@link ScalarPanelAbstract scalar panel}s that are implemented
@@ -70,6 +72,9 @@ public abstract class ScalarPanelTextFie
 
         final FormComponentLabel labelIfRegular = createFormComponentLabel();
         addOrReplace(labelIfRegular);
+        if(getModel().isRequired()) {
+            labelIfRegular.add(new CssClassAppender("mandatory"));
+        }
 
         addOrReplace(new ComponentFeedbackPanel(ID_FEEDBACK, textField));
         return labelIfRegular;

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java Tue Sep 11 08:01:24 2012
@@ -58,21 +58,21 @@ public class ReferencePanel extends Scal
     protected void onBeforeRenderWhenEnabled() {
         super.onBeforeRenderWhenEnabled();
         entityLink.setEnabled(true);
-        entityLink.syncFindUsingVisibility();
+        entityLink.syncFindUsingAndEntityDetailsLinkVisibility();
     }
 
     @Override
     protected void onBeforeRenderWhenViewMode() {
         super.onBeforeRenderWhenViewMode();
         entityLink.setEnabled(false);
-        entityLink.syncFindUsingVisibility();
+        entityLink.syncFindUsingAndEntityDetailsLinkVisibility();
     }
 
     @Override
     protected void onBeforeRenderWhenDisabled(final String disableReason) {
         super.onBeforeRenderWhenDisabled(disableReason);
         entityLink.setEnabled(false);
-        entityLink.syncFindUsingVisibility();
+        entityLink.syncFindUsingAndEntityDetailsLinkVisibility();
     }
 
     @Override

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForObjectAdapterMementos.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForObjectAdapterMementos.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForObjectAdapterMementos.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForObjectAdapterMementos.java Tue Sep 11 08:01:24 2012
@@ -63,7 +63,7 @@ public class DropDownChoicesForObjectAda
 
     @Override
     protected boolean wantOnSelectionChangedNotifications() {
-        return true;
+        return false;//true;
     }
     
 

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForValueMementos.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForValueMementos.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForValueMementos.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/dropdownchoices/DropDownChoicesForValueMementos.java Tue Sep 11 08:01:24 2012
@@ -58,6 +58,6 @@ public class DropDownChoicesForValueMeme
 
     @Override
     protected boolean wantOnSelectionChangedNotifications() {
-        return false;// true;
+        return false;
     }
 }
\ No newline at end of file

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.css
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.css?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.css (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.css Tue Sep 11 08:01:24 2012
@@ -16,9 +16,14 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+.entityLink .entityImage {
+	width: 16px;
+	height: 16px;
+}
+
 .entityLink table.findUsing {
-	display: inline;
-	float: right;
+	display: block;
+	font-size: smaller;
 }
 
 a.entityDetailsLink {
@@ -27,21 +32,27 @@ a.entityDetailsLink {
 	border: 1px  #00477F solid;
 	white-space:nowrap;
 	margin:0em;
-	padding: 1px;
-	padding-right: 1.6em;
-	padding-left: 0.4em;
+	margin-left: 10px;
+	padding: 0px;
+	padding-right: 3px;
+	padding-left: 3px;
 	font-weight: normal;
 	cursor:default;
 	
 	color: #00477F;
 	background-color: #EEEEEE;
 	text-decoration:none;
-/*	-moz-border-radius: 6px;
+	font-size: smaller;
+	font-family: monospace;
+	/*
+	-moz-border-radius: 6px;
 	-webkit-border-radius: 6px;
-	border-radius: 6px; */
+	border-radius: 6px;
+	*/ 
 }
 
 a.entityDetailsLink:hover {
 	color: #D7E7F5;
 	background-color: #407098;
 }
+

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.html
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.html?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.html (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.html Tue Sep 11 08:01:24 2012
@@ -33,13 +33,9 @@
 				<input type="text" wicket:id="entityOid"/>
 				
 				<select wicket:id="choices"/>
-				<span wicket:id="entityLinkWrapper">
-					<a href="#" wicket:id="entityLink">
-						<img wicket:id="entityImage" class="entityImage" width="16" height="16"/>
-						<span wicket:id="entityTitle">[property or parameter value]</span>
-					</a>
-				</span>
-				<a href="#" wicket:id="entityDetailsLink" class="entityDetailsLink"><span wicket:id="entityDetailsLinkLabel">show/hide</span></a>
+				<span wicket:id="entityIconAndTitle">[icon and title]</span>
+				
+				<a href="#" wicket:id="entityDetailsLink" class="entityDetailsLink"><span wicket:id="entityDetailsLinkLabel">[+/-]</span></a>
 				<span wicket:id="entityTitleNull">(null)</span>
 				<table wicket:id="findUsing" class="findUsing">
 		   			<tbody>

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitylink/EntityLink.java Tue Sep 11 08:01:24 2012
@@ -23,25 +23,18 @@ import java.util.List;
 
 import com.google.common.collect.Lists;
 
-import org.apache.wicket.Page;
-import org.apache.wicket.PageParameters;
+import org.apache.wicket.Component;
 import org.apache.wicket.extensions.yui.calendar.DateField;
-import org.apache.wicket.markup.html.PackageResource;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.FormComponentPanel;
-import org.apache.wicket.markup.html.form.SubmitLink;
 import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.markup.html.image.Image;
-import org.apache.wicket.markup.html.link.AbstractLink;
-import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
-import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
 import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -53,6 +46,7 @@ import org.apache.isis.viewer.wicket.mod
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.model.util.Generics;
 import org.apache.isis.viewer.wicket.model.util.Mementos;
+import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.actions.ActionInvokeHandler;
 import org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel;
@@ -62,10 +56,7 @@ import org.apache.isis.viewer.wicket.ui.
 import org.apache.isis.viewer.wicket.ui.components.widgets.dropdownchoices.DropDownChoicesForObjectAdapterMementos;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.CancelHintRequired;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.FormComponentPanelAbstract;
-import org.apache.isis.viewer.wicket.ui.pages.PageType;
-import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
-import org.apache.isis.viewer.wicket.ui.util.Links;
 
 /**
  * {@link FormComponentPanel} representing a reference to an entity: a link and
@@ -76,11 +67,8 @@ public class EntityLink extends FormComp
     private static final long serialVersionUID = 1L;
 
     private static final String ID_ENTITY_LINK_WRAPPER = "entityLinkWrapper";
-    private static final String ID_ENTITY_LINK = "entityLink";
     private static final String ID_ENTITY_OID = "entityOid";
-    private static final String ID_ENTITY_TITLE = "entityTitle";
     private static final String ID_ENTITY_TITLE_NULL = "entityTitleNull";
-    private static final String ID_ENTITY_ICON = "entityImage";
     private static final String ID_CHOICES = "choices";
     private static final String ID_FIND_USING = "findUsing";
     private static final String ID_ENTITY_DETAILS_LINK = "entityDetailsLink";
@@ -90,13 +78,15 @@ public class EntityLink extends FormComp
     private final FindUsingLinkFactory linkFactory;
 
     private TextField<ObjectAdapterMemento> entityOidField;
+    
     private WebMarkupContainer findUsing;
+    private Link<String> entityDetailsLink;
+    
     private PanelAbstract<?> actionFindUsingComponent;
 
-    private Image image;
-    private Label label;
     private ObjectAdapterMemento pending;
 
+
     public EntityLink(final String id, final EntityModel entityModel) {
         super(id, entityModel);
         setType(ObjectAdapter.class);
@@ -115,6 +105,7 @@ public class EntityLink extends FormComp
         addOrReplaceOidField();
         rebuildFindUsingMenu();
         syncWithInput();
+        
     }
 
     private void addOrReplaceOidField() {
@@ -174,7 +165,7 @@ public class EntityLink extends FormComp
 
     /**
      * Must be called after {@link #setEnabled(boolean)} to ensure that the
-     * <tt>findUsing</tt> button is shown/not shown as required.
+     * <tt>findUsing</tt> button and the <tt>entityDetailsLink</tt> are shown/not shown as required.
      * 
      * <p>
      * REVIEW: there ought to be a better way to do this. I'd hoped to override
@@ -182,8 +173,10 @@ public class EntityLink extends FormComp
      * seem to be anyway to install a listener. One option might be to move it
      * to {@link #onBeforeRender()} ?
      */
-    public void syncFindUsingVisibility() {
-        findUsing.setVisible(isEnabled() && !getEntityModel().isViewMode());
+    public void syncFindUsingAndEntityDetailsLinkVisibility() {
+        final boolean visibility = isEnabled() && !getEntityModel().isViewMode();
+        findUsing.setVisible(visibility);
+        entityDetailsLink.setVisible(visibility);
     }
 
     /**
@@ -198,11 +191,8 @@ public class EntityLink extends FormComp
     }
 
     /**
-     * Ensures that the link is always enabled and traversable, even if (in the
-     * context of an entity property form) the entity model is in view mode.
-     * 
-     * <p>
-     * A slight hack, but works...
+     * Always enabled; but subcomponents we disable/hide if required based on the 
+     * {@link EntityModel#isEditMode() state} of the {@link EntityModel}.
      */
     @Override
     public boolean isEnabled() {
@@ -236,7 +226,9 @@ public class EntityLink extends FormComp
 
             // choices drop-down
             final IModel<ObjectAdapterMemento> modelObject = entityOidField.getModel();
-            addOrReplace(new DropDownChoicesForObjectAdapterMementos(ID_CHOICES, modelObject, choicesMementos));
+            final DropDownChoicesForObjectAdapterMementos dropDownChoices = new DropDownChoicesForObjectAdapterMementos(ID_CHOICES, modelObject, choicesMementos);
+            addOrReplace(dropDownChoices);
+            dropDownChoices.setEnabled(getEntityModel().isEditMode());
 
             // no need for link, since can see in drop-down
             permanentlyHide(ID_ENTITY_LINK_WRAPPER);
@@ -260,25 +252,17 @@ public class EntityLink extends FormComp
         syncEntityDetailsButtonWithInput(adapter);
 
         syncEntityDetailsWithInput(adapter);
-        syncFindUsingVisibility();
+        syncFindUsingAndEntityDetailsLinkVisibility();
     }
 
     private void syncLinkWithInput(final ObjectAdapter adapter) {
         if (adapter != null) {
-            addOrReplaceLink(adapter);
+            addOrReplaceIconAndTitle();
         } else {
             permanentlyHide(ID_ENTITY_LINK_WRAPPER);
         }
     }
 
-    private void syncEntityIconWithInput(final ObjectAdapter adapter) {
-        if (adapter != null) {
-            addOrReplaceImage(adapter);
-        } else {
-            permanentlyHide(ID_ENTITY_ICON);
-        }
-    }
-
     private void syncEntityTitleNullWithInput(final ObjectAdapter adapter) {
         if (adapter != null) {
             permanentlyHide(ID_ENTITY_TITLE_NULL);
@@ -288,8 +272,8 @@ public class EntityLink extends FormComp
     }
 
     private void syncEntityDetailsButtonWithInput(final ObjectAdapter adapter) {
-        if (adapter != null && getEntityModel().isEditMode()) {
-            final Link<String> link = new Link<String>(ID_ENTITY_DETAILS_LINK) {
+        if (adapter != null) {
+            entityDetailsLink = new Link<String>(ID_ENTITY_DETAILS_LINK) {
                 private static final long serialVersionUID = 1L;
 
                 @Override
@@ -297,15 +281,15 @@ public class EntityLink extends FormComp
                     getEntityModel().toggleDetails();
                 }
             };
-            addOrReplace(link);
-            link.add(new Label(ID_ENTITY_DETAILS_LINK_LABEL, buildEntityDetailsModel()));
+            addOrReplace(entityDetailsLink);
+            entityDetailsLink.add(new Label(ID_ENTITY_DETAILS_LINK_LABEL, buildEntityDetailsModel()));
         } else {
             permanentlyHide(ID_ENTITY_DETAILS_LINK);
         }
     }
 
     private Model<String> buildEntityDetailsModel() {
-        final String label = getEntityModel().isEntityDetailsVisible() ? "hide" : "show";
+        final String label = getEntityModel().isEntityDetailsVisible() ? "-" : "+";
         return Model.of(label);
     }
 
@@ -333,72 +317,12 @@ public class EntityLink extends FormComp
         return null;
     }
 
-    private void addOrReplaceImage(final ObjectAdapter adapter) {
-        final PackageResource imageResource = determineImageResource(adapter);
-
-        if (imageResource != null) {
-            image = new Image(ID_ENTITY_ICON, imageResource);
-            addOrReplace(image);
-        } else {
-            permanentlyHide(ID_ENTITY_ICON);
-        }
+    private void addOrReplaceIconAndTitle() {
+        final ComponentFactory componentFactory = getComponentFactoryRegistry().findComponentFactory(ComponentType.ENTITY_ICON_AND_TITLE, getEntityModel());
+        final Component component = componentFactory.createComponent(getEntityModel());
+        addOrReplace(component);
     }
 
-    private PackageResource determineImageResource(final ObjectAdapter adapter) {
-        ObjectSpecification typeOfSpec;
-        PackageResource imageResource = null;
-        if (adapter != null) {
-            typeOfSpec = adapter.getSpecification();
-            final IconFacet iconFacet = typeOfSpec.getFacet(IconFacet.class);
-            if (iconFacet != null) {
-                final String iconName = iconFacet.iconName(adapter);
-                imageResource = getImageCache().findImage(iconName);
-            }
-        }
-        if (imageResource == null) {
-            typeOfSpec = getEntityModel().getTypeOfSpecification();
-            imageResource = getImageCache().findImage(typeOfSpec);
-        }
-        return imageResource;
-    }
-
-    private void addOrReplaceLink(final ObjectAdapter adapter) {
-        
-        final PageParameters pageParameters = EntityModel.createPageParameters(adapter);
-        final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ENTITY);
-        
-        final AbstractLink link = newLink(ID_ENTITY_LINK, pageClass, pageParameters);
-        label = new Label(ID_ENTITY_TITLE, adapter.titleString());
-        link.add(label);
-
-        
-//      if (adapter != null) {
-        final PackageResource imageResource = determineImageResource(adapter);
-        
-        if (imageResource != null) {
-            image = new Image(ID_ENTITY_ICON, imageResource);
-            link.addOrReplace(image);
-        } else {
-            permanentlyHide(ID_ENTITY_ICON);
-        }
-//    } else {
-//        permanentlyHide(ID_ENTITY_ICON);
-//    }
-
-
-        
-        
-        final WebMarkupContainer entityLinkWrapper = new WebMarkupContainer(ID_ENTITY_LINK_WRAPPER);
-        entityLinkWrapper.addOrReplace(link);
-
-        entityLinkWrapper.setEnabled(true);
-
-        addOrReplace(entityLinkWrapper);
-    }
-
-    protected AbstractLink newLink(final String linkId, final Class<? extends Page> pageClass, final PageParameters pageParameters) {
-        return Links.newBookmarkablePageLink(linkId, pageParameters, pageClass);
-    }
 
     private static List<ObjectAction> findServiceActionsFor(final ObjectSpecification scalarTypeSpec) {
         final List<ObjectAction> actionList = Lists.newArrayList();

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/formcomponent/FormComponentPanelAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/formcomponent/FormComponentPanelAbstract.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/formcomponent/FormComponentPanelAbstract.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/formcomponent/FormComponentPanelAbstract.java Tue Sep 11 08:01:24 2012
@@ -35,8 +35,8 @@ import org.apache.isis.core.metamodel.ad
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.Persistor;
 import org.apache.isis.viewer.wicket.model.isis.PersistenceSessionProvider;
+import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.app.imagecache.ImageCache;
 import org.apache.isis.viewer.wicket.ui.app.imagecache.ImageCacheAccessor;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
@@ -127,7 +127,7 @@ public abstract class FormComponentPanel
         return pcra.getPageClassRegistry();
     }
 
-    protected ImageCache getImageCache() {
+    protected ImageResourceCache getImageCache() {
         final ImageCacheAccessor ica = (ImageCacheAccessor) getApplication();
         return ica.getImageCache();
     }

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css Tue Sep 11 08:01:24 2012
@@ -309,3 +309,7 @@ div.scalarPanel {
 	clear: both;
 	display: block;
 }	
+
+.mandatory {
+	font-weight: bold;
+}
\ No newline at end of file

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/DropDownChoiceComponentFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/DropDownChoiceComponentFactory.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/DropDownChoiceComponentFactory.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/DropDownChoiceComponentFactory.java Tue Sep 11 08:01:24 2012
@@ -16,10 +16,6 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
-/**
- * 
- */
 package org.apache.isis.viewer.wicket.ui.selector;
 
 import java.util.List;

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Links.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Links.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Links.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Links.java Tue Sep 11 08:01:24 2012
@@ -33,7 +33,7 @@ public final class Links {
     }
 
     public static <T extends Page> AbstractLink newBookmarkablePageLink(final String linkId, final PageParameters pageParameters, final Class<T> pageClass) {
-          return new BookmarkablePageLink<T>(linkId, pageClass, pageParameters);
+        return new BookmarkablePageLink<T>(linkId, pageClass, pageParameters);
     }
 
 }

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java Tue Sep 11 08:01:24 2012
@@ -65,9 +65,9 @@ import org.apache.isis.runtimes.dflt.run
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.runtimes.dflt.webapp.WebAppConstants;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
+import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.app.cssrenderer.ApplicationCssRenderer;
-import org.apache.isis.viewer.wicket.ui.app.imagecache.ImageCache;
 import org.apache.isis.viewer.wicket.ui.app.imagecache.ImageCacheAccessor;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryList;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
@@ -371,7 +371,7 @@ public class IsisWicketApplication exten
     // /////////////////////////////////////////////////
 
     @Override
-    public ImageCache getImageCache() {
+    public ImageResourceCache getImageCache() {
         return imageCache;
     }
 

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java Tue Sep 11 08:01:24 2012
@@ -21,7 +21,7 @@ package org.apache.isis.viewer.wicket.vi
 
 import com.google.inject.AbstractModule;
 
-import org.apache.isis.viewer.wicket.ui.app.imagecache.ImageCache;
+import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryList;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassList;
@@ -40,7 +40,7 @@ public class IsisWicketModule extends Ab
         bind(PageClassRegistry.class).to(PageClassRegistryDefault.class);
         bind(PageClassList.class).to(PageClassListDefault.class);
         bind(ComponentFactoryList.class).to(ComponentFactoryListDefault.class);
-        bind(ImageCache.class).to(ImageCacheClassPath.class);
+        bind(ImageResourceCache.class).to(ImageCacheClassPath.class);
         bindConstant().annotatedWith(ApplicationCssUrl.class).to("application.css");
     }
 

Modified: incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketUnsecuredApplication.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketUnsecuredApplication.java?rev=1383280&r1=1383279&r2=1383280&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketUnsecuredApplication.java (original)
+++ incubator/isis/trunk/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketUnsecuredApplication.java Tue Sep 11 08:01:24 2012
@@ -59,8 +59,8 @@ import org.apache.isis.runtimes.dflt.run
 import org.apache.isis.runtimes.dflt.runtime.system.IsisSystem;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
+import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
 import org.apache.isis.viewer.wicket.ui.app.cssrenderer.ApplicationCssRenderer;
-import org.apache.isis.viewer.wicket.ui.app.imagecache.ImageCache;
 import org.apache.isis.viewer.wicket.ui.app.imagecache.ImageCacheAccessor;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
@@ -314,7 +314,7 @@ public class IsisWicketUnsecuredApplicat
     // /////////////////////////////////////////////////
 
     @Override
-    public ImageCache getImageCache() {
+    public ImageResourceCache getImageCache() {
         return imageCache;
     }