/* * Created on Dec 31, 2004 at the Interface Ecology Lab. */ package ecologylab.serialization.types.scalar; import java.io.IOException; import org.json.simple.JSONObject; import ecologylab.serialization.ScalarUnmarshallingContext; import ecologylab.serialization.TranslationContext; import ecologylab.serialization.XMLTools; import ecologylab.serialization.annotations.simpl_inherit; import ecologylab.serialization.formatenums.Format; import ecologylab.serialization.types.CrossLanguageTypeConstants; /** * Type system entry for {@link java.lang.String String}. A very simple case. * * @author andruid */ @simpl_inherit public class StringBuilderType extends ReferenceType<StringBuilder> implements CrossLanguageTypeConstants { /** * This constructor should only be called once per session, through a static initializer, * typically in TypeRegistry. * <p> * To get the instance of this type object for use in translations, call * <code>TypeRegistry.get("java.lang.String")</code>. * */ public StringBuilderType() { super(StringBuilder.class, JAVA_STRING_BUILDER, DOTNET_STRING_BUILDER, OBJC_STRING_BUILDER, null); } /** * Return the value wrapped inside a StringBuilder. A call to avoid! * * @see ecologylab.serialization.types.ScalarType#getInstance(java.lang.String, String[], * ScalarUnmarshallingContext) */ @Override public StringBuilder getInstance(String value, String[] formatStrings, ScalarUnmarshallingContext scalarUnmarshallingContext) { return new StringBuilder(value); } @Override public void appendValue(StringBuilder instance, StringBuilder buffy, boolean needsEscaping, TranslationContext serializationContext) { if (needsEscaping) XMLTools.escapeXML(buffy, instance); else buffy.append(instance); } @Override public void appendValue(StringBuilder instance, Appendable appendable, boolean needsEscaping, TranslationContext serializationContext, Format format) throws IOException { if (needsEscaping) { switch (format) { case JSON: appendable.append(JSONObject.escape(instance.toString())); break; case XML: XMLTools.escapeXML(appendable, instance); break; default: XMLTools.escapeXML(appendable, instance); break; } } else appendable.append(instance); } /** * When editing, determines whether delimiters can be included in token strings. * * @return */ // FIXME -- Add String delimitersAfter to TextChunk -- interleaved with TextTokens, and // get rid of this!!! @Override public boolean allowDelimitersInTokens() { return true; } }