You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2011/12/21 23:16:53 UTC
svn commit: r1221908 - in /abdera/abdera2:
common/src/main/java/org/apache/abdera2/common/http/Preference.java
test/src/main/java/org/apache/abdera2/test/common/http/PreferenceTest.java
Author: jmsnell
Date: Wed Dec 21 22:16:52 2011
New Revision: 1221908
URL: http://svn.apache.org/viewvc?rev=1221908&view=rev
Log:
Fixes...
Modified:
abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/Preference.java
abdera/abdera2/test/src/main/java/org/apache/abdera2/test/common/http/PreferenceTest.java
Modified: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/Preference.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/Preference.java?rev=1221908&r1=1221907&r2=1221908&view=diff
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/Preference.java (original)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/http/Preference.java Wed Dec 21 22:16:52 2011
@@ -159,6 +159,10 @@ public class Preference implements Seria
return this;
}
+ public Builder param(String key) {
+ return param(key,"");
+ }
+
public Builder param(String key, String val) {
checkNotNull(key);
key = key.toLowerCase(Locale.US);
@@ -306,7 +310,7 @@ public class Preference implements Seria
StringBuilder buf = new StringBuilder();
buf.append(token);
- if (value != null) {
+ if (value != null && value.length() > 0) {
String encval = Codec.encode(value, Codec.STAR);
if (value.equals(encval)) {
buf.append('=')
@@ -320,16 +324,18 @@ public class Preference implements Seria
for (Map.Entry<String, String> entry : params.entrySet()) {
String val = entry.getValue();
- String encval = Codec.encode(val,Codec.STAR);
+ String encval = val != null ? Codec.encode(val,Codec.STAR) : null;
buf.append(';')
.append(entry.getKey());
- if (!val.equals(encval)) {
- buf.append('*')
- .append('=')
- .append(encval);
- } else {
- buf.append('=')
- .append(quotedIfNotToken(val));
+ if (val != null && val.length() > 0) {
+ if (!val.equals(encval)) {
+ buf.append('*')
+ .append('=')
+ .append(encval);
+ } else {
+ buf.append('=')
+ .append(quotedIfNotToken(val));
+ }
}
}
@@ -337,7 +343,7 @@ public class Preference implements Seria
}
private final static String TOKEN = "[\\!\\#\\$\\%\\&\\'\\*\\+\\-\\.\\^\\_\\`\\|\\~a-zA-Z0-9]+";
- private final static String PREF = TOKEN+"(?:\\s*=\\s*(?:(?:\"[^\"]+\")|(?:"+TOKEN+")))?";
+ private final static String PREF = TOKEN+"(?:\\s*=\\s*(?:(?:\"[^\"]+\")|(?:"+TOKEN+"))?)?";
private final static String PARAMS = "(?:\\s*;\\s*" + PREF + ")*";
private final static String PATTERN = "("+PREF+")(" + PARAMS + ")";
@@ -347,33 +353,35 @@ public class Preference implements Seria
Pattern.compile("("+PREF+")");
public static Iterable<Preference> parse(String text) {
- ImmutableList.Builder<Preference> prefs = ImmutableList.builder();
- Matcher matcher = pattern.matcher(text);
- while (matcher.find()) {
- String pref = matcher.group(1);
- String params = matcher.group(2);
- String token = null, tokenval = null;
-
- if (pref != null) {
- String[] ps = pref.split("\\s*=\\s*", 2);
- token = ps[0].trim();
- if (ps.length == 2)
- tokenval = Codec.decode(CharUtils.unquote(ps[1]));
- }
-
- Preference.Builder maker =
- Preference.make().token(token).value(tokenval);
- if (params != null) {
- Matcher mparams = param.matcher(params);
- while(mparams.find()) {
- String p = mparams.group(1);
- String[] ps = p.split("\\s*=\\s*", 2);
- maker.param(ps[0], Codec.decode(CharUtils.unquote(ps[1])));
+ ImmutableList.Builder<Preference> prefs = ImmutableList.builder();
+ Matcher matcher = pattern.matcher(text);
+ while (matcher.find()) {
+ String pref = matcher.group(1);
+ String params = matcher.group(2);
+ String token = null, tokenval = null;
+
+ if (pref != null) {
+ String[] ps = pref.split("\\s*\\*?=\\s*", 2);
+ token = ps[0].trim();
+ if (ps.length == 2)
+ tokenval = Codec.decode(CharUtils.unquote(ps[1]));
}
+
+ Preference.Builder maker =
+ Preference.make().token(token).value(tokenval);
+ if (params != null) {
+ Matcher mparams = param.matcher(params);
+ while(mparams.find()) {
+ String p = mparams.group(1);
+ String[] ps = p.split("\\s*\\*?=\\s*", 2);
+ if (ps.length == 2)
+ maker.param(ps[0], Codec.decode(CharUtils.unquote(ps[1])));
+ else maker.param(ps[0]);
+ }
+ }
+ prefs.add(maker.get());
}
- prefs.add(maker.get());
- }
- return prefs.build();
+ return prefs.build();
}
public static String toString(
Modified: abdera/abdera2/test/src/main/java/org/apache/abdera2/test/common/http/PreferenceTest.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/test/src/main/java/org/apache/abdera2/test/common/http/PreferenceTest.java?rev=1221908&r1=1221907&r2=1221908&view=diff
==============================================================================
--- abdera/abdera2/test/src/main/java/org/apache/abdera2/test/common/http/PreferenceTest.java (original)
+++ abdera/abdera2/test/src/main/java/org/apache/abdera2/test/common/http/PreferenceTest.java Wed Dec 21 22:16:52 2011
@@ -7,6 +7,8 @@ import static org.junit.Assert.assertTru
import org.junit.Test;
+import com.google.common.collect.Iterables;
+
public class PreferenceTest {
@Test
@@ -17,9 +19,9 @@ public class PreferenceTest {
PREF_LENIENT,
WAIT(10),
PREF_RETURN_ASYNCH,
- make("A","B").param("B", "c").param("C","foo bar baz").get());
+ make("A","B").param("B", "c").param("C","fo\u00F6 bar baz").get());
- assertEquals("lenient,wait=10,return-asynch,a=B;b=c;c=\"foo bar baz\"",prefs);
+ assertEquals("lenient,wait=10,return-asynch,a=B;b=c;c*=UTF-8''fo%C3%B6%20bar%20baz",prefs);
Iterable<Preference> list = parse(prefs);
assertTrue(contains(list, WAIT(10)));
@@ -34,9 +36,9 @@ public class PreferenceTest {
assertEquals("B",a.getValue());
assertTrue(a.hasParam("b"));
assertEquals("c",a.getParam("B"));
-
- System.out.println(a.getParam("b"));
- System.out.println(a.getParam("c"));
+ assertEquals("fo\u00F6 bar baz", a.getParam("C"));
+ list = parse("lenient , wait=;foo=");
+ assertEquals(2,Iterables.size(list));
}