/*
* This file is part of the OWASP Proxy, a free intercepting proxy library.
* Copyright (C) 2008-2010 Rogan Dawes <rogan@dawes.za.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to:
* The Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
package org.owasp.proxy.http;
public class NamedValue {
private String name;
private String separator;
private String value;
public NamedValue(String name, String separator, String value) {
this.name = name;
this.separator = separator;
this.value = value;
}
public String getName() {
return name;
}
public String getSeparator() {
return separator;
}
public String getValue() {
return this.value;
}
@Override
public String toString() {
return (name == null ? "" : name)
+ (separator == null ? "" : separator)
+ (value == null ? "" : value);
}
/**
* parses a string into a NamedValue
*
* @param string
* the string to parse
* @param separator
* a regular expression specifying the separator between the name and the value
* @return a NamedValue containing the parsed name, separator, and value
* @throws MessageFormatException
* if the separator couldn't be found, or if the name and value could not be parsed
*/
public static NamedValue parse(String string, String separator)
throws MessageFormatException {
String[] parts = string.split(separator, 2);
if (parts.length == 2) {
String sep = string.substring(parts[0].length(), string.length()
- parts[1].length());
return new NamedValue(parts[0], sep, parts[1]);
} else if (parts.length == 1) {
if (parts[0].length() < string.length()) {
String sep = string.substring(parts[0].length(), string
.length());
return new NamedValue(parts[0], sep, "");
} else {
return new NamedValue(parts[0], null, null);
}
}
throw new MessageFormatException("Error parsing '" + string
+ "' into a NamedValue using '" + separator + "'");
}
public static NamedValue[] parse(String string, String delimiter,
String separator) throws MessageFormatException {
if (string == null)
return null;
String[] nvs = string.split(delimiter);
NamedValue[] values = new NamedValue[nvs.length];
for (int i = 0; i < values.length; i++)
values[i] = parse(nvs[i], separator);
return values;
}
/**
* Joins multiple NamedValues into a single String
*
* @param values
* the values to join
* @param separator
* the separator between the values
* @return a string containing the joined values
*/
public static String join(NamedValue[] values, String separator) {
StringBuilder buff = new StringBuilder();
for (int i = 0; i < values.length; i++) {
buff.append(values[i]);
if (i < values.length - 1)
buff.append(separator);
}
return buff.toString();
}
public static String findValue(NamedValue[] values, String name) {
if (values == null || values.length == 0)
return null;
for (int i = 0; i < values.length; i++)
if (name.equals(values[i].getName()))
return values[i].getValue();
return null;
}
}