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/09/26 16:28:46 UTC
git commit: ISIS-546: oid marshalled can contain '@' in username
Updated Branches:
refs/heads/master 9e550a98f -> 98fa9f2d9
ISIS-546: oid marshalled can contain '@' in username
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/98fa9f2d
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/98fa9f2d
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/98fa9f2d
Branch: refs/heads/master
Commit: 98fa9f2d9204166c1b9168d1f0839dd161d0e61e
Parents: 9e550a9
Author: Dan Haywood <da...@apache.org>
Authored: Thu Sep 26 15:28:31 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Thu Sep 26 15:28:31 2013 +0100
----------------------------------------------------------------------
.../metamodel/adapter/oid/OidMarshaller.java | 18 +++++++------
.../adapter/oid/OidMarshallerTest_marshal.java | 6 +++++
.../oid/OidMarshallerTest_roundtripping.java | 8 ++++--
.../oid/OidMarshallerTest_unmarshal.java | 27 ++++++++++++++++++++
4 files changed, 49 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/98fa9f2d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java
index 459ace9..6ed697b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java
@@ -18,6 +18,8 @@
*/
package org.apache.isis.core.metamodel.adapter.oid;
+import java.net.URISyntaxException;
+import java.net.URLEncoder;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
@@ -83,7 +85,7 @@ public class OidMarshaller {
private static final String SEPARATOR_COLLECTION = "$";
private static final String SEPARATOR_VERSION = "^";
- private static final String WORD = "[^" + SEPARATOR + SEPARATOR_NESTING + SEPARATOR_COLLECTION + "\\" + SEPARATOR_VERSION + "@#" + "]+";
+ private static final String WORD = "[^" + SEPARATOR + SEPARATOR_NESTING + SEPARATOR_COLLECTION + "\\" + SEPARATOR_VERSION + "#" + "]+";
private static final String DIGITS = "\\d+";
private static final String WORD_GROUP = "(" + WORD + ")";
@@ -169,7 +171,7 @@ public class OidMarshaller {
final String collectionName = collectionPart != null ? collectionPart.substring(1) : null;
final String versionSequence = getGroup(matcher, 10);
- final String versionUser = getGroup(matcher, 11);
+ final String versionUser = getGroup(matcher, 11);
final String versionUtcTimestamp = getGroup(matcher, 12);
final Version version = Version.create(versionSequence, versionUser, versionUtcTimestamp);
@@ -194,6 +196,8 @@ public class OidMarshaller {
}
}
+
+
private static class AggregateOidPart {
AggregateOidPart(String objectType, String localId) {
this.objectType = objectType;
@@ -265,15 +269,13 @@ public class OidMarshaller {
if(version == null) {
return "";
}
- return SEPARATOR_VERSION + version.getSequence() + SEPARATOR + Strings.nullToEmpty(version.getUser()) + SEPARATOR + nullToEmpty(version.getUtcTimestamp());
+ final String versionUser = version.getUser();
+ return SEPARATOR_VERSION + version.getSequence() + SEPARATOR + Strings.nullToEmpty(versionUser) + SEPARATOR + nullToEmpty(version.getUtcTimestamp());
}
+
+
private static String nullToEmpty(Object obj) {
return obj == null? "": "" + obj;
}
-
-
-
-
-
}
http://git-wip-us.apache.org/repos/asf/isis/blob/98fa9f2d/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshal.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshal.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshal.java
index b5c8bc1..2e8b4ee 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshal.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshal.java
@@ -60,6 +60,12 @@ public class OidMarshallerTest_marshal {
}
@Test
+ public void rootOid_versionSequenceAndUserThatHasAnAtSymbol() {
+ final String marshal = oidMarshaller.marshal(RootOidDefault.create(ObjectSpecId.of("CUS"), "123", 90807L, "joebloggs@foo.bar"));
+ assertThat(marshal, equalTo("CUS:123^90807:joebloggs%40foo.bar:"));
+ }
+
+ @Test
public void rootOid_versionSequenceAndUtc() {
final String marshal = oidMarshaller.marshal(RootOidDefault.create(ObjectSpecId.of("CUS"), "123", 90807L, 3453452141L));
assertThat(marshal, equalTo("CUS:123^90807::3453452141"));
http://git-wip-us.apache.org/repos/asf/isis/blob/98fa9f2d/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
index 6a37f13..4e09024 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
@@ -62,13 +62,17 @@ public class OidMarshallerTest_roundtripping {
@Test
public void aggregatedOid_withVersion() {
- RootOid parentOid = RootOidDefault.create(ObjectSpecId.of("CUS"), "123", 90807L);
+ RootOid parentOid = RootOidDefault.create(ObjectSpecId.of("CUS"), "123", 90807L, "fred@foo.bar", 123123123L);
AggregatedOid oid = new AggregatedOid(ObjectSpecId.of("CUS"), parentOid, "456");
final String enString = oid.enString(oidMarshaller);
final AggregatedOid deString = AggregatedOid.deString(enString, oidMarshaller);
assertThat(deString, is(oid));
- assertThat(deString.getVersion(), is(oid.getVersion())); // assert separately because not part of equality check
+
+ // assert each of remaining separately because not part of respective equality checks
+ assertThat(deString.getVersion(), is(oid.getVersion()));
+ assertThat(deString.getVersion().getUser(), is(oid.getVersion().getUser()));
+ assertThat(deString.getVersion().getUtcTimestamp(), is(oid.getVersion().getUtcTimestamp()));
}
http://git-wip-us.apache.org/repos/asf/isis/blob/98fa9f2d/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
index fc3f65d..3cf4d21 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
@@ -104,6 +104,33 @@ public class OidMarshallerTest_unmarshal {
assertThat(oid, equalTo((Oid)rootOid));
}
+ @Test
+ public void persistentRootWithVersionAndUserAndTimestamp() {
+ final String oidStr = "CUS:123^90809:fredbloggs:1231231232";
+
+ final RootOidDefault rootOid = oidMarshaller.unmarshal(oidStr, RootOidDefault.class);
+ assertThat(rootOid.isTransient(), is(false));
+ assertThat(rootOid.getObjectSpecId(), is(ObjectSpecId.of("CUS")));
+ assertThat(rootOid.getIdentifier(), is("123"));
+ assertThat(rootOid.getVersion().getSequence(), is(90809L));
+ assertThat(rootOid.getVersion().getUser(), is("fredbloggs"));
+ assertThat(rootOid.getVersion().getUtcTimestamp(), is(1231231232L));
+
+ final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
+ assertThat(oid, equalTo((Oid)rootOid));
+ }
+
+ @Test
+ public void persistentRootWithVersionAndUserWithAtSymbol() {
+ final String oidStr = "CUS:123^90809:fredbloggs@foo.bar:";
+
+ final RootOidDefault rootOid = oidMarshaller.unmarshal(oidStr, RootOidDefault.class);
+ assertThat(rootOid.getVersion().getUser(), is("fredbloggs@foo.bar"));
+
+ final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
+ assertThat(oid, equalTo((Oid)rootOid));
+ }
+
@Test(expected=IllegalArgumentException.class)
public void persistentRootWithNonNumericVersion() {