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 2013/05/28 17:13:53 UTC
[1/3] git commit: ISIS-414: ensure that sessions can close correctly.
Updated Branches:
refs/heads/master 11f4c2e76 -> 1ba8a4b1f
ISIS-414: ensure that sessions can close correctly.
* so don't get HSQLDB locking issues after a stackoverflow failure.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/b2a6e66a
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/b2a6e66a
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/b2a6e66a
Branch: refs/heads/master
Commit: b2a6e66a88b77c419e3890eb0ac46f8ac95f635f
Parents: 11f4c2e
Author: Dan Haywood <da...@apache.org>
Authored: Tue May 28 16:10:26 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Tue May 28 16:10:26 2013 +0100
----------------------------------------------------------------------
.../jdo/datanucleus/DataNucleusObjectStore.java | 20 +++++++++------
.../system/persistence/PersistenceSession.java | 19 ++++++++++++--
2 files changed, 28 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/b2a6e66a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
index 0928313..103bc93 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java
@@ -174,17 +174,21 @@ public class DataNucleusObjectStore implements ObjectStoreSpi {
ensureOpened();
ensureThatState(persistenceManager, is(notNullValue()));
- final IsisTransaction currentTransaction = getTransactionManager().getTransaction();
- if (currentTransaction != null && !currentTransaction.getState().isComplete()) {
- if(currentTransaction.getState().canCommit()) {
- getTransactionManager().endTransaction();
- } else if(currentTransaction.getState().canAbort()) {
- getTransactionManager().abortTransaction();
+ try {
+ final IsisTransaction currentTransaction = getTransactionManager().getTransaction();
+ if (currentTransaction != null && !currentTransaction.getState().isComplete()) {
+ if(currentTransaction.getState().canCommit()) {
+ getTransactionManager().endTransaction();
+ } else if(currentTransaction.getState().canAbort()) {
+ getTransactionManager().abortTransaction();
+ }
}
+ } finally {
+ // make sure release everything ok.
+ persistenceManager.close();
+ state = State.CLOSED;
}
- persistenceManager.close();
- state = State.CLOSED;
}
private PersistenceManager openSession() {
http://git-wip-us.apache.org/repos/asf/isis/blob/b2a6e66a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index f946bd6..9b39e3c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -239,10 +239,23 @@ public class PersistenceSession implements Persistor, EnlistedObjectDirtying, To
LOG.debug("closing " + this);
}
- objectStore.close();
+ try {
+ objectStore.close();
+ } catch(RuntimeException ex) {
+ // ignore
+ }
- adapterManager.close();
- objectFactory.close();
+ try {
+ adapterManager.close();
+ } catch(RuntimeException ex) {
+ // ignore
+ }
+
+ try {
+ objectFactory.close();
+ } catch(RuntimeException ex) {
+ // ignore
+ }
setState(State.CLOSED);
}
[2/3] git commit: ISIS-413: fix for null LocalDates when rendered.
Posted by da...@apache.org.
ISIS-413: fix for null LocalDates when rendered.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/76d5bd62
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/76d5bd62
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/76d5bd62
Branch: refs/heads/master
Commit: 76d5bd62251598b6b8777353f0f0c28acf23de7d
Parents: b2a6e66
Author: Dan Haywood <da...@apache.org>
Authored: Tue May 28 16:11:31 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Tue May 28 16:11:31 2013 +0100
----------------------------------------------------------------------
.../rendering/domainobjects/JsonValueEncoder.java | 25 ++++++++++-----
1 files changed, 17 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/76d5bd62/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
index c7c85e0..dc59306 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
@@ -309,9 +309,14 @@ public final class JsonValueEncoder {
@Override
public void appendValueAndFormat(ObjectAdapter objectAdapter, JsonRepresentation repr) {
- final LocalDate date = (LocalDate) unwrap(objectAdapter);
- final String dateStr = yyyyMMdd.print(date.toDateTimeAtStartOfDay());
- append(repr, dateStr, format, xIsisFormat);
+ final Object obj = unwrap(objectAdapter);
+ if(obj instanceof LocalDate) {
+ final LocalDate date = (LocalDate) obj;
+ final String dateStr = yyyyMMdd.print(date.toDateTimeAtStartOfDay());
+ append(repr, dateStr, format, xIsisFormat);
+ } else {
+ append(repr, obj, format, xIsisFormat);
+ }
}
});
@@ -330,15 +335,19 @@ public final class JsonValueEncoder {
}
return null;
}
-
+
@Override
public void appendValueAndFormat(ObjectAdapter objectAdapter, JsonRepresentation repr) {
- final LocalDateTime date = (LocalDateTime) unwrap(objectAdapter);
- final String dateStr = yyyyMMddHHmmss.print(date.toDateTime());
- append(repr, dateStr, format, xIsisFormat);
+ final Object obj = unwrap(objectAdapter);
+ if(obj instanceof LocalDateTime) {
+ final LocalDateTime date = (LocalDateTime) obj;
+ final String dateStr = yyyyMMddHHmmss.print(date.toDateTime());
+ append(repr, dateStr, format, xIsisFormat);
+ } else {
+ append(repr, obj, format, xIsisFormat);
+ }
}
});
-
}
[3/3] git commit: ISIS-411: eager rendering of properties in RO.
Posted by da...@apache.org.
ISIS-411: eager rendering of properties in RO.
Also includes checking to prevent infinite loops
(eg a bidirectional relationship, both sides eagerly rendered).
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/1ba8a4b1
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/1ba8a4b1
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/1ba8a4b1
Branch: refs/heads/master
Commit: 1ba8a4b1fece0937b5d2ed4b647607d503db9760
Parents: 76d5bd6
Author: Dan Haywood <da...@apache.org>
Authored: Tue May 28 16:13:24 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Tue May 28 16:13:24 2013 +0100
----------------------------------------------------------------------
.../restfulobjects/rendering/RendererContext.java | 13 +++++
.../AbstractObjectMemberReprRenderer.java | 14 ++++-
.../domainobjects/DomainObjectReprRenderer.java | 39 ++++++---------
.../ObjectCollectionReprRenderer.java | 13 ++++-
.../domainobjects/ObjectPropertyReprRenderer.java | 38 +++++++++++++-
.../EventSerializerRendererContext.java | 13 +++++
.../restfulobjects/server/ResourceContext.java | 11 ++++
7 files changed, 110 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/1ba8a4b1/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java
index f9fee3a..36d6520 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java
@@ -20,11 +20,14 @@ package org.apache.isis.viewer.restfulobjects.rendering;
import java.util.List;
+import org.apache.isis.applib.annotation.Render;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.profiles.Localization;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
public interface RendererContext {
@@ -41,5 +44,15 @@ public interface RendererContext {
public Where getWhere();
public Localization getLocalization();
+
+ /**
+ * To avoid infinite loops when {@link Render.Type#EAGERLY eagerly} rendering graphs
+ * of objects as {@link DomainObjectReprRenderer#asEventSerialization() events}.
+ *
+ * <p>
+ * @param objectAdapter - the object proposed to be rendered eagerly
+ * @return whether this adapter has already been rendered (implying the caller should not render the value).
+ */
+ public boolean canEagerlyRender(ObjectAdapter objectAdapter);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/1ba8a4b1/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
index 84c8ef4..936e207 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
@@ -16,7 +16,7 @@
*/
package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
-import javax.ws.rs.core.MediaType;
+import org.codehaus.jackson.node.NullNode;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -30,12 +30,11 @@ import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
-import org.codehaus.jackson.node.NullNode;
public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbstract<R, ObjectAndMember<T>>, T extends ObjectMember> extends ReprRendererAbstract<R, ObjectAndMember<T>> {
protected enum Mode {
- INLINE, FOLLOWED, STANDALONE, MUTATED, ARGUMENTS;
+ INLINE, FOLLOWED, STANDALONE, MUTATED, ARGUMENTS, EVENT_SERIALIZATION;
public boolean isInline() {
return this == INLINE;
@@ -56,6 +55,10 @@ public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbs
public boolean isArguments() {
return this == ARGUMENTS;
}
+
+ public boolean isEventSerialization() {
+ return this == EVENT_SERIALIZATION;
+ }
}
protected ObjectAdapterLinkTo linkTo;
@@ -113,6 +116,11 @@ public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbs
return cast(this);
}
+ public R asEventSerialization() {
+ mode = Mode.EVENT_SERIALIZATION;
+ return cast(this);
+ }
+
/**
* Indicate that this is a representation to include as the result of a
* followed link.
http://git-wip-us.apache.org/repos/asf/isis/blob/1ba8a4b1/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index eefb967..caed176 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -89,6 +89,10 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
public boolean checkVisibility() {
return checkVisibility;
}
+
+ public boolean isEventSerialization() {
+ return this == EVENT_SERIALIZATION;
+ }
}
private ObjectAdapterLinkTo linkToBuilder;
@@ -164,7 +168,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
if (!mode.representsArguments()) {
// update/persist
addPersistLinkIfTransientAndPersistable();
- addUpdatePropertiesLinkIfPersistentAndNotService();
+ addUpdatePropertiesLinkIfRequired();
// extensions
final boolean isService = objectAdapter.getSpecification().isService();
@@ -217,7 +221,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
final List<ObjectAssociation> associations = objectAdapter.getSpecification().getAssociations();
addAssociations(objectAdapter, members, associations);
- if (!mode.representsArguments()) {
+ if (!mode.representsArguments() && !mode.isEventSerialization()) {
final List<ObjectAction> actions = objectAdapter.getSpecification().getObjectActions(Contributed.INCLUDED);
addActions(objectAdapter, actions, members);
}
@@ -245,6 +249,9 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
if (mode.representsArguments()) {
renderer.asArguments();
}
+ if(mode.isEventSerialization()) {
+ renderer.asEventSerialization();
+ }
members.mapPut(assoc.getId(), renderer.render());
}
@@ -259,6 +266,9 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(getRendererContext(), linkFollower, collection.getId(), JsonRepresentation.newMap());
renderer.with(new ObjectAndCollection(objectAdapter, collection)).usingLinkTo(linkToBuilder);
+ if(mode.isEventSerialization()) {
+ renderer.asEventSerialization();
+ }
members.mapPut(assoc.getId(), renderer.render());
}
@@ -320,7 +330,10 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
}
- private void addUpdatePropertiesLinkIfPersistentAndNotService() {
+ private void addUpdatePropertiesLinkIfRequired() {
+ if(mode.isEventSerialization()) {
+ return;
+ }
if (!objectAdapter.representsPersistent()) {
return;
}
@@ -340,26 +353,6 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
//
// ///////////////////////////////////////////////////////////////////
- public static void appendValueAndFormatOrRef(final RendererContext resourceContext, final ObjectAdapter objectAdapter, final ObjectSpecification objectSpec, JsonRepresentation repr) {
-
- final ValueFacet valueFacet = objectSpec.getFacet(ValueFacet.class);
- if (valueFacet != null) {
- JsonValueEncoder.appendValueAndFormat(objectSpec, objectAdapter, repr);
- return;
- }
-
- if(objectAdapter == null) {
- repr.mapPut("value", NullNode.getInstance());
- } else {
- final TitleFacet titleFacet = objectSpec.getFacet(TitleFacet.class);
- final String title = titleFacet.title(objectAdapter, resourceContext.getLocalization());
- JsonRepresentation ref = DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.VALUE, objectAdapter).withTitle(title).build();
-
- repr.mapPut("value", ref);
- }
-
- }
-
public static Object valueOrRef(final RendererContext resourceContext, final ObjectAdapter objectAdapter, final ObjectSpecification objectSpec) {
final ValueFacet valueFacet = objectSpec.getFacet(ValueFacet.class);
if (valueFacet != null) {
http://git-wip-us.apache.org/repos/asf/isis/blob/1ba8a4b1/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
index 4a7371a..ad102d2 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
@@ -48,10 +48,12 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
// id and memberType are rendered eagerly
renderMemberContent();
- if (mode.isStandalone() || mode.isMutated() || !objectAdapter.representsPersistent()) {
+ if (mode.isStandalone() || mode.isMutated() || mode.isEventSerialization() || !objectAdapter.representsPersistent()) {
addValue();
}
- putDisabledReasonIfDisabled();
+ if(!mode.isEventSerialization()) {
+ putDisabledReasonIfDisabled();
+ }
if (mode.isStandalone() || mode.isMutated()) {
addExtensionsIsisProprietaryChangedObjects();
@@ -71,7 +73,7 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
}
final RenderFacet renderFacet = objectMember.getFacet(RenderFacet.class);
- boolean eagerlyRender = renderFacet != null && renderFacet.value() == Type.EAGERLY;
+ boolean eagerlyRender = renderFacet != null && renderFacet.value() == Type.EAGERLY && rendererContext.canEagerlyRender(valueAdapter);
final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(valueAdapter);
final List<JsonRepresentation> list = Lists.newArrayList();
@@ -81,6 +83,10 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
if(eagerlyRender) {
final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), getLinkFollowSpecs(), JsonRepresentation.newMap());
renderer.with(elementAdapter);
+ if(mode.isEventSerialization()) {
+ renderer.asEventSerialization();
+ }
+
valueLinkBuilder.withValue(renderer.render());
}
@@ -148,4 +154,5 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
getExtensions().mapPut("collectionSemantics", semantics.name().toLowerCase());
}
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/1ba8a4b1/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
index d83134c..69cb666 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
@@ -20,12 +20,17 @@ import java.util.List;
import java.util.Map;
import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.annotation.Render.Type;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facets.members.resolve.RenderFacet;
+import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
+import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.Rel;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
+import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.PropertyDescriptionReprRenderer;
@@ -64,11 +69,40 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
final ObjectAdapter valueAdapter = objectMember.get(objectAdapter);
// use the runtime type if we have a value, else the compile time type of the member otherwise
- final ObjectSpecification specification = valueAdapter != null? valueAdapter.getSpecification(): objectMember.getSpecification();
+ final ObjectSpecification spec = valueAdapter != null? valueAdapter.getSpecification(): objectMember.getSpecification();
- DomainObjectReprRenderer.appendValueAndFormatOrRef(rendererContext, valueAdapter, specification, representation);
+ final ValueFacet valueFacet = spec.getFacet(ValueFacet.class);
+ if (valueFacet != null) {
+ JsonValueEncoder.appendValueAndFormat(spec, valueAdapter, representation);
+ return;
+ }
+
+ final RenderFacet renderFacet = objectMember.getFacet(RenderFacet.class);
+ boolean eagerlyRender = renderFacet != null && renderFacet.value() == Type.EAGERLY && rendererContext.canEagerlyRender(valueAdapter);
+
+ if(valueAdapter == null) {
+ representation.mapPut("value", NullNode.getInstance());
+ } else {
+ final TitleFacet titleFacet = spec.getFacet(TitleFacet.class);
+ final String title = titleFacet.title(valueAdapter, rendererContext.getLocalization());
+
+ final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer.newLinkToBuilder(rendererContext, Rel.VALUE, valueAdapter).withTitle(title);
+ if(eagerlyRender) {
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(rendererContext, getLinkFollowSpecs(), JsonRepresentation.newMap());
+ renderer.with(valueAdapter);
+ if(mode.isEventSerialization()) {
+ renderer.asEventSerialization();
+ }
+
+ valueLinkBuilder.withValue(renderer.render());
+ }
+
+ representation.mapPut("value", valueLinkBuilder.build());
+ }
}
+
+
// ///////////////////////////////////////////////////
// details link
// ///////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/1ba8a4b1/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/eventserializer/EventSerializerRendererContext.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/eventserializer/EventSerializerRendererContext.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/eventserializer/EventSerializerRendererContext.java
index a62314f..d0731ca 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/eventserializer/EventSerializerRendererContext.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/eventserializer/EventSerializerRendererContext.java
@@ -20,11 +20,17 @@ package org.apache.isis.viewer.restfulobjects.rendering.eventserializer;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.profiles.Localization;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
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;
@@ -74,5 +80,12 @@ public class EventSerializerRendererContext implements RendererContext {
return IsisContext.getLocalization();
}
+ private Set<Oid> rendered = Sets.newHashSet();
+ @Override
+ public boolean canEagerlyRender(ObjectAdapter objectAdapter) {
+ final Oid oid = objectAdapter.getOid();
+ return rendered.add(oid);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/1ba8a4b1/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
index 16edd2c..b9204c3 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
@@ -22,6 +22,7 @@ import java.io.InputStream;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -37,6 +38,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
@@ -51,6 +53,7 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
public class ResourceContext implements RendererContext {
@@ -281,6 +284,12 @@ public class ResourceContext implements RendererContext {
return where;
}
+ private Set<Oid> rendered = Sets.newHashSet();
+ @Override
+ public boolean canEagerlyRender(ObjectAdapter objectAdapter) {
+ final Oid oid = objectAdapter.getOid();
+ return rendered.add(oid);
+ }
//////////////////////////////////////////////////////////////////
//
@@ -290,4 +299,6 @@ public class ResourceContext implements RendererContext {
return getUriInfo().getBaseUri().toString() + url;
}
+
+
}