/**
*
*/
package ecologylab.serialization.types.scalar;
import ecologylab.serialization.ScalarUnmarshallingContext;
import ecologylab.serialization.TranslationContext;
import ecologylab.serialization.annotations.simpl_inherit;
import ecologylab.serialization.types.CrossLanguageTypeConstants;
import ecologylab.serialization.types.ScalarType;
import ecologylab.serialization.types.TypeRegistry;
/**
* For storing actual ScalarType values as meta-metadata.
*
* @author andruid
*
*/
@simpl_inherit
public class ScalarTypeType extends ReferenceType<ScalarType>
implements CrossLanguageTypeConstants
{
/**
* @param javaClass
*/
public ScalarTypeType()
{
super(ScalarType.class, JAVA_SCALAR_TYPE, DOTNET_SCALAR_TYPE, OBJC_SCALAR_TYPE, null);
}
/**
* Capitalize the value if it wasn't.
* Append "Type".
* Use this to call TypeRegistry.getType().
*/
@Override
public ScalarType getInstance(String value, String[] formatStrings, ScalarUnmarshallingContext scalarUnmarshallingContext)
{
ScalarType result = null;
int length = value.length();
if ((value != null) && (length > 0))
{
char firstChar = value.charAt(0);
StringBuilder buffy = new StringBuilder(length + 4); // includes room for "Type"
if (Character.isLowerCase(firstChar))
{
buffy.append(Character.toUpperCase(firstChar));
if (length > 1)
buffy.append(value, 1, length - 1);
}
else
buffy.append(value);
// buffy.append("Type"); //TODO -- verify that this change is correct -- andruid & yin 7/21/2011
result = TypeRegistry.getScalarTypeBySimpleName(buffy.toString());
}
return result;
}
@Override
public String marshall(ScalarType instance, TranslationContext serializationContext)
{
return instance.getJavaClass().getSimpleName();
}
}