package ecologylab.bigsemantics.metadata.scalar; import ecologylab.bigsemantics.metadata.semantics_pseudo_scalar; import ecologylab.bigsemantics.model.text.ITermVector; import ecologylab.bigsemantics.model.text.TermVector; import ecologylab.generic.StringTools; import ecologylab.serialization.XMLTools; @semantics_pseudo_scalar public class MetadataStringBuilder extends MetadataScalarBase<StringBuilder> { TermVector termVector = null; public MetadataStringBuilder() { } public MetadataStringBuilder(StringBuilder stringBuilder) { super(stringBuilder); } public void setValue(String incomingValue) { if ((incomingValue != null) && (incomingValue.length() > 0)) { boolean newValue = false; if (value == null) { value = new StringBuilder(incomingValue); newValue = true; } else value.append(incomingValue); XMLTools.unescapeXML(value); if (termVector != null) termVector.reset(value); else { termVector = new TermVector(newValue ? incomingValue : value); } } else { //FIXME -- should this be done or is it really meant to be an append in this case //TODO -- how are we differentiating between accumulating data and editing? if (value != null) StringTools.clear(value); else value = null; if (termVector != null) termVector.reset(""); } } @Override public ITermVector termVector() { if (termVector == null) termVector = new TermVector(); return termVector; } @Override public void recycle() { if (termVector != null) { termVector.recycle(); termVector = null; } } @Override public String toString() { return value == null ? "" : value.toString(); } /** * String scalar fields, by type, should contribute to the CompositeTermVector. * This can, of course, be overridden in a meta_metadata field description. */ @Override public boolean ignoreInTermVector() { return false; } }