allow access to individual SimpleLiteralFactory converters
-----------------------------------------------------------
Key: CLEREZZA-511
URL: https://issues.apache.org/jira/browse/CLEREZZA-511
Project: Clerezza
Issue Type: Improvement
Reporter: Henry Story
code in Scala could do with using the converters from the SimpleLiteralFactory,
but when it does it is absolutely clear
which converter is needed. Instead of just adding the converters to a hashmap I
suggest adding giving each one of them names.
This is already implemented at it works
final static public TypeConverter<byte[]> BYTE_ARRAY_CONVERTER = new
ByteArrayConverter();
final static public TypeConverter<Boolean> BOOLEAN_CONVERTER = new
BooleanConverter();
final static public TypeConverter<Date> DATE_CONVERTER = new
DateConverter();
final static public TypeConverter<String> STRING_CONVERTER = new
StringConverter();
final static public TypeConverter<Integer> INTEGER_CONVERTER = new
IntegerConverter();
final static public TypeConverter<BigInteger> BIG_INTEGER_CONVERTER =
new BigIntegerConverter();
final static public TypeConverter<Long> LONG_CONVERTER = new
LongConverter();
final static public TypeConverter<Double> DOUBLE_CONVERTER = new
DoubleConverter();
final static public TypeConverter<UriRef> URIREF_CONVERTER = new
UriRefConverter();
final private static Map<Class<?>, TypeConverter<?>> typeConverterMap =
new HashMap<Class<?>, TypeConverter<?>>();
final static Class<? extends byte[]> byteArrayType;
static {
//what's this for?
Collections.addAll(decimalTypes, xsdInteger, xsdInt, xsdByte,
xsdShort);
byte[] byteArray = new byte[0];
byteArrayType = byteArray.getClass();
typeConverterMap.put(byteArrayType, BYTE_ARRAY_CONVERTER);
typeConverterMap.put(Date.class, DATE_CONVERTER);
typeConverterMap.put(Boolean.class, BOOLEAN_CONVERTER);
typeConverterMap.put(String.class, STRING_CONVERTER);
typeConverterMap.put(Integer.class, INTEGER_CONVERTER);
typeConverterMap.put(BigInteger.class, BIG_INTEGER_CONVERTER);
typeConverterMap.put(Long.class, LONG_CONVERTER);
typeConverterMap.put(Double.class, DOUBLE_CONVERTER);
typeConverterMap.put(UriRef.class, URIREF_CONVERTER);
}
This then allows one to write code such as
implicit def string2lit(str: String) = new PlainLiteralScala(str)
implicit def date2lit(date: Date) =
DATE_CONVERTER.createTypedLiteral(date)
implicit def int2lit(int: Int) =
INTEGER_CONVERTER.createTypedLiteral(int)
implicit def bigint2lit(bint: BigInt) =
BIG_INTEGER_CONVERTER.createTypedLiteral(bint.underlying())
implicit def bigint2lit(bigInt: BigInteger) =
BIG_INTEGER_CONVERTER.createTypedLiteral(bigInt)
implicit def bool2lit(boolean: Boolean) =
BOOLEAN_CONVERTER.createTypedLiteral(boolean)
implicit def scalaBool2lit(boolean: scala.Boolean) =
BOOLEAN_CONVERTER.createTypedLiteral(boolean)
implicit def long2lit(long: Long) =
LONG_CONVERTER.createTypedLiteral(long)
implicit def double2lit(double: Double) =
DOUBLE_CONVERTER.createTypedLiteral(double)
Saving on the hash lookup and iterations in these cases where it really is not
necessary
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira