/*
* NameValue.java
*
* Created on April 16, 2001, 12:22 PM
*/
package org.limewire.util;
import java.util.Map;
/**
* Holds a name value pair. The name is an instance of <code>String</code>, the
* value can be any object.
*
* <pre>
NameValue.ComparableByName<String> cbnDriver = new NameValue.ComparableByName<String>("Driver's License", "Alaska");
NameValue.ComparableByName<String> cbnBoating = new NameValue.ComparableByName<String>("Boating License", "Pennyslvania");
System.out.println("Compare Driver's License with Boating License: " + cbnDriver.compareTo(cbnBoating));
Output:
Compare Driver's License with Boating License: 2
* </pre>
* @author Anurag Singla
*/
public class NameValue <V> implements Map.Entry<String, V> {
private final String _name;
private V _value;
/**
* Creates a new NameValue with a null value.
*/
public NameValue(String name) {
this(name, null);
}
/** Creates new NameValue. */
public NameValue(String name, V value) {
this._name = name;
this._value = value;
}
public String getName() {
return _name;
}
public String getKey() {
return _name;
}
public V getValue() {
return _value;
}
public V setValue(V value) {
V old = _value;
this._value = value;
return old;
}
@Override
public String toString() {
return "name=" + _name + ", value=" + _value;
}
/**
* Gives a {@link #compareTo(org.limewire.util.NameValue.ComparableByName)}
* implementation for a {@link NameValue}. This class compares according to
* the name.
*/
public static class ComparableByName<V> extends NameValue<V> implements Comparable<ComparableByName> {
public ComparableByName(String name) {
super(name);
}
public ComparableByName(String name, V value) {
super(name, value);
}
public int compareTo(ComparableByName b) {
if(b == null)
return 1;
String nameB = b.getName();
String name = getName();
if(name == null && nameB == null)
return 0;
else if(name == null)
return -1;
else if(nameB == null)
return 1;
else
return name.compareTo(nameB);
}
}
}