package ch.x42.terye.value; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.util.Calendar; import java.util.GregorianCalendar; import javax.jcr.Binary; import javax.jcr.Node; import javax.jcr.PropertyType; import javax.jcr.RepositoryException; import javax.jcr.Value; import javax.jcr.ValueFactory; import javax.jcr.ValueFormatException; import org.apache.hadoop.hbase.util.Bytes; public class ValueFactoryImpl implements ValueFactory { private ValueImpl createNewValue(Object value, int type) { try { return new ValueImpl(value, type); } catch (IllegalArgumentException e) { return null; } } @Override public Binary createBinary(InputStream stream) throws RepositoryException { try { return new BinaryImpl(stream); } catch (IOException e) { throw new RepositoryException("Couldn't create binary", e); } } @Override public Value createValue(BigDecimal value) { return createNewValue(value, PropertyType.DECIMAL); } @Override public Value createValue(Binary value) { return createNewValue(value, PropertyType.BINARY); } @Override public Value createValue(boolean value) { return createNewValue(value, PropertyType.BOOLEAN); } @Override public Value createValue(Calendar value) { return createNewValue((Long) value.getTime().getTime(), PropertyType.DATE); } @Override public Value createValue(double value) { return createNewValue(value, PropertyType.DOUBLE); } @Override public Value createValue(InputStream value) { try { return createNewValue(createBinary(value), PropertyType.BINARY); } catch (RepositoryException e) { throw new RuntimeException("Couldn't create binary value", e); } } @Override public Value createValue(long value) { return createNewValue(value, PropertyType.LONG); } @Override public Value createValue(Node value, boolean weak) throws RepositoryException { // TODO Auto-generated method stub return null; } @Override public Value createValue(Node value) throws RepositoryException { // TODO Auto-generated method stub return null; } @Override public Value createValue(String value, int type) throws ValueFormatException { // TODO Auto-generated method stub return null; } @Override public Value createValue(String value) { return createNewValue(value, PropertyType.STRING); } public ValueImpl createValue(int type, byte[] bytes) { Value value = null; switch (type) { case PropertyType.BINARY: value = createValue(new BinaryImpl(bytes)); break; case PropertyType.BOOLEAN: value = createValue(Bytes.toBoolean(bytes)); break; case PropertyType.DATE: Calendar calendar = new GregorianCalendar(); calendar.setTimeInMillis(Bytes.toLong(bytes)); value = createValue(calendar); break; case PropertyType.LONG: value = createValue(Bytes.toLong(bytes)); break; case PropertyType.DECIMAL: value = createValue(Bytes.toBigDecimal(bytes)); break; case PropertyType.DOUBLE: value = createValue(Bytes.toDouble(bytes)); break; case PropertyType.STRING: value = createValue(Bytes.toString(bytes)); break; } return (ValueImpl) value; } }