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/08/22 11:22:01 UTC

svn commit: r1375952 [1/2] - in /incubator/isis/trunk: examples/quickstart/dom/src/main/java/dom/todo/ examples/quickstart/webapp/src/main/webapp/WEB-INF/ examples/quickstart/wicket/src/main/webapp/WEB-INF/ framework/applib/src/main/java/org/apache/isi...

Author: danhaywood
Date: Wed Aug 22 09:21:59 2012
New Revision: 1375952

URL: http://svn.apache.org/viewvc?rev=1375952&view=rev
Log:
ISIS-14, ISIS-240, ISIS-243, ISIS-244

* more on the AuditService for JDO objectstore
* implemented BookmarkService (240)
* removed Maybe type (243)
* hiding statically invisible properties in table view of Wicket (244)

Added:
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/Bookmark.java
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/BookmarkHolder.java
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/BookmarkService.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfaceFacetFactory.java
      - copied, changed from r1375288, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfacesFacetFactory.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceAbstract.java
      - copied, changed from r1375288, incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditService.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceDefault.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceDemo.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/annotations/
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/annotations/Auditable.java
      - copied, changed from r1375288, incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/maybe/package-info.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableAnnotationFacetFactory.java
      - copied, changed from r1375288, incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/OptionalFacetDerivedFromJdoVersionAnnotation.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacet.java
      - copied, changed from r1375288, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetAbstract.java
      - copied, changed from r1375288, incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/DisabledFacetDerivedFromJdoVersionAnnotation.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetAnnotation.java
      - copied, changed from r1375288, incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/DisabledFacetDerivedFromJdoVersionAnnotation.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetImpl.java
      - copied, changed from r1375288, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetMarkerInterface.java
      - copied, changed from r1375288, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableMarkerInterfaceFacetFactory.java
      - copied, changed from r1375288, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfacesFacetFactory.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/test/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/test/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/GivenAuditableAnnotationFacetFactoryTest.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/test/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/GivenAuditableMarkerInterfaceFacetFactoryTest.java
Removed:
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/maybe/Maybe.java
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/maybe/package-info.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfacesFacetFactory.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/DisabledFacetDerivedFromJdoVersionAnnotation.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/OptionalFacetDerivedFromJdoVersionAnnotation.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/package-info.java
Modified:
    incubator/isis/trunk/examples/quickstart/dom/src/main/java/dom/todo/ToDoItem.java
    incubator/isis/trunk/examples/quickstart/webapp/src/main/webapp/WEB-INF/isis.properties
    incubator/isis/trunk/examples/quickstart/webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties
    incubator/isis/trunk/examples/quickstart/wicket/src/main/webapp/WEB-INF/isis.properties
    incubator/isis/trunk/examples/quickstart/wicket/src/main/webapp/WEB-INF/persistor_datanucleus.properties
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServices.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/immutable/ImmutableMarkerInterfaceFacetFactoryTest.java
    incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditEntry.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditService.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusTransaction.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusTransactionManager.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/prop/primarykey/OptionalFacetDerivedFromJdoPrimaryKeyAnnotation.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/progmodelfacets/JdoProgrammingModelFacets.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/installerregistry/installerapi/PersistenceMechanismInstallerAbstract.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/container/DomainObjectContainerResolve.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/persistence/internal/RuntimeContextFromSession.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/runner/IsisRunner.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/runner/opts/OptionValidator.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/runner/opts/OptionValidatorForPersistor.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/runner/opts/OptionValidatorForViewers.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/runner/opts/OptionValidatorUserAndPasswordCombo.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/services/ServicesInstallerFromConfiguration.java

Modified: incubator/isis/trunk/examples/quickstart/dom/src/main/java/dom/todo/ToDoItem.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/quickstart/dom/src/main/java/dom/todo/ToDoItem.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/examples/quickstart/dom/src/main/java/dom/todo/ToDoItem.java (original)
+++ incubator/isis/trunk/examples/quickstart/dom/src/main/java/dom/todo/ToDoItem.java Wed Aug 22 09:21:59 2012
@@ -25,7 +25,6 @@ import java.util.List;
 
 import javax.jdo.JDOHelper;
 import javax.jdo.annotations.IdentityType;
-import javax.jdo.annotations.Version;
 import javax.jdo.annotations.VersionStrategy;
 import javax.jdo.spi.PersistenceCapable;
 
@@ -35,7 +34,7 @@ import org.apache.isis.applib.annotation
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.Named;
 import org.apache.isis.applib.annotation.Title;
-import org.apache.isis.runtimes.dflt.objectstores.jdo.applib.Auditable;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.applib.annotations.Auditable;
 
 @javax.jdo.annotations.PersistenceCapable(identityType=IdentityType.DATASTORE)
 @javax.jdo.annotations.Discriminator("TODO")
@@ -48,8 +47,9 @@ import org.apache.isis.runtimes.dflt.obj
         name="todo_similarTo", language="JDOQL",  
         value="SELECT FROM dom.todo.ToDoItem WHERE ownedBy == :ownedBy && category == :category")
 })
-@Version(strategy=VersionStrategy.VERSION_NUMBER, column="VERSION")
-public class ToDoItem extends AbstractDomainObject implements Auditable {
+@javax.jdo.annotations.Version(strategy=VersionStrategy.VERSION_NUMBER, column="VERSION")
+@Auditable
+public class ToDoItem extends AbstractDomainObject  {
     
     public static final List<String> CATEGORIES = Collections.unmodifiableList(Arrays.asList("Professional", "Domestic", "Other"));
 

Modified: incubator/isis/trunk/examples/quickstart/webapp/src/main/webapp/WEB-INF/isis.properties
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/quickstart/webapp/src/main/webapp/WEB-INF/isis.properties?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/examples/quickstart/webapp/src/main/webapp/WEB-INF/isis.properties (original)
+++ incubator/isis/trunk/examples/quickstart/webapp/src/main/webapp/WEB-INF/isis.properties Wed Aug 22 09:21:59 2012
@@ -180,7 +180,7 @@ isis.reflector.class-substitutor=org.apa
 # if using the DataNucleus object store:
 #isis.services.prefix = 
 isis.services = objstore.jdo.todo.ToDoItemsJdo,\
-                org.apache.isis.runtimes.dflt.objectstores.jdo.applib.AuditService
+                org.apache.isis.runtimes.dflt.objectstores.jdo.applib.AuditServiceDemo
 
 
 # if using the SQL object store:

Modified: incubator/isis/trunk/examples/quickstart/webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/quickstart/webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/examples/quickstart/webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties (original)
+++ incubator/isis/trunk/examples/quickstart/webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties Wed Aug 22 09:21:59 2012
@@ -25,12 +25,16 @@ isis.persistor.datanucleus.impl.datanucl
 isis.persistor.datanucleus.impl.datanucleus.validateConstraints=true
 
 
-#isis.persistor.datanucleus.install-fixtures=true
-
-
 # L2 cache (on by default)
 isis.persistor.datanucleus.impl.datanucleus.cache.level2.type=none
 
+#see http://www.datanucleus.org/products/datanucleus/jdo/transaction_types.html#optimistic
+isis.persistor.datanucleus.impl.datanucleus.persistenceByReachabilityAtCommit=false
+
+
+#isis.persistor.datanucleus.install-fixtures=true
+
+
 
 
 #

Modified: incubator/isis/trunk/examples/quickstart/wicket/src/main/webapp/WEB-INF/isis.properties
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/quickstart/wicket/src/main/webapp/WEB-INF/isis.properties?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/examples/quickstart/wicket/src/main/webapp/WEB-INF/isis.properties (original)
+++ incubator/isis/trunk/examples/quickstart/wicket/src/main/webapp/WEB-INF/isis.properties Wed Aug 22 09:21:59 2012
@@ -180,7 +180,7 @@ isis.reflector.class-substitutor=org.apa
 # if using the DataNucleus object store:
 #isis.services.prefix = 
 isis.services = objstore.jdo.todo.ToDoItemsJdo,\
-                org.apache.isis.runtimes.dflt.objectstores.jdo.applib.AuditService
+                org.apache.isis.runtimes.dflt.objectstores.jdo.applib.AuditServiceDemo
 
 
 # if using the SQL object store:

Modified: incubator/isis/trunk/examples/quickstart/wicket/src/main/webapp/WEB-INF/persistor_datanucleus.properties
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/quickstart/wicket/src/main/webapp/WEB-INF/persistor_datanucleus.properties?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/examples/quickstart/wicket/src/main/webapp/WEB-INF/persistor_datanucleus.properties (original)
+++ incubator/isis/trunk/examples/quickstart/wicket/src/main/webapp/WEB-INF/persistor_datanucleus.properties Wed Aug 22 09:21:59 2012
@@ -25,11 +25,15 @@ isis.persistor.datanucleus.impl.datanucl
 isis.persistor.datanucleus.impl.datanucleus.validateConstraints=true
 
 
-#isis.persistor.datanucleus.install-fixtures=true
-
 # L2 cache (on by default)
 isis.persistor.datanucleus.impl.datanucleus.cache.level2.type=none
 
+#see http://www.datanucleus.org/products/datanucleus/jdo/transaction_types.html#optimistic
+isis.persistor.datanucleus.impl.datanucleus.persistenceByReachabilityAtCommit=false
+
+
+
+#isis.persistor.datanucleus.install-fixtures=true
 
 
 

Added: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/Bookmark.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/Bookmark.java?rev=1375952&view=auto
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/Bookmark.java (added)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/Bookmark.java Wed Aug 22 09:21:59 2012
@@ -0,0 +1,64 @@
+package org.apache.isis.applib.bookmarks;
+
+/**
+ * String representation of any persistent object managed by the framework.
+ * 
+ * <p>
+ * Analogous to the <tt>RootOid</tt>.
+ */
+public class Bookmark {
+
+    private final String objectType;
+    private final String identifier;
+    
+    public Bookmark(String objectType, String identifier) {
+        this.objectType = objectType;
+        this.identifier = identifier;
+    }
+    
+    public String getObjectType() {
+        return objectType;
+    }
+    
+    public String getIdentifier() {
+        return identifier;
+    }
+    
+    
+    
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((identifier == null) ? 0 : identifier.hashCode());
+        result = prime * result + ((objectType == null) ? 0 : objectType.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        Bookmark other = (Bookmark) obj;
+        if (identifier == null) {
+            if (other.identifier != null)
+                return false;
+        } else if (!identifier.equals(other.identifier))
+            return false;
+        if (objectType == null) {
+            if (other.objectType != null)
+                return false;
+        } else if (!objectType.equals(other.objectType))
+            return false;
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return objectType + ":" + identifier;
+    }
+}

Added: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/BookmarkHolder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/BookmarkHolder.java?rev=1375952&view=auto
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/BookmarkHolder.java (added)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/BookmarkHolder.java Wed Aug 22 09:21:59 2012
@@ -0,0 +1,9 @@
+package org.apache.isis.applib.bookmarks;
+
+import org.apache.isis.applib.annotation.Programmatic;
+
+public interface BookmarkHolder {
+
+    @Programmatic
+    Bookmark bookmark();
+}

Added: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/BookmarkService.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/BookmarkService.java?rev=1375952&view=auto
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/BookmarkService.java (added)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/bookmarks/BookmarkService.java Wed Aug 22 09:21:59 2012
@@ -0,0 +1,12 @@
+package org.apache.isis.applib.bookmarks;
+
+import org.apache.isis.applib.annotation.Named;
+import org.apache.isis.applib.annotation.NotInServiceMenu;
+
+@Named("Bookmarks")
+public interface BookmarkService {
+
+    @NotInServiceMenu
+    Object lookup(BookmarkHolder bookmarkHolder);
+    
+}

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServices.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServices.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServices.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServices.java Wed Aug 22 09:21:59 2012
@@ -18,6 +18,7 @@ package org.apache.isis.core.metamodel.a
 
 import java.util.List;
 
+import org.apache.isis.applib.bookmarks.Bookmark;
 import org.apache.isis.core.commons.components.Injectable;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.oid.AggregatedOid;
@@ -53,6 +54,10 @@ public interface DomainObjectServices ex
      */
     ObjectAdapter createAggregatedInstance(ObjectSpecification spec, ObjectAdapter parent);
 
+    // ///////////////////////////////////////////
+    // retrieve
+    // ///////////////////////////////////////////
+
     /**
      * Provided by <tt>PersistenceSession</tt> when used by framework.
      * 
@@ -69,6 +74,16 @@ public interface DomainObjectServices ex
      */
     void resolve(Object parent, Object field);
 
+    /**
+     * Provided by <tt>PersistenceSession</tt> when used by framework.
+     * 
+     * <p>
+     * Called by <tt>BookmarkServicesDefault</tt>.
+     * @return 
+     */
+    Object lookup(Bookmark bookmark);
+
+
     // ///////////////////////////////////////////
     // flush, commit
     // ///////////////////////////////////////////

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java Wed Aug 22 09:21:59 2012
@@ -19,8 +19,11 @@
 
 package org.apache.isis.core.metamodel.adapter;
 
+import org.apache.isis.applib.annotation.Programmatic;
+
 public interface DomainObjectServicesAware {
 
+    @Programmatic
     public void setDomainObjectServices(DomainObjectServices domainObjectServices);
 
 }

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java Wed Aug 22 09:21:59 2012
@@ -22,6 +22,7 @@ package org.apache.isis.core.metamodel.r
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.isis.applib.bookmarks.Bookmark;
 import org.apache.isis.applib.profiles.Localization;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
@@ -153,58 +154,64 @@ public class RuntimeContextNoRuntime ext
         };
         domainObjectServices = new DomainObjectServicesAbstract() {
 
+
             @Override
-            public void warnUser(final String message) {
+            public ObjectAdapter createTransientInstance(final ObjectSpecification spec) {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
-
+            
             @Override
-            public void resolve(final Object parent, final Object field) {
+            public ObjectAdapter createAggregatedInstance(final ObjectSpecification spec, final ObjectAdapter parent) {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
 
             @Override
-            public void resolve(final Object parent) {
+            public Object lookup(Bookmark bookmark) {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
 
             @Override
-            public void raiseError(final String message) {
+            public void resolve(final Object parent, final Object field) {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
 
             @Override
-            public void informUser(final String message) {
+            public void resolve(final Object parent) {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
 
             @Override
-            public List<String> getPropertyNames() {
+            public boolean flush() {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
-
+            
             @Override
-            public String getProperty(final String name) {
+            public void commit() {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
 
             @Override
-            public boolean flush() {
+            public void informUser(final String message) {
+                throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
+            }
+            
+            @Override
+            public void warnUser(final String message) {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
 
             @Override
-            public ObjectAdapter createTransientInstance(final ObjectSpecification spec) {
+            public void raiseError(final String message) {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
 
             @Override
-            public void commit() {
+            public List<String> getPropertyNames() {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
 
             @Override
-            public ObjectAdapter createAggregatedInstance(final ObjectSpecification spec, final ObjectAdapter parent) {
+            public String getProperty(final String name) {
                 throw new UnsupportedOperationException("Not supported by this implementation of RuntimeContext");
             }
         };

Added: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java?rev=1375952&view=auto
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java (added)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceDefault.java Wed Aug 22 09:21:59 2012
@@ -0,0 +1,29 @@
+package org.apache.isis.core.metamodel.services.bookmarks;
+
+import org.apache.isis.applib.annotation.NotInServiceMenu;
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.bookmarks.Bookmark;
+import org.apache.isis.applib.bookmarks.BookmarkHolder;
+import org.apache.isis.applib.bookmarks.BookmarkService;
+import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
+import org.apache.isis.core.metamodel.adapter.DomainObjectServicesAware;
+
+public class BookmarkServiceDefault implements BookmarkService, DomainObjectServicesAware {
+
+    private DomainObjectServices domainObjectServices;
+    
+    @Override
+    @NotInServiceMenu
+    public Object lookup(BookmarkHolder bookmarkHolder) {
+        Bookmark bookmark = bookmarkHolder.bookmark();
+        Object lookup = domainObjectServices.lookup(bookmark);
+        return lookup;
+    }
+
+    @Override
+    @Programmatic
+    public void setDomainObjectServices(DomainObjectServices domainObjectServices) {
+        this.domainObjectServices = domainObjectServices;
+    }
+
+}

Copied: incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfaceFacetFactory.java (from r1375288, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfacesFacetFactory.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfaceFacetFactory.java?p2=incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfaceFacetFactory.java&p1=incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfacesFacetFactory.java&r1=1375288&r2=1375952&rev=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfacesFacetFactory.java (original)
+++ incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfaceFacetFactory.java Wed Aug 22 09:21:59 2012
@@ -26,16 +26,16 @@ import org.apache.isis.core.metamodel.fa
 import org.apache.isis.core.metamodel.facets.When;
 import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
 
-public class ImmutableMarkerInterfacesFacetFactory extends FacetFactoryAbstract {
+public class ImmutableMarkerInterfaceFacetFactory extends FacetFactoryAbstract {
 
-    public ImmutableMarkerInterfacesFacetFactory() {
+    public ImmutableMarkerInterfaceFacetFactory() {
         super(FeatureType.OBJECTS_ONLY);
     }
 
     @Override
-    public void process(final ProcessClassContext processClassContaxt) {
-        final When when = When.forCorrespondingMarkerSubType(processClassContaxt.getCls());
-        FacetUtil.addFacet(create(when, processClassContaxt.getFacetHolder()));
+    public void process(final ProcessClassContext processClassContext) {
+        final When when = When.forCorrespondingMarkerSubType(processClassContext.getCls());
+        FacetUtil.addFacet(create(when, processClassContext.getFacetHolder()));
     }
 
     private ImmutableFacet create(final When when, final FacetHolder holder) {

Modified: incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/immutable/ImmutableMarkerInterfaceFacetFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/immutable/ImmutableMarkerInterfaceFacetFactoryTest.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/immutable/ImmutableMarkerInterfaceFacetFactoryTest.java (original)
+++ incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/immutable/ImmutableMarkerInterfaceFacetFactoryTest.java Wed Aug 22 09:21:59 2012
@@ -28,17 +28,17 @@ import org.apache.isis.core.metamodel.fa
 import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
 import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.progmodel.facets.object.immutable.markerifc.ImmutableFacetMarkerInterface;
-import org.apache.isis.core.progmodel.facets.object.immutable.markerifc.ImmutableMarkerInterfacesFacetFactory;
+import org.apache.isis.core.progmodel.facets.object.immutable.markerifc.ImmutableMarkerInterfaceFacetFactory;
 
 public class ImmutableMarkerInterfaceFacetFactoryTest extends AbstractFacetFactoryTest {
 
-    private ImmutableMarkerInterfacesFacetFactory facetFactory;
+    private ImmutableMarkerInterfaceFacetFactory facetFactory;
 
     @Override
     protected void setUp() throws Exception {
         super.setUp();
 
-        facetFactory = new ImmutableMarkerInterfacesFacetFactory();
+        facetFactory = new ImmutableMarkerInterfaceFacetFactory();
     }
 
     @Override

Modified: incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java (original)
+++ incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java Wed Aug 22 09:21:59 2012
@@ -87,7 +87,7 @@ import org.apache.isis.core.progmodel.fa
 import org.apache.isis.core.progmodel.facets.object.ignore.javalang.SyntheticMethodFilteringFacetFactory;
 import org.apache.isis.core.progmodel.facets.object.ignore.jdo.RemoveJdoEnhancementTypesFacetFactory;
 import org.apache.isis.core.progmodel.facets.object.immutable.annotation.ImmutableAnnotationFacetFactory;
-import org.apache.isis.core.progmodel.facets.object.immutable.markerifc.ImmutableMarkerInterfacesFacetFactory;
+import org.apache.isis.core.progmodel.facets.object.immutable.markerifc.ImmutableMarkerInterfaceFacetFactory;
 import org.apache.isis.core.progmodel.facets.object.mask.annotation.MaskAnnotationForTypeFacetFactory;
 import org.apache.isis.core.progmodel.facets.object.maxlen.annotation.MaxLengthAnnotationForTypeFacetFactory;
 import org.apache.isis.core.progmodel.facets.object.multiline.annotation.MultiLineAnnotationOnTypeFacetFactory;
@@ -305,7 +305,7 @@ public class ProgrammingModelFacetsJava5
         addFactory(DisabledFacetForPropertyDerivedFromImmutableTypeFacetFactory.class);
         addFactory(DisabledFacetForCollectionDerivedFromImmutableTypeFacetFactory.class);
 
-        addFactory(ImmutableMarkerInterfacesFacetFactory.class);
+        addFactory(ImmutableMarkerInterfaceFacetFactory.class);
 
         addFactory(ViewModelAnnotationFacetFactory.class);
 

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditEntry.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditEntry.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditEntry.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditEntry.java Wed Aug 22 09:21:59 2012
@@ -5,13 +5,16 @@ import javax.jdo.annotations.IdentityTyp
 import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.annotation.Immutable;
 import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.Title;
+import org.apache.isis.applib.bookmarks.Bookmark;
+import org.apache.isis.applib.bookmarks.BookmarkHolder;
 import org.apache.isis.applib.value.DateTime;
 
 @javax.jdo.annotations.PersistenceCapable(identityType=IdentityType.DATASTORE)
 @javax.jdo.annotations.DatastoreIdentity(strategy=javax.jdo.annotations.IdGeneratorStrategy.IDENTITY)
 @Immutable
-public class AuditEntry {
+public class AuditEntry implements BookmarkHolder {
 
     // {{ TimestampUtc (property)
     private Long timestampEpoch;
@@ -108,4 +111,12 @@ public class AuditEntry {
     }
     // }}
 
+
+    // {{ bookmark (action)
+    @Override
+    @Programmatic
+    public Bookmark bookmark() {
+        return new Bookmark(getObjectType(), getIdentifier());
+    }
+    // }}
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditService.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditService.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditService.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditService.java Wed Aug 22 09:21:59 2012
@@ -1,27 +1,10 @@
 package org.apache.isis.runtimes.dflt.objectstores.jdo.applib;
 
-import java.util.List;
-
-import org.apache.isis.applib.AbstractFactoryAndRepository;
 import org.apache.isis.applib.annotation.Hidden;
 
-public class AuditService extends AbstractFactoryAndRepository {
-    
-    public List<AuditEntry> list() {
-        return allInstances(AuditEntry.class);
-    }
+public interface AuditService {
     
     @Hidden
-    public AuditEntry audit(String user, long currentTimestampEpoch, String objectType, String identifier, String preValue, String postValue) {
-        AuditEntry auditEntry = newTransientInstance(AuditEntry.class);
-        auditEntry.setTimestampEpoch(currentTimestampEpoch);
-        auditEntry.setUser(user);
-        auditEntry.setObjectType(objectType);
-        auditEntry.setIdentifier(identifier);
-        auditEntry.setPreValue(preValue);
-        auditEntry.setPostValue(postValue);
-        return persist(auditEntry);
-    }
-
-
+    public AuditEntry audit(String user, long currentTimestampEpoch, String objectType, String identifier, String preValue, String postValue);
+    
 }

Copied: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceAbstract.java (from r1375288, incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditService.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceAbstract.java?p2=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceAbstract.java&p1=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditService.java&r1=1375288&r2=1375952&rev=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditService.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceAbstract.java Wed Aug 22 09:21:59 2012
@@ -1,15 +1,9 @@
 package org.apache.isis.runtimes.dflt.objectstores.jdo.applib;
 
-import java.util.List;
-
 import org.apache.isis.applib.AbstractFactoryAndRepository;
 import org.apache.isis.applib.annotation.Hidden;
 
-public class AuditService extends AbstractFactoryAndRepository {
-    
-    public List<AuditEntry> list() {
-        return allInstances(AuditEntry.class);
-    }
+public abstract class AuditServiceAbstract extends AbstractFactoryAndRepository  implements AuditService {
     
     @Hidden
     public AuditEntry audit(String user, long currentTimestampEpoch, String objectType, String identifier, String preValue, String postValue) {
@@ -23,5 +17,5 @@ public class AuditService extends Abstra
         return persist(auditEntry);
     }
 
-
+    
 }

Added: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceDefault.java?rev=1375952&view=auto
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceDefault.java (added)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceDefault.java Wed Aug 22 09:21:59 2012
@@ -0,0 +1,9 @@
+package org.apache.isis.runtimes.dflt.objectstores.jdo.applib;
+
+import org.apache.isis.applib.annotation.Hidden;
+
+@Hidden
+public class AuditServiceDefault extends AuditServiceAbstract {
+
+    
+}

Added: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceDemo.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceDemo.java?rev=1375952&view=auto
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceDemo.java (added)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/AuditServiceDemo.java Wed Aug 22 09:21:59 2012
@@ -0,0 +1,11 @@
+package org.apache.isis.runtimes.dflt.objectstores.jdo.applib;
+
+import java.util.List;
+
+public class AuditServiceDemo extends AuditServiceAbstract {
+    
+    public List<AuditEntry> list() {
+        return allInstances(AuditEntry.class);
+    }
+    
+}

Copied: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/annotations/Auditable.java (from r1375288, incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/maybe/package-info.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/annotations/Auditable.java?p2=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/annotations/Auditable.java&p1=incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/maybe/package-info.java&r1=1375288&r2=1375952&rev=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/maybe/package-info.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/applib/annotations/Auditable.java Wed Aug 22 09:21:59 2012
@@ -17,20 +17,23 @@
  *  under the License.
  */
 
+package org.apache.isis.runtimes.dflt.objectstores.jdo.applib.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
 /**
- * Defines interfaces for domain objects that constitute the framework's
- * view of a &quot;user profile&quot;. 
+ * Indicates that the entity is auditable.
  * 
  * <p>
- * Each user can hold a single {@link org.apache.isis.applib.profiles.Profile},
- * which in turn can hold option settings (eg preferred colour theme) and 
- * {@link org.apache.isis.applib.profiles.Perspective}s (a particular 
- * arrangement of the user interface; the terminology comes from the Eclipse
- * RCP/IDE platform).
- *  
- * <p>
- * The use and surfacing of these capabilities is dependent on the viewer;
- * most notably the drag-n-drop viewer does support the concept of a user
- * profile, but many others do not. 
+ * Alternatively, the type can implement the 
+ * {@link org.apache.isis.runtimes.dflt.objectstores.jdo.applib.Auditable Auditable} marker interface.
  */
-package org.apache.isis.applib.maybe;
\ No newline at end of file
+@Inherited
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Auditable {
+}

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.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/DataNucleusPersistenceMechanismInstaller.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java Wed Aug 22 09:21:59 2012
@@ -1,13 +1,17 @@
 package org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus;
 
 
+import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nullable;
+
 import org.apache.isis.core.commons.components.Installer;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.runtimes.dflt.bytecode.identity.objectfactory.ObjectFactoryBasic;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.applib.AuditService;
 import org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.persistence.adaptermanager.DataNucleusPojoRecreator;
 import org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.persistence.spi.DataNucleusIdentifierGenerator;
 import org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.persistence.spi.DataNucleusSimplePersistAlgorithm;
@@ -20,9 +24,15 @@ import org.apache.isis.runtimes.dflt.run
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.AdapterManagerSpi;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.IdentifierGenerator;
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.ObjectFactory;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSessionFactory;
 import org.apache.isis.runtimes.dflt.runtime.system.transaction.EnlistedObjectDirtying;
 import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransactionManager;
 
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+
 /**
  * Configuration files are read in the usual fashion (as per {@link Installer#getConfigurationResources()}, ie will consult all of:
  * <ul>
@@ -42,10 +52,23 @@ import org.apache.isis.runtimes.dflt.run
  */
 public class DataNucleusPersistenceMechanismInstaller extends PersistenceMechanismInstallerAbstract {
 
+    private static final Predicate<Object> LOCATE_AUDIT_SERVICE = new Predicate<Object>() {
+
+        @Override
+        public boolean apply(Object input) {
+            return input instanceof AuditService;
+        }
+    };
+
     public static final String NAME = "datanucleus";
     private static final String ISIS_CONFIG_PREFIX = "isis.persistor.datanucleus.impl";
 
     private DataNucleusApplicationComponents applicationComponents = null;
+
+    // only search once
+    private boolean searchedForAuditService;
+    @Nullable
+    private AuditService auditService;
     
     public DataNucleusPersistenceMechanismInstaller() {
         super(NAME);
@@ -69,13 +92,32 @@ public class DataNucleusPersistenceMecha
     }
 
     @Override
+    public PersistenceSession createPersistenceSession(PersistenceSessionFactory persistenceSessionFactory) {
+        PersistenceSession persistenceSession = super.createPersistenceSession(persistenceSessionFactory);
+        searchAndCacheAuditServiceIfNotAlreadyDoneSo(persistenceSessionFactory);
+        return persistenceSession;
+    }
+
+    private void searchAndCacheAuditServiceIfNotAlreadyDoneSo(PersistenceSessionFactory persistenceSessionFactory) {
+        if(searchedForAuditService) {
+            return;
+        } 
+        List<Object> services = persistenceSessionFactory.getServices();
+        final Optional<Object> optionalService = Iterables.tryFind(services, LOCATE_AUDIT_SERVICE);
+        if(optionalService.isPresent()) {
+            auditService = (AuditService) optionalService.get();
+        }
+        searchedForAuditService = true;
+    }
+    
+    @Override
     protected IdentifierGenerator createIdentifierGenerator(IsisConfiguration configuration) {
         return new DataNucleusIdentifierGenerator();
     }
 
     @Override
     protected IsisTransactionManager createTransactionManager(final EnlistedObjectDirtying persistor, final TransactionalResource objectStore) {
-        return new DataNucleusTransactionManager(persistor, objectStore);
+        return new DataNucleusTransactionManager(persistor, objectStore, auditService);
     }
 
     @Override

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusTransaction.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/spi/DataNucleusTransaction.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusTransaction.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusTransaction.java Wed Aug 22 09:21:59 2012
@@ -1,15 +1,16 @@
 package org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.persistence.spi;
 
 import java.util.Map.Entry;
-import java.util.Date;
 import java.util.Set;
 
+import javax.annotation.Nullable;
+
 import org.apache.isis.applib.clock.Clock;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.runtimes.dflt.objectstores.jdo.applib.AuditService;
-import org.apache.isis.runtimes.dflt.objectstores.jdo.applib.Auditable;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable.AuditableFacet;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.TransactionalResource;
 import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransaction;
@@ -19,15 +20,21 @@ import org.apache.isis.runtimes.dflt.run
 
 public class DataNucleusTransaction extends IsisTransaction {
 
-    private AuditService auditService;
+    @Nullable
+    private final AuditService auditService;
     
-    public DataNucleusTransaction(IsisTransactionManager transactionManager, MessageBroker messageBroker, UpdateNotifier updateNotifier, TransactionalResource objectStore) {
+    public DataNucleusTransaction(
+                final IsisTransactionManager transactionManager, 
+                final MessageBroker messageBroker, 
+                final UpdateNotifier updateNotifier, 
+                final TransactionalResource objectStore, 
+                @Nullable final AuditService auditService) {
         super(transactionManager, messageBroker, updateNotifier, objectStore);
+        this.auditService = auditService;
     }
 
-    
     @Override
-    protected void doAudit(Set<Entry<AdapterAndProperty, PreAndPostValues>> auditEntries) {
+    protected void doAudit(final Set<Entry<AdapterAndProperty, PreAndPostValues>> auditEntries) {
         if(auditService == null) {
             super.doAudit(auditEntries);
             return;
@@ -46,8 +53,7 @@ public class DataNucleusTransaction exte
     private void audit(final String currentUser, final long currentTimestampEpoch, final Entry<AdapterAndProperty, PreAndPostValues> auditEntry) {
         final AdapterAndProperty aap = auditEntry.getKey();
         final ObjectAdapter adapter = aap.getAdapter();
-        final Object pojo = adapter.getObject();
-        if(!(pojo instanceof Auditable)) {
+        if(!adapter.getSpecification().containsFacet(AuditableFacet.class)) {
             return;
         }
         final RootOid oid = (RootOid) adapter.getOid();
@@ -68,9 +74,4 @@ public class DataNucleusTransaction exte
         return IsisContext.getAuthenticationSession();
     }
 
-
-    public void usingAuditService(AuditService auditService) {
-        this.auditService = auditService;
-    }
-
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusTransactionManager.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/spi/DataNucleusTransactionManager.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusTransactionManager.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/persistence/spi/DataNucleusTransactionManager.java Wed Aug 22 09:21:59 2012
@@ -1,44 +1,31 @@
 package org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.persistence.spi;
 
-import java.util.List;
+import javax.annotation.Nullable;
 
 import org.apache.isis.runtimes.dflt.objectstores.jdo.applib.AuditService;
 import org.apache.isis.runtimes.dflt.runtime.persistence.objectstore.transaction.TransactionalResource;
-import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
 import org.apache.isis.runtimes.dflt.runtime.system.transaction.EnlistedObjectDirtying;
 import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransaction;
 import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.runtimes.dflt.runtime.system.transaction.MessageBroker;
 import org.apache.isis.runtimes.dflt.runtime.system.transaction.UpdateNotifier;
 
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-
 public class DataNucleusTransactionManager extends IsisTransactionManager {
+    
+    @Nullable
+    private final AuditService auditService;
 
-    private static final Predicate<Object> AUDIT_SERVICE = new Predicate<Object>() {
-
-        @Override
-        public boolean apply(Object input) {
-            return input instanceof AuditService;
-        }
-    };
-
-    public DataNucleusTransactionManager(EnlistedObjectDirtying objectPersistor, TransactionalResource objectStore) {
+    public DataNucleusTransactionManager(
+            final EnlistedObjectDirtying objectPersistor, 
+            final TransactionalResource objectStore, 
+            @Nullable final AuditService auditService) {
         super(objectPersistor, objectStore);
+        this.auditService = auditService;
     }
     
     @Override
-    protected IsisTransaction createTransaction(MessageBroker messageBroker, UpdateNotifier updateNotifier) {
-        DataNucleusTransaction transaction = new DataNucleusTransaction(this, messageBroker, updateNotifier, getTransactionalResource());
-        List<Object> services = IsisContext.getServices();
-        Optional<Object> optionalService = Iterables.tryFind(services, AUDIT_SERVICE);
-        if(optionalService.isPresent()) {
-            AuditService service = (AuditService) optionalService.get();
-            transaction.usingAuditService(service);
-        }
-        return transaction;
+    protected IsisTransaction createTransaction(final MessageBroker messageBroker, final UpdateNotifier updateNotifier) {
+        return new DataNucleusTransaction(this, messageBroker, updateNotifier, getTransactionalResource(), auditService);
     }
 
 }

Copied: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableAnnotationFacetFactory.java (from r1375288, incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/OptionalFacetDerivedFromJdoVersionAnnotation.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableAnnotationFacetFactory.java?p2=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableAnnotationFacetFactory.java&p1=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/OptionalFacetDerivedFromJdoVersionAnnotation.java&r1=1375288&r2=1375952&rev=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/OptionalFacetDerivedFromJdoVersionAnnotation.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableAnnotationFacetFactory.java Wed Aug 22 09:21:59 2012
@@ -16,36 +16,32 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.version;
+package org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable;
 
-import javax.jdo.annotations.Version;
 
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.mandatory.MandatoryFacetDefault;
-import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
-
-
-/**
- * Derived by presence of {@link Version}.
- * 
- * <p>
- * By default mandatory properties are initialized using the
- * {@link PropertyDefaultFacet} facet. We don't want this, so this facet marks
- * the property as optional, meaning that the {@link Version} property is left
- * untouched by Isis.
- * 
- * @see OptionalFacetDerivedFromJpaIdAnnotation
- */
-public class OptionalFacetDerivedFromJdoVersionAnnotation extends
-        MandatoryFacetDefault {
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.AnnotationBasedFacetFactoryAbstract;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.applib.annotations.Auditable;
+
+
+public class AuditableAnnotationFacetFactory extends
+        AnnotationBasedFacetFactoryAbstract {
 
-    public OptionalFacetDerivedFromJdoVersionAnnotation(final FacetHolder holder) {
-        super(holder);
+    public AuditableAnnotationFacetFactory() {
+        super(FeatureType.OBJECTS_ONLY);
     }
 
     @Override
-    public boolean isInvertedSemantics() {
-        return true;
+    public void process(ProcessClassContext processClassContext) {
+        final Class<?> cls = processClassContext.getCls();
+        final Auditable annotation = getAnnotation(cls, Auditable.class);
+        if (annotation == null) {
+            return;
+        }
+        FacetUtil.addFacet(new AuditableFacetAnnotation(
+                processClassContext.getFacetHolder()));
+        return;
     }
 
 

Copied: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacet.java (from r1375288, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacet.java?p2=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacet.java&p1=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java&r1=1375288&r2=1375952&rev=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacet.java Wed Aug 22 09:21:59 2012
@@ -16,11 +16,16 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+package org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable;
 
-package org.apache.isis.core.metamodel.adapter;
 
-public interface DomainObjectServicesAware {
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.applib.annotations.Auditable;
 
-    public void setDomainObjectServices(DomainObjectServices domainObjectServices);
+
+/**
+ * Corresponds to annotating the class with the {@link Auditable} annotation.
+ */
+public interface AuditableFacet extends Facet {
 
 }

Copied: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetAbstract.java (from r1375288, incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/DisabledFacetDerivedFromJdoVersionAnnotation.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetAbstract.java?p2=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetAbstract.java&p1=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/DisabledFacetDerivedFromJdoVersionAnnotation.java&r1=1375288&r2=1375952&rev=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/DisabledFacetDerivedFromJdoVersionAnnotation.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetAbstract.java Wed Aug 22 09:21:59 2012
@@ -16,21 +16,24 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.version;
+package org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable;
 
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.When;
-import org.apache.isis.core.progmodel.facets.members.disable.DisabledFacetImpl;
 
 
-/**
- * Derived from being {@link Transient}.
- */
-public class DisabledFacetDerivedFromJdoVersionAnnotation extends
-        DisabledFacetImpl {
+public abstract class AuditableFacetAbstract extends FacetAbstract implements
+        AuditableFacet {
+
+
+    public static Class<? extends Facet> type() {
+        return AuditableFacet.class;
+    }
 
-    public DisabledFacetDerivedFromJdoVersionAnnotation(final FacetHolder holder) {
-        super(When.ALWAYS, holder);
+    public AuditableFacetAbstract(FacetHolder facetHolder) {
+        super(AuditableFacetAbstract.type(), facetHolder, false);
     }
 
 }

Copied: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetAnnotation.java (from r1375288, incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/DisabledFacetDerivedFromJdoVersionAnnotation.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetAnnotation.java?p2=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetAnnotation.java&p1=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/DisabledFacetDerivedFromJdoVersionAnnotation.java&r1=1375288&r2=1375952&rev=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/version/DisabledFacetDerivedFromJdoVersionAnnotation.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetAnnotation.java Wed Aug 22 09:21:59 2012
@@ -16,21 +16,16 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.version;
+package org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable;
+
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.When;
-import org.apache.isis.core.progmodel.facets.members.disable.DisabledFacetImpl;
 
 
-/**
- * Derived from being {@link Transient}.
- */
-public class DisabledFacetDerivedFromJdoVersionAnnotation extends
-        DisabledFacetImpl {
+public class AuditableFacetAnnotation extends AuditableFacetImpl {
 
-    public DisabledFacetDerivedFromJdoVersionAnnotation(final FacetHolder holder) {
-        super(When.ALWAYS, holder);
+    public AuditableFacetAnnotation(FacetHolder facetHolder) {
+        super(facetHolder);
     }
 
 }

Copied: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetImpl.java (from r1375288, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetImpl.java?p2=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetImpl.java&p1=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java&r1=1375288&r2=1375952&rev=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetImpl.java Wed Aug 22 09:21:59 2012
@@ -16,11 +16,15 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+package org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable;
 
-package org.apache.isis.core.metamodel.adapter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public interface DomainObjectServicesAware {
 
-    public void setDomainObjectServices(DomainObjectServices domainObjectServices);
+public class AuditableFacetImpl extends AuditableFacetAbstract {
+
+    public AuditableFacetImpl(FacetHolder facetHolder) {
+        super(facetHolder);
+    }
 
 }

Copied: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetMarkerInterface.java (from r1375288, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetMarkerInterface.java?p2=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetMarkerInterface.java&p1=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java&r1=1375288&r2=1375952&rev=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/DomainObjectServicesAware.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableFacetMarkerInterface.java Wed Aug 22 09:21:59 2012
@@ -16,11 +16,16 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+package org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable;
 
-package org.apache.isis.core.metamodel.adapter;
 
-public interface DomainObjectServicesAware {
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-    public void setDomainObjectServices(DomainObjectServices domainObjectServices);
+
+public class AuditableFacetMarkerInterface extends AuditableFacetImpl {
+
+    public AuditableFacetMarkerInterface(FacetHolder facetHolder) {
+        super(facetHolder);
+    }
 
 }

Copied: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableMarkerInterfaceFacetFactory.java (from r1375288, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfacesFacetFactory.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableMarkerInterfaceFacetFactory.java?p2=incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableMarkerInterfaceFacetFactory.java&p1=incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfacesFacetFactory.java&r1=1375288&r2=1375952&rev=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfacesFacetFactory.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/AuditableMarkerInterfaceFacetFactory.java Wed Aug 22 09:21:59 2012
@@ -16,30 +16,31 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+package org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable;
 
-package org.apache.isis.core.progmodel.facets.object.immutable.markerifc;
 
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.When;
-import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
+import org.apache.isis.core.metamodel.facets.AnnotationBasedFacetFactoryAbstract;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.applib.Auditable;
 
-public class ImmutableMarkerInterfacesFacetFactory extends FacetFactoryAbstract {
 
-    public ImmutableMarkerInterfacesFacetFactory() {
+public class AuditableMarkerInterfaceFacetFactory extends
+        AnnotationBasedFacetFactoryAbstract {
+
+    public AuditableMarkerInterfaceFacetFactory() {
         super(FeatureType.OBJECTS_ONLY);
     }
 
     @Override
-    public void process(final ProcessClassContext processClassContaxt) {
-        final When when = When.forCorrespondingMarkerSubType(processClassContaxt.getCls());
-        FacetUtil.addFacet(create(when, processClassContaxt.getFacetHolder()));
+    public void process(ProcessClassContext processClassContext) {
+        final Class<?> cls = processClassContext.getCls();
+        if(!Auditable.class.isAssignableFrom(cls)) {
+            return;
+        }
+        FacetUtil.addFacet(new AuditableFacetMarkerInterface(
+                processClassContext.getFacetHolder()));
     }
 
-    private ImmutableFacet create(final When when, final FacetHolder holder) {
-        return when == null ? null : new ImmutableFacetMarkerInterface(when, holder);
-    }
 
 }

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/prop/primarykey/OptionalFacetDerivedFromJdoPrimaryKeyAnnotation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/prop/primarykey/OptionalFacetDerivedFromJdoPrimaryKeyAnnotation.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/prop/primarykey/OptionalFacetDerivedFromJdoPrimaryKeyAnnotation.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/prop/primarykey/OptionalFacetDerivedFromJdoPrimaryKeyAnnotation.java Wed Aug 22 09:21:59 2012
@@ -23,7 +23,6 @@ import javax.jdo.annotations.PrimaryKey;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.mandatory.MandatoryFacetDefault;
 import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
-import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.version.OptionalFacetDerivedFromJdoVersionAnnotation;
 
 
 /**
@@ -34,8 +33,6 @@ import org.apache.isis.runtimes.dflt.obj
  * {@link PropertyDefaultFacet} facet. We don't want this, so this facet marks
  * the property as optional, meaning that the {@link PrimaryKey} property is left
  * untouched by Isis.
- * 
- * @see OptionalFacetDerivedFromJdoVersionAnnotation
  */
 public class OptionalFacetDerivedFromJdoPrimaryKeyAnnotation extends
         MandatoryFacetDefault {

Modified: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/progmodelfacets/JdoProgrammingModelFacets.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/progmodelfacets/JdoProgrammingModelFacets.java?rev=1375952&r1=1375951&r2=1375952&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/progmodelfacets/JdoProgrammingModelFacets.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/specloader/progmodelfacets/JdoProgrammingModelFacets.java Wed Aug 22 09:21:59 2012
@@ -20,6 +20,8 @@ package org.apache.isis.runtimes.dflt.ob
 
 
 import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable.AuditableAnnotationFacetFactory;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable.AuditableMarkerInterfaceFacetFactory;
 import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.datastoreidentity.JdoDatastoreIdentityAnnotationFacetFactory;
 import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.discriminator.JdoDiscriminatorAnnotationFacetFactory;
 import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.embeddedonly.JdoEmbeddedOnlyAnnotationFacetFactory;
@@ -45,8 +47,10 @@ public class JdoProgrammingModelFacets e
         addFactory(JdoPrimaryKeyAnnotationFacetFactory.class);
         addFactory(JdoDiscriminatorAnnotationFacetFactory.class);
 
-        //addFactory(JdoVersionAnnotationFacetFactory.class);
         addFactory(JdoQueryAnnotationFacetFactory.class);
+        
+        addFactory(AuditableAnnotationFacetFactory.class);
+        addFactory(AuditableMarkerInterfaceFacetFactory.class);
     }
 
 }

Added: incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/test/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/GivenAuditableAnnotationFacetFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/test/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/GivenAuditableAnnotationFacetFactoryTest.java?rev=1375952&view=auto
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/test/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/GivenAuditableAnnotationFacetFactoryTest.java (added)
+++ incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/test/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/object/auditable/GivenAuditableAnnotationFacetFactoryTest.java Wed Aug 22 09:21:59 2012
@@ -0,0 +1,101 @@
+/*
+ *  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.runtimes.dflt.objectstores.jdo.metamodel.facets.object.auditable;
+
+import java.util.List;
+
+import javax.jdo.annotations.DatastoreIdentity;
+import javax.jdo.annotations.IdGeneratorStrategy;
+import javax.jdo.annotations.PersistenceCapable;
+
+import junit.framework.Assert;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactory;
+import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.applib.annotations.Auditable;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableAnnotationFacetFactory;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
+import org.apache.isis.runtimes.dflt.objectstores.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacetAnnotation;
+
+
+public class GivenAuditableAnnotationFacetFactoryTest extends
+        AbstractFacetFactoryTest {
+
+    private AuditableAnnotationFacetFactory facetFactory;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        facetFactory = new AuditableAnnotationFacetFactory();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        facetFactory = null;
+        super.tearDown();
+    }
+
+    public void testFeatureTypes() {
+        final List<FeatureType> featureTypes = facetFactory
+                .getFeatureTypes();
+        Assert.assertTrue(contains(featureTypes, FeatureType.OBJECT));
+        assertFalse(contains(featureTypes, FeatureType.PROPERTY));
+        assertFalse(contains(featureTypes, FeatureType.COLLECTION));
+        Assert.assertFalse(contains(featureTypes, FeatureType.ACTION));
+        assertFalse(contains(featureTypes,
+                FeatureType.ACTION_PARAMETER));
+    }
+
+    public void testAuditableAnnotationPickedUpOnClass() {
+        @Auditable
+        class Customer {
+        }
+
+        facetFactory.process(new FacetFactory.ProcessClassContext(Customer.class, methodRemover, facetHolder));
+
+        final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+        assertNotNull(facet);
+        assertTrue(facet instanceof AuditableFacetAnnotation);
+    }
+
+    public void testIfNoAuditableAnnotationThenNoFacet() {
+
+        class Customer {
+        }
+
+        facetFactory.process(new FacetFactory.ProcessClassContext(Customer.class, methodRemover, facetHolder));
+
+        final Facet facet = facetHolder.getFacet(AuditableFacet.class);
+        assertNull(facet);
+    }
+
+
+    public void testNoMethodsRemoved() {
+        @PersistenceCapable
+        class Customer {
+        }
+
+        facetFactory.process(new FacetFactory.ProcessClassContext(Customer.class, methodRemover, facetHolder));
+
+        assertNoMethodsRemoved();
+    }
+}