package ecologylab.bigsemantics.metadata.scalar;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import ecologylab.bigsemantics.metadata.Metadata;
import ecologylab.bigsemantics.metadata.MetadataBase;
import ecologylab.bigsemantics.metadata.MetadataFieldDescriptor;
import ecologylab.bigsemantics.model.text.ITermVector;
import ecologylab.serialization.ElementState;
abstract
public class MetadataScalarBase<T> extends ElementState implements MetadataBase
{
protected T value;
public static final String VALUE_FIELD_NAME = "value";
public MetadataScalarBase()
{
super();
}
public MetadataScalarBase(T value)
{
super();
this.value = value;
}
public T getValue()
{
return value;
}
public void setValue(T value)
{
this.value = value;
}
public String toString()
{
T value = getValue();
//return (value == null) ?
// super.toString() + "[null]" :
// super.toString() + "[" + value.toString() + "]";
return (value == null) ? "null" : value.toString();
}
/**
* compare two MetadataScalarBase objects according to their enclosed value. use that value's
* equal() method for actual comparison. note that we treat null == null as true.
*/
public boolean equals(Object other)
{
if (other == null || !(other instanceof MetadataScalarBase))
return false;
if (this.value == null)
{
return ((MetadataScalarBase)other).value == null;
}
else
{
return this.value.equals(((MetadataScalarBase)other).value);
}
}
@Override
public void rebuildCompositeTermVector()
{
}
public boolean set(Object value)
{
setValue((T) value);
return true;
}
public boolean hasCompositeTermVector()
{
return false;
}
/**
* In general, scalar fields, by type, should not contribute to the CompositeTermVector.
* The obvious exceptions are Strings.
*/
@Override
public boolean ignoreInTermVector()
{
return true;
}
public static final ArrayList<MetadataFieldDescriptor> EMPTY_FD_ARRAY_LIST = new ArrayList<MetadataFieldDescriptor>(0);
public static final Iterator<MetadataFieldDescriptor> EMPTY_FD_ITERATOR = EMPTY_FD_ARRAY_LIST.iterator();
public Iterator<MetadataFieldDescriptor> iterator()
{
return EMPTY_FD_ITERATOR;
}
public void recycle()
{
}
@Override
public ITermVector termVector(HashSet<Metadata> visitedMetadata)
{
return termVector();
}
}