package ch.x42.terye.value;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import javax.jcr.Binary;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.ValueFormatException;
public class ValueImpl implements Value {
private Object value;
private int type;
public ValueImpl(Object value, int type) {
this.value = value;
this.type = type;
}
private void validate(int expectedType) throws ValueFormatException {
if (getType() != expectedType) {
throw new ValueFormatException("Expected a "
+ PropertyType.nameFromValue(expectedType) + " but found a "
+ PropertyType.nameFromValue(getType()));
}
}
@Override
public Binary getBinary() throws RepositoryException {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean getBoolean() throws ValueFormatException,
RepositoryException {
validate(PropertyType.BOOLEAN);
return (Boolean) value;
}
@Override
public Calendar getDate() throws ValueFormatException, RepositoryException {
validate(PropertyType.DATE);
if (value instanceof Calendar) {
return (Calendar) value;
} else if (value instanceof Date) {
Calendar cal = Calendar.getInstance();
cal.setTime((Date) value);
return cal;
}
throw new ValueFormatException();
}
@Override
public BigDecimal getDecimal() throws ValueFormatException,
RepositoryException {
validate(PropertyType.DECIMAL);
if (value instanceof BigDecimal) {
return (BigDecimal) value;
} else if (value instanceof String) {
return new BigDecimal((String) value);
}
throw new ValueFormatException();
}
@Override
public double getDouble() throws ValueFormatException, RepositoryException {
validate(PropertyType.DOUBLE);
return (Double) value;
}
@Override
public long getLong() throws ValueFormatException, RepositoryException {
validate(PropertyType.LONG);
return (Long) value;
}
@Override
public InputStream getStream() throws RepositoryException {
// TODO Auto-generated method stub
return null;
}
@Override
public String getString() throws ValueFormatException,
IllegalStateException, RepositoryException {
validate(PropertyType.STRING);
return (String) value;
}
@Override
public int getType() {
return type;
}
public Object getObject() {
return value;
}
}