/**
*
*/
package ecologylab.serialization.types.scalar;
import java.io.IOException;
import org.json.simple.JSONObject;
import ecologylab.serialization.TranslationContext;
import ecologylab.serialization.XMLTools;
import ecologylab.serialization.annotations.simpl_inherit;
import ecologylab.serialization.formatenums.Format;
import ecologylab.serialization.types.ScalarType;
/**
* All non-primitive ScalarType subclasses should extend this class.
*
* @author andruid
*/
@simpl_inherit
abstract public class ReferenceType<T> extends ScalarType<T>
{
public ReferenceType()
{
}
/**
* @param thatClass
* @param javaTypeName
* TODO
* @param cSharpTypeName
* TODO
* @param objectiveCTypeName
* TODO
* @param dbTypeName
* TODO
*/
public ReferenceType(Class<T> thatClass, String javaTypeName, String cSharpTypeName,
String objectiveCTypeName, String dbTypeName)
{
super(thatClass, cSharpTypeName, objectiveCTypeName, dbTypeName);
}
/**
* Append the String directly, unless it needs escaping, in which case, call escapeXML.
*
* @param instance
* @param buffy
* @param needsEscaping
*/
@Override
public void appendValue(T instance, StringBuilder buffy, boolean needsEscaping,
TranslationContext serializationContext)
{
String instanceString = marshall(instance, serializationContext);// instance.toString();
if (needsEscaping)
XMLTools.escapeXML(buffy, instanceString);
else
buffy.append(instanceString);
}
@Override
public void appendValue(T instance, Appendable buffy, boolean needsEscaping,
TranslationContext serializationContext, Format format) throws IOException
{
String instanceString = "";
if (instance != null && serializationContext != null)
instanceString = marshall(instance, serializationContext); // andruid 1/4/10
// instance.toString();
if (needsEscaping)
{
switch (format)
{
case JSON:
buffy.append(JSONObject.escape(instanceString));
;
break;
case XML:
XMLTools.escapeXML(buffy, instanceString);
break;
default:
XMLTools.escapeXML(buffy, instanceString);
break;
}
}
else
buffy.append(instanceString);
}
}