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 <[email protected]> Authored: Wed Dec 19 23:19:12 2012 +0000 Committer: rmatthews <[email protected]> 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++) {
