final StringBuffer buf = new StringBuffer();
if (values != null) {
for (int i = 0; i < values.length; i++) {
- if (i > 0) {
- buf.append(VAR_ARRAYITEM_SEPARATOR);
- }
buf.append(values[i]);
+ // there will be an extra separator at the end to differentiate
+ // between an empty array and one containing an empty string
+ // only
+ buf.append(VAR_ARRAYITEM_SEPARATOR);
}
}
addVariableToQueue(paintableId, variableName, buf.toString(),
import java.util.Locale;
import java.util.Map;
import java.util.Set;
+import java.util.StringTokenizer;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
val = convertMap(strValue);
break;
case VTYPE_STRINGARRAY:
- val = strValue.split(VAR_ARRAYITEM_SEPARATOR);
+ val = convertStringArray(strValue);
break;
case VTYPE_STRING:
val = strValue;
return map;
}
+ private String[] convertStringArray(String strValue) {
+ // need to return delimiters and filter them out; otherwise empty
+ // strings are lost
+ // an extra empty delimiter at the end is automatically eliminated
+ StringTokenizer tokenizer = new StringTokenizer(strValue,
+ VAR_ARRAYITEM_SEPARATOR, true);
+ List<String> tokens = new ArrayList<String>();
+ String prevToken = VAR_ARRAYITEM_SEPARATOR;
+ while (tokenizer.hasMoreTokens()) {
+ String token = tokenizer.nextToken();
+ if (!VAR_ARRAYITEM_SEPARATOR.equals(token)) {
+ tokens.add(token);
+ } else if (VAR_ARRAYITEM_SEPARATOR.equals(prevToken)) {
+ tokens.add("");
+ }
+ prevToken = token;
+ }
+ return tokens.toArray(new String[tokens.size()]);
+ }
+
private Object convertArray(String strValue) {
String[] val = strValue.split(VAR_ARRAYITEM_SEPARATOR);
if (val.length == 0 || (val.length == 1 && val[0].length() == 0)) {