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