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 2014/09/24 14:39:10 UTC

git commit: ISIS-899: fixing how to recreate the oid for view models (an obvious error in previous implementation); seems to be sufficient to address

Repository: isis
Updated Branches:
  refs/heads/master 8c5ce38a3 -> db0cdef8e


ISIS-899: fixing how to recreate the oid for view models (an obvious error in previous implementation); seems to be sufficient to address


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

Branch: refs/heads/master
Commit: db0cdef8eca68df33ac450e2d65682290c6bebfb
Parents: 8c5ce38
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Sep 24 13:38:57 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Sep 24 13:38:57 2014 +0100

----------------------------------------------------------------------
 .../restfulobjects/server/util/OidUtils.java     | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/db0cdef8/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
index c5bf441..d55ba71 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
@@ -19,8 +19,8 @@
 package org.apache.isis.viewer.restfulobjects.server.util;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOidDefault;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -28,6 +28,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
 import org.apache.isis.core.runtime.persistence.PojoRecreationException;
 import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
 
 public final class OidUtils {
@@ -64,13 +65,19 @@ public final class OidUtils {
         }
 
         // TODO: the logic to figure out which PersistenceSession API to call should be pushed down into PersistenceSession itself.
+        final PersistenceSession persistenceSession = resourceContext.getPersistenceSession();
+
         if(spec.containsFacet(ViewModelFacet.class)) {
-            if(!rootOid.getIdentifier().startsWith(OidMarshaller.VIEWMODEL_INDICATOR)) {
-                // TODO: this bodge to ensure that the "*" (view model indicator) is probably not required; but leaving it in until have better test coverage
-                rootOid = RootOidDefault.create(rootOid.getObjectSpecId(), OidMarshaller.VIEWMODEL_INDICATOR + rootOid.getIdentifier());
+
+            // this is a hack; the RO viewer when rendering the URL for the view model loses the "view model" indicator
+            // ("*") from the specId, meaning that the marshalling logic above in RootOidDefault.deString() creates an
+            // oid in the wrong state.  The code below checks for this and recreates the oid with the current state of 'view model'
+            if(!rootOid.isViewModel()) {
+                rootOid = new RootOidDefault(rootOid.getObjectSpecId(), rootOid.getIdentifier(), Oid.State.VIEWMODEL);
             }
+
             try {
-                return resourceContext.getPersistenceSession().getAdapterManager().adapterFor(rootOid);
+                return persistenceSession.getAdapterManager().adapterFor(rootOid);
             } catch(final ObjectNotFoundException ex) {
                 return null;
             } catch(final PojoRecreationException ex) {
@@ -78,7 +85,7 @@ public final class OidUtils {
             }
         } else {
             try {
-                ObjectAdapter objectAdapter = resourceContext.getPersistenceSession().loadObject(rootOid);
+                ObjectAdapter objectAdapter = persistenceSession.loadObject(rootOid);
                 return objectAdapter.isTransient() ? null : objectAdapter;
             } catch(final ObjectNotFoundException ex) {
                 return null;