Author: matthieu
Date: Fri Dec 11 10:07:24 2015
New Revision: 1719317

URL: http://svn.apache.org/viewvc?rev=1719317&view=rev
Log:
JAMES-1644 simplier continuation token parsing

Modified:
    
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/ContinuationToken.java

Modified: 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/ContinuationToken.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/ContinuationToken.java?rev=1719317&r1=1719316&r2=1719317&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/ContinuationToken.java
 (original)
+++ 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/ContinuationToken.java
 Fri Dec 11 10:07:24 2015
@@ -19,31 +19,79 @@
 
 package org.apache.james.jmap.model;
 
+import java.time.DateTimeException;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.LinkedList;
+import java.util.NoSuchElementException;
+import java.util.Objects;
+
+import org.apache.james.jmap.exceptions.MalformedContinuationTokenException;
+
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-import org.apache.james.jmap.exceptions.MalformedContinuationTokenException;
-
-import java.time.DateTimeException;
-import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Objects;
 
 public class ContinuationToken {
 
     public static final String SEPARATOR = "_";
 
+    public static Builder builder() {
+        return new Builder();
+    }
+    
+    public static class Builder {
+        private String username;
+        private ZonedDateTime expirationDate;
+        private String signature;
+
+        private Builder() {}
+        
+        public Builder username(String username) {
+            this.username = username;
+            return this;
+        }
+
+        public Builder expirationDate(ZonedDateTime expirationDate) {
+            this.expirationDate = expirationDate;
+            return this;
+        }
+
+        public Builder signature(String signature) {
+            this.signature = signature;
+            return this;
+        }
+
+        public ContinuationToken build() {
+            return new ContinuationToken(username, expirationDate, signature);
+        }
+    }
+    
+    public static ContinuationToken fromString(String serializedToken) throws 
MalformedContinuationTokenException {
+        Preconditions.checkArgument(!Strings.isNullOrEmpty(serializedToken), 
"Serialized continuation token should not be null or empty");
+        LinkedList<String> tokenParts = 
Lists.newLinkedList(Splitter.on(SEPARATOR).split(serializedToken));
+        try {
+            return ContinuationToken.builder()
+                    .signature(tokenParts.removeLast())
+                    
.expirationDate(ZonedDateTime.parse(tokenParts.removeLast(), 
DateTimeFormatter.ISO_OFFSET_DATE_TIME))
+                    .username(Joiner.on(SEPARATOR).join(tokenParts))
+                    .build();
+        } catch (NoSuchElementException | IllegalArgumentException e) {
+            throw new MalformedContinuationTokenException("Token " + 
serializedToken + " does not have enough parts", e);
+        } catch(DateTimeException e) {
+            throw new MalformedContinuationTokenException("Token " + 
serializedToken + " as an incorrect date", e);
+        }
+    }
+
     private final String username;
     private final ZonedDateTime expirationDate;
     private final String signature;
 
     public ContinuationToken(String username, ZonedDateTime expirationDate, 
String signature) {
         Preconditions.checkNotNull(username);
+        Preconditions.checkArgument(! username.isEmpty());
         Preconditions.checkNotNull(expirationDate);
         Preconditions.checkNotNull(signature);
         this.username = username;
@@ -51,30 +99,6 @@ public class ContinuationToken {
         this.signature = signature;
     }
 
-    public static ContinuationToken fromString(String serializedToken) throws 
MalformedContinuationTokenException {
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(serializedToken), 
"Serialized continuation token should not be null or empty");
-        ImmutableList<String> tokenParts = 
ImmutableList.copyOf(Splitter.on(SEPARATOR).split(serializedToken));
-        if (tokenParts.size() < 3) {
-            throw new MalformedContinuationTokenException("Token " + 
serializedToken + " does not have enough parts");
-        }
-        Iterator<String> tokenPartsReversedIterator = 
tokenParts.reverse().iterator();
-        String signature = tokenPartsReversedIterator.next();
-        String expirationDateString = tokenPartsReversedIterator.next();
-        String username = retrieveUsername(tokenPartsReversedIterator);
-        try {
-            return new ContinuationToken(username,
-                ZonedDateTime.parse(expirationDateString, 
DateTimeFormatter.ISO_OFFSET_DATE_TIME),
-                signature);
-        } catch(DateTimeException e) {
-            throw new MalformedContinuationTokenException("Token " + 
serializedToken + " as an incorrect date", e);
-        }
-    }
-
-    private static String retrieveUsername(Iterator<String> 
reversedIteratorOnUsernameParts) {
-        List<String> usernamePart = 
ImmutableList.copyOf(Lists.newArrayList(reversedIteratorOnUsernameParts)).reverse();
-        return Joiner.on(SEPARATOR).join(usernamePart);
-    }
-
     public String getUsername() {
         return username;
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to