You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by rm...@apache.org on 2012/12/20 00:20:13 UTC

git commit: ISIS-162: changed indicator of transient data so specific names for object types are not mistaken as transient data.

Updated Branches:
  refs/heads/master 13bed72b5 -> bcf5b193b


ISIS-162: changed indicator of transient data so specific names for
object types are not mistaken as transient data.


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

Branch: refs/heads/master
Commit: bcf5b193b6db7d71e0664c86bc60655c80cf32e6
Parents: 13bed72
Author: rmatthews <rm...@nakedobjects.org>
Authored: Wed Dec 19 23:19:12 2012 +0000
Committer: rmatthews <rm...@nakedobjects.org>
Committed: Wed Dec 19 23:19:12 2012 +0000

----------------------------------------------------------------------
 .../context/DefaultOidObjectMapping.java           |  103 +++++++--------
 .../scimpi/dispatcher/context/RequestContext.java  |   37 +++---
 .../dispatcher/view/display/AbstractFormView.java  |    2 +-
 3 files changed, 71 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/bcf5b193/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/DefaultOidObjectMapping.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/DefaultOidObjectMapping.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/DefaultOidObjectMapping.java
index 3d57269..cbf6ea8 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/DefaultOidObjectMapping.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/DefaultOidObjectMapping.java
@@ -49,21 +49,20 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.AdapterManagerSpi;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException;
 import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
 
 public class DefaultOidObjectMapping implements ObjectMapping {
-    
+
     private static final Logger LOG = Logger.getLogger(DefaultOidObjectMapping.class);
-    
+
     private final Map<String, TransientRootAdapterMapping> requestTransients = Maps.newHashMap();
     private final Map<String, TransientRootAdapterMapping> sessionTransients = Maps.newHashMap();
-    
+
     //private Class<? extends Oid> oidType;
 
-    
+
     ///////////////////////////////////////
     // clear, endSession
     ///////////////////////////////////////
@@ -90,17 +89,17 @@ public class DefaultOidObjectMapping implements ObjectMapping {
         sessionTransients.clear();
     }
 
-    
+
     ///////////////////////////////////////
     // mapTransientObject
     ///////////////////////////////////////
-    
+
     @Override
     public String mapTransientObject(final ObjectAdapter adapter) {
         try {
             final List<ObjectAdapter> savedObject = Lists.newArrayList();
             final JSONObject data = encodeTransientData(adapter, savedObject);
-            return "D" + data.toString(4);
+            return RequestContext.TRANSIENT_OBJECT_OID_MARKER + data.toString(4);
         } catch (final JSONException e) {
             throw new ScimpiException(e);
         }
@@ -118,13 +117,13 @@ public class DefaultOidObjectMapping implements ObjectMapping {
         for (final ObjectAssociation association : specification.getAssociations()) {
             final ObjectAdapter fieldValue = association.get(adapter);
             final String fieldName = association.getId();
-            
+
             if (fieldValue == null) {
                 data.put(fieldName, (Object) null);
             } else if (association.getSpecification().isEncodeable()) {
                 final EncodableFacet encodeableFacet = fieldValue.getSpecification().getFacet(EncodableFacet.class);
                 data.put(fieldName, encodeableFacet.toEncodedString(fieldValue));
-                
+
             } else if (association instanceof OneToManyAssociation) {
                 final List<JSONObject> collection = Lists.newArrayList();
                 final CollectionFacet facet = fieldValue.getSpecification().getFacet(CollectionFacet.class);
@@ -153,27 +152,27 @@ public class DefaultOidObjectMapping implements ObjectMapping {
 
         final Oid oid = adapter.getOid();
         data.put("_oid", oid.enString(getOidMarshaller()));
-        
+
         if(oid instanceof RootOid) {
             return data;
         }
-        
+
         if (!(oid instanceof AggregatedOid)) {
             throw new ScimpiException("Unsupported OID type " + oid);
-        } 
+        }
         return data;
     }
 
 
 
-    
+
     ////////////////////////////////////////////////////
     // mapObject  (either persistent or transient)
     ////////////////////////////////////////////////////
 
     @Override
     public String mapObject(final ObjectAdapter adapter, final Scope scope) {
-        
+
         // TODO need to ensure that transient objects are remapped each time so
         // that any changes are added to
         // session data
@@ -185,7 +184,7 @@ public class DefaultOidObjectMapping implements ObjectMapping {
 //        }
 
         String encodedOid = oid.enString(getOidMarshaller());
-        
+
         //final boolean isTransient = adapter.isTransient();
         //final String transferableId = (isTransient ? "T" : "P") + adapter.getSpecification().getFullIdentifier() + "@" + encodedOid;
         final String transferableId = encodedOid;
@@ -197,7 +196,7 @@ public class DefaultOidObjectMapping implements ObjectMapping {
             final TransientRootAdapterMapping mapping = new TransientRootAdapterMapping(adapter);
             mappingFor(scope).put(transferableId, mapping);
         }
-        
+
         return transferableId;
     }
 
@@ -210,13 +209,13 @@ public class DefaultOidObjectMapping implements ObjectMapping {
         }
         throw new ScimpiException("Can't hold globally transient object");
     }
-    
 
-    
+
+
     ////////////////////////////////////////////////////
     // mappedTransientObject  (lookup)
     ////////////////////////////////////////////////////
-    
+
     @Override
     public ObjectAdapter mappedTransientObject(final String jsonObjectData) {
         final String objectData = jsonObjectData; // StringEscapeUtils.unescapeHtml(data);
@@ -235,11 +234,11 @@ public class DefaultOidObjectMapping implements ObjectMapping {
     private ObjectAdapter restoreTransientObject(final JSONObject jsonObject) throws JSONException {
 
         final ObjectAdapter adapter = getAdapter(jsonObject);
-        
+
         //final String objectType = jsonObject.getString("_objectType");
-        //final ObjectSpecification specification = getSpecificationLoader().lookupByObjectType(objectType); 
+        //final ObjectSpecification specification = getSpecificationLoader().lookupByObjectType(objectType);
         final ObjectSpecification specification = adapter.getSpecification();
-        
+
         for (final ObjectAssociation association : specification.getAssociations()) {
             final String fieldName = association.getId();
 
@@ -291,7 +290,7 @@ public class DefaultOidObjectMapping implements ObjectMapping {
         //final String objectType = jsonObject.getString("_objectType");
         //final String id = jsonObject.getString("_id");
         //final ObjectSpecification objectSpec = getSpecificationLoader().lookupByObjectType(objectType);
-        
+
         final String oidStr = jsonObject.getString("_oid");
         final TypedOid typedOid = getOidMarshaller().unmarshal(oidStr, TypedOid.class);
 
@@ -300,12 +299,12 @@ public class DefaultOidObjectMapping implements ObjectMapping {
         } else {
             return mappedObject(oidStr);
         }
-        
+
 //        if (objectSpec.isParented() && !objectSpec.isParentedOrFreeCollection()) {
 //            final String[] split = id.split("@");
 //            final String parentOidStr = split[0];
 //            final String aggregatedLocalId = split[1];
-//            
+//
 //            RootOid parentOid;
 //            if(RootOid.class.isAssignableFrom(oidType)) {
 //                parentOid = getOidStringifier().deString(parentOidStr);
@@ -315,7 +314,7 @@ public class DefaultOidObjectMapping implements ObjectMapping {
 //                // REVIEW: for now, don't support holding references to aggregates whose parent is also an aggregate
 //                throw new ScimpiException("Unsupported OID type " + oidType);
 //            }
-//                
+//
 //            final AggregatedOid oid = new AggregatedOid(objectType, parentOid, aggregatedLocalId);
 //            return getPersistenceSession().recreateAdapter(oid, objectSpec);
 //        } else {
@@ -323,32 +322,32 @@ public class DefaultOidObjectMapping implements ObjectMapping {
 //        }
     }
 
-    
-    
+
+
     ////////////////////////////////////////////////////
     // mappedObject  (lookup - either persistent or transient)
     ////////////////////////////////////////////////////
-    
+
     @Override
     public ObjectAdapter mappedObject(final String oidStr) {
 
         final TypedOid typedOid = getOidMarshaller().unmarshal(oidStr, TypedOid.class);
-        
-        
+
+
 //        final char type = oidStr.charAt(0);
-//        
+//
 //        // Pdom.todo.ToDoItem@OID:TODO:6
 //        final String[] split = oidStr.split("@");
 //        final String oidData = split[1];
 //        final String[] oidDataArray = oidData.split(":");
 //        final String objectType = oidDataArray[1];
 //        final String aggregatedId = split.length > 2?split[2]:null;
-//            
+//
 //        final ObjectSpecification spec = getSpecificationLoader().lookupByObjectType(objectType);
 
         //if ((type == 'T')) {
         if (typedOid.isTransient()) {
-            
+
             TransientRootAdapterMapping mapping = sessionTransients.get(oidStr);
             if (mapping == null) {
                 mapping = requestTransients.get(oidStr);
@@ -358,37 +357,37 @@ public class DefaultOidObjectMapping implements ObjectMapping {
                 // create as a (transient) root adapter
                 // Oid oid = deString(objectType, oidData, State.TRANSIENT);
                 //return getPersistenceSession().recreateAdapter(oid, pojo);
-                
+
                 return getAdapterManager().adapterFor(typedOid);
             }
-            
+
             final ObjectAdapter mappedTransientObject = mapping.getObject();
             if(LOG.isDebugEnabled()) {
                 LOG.debug("retrieved " + mappedTransientObject.getOid() + " for " + oidStr);
             }
-            
+
             return mappedTransientObject;
         }
-        
+
         try {
             //LOG.debug("decoding " + oidData);
-            
+
             //if (aggregatedId != null) {
             if(typedOid instanceof AggregatedOid) {
-                
+
 //              final RootOid parentOid = deString(objectType, oidData, State.PERSISTENT);
 //              Oid aggregatedOid = new AggregatedOid(objectType, parentOid, aggregatedId);
-                
+
                 AggregatedOid aggregatedOid = (AggregatedOid) typedOid;
                 final TypedOid parentOid = aggregatedOid.getParentOid();
-                
+
                 getPersistenceSession().loadObject(parentOid);
                 return getAdapterManager().getAdapterFor(aggregatedOid);
-            } 
+            }
 
 //          RootOid oid = deString(objectType, oidData, State.PERSISTENT);
 //          return getPersistenceSession().loadObject(oid);
-            
+
             return getPersistenceSession().loadObject(typedOid);
 
         } catch (final SecurityException e) {
@@ -396,11 +395,11 @@ public class DefaultOidObjectMapping implements ObjectMapping {
         }
     }
 
-    
+
     ///////////////////////////////////////////////////////
     // reloadIdentityMap  (reloads the session transients)
     ///////////////////////////////////////////////////////
-    
+
     @Override
     public void reloadIdentityMap() {
         final Iterator<TransientRootAdapterMapping> mappings = sessionTransients.values().iterator();
@@ -410,7 +409,7 @@ public class DefaultOidObjectMapping implements ObjectMapping {
         }
     }
 
-    
+
     ////////////////////////////////////////////////////
     // unmapObject  (unmaps the transients)
     ////////////////////////////////////////////////////
@@ -427,7 +426,7 @@ public class DefaultOidObjectMapping implements ObjectMapping {
     ///////////////////////////////////////
 
 //    enum State { TRANSIENT, PERSISTENT }
-    
+
 //    private RootOid deString(String objectType, final String oidData, State stateHint) {
 //        if(RootOid.class.isAssignableFrom(oidType)) {
 //            return getOidStringifier().deString(oidData);
@@ -460,11 +459,11 @@ public class DefaultOidObjectMapping implements ObjectMapping {
 //    }
 
 
-    
+
     /////////////////////////////////////////////////////////////////////////
     // debugging
     /////////////////////////////////////////////////////////////////////////
-    
+
     @Override
     public void append(final DebugBuilder debug) {
         append(debug, requestTransients, "request");
@@ -490,7 +489,7 @@ public class DefaultOidObjectMapping implements ObjectMapping {
     ///////////////////////////////////////
     // from context
     ///////////////////////////////////////
-    
+
     protected SpecificationLoaderSpi getSpecificationLoader() {
         return IsisContext.getSpecificationLoader();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/bcf5b193/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java
index 3faf6f7..d33affe 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java
@@ -57,6 +57,7 @@ import org.apache.isis.viewer.scimpi.dispatcher.debug.DebugUsers;
 
 public abstract class RequestContext {
     private static final Logger LOG = Logger.getLogger(RequestContext.class);
+    static final String TRANSIENT_OBJECT_OID_MARKER = "~";
 
     public enum Scope {
         GLOBAL, SESSION, INTERACTION, REQUEST, ERROR
@@ -77,7 +78,7 @@ public abstract class RequestContext {
         } else if (name.equals(Scope.REQUEST.toString())) {
             return Scope.REQUEST;
         }
-        throw new IllegalArgumentException("Invalid scope name: " + scopeName); 
+        throw new IllegalArgumentException("Invalid scope name: " + scopeName);
     }
 
     public static Scope scope(final String scopeName, final Scope defaultScope) {
@@ -93,7 +94,7 @@ public abstract class RequestContext {
     public static final String BACK_TO = "_back_to";
     private static final Map<String, Object> globalVariables = new HashMap<String, Object>();
     private static final Scope[] SCOPES = new Scope[] { Scope.ERROR, Scope.REQUEST, Scope.INTERACTION, Scope.SESSION, Scope.GLOBAL };
-    
+
     private final OidMarshaller oidMarshaller = new OidMarshaller();
 
 
@@ -184,9 +185,9 @@ public abstract class RequestContext {
         if (dataOrOid == null) {
             dataOrOid = RESULT;
         }
-        
-        if (dataOrOid.startsWith("D")) {
-            return objectMapping.mappedTransientObject(StringEscapeUtils.unescapeHtml(dataOrOid.substring(1)));
+
+        if (dataOrOid.startsWith(TRANSIENT_OBJECT_OID_MARKER + "{")) {
+            return objectMapping.mappedTransientObject(StringEscapeUtils.unescapeHtml(dataOrOid.substring(TRANSIENT_OBJECT_OID_MARKER.length())));
         }
 
         final String oidStr = dataOrOid;
@@ -206,12 +207,12 @@ public abstract class RequestContext {
         //
         AggregatedOid aggregatedOid = (AggregatedOid) typedOid;
         final TypedOid parentOid = aggregatedOid.getParentOid();
-        
+
         //final ObjectAdapter parentAdapter = objectMapping.mappedObject(idParts[0] + "@" + idParts[1]);
         final ObjectAdapter parentAdapter = objectMapping.mappedObject(parentOid.enString(getOidMarshaller()));
         getPersistenceSession().resolveImmediately(parentAdapter);
-        
-        //ObjectSpecId objectType = null; 
+
+        //ObjectSpecId objectType = null;
         //final AggregatedOid aggregatedOid = new AggregatedOid(objectType, (TypedOid) parentAdapter.getOid(), idParts[2]);
 
         ObjectAdapter aggregatedAdapter = null;
@@ -268,7 +269,7 @@ public abstract class RequestContext {
     public Version getVersion(final String id) {
         if (id.equals("")) {
             return null;
-        } 
+        }
         return versionMapping.getVersion(id);
     }
 
@@ -277,7 +278,7 @@ public abstract class RequestContext {
     // ////////////////////////////
     public void append(final DebugBuilder debug) {
         debug.startSection("Scimpi Request");
-        
+
         debug.appendTitle("User");
         final AuthenticationSession session = getSession();
         debug.appendln("Authentication Session", session);
@@ -529,12 +530,12 @@ public abstract class RequestContext {
 
     public abstract String getCookie(String name);
 
-    
-    
+
+
     // /////////////////////////////////////////////////
     // Start/end request
     // /////////////////////////////////////////////////
-    
+
     public void endRequest() throws IOException {
         getWriter().close();
         objectMapping.clear();
@@ -773,11 +774,11 @@ public abstract class RequestContext {
     public abstract String clearSession();
 
     public abstract boolean isAborted();
-    
+
     public abstract String getErrorReference();
 
     public abstract String getErrorMessage();
-    
+
     public abstract String getErrorDetails();
 
     public void setSession(final AuthenticationSession session) {
@@ -843,13 +844,13 @@ public abstract class RequestContext {
     public boolean isUserAuthenticated() {
         return isUserAuthenticated;
     }
-    
+
     public void setUserAuthenticated(boolean isUserAuthenticated) {
         this.isUserAuthenticated = isUserAuthenticated;
         addVariable("_authenticated", isUserAuthenticated, Scope.SESSION);
     }
-    
-    
+
+
     protected Persistor getPersistenceSession() {
         return IsisContext.getPersistenceSession();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/bcf5b193/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractFormView.java
----------------------------------------------------------------------
diff --git a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractFormView.java b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractFormView.java
index 3c938b8..872f657 100644
--- a/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractFormView.java
+++ b/component/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/AbstractFormView.java
@@ -54,6 +54,7 @@ public abstract class AbstractFormView extends AbstractObjectProcessor {
             final String evenRowClass = request.getOptionalProperty(EVEN_ROW_CLASS);
             final String labelDelimiter = request.getOptionalProperty(LABEL_DELIMITER, ":");
             final boolean showIcons = request.isRequested(SHOW_ICON, showIconByDefault()); 
+            String linkAllView = request.getOptionalProperty(LINK_VIEW);
 
             request.setBlockContent(tag);
             request.processUtilCloseTag();
@@ -63,7 +64,6 @@ public abstract class AbstractFormView extends AbstractObjectProcessor {
             final List<ObjectAssociation> fields = tag.includedFields(associations);
             final LinkedObject[] linkFields = tag.linkedFields(fields);
 
-            String linkAllView = request.getOptionalProperty(LINK_VIEW);
             if (linkAllView != null) {
                 linkAllView = request.getContext().fullUriPath(linkAllView);
                 for (int i = 0; i < linkFields.length; i++) {