org.apache.jackrabbit.value.BaseValue Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jackrabbit-jcr-commons Show documentation
Show all versions of jackrabbit-jcr-commons Show documentation
General purpose classes for use with the JCR API
The newest version!
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jackrabbit.value;
import org.apache.jackrabbit.util.ISO8601;
import javax.jcr.Binary;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.ValueFormatException;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Calendar;
/**
* This class is the superclass of the type-specific
* classes implementing the Value
interfaces.
*
* @see javax.jcr.Value
* @see StringValue
* @see LongValue
* @see DoubleValue
* @see DecimalValue
* @see BooleanValue
* @see DateValue
* @see BinaryValue
* @see NameValue
* @see PathValue
* @see URIValue
* @see ReferenceValue
* @see WeakReferenceValue
*/
public abstract class BaseValue implements Value {
protected static final String DEFAULT_ENCODING = "UTF-8";
protected final int type;
protected InputStream stream = null;
/**
* Package-private default constructor.
*
* @param type The type of this value.
*/
BaseValue(int type) {
this.type = type;
}
/**
* Returns the internal string representation of this value without modifying
* the value state.
*
* @return the internal string representation
* @throws javax.jcr.ValueFormatException if the value can not be represented as a
* String
or if the value is
* null
.
* @throws javax.jcr.RepositoryException if another error occurs.
*/
protected abstract String getInternalString()
throws ValueFormatException, RepositoryException;
//----------------------------------------------------------------< Value >
/**
* {@inheritDoc}
*/
public int getType() {
return type;
}
/**
* {@inheritDoc}
*/
public Calendar getDate()
throws ValueFormatException, IllegalStateException,
RepositoryException {
Calendar cal = ISO8601.parse(getInternalString());
if (cal == null) {
throw new ValueFormatException("not a valid date format");
} else {
return cal;
}
}
/**
* {@inheritDoc}
*/
public long getLong()
throws ValueFormatException, IllegalStateException,
RepositoryException {
try {
return Long.parseLong(getInternalString());
} catch (NumberFormatException e) {
throw new ValueFormatException("conversion to long failed", e);
}
}
/**
* {@inheritDoc}
*/
public boolean getBoolean()
throws ValueFormatException, IllegalStateException,
RepositoryException {
return Boolean.valueOf(getInternalString());
}
/**
* {@inheritDoc}
*/
public double getDouble()
throws ValueFormatException, IllegalStateException,
RepositoryException {
try {
return Double.parseDouble(getInternalString());
} catch (NumberFormatException e) {
throw new ValueFormatException("conversion to double failed", e);
}
}
/**
* {@inheritDoc}
*/
public BigDecimal getDecimal()
throws ValueFormatException, IllegalStateException,
RepositoryException {
try {
return new BigDecimal(getInternalString());
} catch (NumberFormatException e) {
throw new ValueFormatException("conversion to Decimal failed", e);
}
}
/**
* {@inheritDoc}
*/
public InputStream getStream()
throws IllegalStateException, RepositoryException {
if (stream != null) {
return stream;
}
try {
// convert via string
stream = new ByteArrayInputStream(getInternalString().getBytes(DEFAULT_ENCODING));
return stream;
} catch (UnsupportedEncodingException e) {
throw new RepositoryException(DEFAULT_ENCODING
+ " not supported on this platform", e);
}
}
/**
* {@inheritDoc}
*/
public Binary getBinary()
throws ValueFormatException, IllegalStateException,
RepositoryException {
try {
// convert via string
return new BinaryImpl(new ByteArrayInputStream(getInternalString().getBytes(DEFAULT_ENCODING)));
} catch (UnsupportedEncodingException e) {
throw new RepositoryException(DEFAULT_ENCODING
+ " not supported on this platform", e);
} catch (IOException e) {
throw new RepositoryException("failed to create Binary instance", e);
}
}
/**
* {@inheritDoc}
*/
public String getString()
throws ValueFormatException, IllegalStateException,
RepositoryException {
return getInternalString();
}
}