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++) {