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/07/29 15:08:46 UTC
git commit: ISIS-479: further fixes for joda dates
Updated Branches:
refs/heads/master eef0cb94a -> 719f4a82c
ISIS-479: further fixes for joda dates
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/719f4a82
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/719f4a82
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/719f4a82
Branch: refs/heads/master
Commit: 719f4a82c41de71bff0ea2697fef2c73299ef96e
Parents: eef0cb9
Author: Dan Haywood <da...@apache.org>
Authored: Mon Jul 29 14:05:01 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Mon Jul 29 14:05:01 2013 +0100
----------------------------------------------------------------------
.../domainobjects/JsonValueEncoder.java | 54 ++++++++++++-
component/viewer/restfulobjects/tck/pom.xml | 2 +-
...henArgsValid_thenMultiplePropertyUpdate.java | 81 ++++++++++++++++++--
.../core/tck/dom/scalars/JodaValuedEntity.java | 20 ++++-
.../scalars/JodaValuedEntityFixture.java | 2 +
5 files changed, 150 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/719f4a82/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 7a6a9a0..d483b97 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
@@ -103,6 +103,16 @@ public final class JsonValueEncoder {
}
static {
+ putConverter(new JsonValueConverter(null, "string", String.class){
+ @Override
+ public ObjectAdapter asAdapter(JsonRepresentation repr) {
+ if (repr.isString()) {
+ return adapterFor(repr.asString());
+ }
+ return null;
+ }
+ });
+
putConverter(new JsonValueConverter(null, "boolean", boolean.class, Boolean.class){
@Override
public ObjectAdapter asAdapter(JsonRepresentation repr) {
@@ -297,6 +307,10 @@ public final class JsonValueEncoder {
}
return null;
}
+ @Override
+ public void appendValueAndFormat(ObjectAdapter objectAdapter, JsonRepresentation repr) {
+ super.appendValueAndFormat(objectAdapter, repr);
+ }
});
putConverter(new JsonValueConverter("date", "jodalocaldate", LocalDate.class){
@@ -374,6 +388,44 @@ public final class JsonValueEncoder {
}
});
+ putConverter(new JsonValueConverter("date-time", "jodadatetime", DateTime.class){
+
+ final List<DateTimeFormatter> formatters = Arrays.asList(
+ JsonRepresentation.yyyyMMddTHHmmssZ,
+ DateTimeFormat.forPattern("yyyyMMdd'T'HHmmssZ"),
+ ISODateTimeFormat.basicDateTimeNoMillis(),
+ ISODateTimeFormat.basicDateTime()
+ );
+
+ @Override
+ public ObjectAdapter asAdapter(JsonRepresentation repr) {
+ if (repr.isString()) {
+ final String dateStr = repr.asString();
+ for (DateTimeFormatter formatter : formatters) {
+ try {
+ final DateTime parsedDate = formatter.parseDateTime(dateStr);
+ return adapterFor(parsedDate);
+ } catch (IllegalArgumentException ex) {
+ // fall through
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public void appendValueAndFormat(ObjectAdapter objectAdapter, JsonRepresentation repr) {
+ final Object obj = unwrap(objectAdapter);
+ if(obj instanceof DateTime) {
+ final DateTime date = (DateTime) obj;
+ final String dateStr = formatters.get(0).print(date.toDateTime());
+ append(repr, dateStr, format, xIsisFormat);
+ } else {
+ append(repr, obj, format, xIsisFormat);
+ }
+ }
+ });
+
putConverter(new JsonValueConverter("date", "javautildate", java.util.Date.class){
final List<DateTimeFormatter> formatters = Arrays.asList(
@@ -591,7 +643,7 @@ public final class JsonValueEncoder {
throw new IllegalArgumentException("objectSpec expected to have EncodableFacet");
}
Object value = objectAdapter != null? encodableFacet.toEncodedString(objectAdapter): NullNode.getInstance();
- append(repr, value, "decimal", "bigdecimal");
+ append(repr, value, "string", "string");
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/719f4a82/component/viewer/restfulobjects/tck/pom.xml
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/pom.xml b/component/viewer/restfulobjects/tck/pom.xml
index c1fcf09..32e24bf 100644
--- a/component/viewer/restfulobjects/tck/pom.xml
+++ b/component/viewer/restfulobjects/tck/pom.xml
@@ -22,7 +22,7 @@
<parent>
<groupId>org.apache.isis.core</groupId>
<artifactId>isis-core-tck</artifactId>
- <version>1.2.0</version>
+ <version>1.3.0-SNAPSHOT</version>
<relativePath>../../../../core/tck/pom.xml</relativePath>
</parent>
http://git-wip-us.apache.org/repos/asf/isis/blob/719f4a82/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Put_whenArgsValid_thenMultiplePropertyUpdate.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Put_whenArgsValid_thenMultiplePropertyUpdate.java b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Put_whenArgsValid_thenMultiplePropertyUpdate.java
index 70b2455..a5051a7 100644
--- a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Put_whenArgsValid_thenMultiplePropertyUpdate.java
+++ b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Put_whenArgsValid_thenMultiplePropertyUpdate.java
@@ -31,6 +31,9 @@ import javax.ws.rs.core.Response.Status.Family;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
+import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
+import org.joda.time.LocalDateTime;
import org.joda.time.format.ISODateTimeFormat;
import org.junit.Before;
import org.junit.Ignore;
@@ -65,7 +68,6 @@ public class Put_whenArgsValid_thenMultiplePropertyUpdate {
domainObjectResource = client.getDomainObjectResource();
}
- @Ignore
@Test
public void primitivePropertiesUpdated() throws Exception {
@@ -185,7 +187,8 @@ public class Put_whenArgsValid_thenMultiplePropertyUpdate {
argRepr.mapPut("javaUtilDateProperty.value", asIso(d));
argRepr.mapPut("myEnum.value", e);
argRepr.mapPut("stringProperty.value", s);
- RestfulResponse<JsonRepresentation> result = client.follow(updateLink, argRepr);
+
+ final RestfulResponse<JsonRepresentation> result = client.follow(updateLink, argRepr);
assertThat(result.getStatus(), is(HttpStatusCode.OK));
final DomainObjectRepresentation afterResp = result.getEntity().as(DomainObjectRepresentation.class);
@@ -202,16 +205,84 @@ public class Put_whenArgsValid_thenMultiplePropertyUpdate {
}
+ @Test
+ public void jodaPropertiesUpdated() throws Exception {
+
+ final DomainObjectRepresentation domainObjectRepr = getObjectRepr("JODA", "73");
+
+ final LinkRepresentation updateLink = domainObjectRepr.getLinkWithRel(Rel.UPDATE);
+
+ final JsonRepresentation argRepr = updateLink.getArguments();
+
+ // {
+ // localDateProperty: {
+ // value: "2008-03-21",
+ // format: "date",
+ // x-isis-format: "jodalocaldate"
+ // },
+ // localDateTimeProperty: {
+ // value: "2009-04-29T13:45:22+0100",
+ // format: "date-time",
+ // x-isis-format: "jodalocaldatetime"
+ // },
+ // dateTimeProperty: {
+ // value: "2010-03-31T09:50:43",
+ // format: "date-time",
+ // x-isis-format: "jodalocaldatetime"
+ // },
+ // stringProperty: {
+ // value: null,
+ // x-isis-format: "string"
+ // }
+ // }
+
+ final LocalDate ld = new LocalDate(2013,5,1);
+ final LocalDateTime ldt = new LocalDateTime(2013,2,1,14,15,0);
+ final DateTime dt = new DateTime(2013,2,1,14,15,0);
+ final String s = "New string";
+
+ argRepr.mapPut("localDateProperty.value", asIsoNoT(ld.toDate()));
+ argRepr.mapPut("localDateTimeProperty.value", asIso(ldt.toDate()));
+ argRepr.mapPut("dateTimeProperty.value", asIso(dt.toDate()));
+ argRepr.mapPut("stringProperty.value", s);
+
+ final RestfulResponse<JsonRepresentation> result = client.follow(updateLink, argRepr);
+ assertThat(result.getStatus(), is(HttpStatusCode.OK));
+
+ final DomainObjectRepresentation afterResp = result.getEntity().as(DomainObjectRepresentation.class);
+
+ assertThat(afterResp.getProperty("localDateProperty").getDate("value"), is(ld.toDate()));
+ assertThat(afterResp.getProperty("localDateTimeProperty").getDateTime("value"), is(ldt.toDate()));
+ assertThat(afterResp.getProperty("dateTimeProperty").getDateTime("value"), is(dt.toDate()));
+ assertThat(afterResp.getProperty("stringProperty").getString("value"), is(s));
+ }
+
private static String asIso(final java.util.Date d) {
- return ISODateTimeFormat.basicDateTimeNoMillis().print(new org.joda.time.DateTime(d.getTime()));
+ final org.joda.time.DateTime dt = new org.joda.time.DateTime(d.getTime());
+ return asIso(dt);
+ }
+
+ private static String asIso(final org.joda.time.DateTime dt) {
+ return ISODateTimeFormat.basicDateTimeNoMillis().print(dt);
}
+
private static String asIsoNoT(final java.util.Date d) {
- return ISODateTimeFormat.basicDate().print(new org.joda.time.DateTime(d.getTime()));
+ final org.joda.time.DateTime dt = new org.joda.time.DateTime(d.getTime());
+ return asIsoNoT(dt);
+ }
+
+ private static String asIsoNoT(final org.joda.time.DateTime dt) {
+ return ISODateTimeFormat.basicDate().print(dt);
}
private static String asIsoOnlyT(final java.util.Date d) {
- return ISODateTimeFormat.basicTime().print(new org.joda.time.DateTime(d.getTime()));
+ final org.joda.time.DateTime dt = new org.joda.time.DateTime(d.getTime());
+ return asIsoOnlyT(dt);
+ }
+
+ private static String asIsoOnlyT(final org.joda.time.DateTime dt) {
+ return ISODateTimeFormat.basicTime().print(dt);
}
private DomainObjectRepresentation getObjectRepr(final String domainType, final String instanceId) throws JsonParseException, JsonMappingException, IOException {
http://git-wip-us.apache.org/repos/asf/isis/blob/719f4a82/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/JodaValuedEntity.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/JodaValuedEntity.java b/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/JodaValuedEntity.java
index 70a5e6d..df52936 100644
--- a/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/JodaValuedEntity.java
+++ b/core/tck/tck-dom/src/main/java/org/apache/isis/core/tck/dom/scalars/JodaValuedEntity.java
@@ -23,6 +23,7 @@ import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
+import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
@@ -51,8 +52,8 @@ public class JodaValuedEntity extends AbstractDomainObject {
return stringProperty;
}
- public void setStringProperty(final String description) {
- this.stringProperty = description;
+ public void setStringProperty(final String stringProperty) {
+ this.stringProperty = stringProperty;
}
// }}
@@ -85,6 +86,21 @@ public class JodaValuedEntity extends AbstractDomainObject {
this.localDateTimeProperty = localDateTimeProperty;
}
// }}
+
+
+ // {{ DateTimeProperty
+ private DateTime dateTimeProperty;
+
+ @Optional
+ @MemberOrder(sequence = "1")
+ public DateTime getDateTimeProperty() {
+ return dateTimeProperty;
+ }
+
+ public void setDateTimeProperty(final DateTime dateTimeProperty) {
+ this.dateTimeProperty = dateTimeProperty;
+ }
+ // }}
http://git-wip-us.apache.org/repos/asf/isis/blob/719f4a82/core/tck/tck-fixture/src/main/java/org/apache/isis/core/tck/fixture/scalars/JodaValuedEntityFixture.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-fixture/src/main/java/org/apache/isis/core/tck/fixture/scalars/JodaValuedEntityFixture.java b/core/tck/tck-fixture/src/main/java/org/apache/isis/core/tck/fixture/scalars/JodaValuedEntityFixture.java
index 720b847..8ca8b37 100644
--- a/core/tck/tck-fixture/src/main/java/org/apache/isis/core/tck/fixture/scalars/JodaValuedEntityFixture.java
+++ b/core/tck/tck-fixture/src/main/java/org/apache/isis/core/tck/fixture/scalars/JodaValuedEntityFixture.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.tck.fixture.scalars;
+import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
@@ -41,6 +42,7 @@ public class JodaValuedEntityFixture extends AbstractFixture {
final JodaValuedEntity jve = jodaValuesEntityRepository.newEntity();
jve.setLocalDateProperty(new LocalDate(2008,3,21));
jve.setLocalDateTimeProperty(new LocalDateTime(2009, 4, 29, 13, 45, 22));
+ jve.setDateTimeProperty(new DateTime(2010, 3, 31, 9, 50, 43));
return jve;
}