package org.nutz.lang.meta;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
/**
* 简便的名值对实现
*
* @author zozoh(zozohtnt@gmail.com)
*/
public class Pair<T> {
public static Pair<String> create(String s) {
String[] ss = Strings.splitIgnoreBlank(s, "=");
String name = null;
String value = null;
String pattern = PTN_3;
if (null != ss)
if (ss.length == 1) {
name = ss[0];
} else if (ss.length == 2) {
name = ss[0];
if (ss[1].length() > 0) {
if (ss[1].charAt(0) == '"') {
value = ss[1].substring(1, ss[1].length() - 1);
pattern = PTN_3;
} else if (ss[1].charAt(0) == '\'') {
value = ss[1].substring(1, ss[1].length() - 1);
pattern = PTN_2;
} else {
value = ss[1];
pattern = PTN_1;
}
}
}
Pair<String> re = new Pair<String>(name, value);
re.pattern = pattern;
return re;
}
public Pair() {}
private static final String PTN_1 = "%s=%s";
private static final String PTN_2 = "%s='%s'";
private static final String PTN_3 = "%s=\"%s\"";
public Pair(String name, T value) {
this.name = name;
this.value = value;
pattern = PTN_3;
}
private String name;
private T value;
private String pattern;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public T getValue() {
return value;
}
public String getValueString() {
return value == null ? null : value.toString();
}
public void setValue(T value) {
this.value = value;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj instanceof Pair<?>)
if (Strings.equals(((Pair<?>) obj).name, name))
return Lang.equals(((Pair<?>) obj).value, value);
return false;
}
@Override
public int hashCode() {
return value.hashCode();
}
@Override
public String toString() {
String v = null == value ? "" : value.toString();
v = v.replace("\"", """);
return String.format(pattern, name, v);
}
}