White noise: formatting, some missing final, etc

This commit is contained in:
Francesco Chicchiriccò 2014-02-20 11:28:04 +01:00
parent 1ef04b3249
commit 3cee9228d9
33 changed files with 561 additions and 452 deletions

View File

@ -23,8 +23,6 @@ import java.util.regex.Pattern;
/**
* This class is a container for the supported ODataServiceVersions.
*
*
*/
public class ODataServiceVersion {

View File

@ -33,25 +33,42 @@ import org.apache.olingo.odata4.commons.api.edm.EdmServiceMetadata;
import org.apache.olingo.odata4.commons.api.edm.EdmTypeDefinition;
import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
public abstract class EdmImpl implements Edm {
public abstract class AbstractEdmImpl implements Edm {
private final Map<FullQualifiedName, EdmEntityContainer> entityContainers
= new HashMap<FullQualifiedName, EdmEntityContainer>();
private final Map<FullQualifiedName, EdmEnumType> enumTypes
= new HashMap<FullQualifiedName, EdmEnumType>();
private final Map<FullQualifiedName, EdmTypeDefinition> typeDefinitions
= new HashMap<FullQualifiedName, EdmTypeDefinition>();
private final Map<FullQualifiedName, EdmEntityType> entityTypes
= new HashMap<FullQualifiedName, EdmEntityType>();
private final Map<FullQualifiedName, EdmComplexType> complexTypes
= new HashMap<FullQualifiedName, EdmComplexType>();
private final Map<FullQualifiedName, EdmAction> unboundActions
= new HashMap<FullQualifiedName, EdmAction>();
private final Map<FunctionMapKey, EdmFunction> unboundFunctions
= new HashMap<FunctionMapKey, EdmFunction>();
private final Map<ActionMapKey, EdmAction> boundActions
= new HashMap<ActionMapKey, EdmAction>();
private final Map<FunctionMapKey, EdmFunction> boundFunctions
= new HashMap<FunctionMapKey, EdmFunction>();
private final Map<FullQualifiedName, EdmEntityContainer> entityContainers =
new HashMap<FullQualifiedName, EdmEntityContainer>();
private final Map<FullQualifiedName, EdmEnumType> enumTypes = new HashMap<FullQualifiedName, EdmEnumType>();
private final Map<FullQualifiedName, EdmTypeDefinition> typeDefinitions =
new HashMap<FullQualifiedName, EdmTypeDefinition>();
private final Map<FullQualifiedName, EdmEntityType> entityTypes = new HashMap<FullQualifiedName, EdmEntityType>();
private final Map<FullQualifiedName, EdmComplexType> complexTypes = new HashMap<FullQualifiedName, EdmComplexType>();
private final Map<FullQualifiedName, EdmAction> unboundActions = new HashMap<FullQualifiedName, EdmAction>();
private final Map<FunctionMapKey, EdmFunction> unboundFunctions = new HashMap<FunctionMapKey, EdmFunction>();
private final Map<ActionMapKey, EdmAction> boundActions = new HashMap<ActionMapKey, EdmAction>();
private final Map<FunctionMapKey, EdmFunction> boundFunctions = new HashMap<FunctionMapKey, EdmFunction>();
private EdmServiceMetadata serviceMetadata;
private Map<String, String> aliasToNamespaceInfo;
@Override
public EdmEntityContainer getEntityContainer(final FullQualifiedName namespaceOrAliasFQN) {
FullQualifiedName fqn = resolvePossibleAlias(namespaceOrAliasFQN);
final FullQualifiedName fqn = resolvePossibleAlias(namespaceOrAliasFQN);
EdmEntityContainer container = entityContainers.get(fqn);
if (container == null) {
container = createEntityContainer(fqn);
@ -67,7 +84,7 @@ public abstract class EdmImpl implements Edm {
@Override
public EdmEnumType getEnumType(final FullQualifiedName namespaceOrAliasFQN) {
FullQualifiedName fqn = resolvePossibleAlias(namespaceOrAliasFQN);
final FullQualifiedName fqn = resolvePossibleAlias(namespaceOrAliasFQN);
EdmEnumType enumType = enumTypes.get(fqn);
if (enumType == null) {
enumType = createEnumType(fqn);
@ -80,7 +97,7 @@ public abstract class EdmImpl implements Edm {
@Override
public EdmTypeDefinition getTypeDefinition(final FullQualifiedName namespaceOrAliasFQN) {
FullQualifiedName fqn = resolvePossibleAlias(namespaceOrAliasFQN);
final FullQualifiedName fqn = resolvePossibleAlias(namespaceOrAliasFQN);
EdmTypeDefinition typeDefinition = typeDefinitions.get(fqn);
if (typeDefinition == null) {
typeDefinition = createTypeDefinition(fqn);
@ -93,7 +110,7 @@ public abstract class EdmImpl implements Edm {
@Override
public EdmEntityType getEntityType(final FullQualifiedName namespaceOrAliasFQN) {
FullQualifiedName fqn = resolvePossibleAlias(namespaceOrAliasFQN);
final FullQualifiedName fqn = resolvePossibleAlias(namespaceOrAliasFQN);
EdmEntityType entityType = entityTypes.get(fqn);
if (entityType == null) {
entityType = createEntityType(fqn);
@ -106,7 +123,7 @@ public abstract class EdmImpl implements Edm {
@Override
public EdmComplexType getComplexType(final FullQualifiedName namespaceOrAliasFQN) {
FullQualifiedName fqn = resolvePossibleAlias(namespaceOrAliasFQN);
final FullQualifiedName fqn = resolvePossibleAlias(namespaceOrAliasFQN);
EdmComplexType complexType = complexTypes.get(fqn);
if (complexType == null) {
complexType = createComplexType(fqn);
@ -119,61 +136,67 @@ public abstract class EdmImpl implements Edm {
@Override
public EdmAction getAction(final FullQualifiedName actionName, final FullQualifiedName bindingParameterTypeName,
final Boolean isBindingParameterCollection) {
FullQualifiedName actionFqn = resolvePossibleAlias(actionName);
final Boolean isBindingParameterCollection) {
EdmAction action = null;
final FullQualifiedName actionFqn = resolvePossibleAlias(actionName);
if (bindingParameterTypeName == null) {
EdmAction action = unboundActions.get(actionName);
action = unboundActions.get(actionName);
if (action == null) {
action = createUnboundAction(actionFqn);
if (action != null) {
unboundActions.put(actionName, action);
}
}
return action;
} else {
FullQualifiedName bindingParameterTypeFqn = resolvePossibleAlias(bindingParameterTypeName);
ActionMapKey key = new ActionMapKey(actionFqn, bindingParameterTypeFqn, isBindingParameterCollection);
EdmAction action = boundActions.get(key);
final FullQualifiedName bindingParameterTypeFqn = resolvePossibleAlias(bindingParameterTypeName);
final ActionMapKey key = new ActionMapKey(actionFqn, bindingParameterTypeFqn, isBindingParameterCollection);
action = boundActions.get(key);
if (action == null) {
action = createBoundAction(actionFqn, bindingParameterTypeFqn, isBindingParameterCollection);
if (action != null) {
boundActions.put(key, action);
}
}
return action;
}
return action;
}
@Override
public EdmFunction getFunction(final FullQualifiedName functionName,
final FullQualifiedName bindingParameterTypeName,
final Boolean isBindingParameterCollection, final List<String> parameterNames) {
FullQualifiedName functionFqn = resolvePossibleAlias(functionName);
final FullQualifiedName bindingParameterTypeName,
final Boolean isBindingParameterCollection, final List<String> parameterNames) {
EdmFunction function = null;
final FullQualifiedName functionFqn = resolvePossibleAlias(functionName);
if (bindingParameterTypeName == null) {
FunctionMapKey key =
new FunctionMapKey(functionFqn, bindingParameterTypeName, isBindingParameterCollection, parameterNames);
EdmFunction function = unboundFunctions.get(key);
final FunctionMapKey key = new FunctionMapKey(
functionFqn, bindingParameterTypeName, isBindingParameterCollection, parameterNames);
function = unboundFunctions.get(key);
if (function == null) {
function = createUnboundFunction(functionFqn, parameterNames);
if (function != null) {
unboundFunctions.put(key, function);
}
}
return function;
} else {
FullQualifiedName bindingParameterTypeFqn = resolvePossibleAlias(bindingParameterTypeName);
FunctionMapKey key =
new FunctionMapKey(functionFqn, bindingParameterTypeFqn, isBindingParameterCollection, parameterNames);
EdmFunction function = boundFunctions.get(key);
final FullQualifiedName bindingParameterTypeFqn = resolvePossibleAlias(bindingParameterTypeName);
final FunctionMapKey key
= new FunctionMapKey(functionFqn, bindingParameterTypeFqn, isBindingParameterCollection, parameterNames);
function = boundFunctions.get(key);
if (function == null) {
function = createBoundFunction(functionFqn, bindingParameterTypeFqn, isBindingParameterCollection,
parameterNames);
parameterNames);
if (function != null) {
boundFunctions.put(key, function);
}
}
return function;
}
return function;
}
@Override
@ -190,7 +213,7 @@ public abstract class EdmImpl implements Edm {
}
FullQualifiedName finalFQN = null;
if (namespaceOrAliasFQN != null) {
String namespace = aliasToNamespaceInfo.get(namespaceOrAliasFQN.getNamespace());
final String namespace = aliasToNamespaceInfo.get(namespaceOrAliasFQN.getNamespace());
// If not contained in info it must be a namespace
if (namespace == null) {
finalFQN = namespaceOrAliasFQN;
@ -218,12 +241,12 @@ public abstract class EdmImpl implements Edm {
protected abstract EdmFunction createUnboundFunction(FullQualifiedName functionName, List<String> parameterNames);
protected abstract EdmAction createBoundAction(FullQualifiedName actionName,
FullQualifiedName bindingParameterTypeName,
Boolean isBindingParameterCollection);
FullQualifiedName bindingParameterTypeName,
Boolean isBindingParameterCollection);
protected abstract EdmFunction createBoundFunction(FullQualifiedName functionName,
FullQualifiedName bindingParameterTypeName, Boolean isBindingParameterCollection,
List<String> parameterNames);
FullQualifiedName bindingParameterTypeName, Boolean isBindingParameterCollection,
List<String> parameterNames);
protected abstract EdmServiceMetadata createServiceMetadata();
}

View File

@ -22,15 +22,19 @@ import org.apache.olingo.odata4.commons.api.edm.EdmException;
import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
public class ActionMapKey {
private final FullQualifiedName actionName;
private final FullQualifiedName bindingParameterTypeName;
private final Boolean isBindingParameterCollection;
public ActionMapKey(final FullQualifiedName actionName, final FullQualifiedName bindingParameterTypeName,
final Boolean isBindingParameterCollection) {
final Boolean isBindingParameterCollection) {
if (actionName == null || bindingParameterTypeName == null || isBindingParameterCollection == null) {
throw new EdmException(
"Action name, binding parameter type and binding parameter collection must not be null for bound actions");
throw new EdmException("Action name, binding parameter type and binding parameter collection "
+ "must not be null for bound actions");
}
this.actionName = actionName;
this.bindingParameterTypeName = bindingParameterTypeName;
@ -39,8 +43,9 @@ public class ActionMapKey {
@Override
public int hashCode() {
String forHash =
actionName.toString() + bindingParameterTypeName.toString() + isBindingParameterCollection.toString();
final String forHash = actionName.toString()
+ bindingParameterTypeName.toString()
+ isBindingParameterCollection.toString();
return forHash.hashCode();
}

View File

@ -28,16 +28,20 @@ import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
public class FunctionMapKey {
private final FullQualifiedName functionName;
private final FullQualifiedName bindingParameterTypeName;
private final Boolean isBindingParameterCollection;
private final List<String> parameterNames;
public FunctionMapKey(final FullQualifiedName functionName, final FullQualifiedName bindingParameterTypeName,
final Boolean isBindingParameterCollection, final List<String> parameterNames) {
final Boolean isBindingParameterCollection, final List<String> parameterNames) {
this.functionName = functionName;
if (bindingParameterTypeName != null && isBindingParameterCollection == null) {
throw new EdmException(
"Indicator that the bindingparameter is a collection must not be null if its an bound function.");
"Indicator that the bindingparameter is a collection must not be null if its an bound function.");
}
this.bindingParameterTypeName = bindingParameterTypeName;
this.isBindingParameterCollection = isBindingParameterCollection;
@ -85,23 +89,23 @@ public class FunctionMapKey {
}
final FunctionMapKey other = (FunctionMapKey) obj;
if (functionName.equals(other.functionName)) {
if ((bindingParameterTypeName == null && other.bindingParameterTypeName == null)
|| (bindingParameterTypeName != null && bindingParameterTypeName.equals(other.bindingParameterTypeName))) {
if ((isBindingParameterCollection == null && other.isBindingParameterCollection == null)
|| (isBindingParameterCollection != null && isBindingParameterCollection
.equals(other.isBindingParameterCollection))) {
if (parameterNames == null && other.parameterNames == null) {
return true;
} else if (parameterNames.size() == other.parameterNames.size()) {
for (String name : parameterNames) {
if (!other.parameterNames.contains(name)) {
return false;
}
}
return true;
if (functionName.equals(other.functionName)
&& (bindingParameterTypeName == null && other.bindingParameterTypeName == null)
|| (bindingParameterTypeName != null && bindingParameterTypeName.equals(other.bindingParameterTypeName))
&& (isBindingParameterCollection == null
&& other.isBindingParameterCollection == null)
|| (isBindingParameterCollection != null
&& isBindingParameterCollection.equals(other.isBindingParameterCollection))) {
if (parameterNames == null && other.parameterNames == null) {
return true;
} else if (parameterNames.size() == other.parameterNames.size()) {
for (String name : parameterNames) {
if (!other.parameterNames.contains(name)) {
return false;
}
}
return true;
}
}
return false;

View File

@ -28,6 +28,7 @@ import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
abstract class AbstractPrimitiveType implements EdmPrimitiveType {
protected String uriPrefix = "";
protected String uriSuffix = "";
@Override
@ -37,8 +38,9 @@ abstract class AbstractPrimitiveType implements EdmPrimitiveType {
@Override
public boolean validate(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision, final Integer scale,
final Boolean isUnicode) {
final Boolean isNullable, final Integer maxLength, final Integer precision, final Integer scale,
final Boolean isUnicode) {
try {
valueOfString(value, isNullable, maxLength, precision, scale, isUnicode, getDefaultType());
return true;
@ -49,9 +51,10 @@ abstract class AbstractPrimitiveType implements EdmPrimitiveType {
@Override
public final <T> T valueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType)
throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType)
throws EdmPrimitiveTypeException {
if (value == null) {
if (isNullable != null && !isNullable) {
throw new EdmPrimitiveTypeException("EdmPrimitiveTypeException.LITERAL_NULL_NOT_ALLOWED");
@ -62,13 +65,13 @@ abstract class AbstractPrimitiveType implements EdmPrimitiveType {
}
protected abstract <T> T internalValueOfString(String value,
Boolean isNullable, Integer maxLength, Integer precision, Integer scale, Boolean isUnicode,
Class<T> returnType) throws EdmPrimitiveTypeException;
Boolean isNullable, Integer maxLength, Integer precision, Integer scale, Boolean isUnicode,
Class<T> returnType) throws EdmPrimitiveTypeException;
@Override
public final String valueToString(final Object value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
if (value == null) {
if (isNullable != null && !isNullable) {
throw new EdmPrimitiveTypeException("EdmPrimitiveTypeException.VALUE_NULL_NOT_ALLOWED");
@ -79,13 +82,16 @@ abstract class AbstractPrimitiveType implements EdmPrimitiveType {
}
protected abstract <T> String internalValueToString(T value,
Boolean isNullable, Integer maxLength, Integer precision, Integer scale,
Boolean isUnicode) throws EdmPrimitiveTypeException;
Boolean isNullable, Integer maxLength, Integer precision, Integer scale,
Boolean isUnicode) throws EdmPrimitiveTypeException;
@Override
public String toUriLiteral(final String literal) {
return literal == null ? null :
uriPrefix.isEmpty() && uriSuffix.isEmpty() ? literal : uriPrefix + literal + uriSuffix;
return literal == null
? null
: uriPrefix.isEmpty() && uriSuffix.isEmpty()
? literal
: uriPrefix + literal + uriSuffix;
}
@Override
@ -95,7 +101,8 @@ abstract class AbstractPrimitiveType implements EdmPrimitiveType {
} else if (uriPrefix.isEmpty() && uriSuffix.isEmpty()) {
return literal;
} else if (literal.length() >= uriPrefix.length() + uriSuffix.length()
&& literal.startsWith(uriPrefix) && literal.endsWith(uriSuffix)) {
&& literal.startsWith(uriPrefix) && literal.endsWith(uriSuffix)) {
return literal.substring(uriPrefix.length(), literal.length() - uriSuffix.length());
} else {
throw new EdmPrimitiveTypeException("EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(literal)");

View File

@ -26,14 +26,15 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
*/
public class EdmBinary extends SingletonPrimitiveType {
private static final EdmBinary instance = new EdmBinary();
private static final EdmBinary INSTANCE = new EdmBinary();
{
uriPrefix = "binary'";
uriSuffix = "'";
}
public static EdmBinary getInstance() {
return instance;
return INSTANCE;
}
@Override
@ -43,31 +44,33 @@ public class EdmBinary extends SingletonPrimitiveType {
@Override
public boolean validate(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) {
return value == null ?
isNullable == null || isNullable :
Base64.isBase64(value) && validateMaxLength(value, maxLength);
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) {
return value == null
? isNullable == null || isNullable
: Base64.isBase64(value) && validateMaxLength(value, maxLength);
}
private static boolean validateMaxLength(final String value, final Integer maxLength) {
return maxLength == null ? true :
// Every three bytes are represented as four base-64 characters.
// Additionally, there could be up to two padding "=" characters
// if the number of bytes is not a multiple of three.
maxLength >= value.length() * 3 / 4 - (value.endsWith("==") ? 2 : value.endsWith("=") ? 1 : 0);
return maxLength == null ? true
: // Every three bytes are represented as four base-64 characters.
// Additionally, there could be up to two padding "=" characters
// if the number of bytes is not a multiple of three.
maxLength >= value.length() * 3 / 4 - (value.endsWith("==") ? 2 : value.endsWith("=") ? 1 : 0);
}
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
if (!Base64.isBase64(value)) {
throw new EdmPrimitiveTypeException("EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
}
if (!validateMaxLength(value, maxLength)) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(value, facets)");
"EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(value, facets)");
}
final byte[] result = Base64.decodeBase64(value);
@ -75,7 +78,7 @@ public class EdmBinary extends SingletonPrimitiveType {
if (returnType.isAssignableFrom(byte[].class)) {
return returnType.cast(result);
} else if (returnType.isAssignableFrom(Byte[].class)) {
Byte[] byteArray = new Byte[result.length];
final Byte[] byteArray = new Byte[result.length];
for (int i = 0; i < result.length; i++) {
byteArray[i] = result[i];
}
@ -87,8 +90,9 @@ public class EdmBinary extends SingletonPrimitiveType {
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
byte[] byteArrayValue;
if (value instanceof byte[]) {
byteArrayValue = (byte[]) value;
@ -100,12 +104,12 @@ public class EdmBinary extends SingletonPrimitiveType {
}
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
if (maxLength != null && byteArrayValue.length > maxLength) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets)");
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets)");
}
return Base64.encodeBase64URLSafeString(byteArrayValue);

View File

@ -25,10 +25,10 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
*/
public final class EdmBoolean extends SingletonPrimitiveType {
private static final EdmBoolean instance = new EdmBoolean();
private static final EdmBoolean INSTANCE = new EdmBoolean();
public static EdmBoolean getInstance() {
return instance;
return INSTANCE;
}
@Override
@ -38,8 +38,9 @@ public final class EdmBoolean extends SingletonPrimitiveType {
@Override
public boolean validate(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) {
return value == null ? isNullable == null || isNullable : validateLiteral(value);
}
@ -49,30 +50,32 @@ public final class EdmBoolean extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
if (validateLiteral(value)) {
if (returnType.isAssignableFrom(Boolean.class)) {
return returnType.cast(Boolean.valueOf("true".equals(value)));
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType)");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType)");
}
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
}
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
if (value instanceof Boolean) {
return Boolean.toString((Boolean) value);
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
}
}

View File

@ -28,16 +28,16 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
*/
public final class EdmByte extends SingletonPrimitiveType {
private static final EdmByte instance = new EdmByte();
private static final EdmByte INSTANCE = new EdmByte();
public static EdmByte getInstance() {
return instance;
return INSTANCE;
}
@Override
public boolean isCompatible(final EdmPrimitiveType primitiveType) {
return primitiveType instanceof Uint7
|| primitiveType instanceof EdmByte;
|| primitiveType instanceof EdmByte;
}
@Override
@ -47,41 +47,43 @@ public final class EdmByte extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
Short valueShort;
try {
valueShort = Short.parseShort(value);
} catch (final NumberFormatException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)", e);
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)", e);
}
if (valueShort < 0 || valueShort >= 1 << Byte.SIZE) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
}
try {
return EdmInt64.convertNumber(valueShort, returnType);
} catch (final IllegalArgumentException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
} catch (final ClassCastException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
}
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
if (value instanceof Byte || value instanceof Short || value instanceof Integer || value instanceof Long) {
if (((Number) value).longValue() >= 0 && ((Number) value).longValue() < 1 << Byte.SIZE) {
return value.toString();
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
}
} else if (value instanceof BigInteger) {
if (((BigInteger) value).compareTo(BigInteger.ZERO) >= 0
@ -89,11 +91,11 @@ public final class EdmByte extends SingletonPrimitiveType {
return value.toString();
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
}
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
}
}

View File

@ -30,12 +30,12 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
*/
public final class EdmDate extends SingletonPrimitiveType {
private static final Pattern PATTERN = Pattern.compile(
"(-?\\p{Digit}{4,})-(\\p{Digit}{2})-(\\p{Digit}{2})");
private static final EdmDate instance = new EdmDate();
private static final Pattern PATTERN = Pattern.compile("(-?\\p{Digit}{4,})-(\\p{Digit}{2})-(\\p{Digit}{2})");
private static final EdmDate INSTANCE = new EdmDate();
public static EdmDate getInstance() {
return instance;
return INSTANCE;
}
@Override
@ -45,9 +45,10 @@ public final class EdmDate extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
Calendar dateTimeValue = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Calendar dateTimeValue = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
dateTimeValue.clear();
final Matcher matcher = PATTERN.matcher(value);
@ -56,9 +57,9 @@ public final class EdmDate extends SingletonPrimitiveType {
}
dateTimeValue.set(
Integer.parseInt(matcher.group(1)),
Byte.parseByte(matcher.group(2)) - 1, // month is zero-based
Byte.parseByte(matcher.group(3)));
Integer.parseInt(matcher.group(1)),
Byte.parseByte(matcher.group(2)) - 1, // month is zero-based
Byte.parseByte(matcher.group(3)));
try {
return EdmDateTimeOffset.convertDateTime(dateTimeValue, returnType);
@ -66,17 +67,18 @@ public final class EdmDate extends SingletonPrimitiveType {
throw new EdmPrimitiveTypeException("EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value), e");
} catch (final ClassCastException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
}
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Calendar dateTimeValue = EdmDateTimeOffset.createDateTime(value);
StringBuilder result = new StringBuilder(10); // Ten characters are enough for "normal" dates.
final StringBuilder result = new StringBuilder(10); // Ten characters are enough for "normal" dates.
final int year = dateTimeValue.get(Calendar.YEAR);
if (year < 0 || year >= 10000) {
result.append(year);

View File

@ -32,13 +32,14 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
public final class EdmDateTimeOffset extends SingletonPrimitiveType {
private static final Pattern PATTERN = Pattern.compile(
"(-?\\p{Digit}{4,})-(\\p{Digit}{2})-(\\p{Digit}{2})"
"(-?\\p{Digit}{4,})-(\\p{Digit}{2})-(\\p{Digit}{2})"
+ "T(\\p{Digit}{2}):(\\p{Digit}{2})(?::(\\p{Digit}{2})(\\.(\\p{Digit}{0,3}?)0*)?)?"
+ "(Z|([-+]\\p{Digit}{2}:\\p{Digit}{2}))?");
private static final EdmDateTimeOffset instance = new EdmDateTimeOffset();
private static final EdmDateTimeOffset INSTANCE = new EdmDateTimeOffset();
public static EdmDateTimeOffset getInstance() {
return instance;
return INSTANCE;
}
@Override
@ -48,39 +49,40 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Matcher matcher = PATTERN.matcher(value);
if (!matcher.matches()) {
throw new EdmPrimitiveTypeException("EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
}
final String timeZoneOffset = matcher.group(9) != null && matcher.group(10) != null
&& !matcher.group(10).matches("[-+]0+:0+") ? matcher.group(10) : null;
Calendar dateTimeValue = Calendar.getInstance(TimeZone.getTimeZone("GMT" + timeZoneOffset));
&& !matcher.group(10).matches("[-+]0+:0+") ? matcher.group(10) : null;
final Calendar dateTimeValue = Calendar.getInstance(TimeZone.getTimeZone("GMT" + timeZoneOffset));
if (dateTimeValue.get(Calendar.ZONE_OFFSET) == 0 && timeZoneOffset != null) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
}
dateTimeValue.clear();
dateTimeValue.set(
Short.parseShort(matcher.group(1)),
Byte.parseByte(matcher.group(2)) - 1, // month is zero-based
Byte.parseByte(matcher.group(3)),
Byte.parseByte(matcher.group(4)),
Byte.parseByte(matcher.group(5)),
matcher.group(6) == null ? 0 : Byte.parseByte(matcher.group(6)));
Short.parseShort(matcher.group(1)),
Byte.parseByte(matcher.group(2)) - 1, // month is zero-based
Byte.parseByte(matcher.group(3)),
Byte.parseByte(matcher.group(4)),
Byte.parseByte(matcher.group(5)),
matcher.group(6) == null ? 0 : Byte.parseByte(matcher.group(6)));
if (matcher.group(7) != null) {
if (matcher.group(7).length() == 1 || matcher.group(7).length() > 13) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
}
final String decimals = matcher.group(8);
if (decimals.length() > (precision == null ? 0 : precision)) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(value, facets)");
"EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(value, facets)");
}
final String milliSeconds = decimals + "000".substring(decimals.length());
dateTimeValue.set(Calendar.MILLISECOND, Short.parseShort(milliSeconds));
@ -90,15 +92,16 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType {
return convertDateTime(dateTimeValue, returnType);
} catch (final IllegalArgumentException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value), e");
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value), e");
} catch (final ClassCastException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
}
}
/**
* Converts a {@link Calendar} value into the requested return type if possible.
*
* @param dateTimeValue the value
* @param returnType the class of the returned value; it must be one of {@link Calendar}, {@link Long}, or
* {@link Date}
@ -107,7 +110,8 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType {
* @throws ClassCastException if the return type is not allowed
*/
protected static <T> T convertDateTime(final Calendar dateTimeValue, final Class<T> returnType)
throws IllegalArgumentException, ClassCastException {
throws IllegalArgumentException, ClassCastException {
// The Calendar class does not check any values until a get method is called,
// so we do just that to validate the fields that may have been set,
// not because we want to return something else.
@ -131,11 +135,12 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType {
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Calendar dateTimeValue = createDateTime(value);
StringBuilder result = new StringBuilder(23); // 23 characters are enough for millisecond precision.
final StringBuilder result = new StringBuilder(23); // 23 characters are enough for millisecond precision.
final int year = dateTimeValue.get(Calendar.YEAR);
appendTwoDigits(result, year / 100);
appendTwoDigits(result, year % 100);
@ -154,11 +159,11 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType {
appendMilliseconds(result, dateTimeValue.get(Calendar.MILLISECOND), precision);
} catch (final IllegalArgumentException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets), e");
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets), e");
}
final int offsetInMinutes = (dateTimeValue.get(Calendar.ZONE_OFFSET)
+ dateTimeValue.get(Calendar.DST_OFFSET)) / 60 / 1000;
+ dateTimeValue.get(Calendar.DST_OFFSET)) / 60 / 1000;
final int offsetHours = offsetInMinutes / 60;
final int offsetMinutes = Math.abs(offsetInMinutes % 60);
final String offsetString = offsetInMinutes == 0 ? "Z" : String.format("%+03d:%02d", offsetHours, offsetMinutes);
@ -169,6 +174,7 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType {
/**
* Creates a date/time value from the given value.
*
* @param value the value as {@link Calendar}, {@link Date}, or {@link Long}
* @return the value as {@link Calendar}
* @throws EdmPrimitiveTypeException if the type of the value is not supported
@ -188,14 +194,15 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType {
dateTimeValue.setTimeInMillis((Long) value);
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
return dateTimeValue;
}
/**
* Appends the given number to the given string builder,
* assuming that the number has at most two digits, performance-optimized.
* Appends the given number to the given string builder, assuming that the number has at most two digits,
* performance-optimized.
*
* @param result a {@link StringBuilder}
* @param number an integer that must satisfy <code>0 <= number <= 99</code>
*/
@ -205,14 +212,15 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType {
}
/**
* Appends the given number of milliseconds to the given string builder,
* assuming that the number has at most three digits, performance-optimized.
* Appends the given number of milliseconds to the given string builder, assuming that the number has at most three
* digits, performance-optimized.
*
* @param result a {@link StringBuilder}
* @param milliseconds an integer that must satisfy <code>0 <= milliseconds <= 999</code>
* @param milliseconds an integer that must satisfy <code>0 &lt;= milliseconds &lt;= 999</code>
* @param precision the upper limit for decimal digits (optional, defaults to zero)
*/
protected static void appendMilliseconds(final StringBuilder result, final long milliseconds,
final Integer precision) throws IllegalArgumentException {
final Integer precision) throws IllegalArgumentException {
final int digits = milliseconds % 1000 == 0 ? 0 : milliseconds % 100 == 0 ? 1 : milliseconds % 10 == 0 ? 2 : 3;
if (digits > 0) {
result.append('.');

View File

@ -32,23 +32,24 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
public final class EdmDecimal extends SingletonPrimitiveType {
private static final Pattern PATTERN = Pattern.compile("(?:\\+|-)?(?:0*(\\p{Digit}+?))(?:\\.(\\p{Digit}+?)0*)?");
private static final EdmDecimal instance = new EdmDecimal();
private static final EdmDecimal INSTANCE = new EdmDecimal();
public static EdmDecimal getInstance() {
return instance;
return INSTANCE;
}
@Override
public boolean isCompatible(final EdmPrimitiveType primitiveType) {
return primitiveType instanceof Uint7
|| primitiveType instanceof EdmByte
|| primitiveType instanceof EdmSByte
|| primitiveType instanceof EdmInt16
|| primitiveType instanceof EdmInt32
|| primitiveType instanceof EdmInt64
|| primitiveType instanceof EdmSingle
|| primitiveType instanceof EdmDouble
|| primitiveType instanceof EdmDecimal;
|| primitiveType instanceof EdmByte
|| primitiveType instanceof EdmSByte
|| primitiveType instanceof EdmInt16
|| primitiveType instanceof EdmInt32
|| primitiveType instanceof EdmInt64
|| primitiveType instanceof EdmSingle
|| primitiveType instanceof EdmDouble
|| primitiveType instanceof EdmDecimal;
}
@Override
@ -58,11 +59,12 @@ public final class EdmDecimal extends SingletonPrimitiveType {
@Override
public boolean validate(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) {
return value == null ?
isNullable == null || isNullable :
validateLiteral(value) && validatePrecisionAndScale(value, precision, scale);
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) {
return value == null
? isNullable == null || isNullable
: validateLiteral(value) && validatePrecisionAndScale(value, precision, scale);
}
private static boolean validateLiteral(final String value) {
@ -70,50 +72,53 @@ public final class EdmDecimal extends SingletonPrimitiveType {
}
private static final boolean validatePrecisionAndScale(final String value, final Integer precision,
final Integer scale) {
final Integer scale) {
final Matcher matcher = PATTERN.matcher(value);
matcher.matches();
final int significantIntegerDigits = matcher.group(1).equals("0") ? 0 : matcher.group(1).length();
final int decimals = matcher.group(2) == null ? 0 : matcher.group(2).length();
return (precision == null || precision >= significantIntegerDigits + decimals)
&& (decimals <= (scale == null ? 0 : scale));
&& (decimals <= (scale == null ? 0 : scale));
}
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
if (!validateLiteral(value)) {
throw new EdmPrimitiveTypeException("EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
}
if (!validatePrecisionAndScale(value, precision, scale)) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(value, facets)");
"EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(value, facets)");
}
try {
return convertDecimal(new BigDecimal(value), returnType);
} catch (final IllegalArgumentException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
} catch (final ClassCastException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
}
}
/**
* Converts a {@link BigDecimal} value into the requested return type if possible.
*
* @param value the value
* @param returnType the class of the returned value; it must be one of {@link BigDecimal}, {@link Double},
* {@link Float}, {@link BigInteger}, {@link Long}, {@link Integer}, {@link Short}, or {@link Byte}
* @return the converted value
* @throws IllegalArgumentException if the conversion is not possible
* or would lead to loss of data
* @throws IllegalArgumentException if the conversion is not possible or would lead to loss of data
* @throws ClassCastException if the return type is not allowed
*/
protected static <T> T convertDecimal(final BigDecimal value, final Class<T> returnType)
throws IllegalArgumentException, ClassCastException {
throws IllegalArgumentException, ClassCastException {
if (returnType.isAssignableFrom(BigDecimal.class)) {
return returnType.cast(value);
} else if (returnType.isAssignableFrom(Double.class)) {
@ -153,8 +158,9 @@ public final class EdmDecimal extends SingletonPrimitiveType {
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
String result;
if (value instanceof Long || value instanceof Integer || value instanceof Short
|| value instanceof Byte || value instanceof BigInteger) {
@ -162,31 +168,31 @@ public final class EdmDecimal extends SingletonPrimitiveType {
final int digits = result.startsWith("-") ? result.length() - 1 : result.length();
if (precision != null && precision < digits) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets)");
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets)");
}
} else if (value instanceof Double || value instanceof Float || value instanceof BigDecimal) {
BigDecimal bigDecimalValue;
try {
bigDecimalValue = value instanceof Double ? BigDecimal.valueOf((Double) value) :
value instanceof Float ? BigDecimal.valueOf((Float) value) : (BigDecimal) value;
bigDecimalValue = value instanceof Double ? BigDecimal.valueOf((Double) value)
: value instanceof Float ? BigDecimal.valueOf((Float) value) : (BigDecimal) value;
} catch (final NumberFormatException e) {
throw new EdmPrimitiveTypeException("EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)", e);
}
final int digits = bigDecimalValue.scale() >= 0 ?
Math.max(bigDecimalValue.precision(), bigDecimalValue.scale()) :
bigDecimalValue.precision() - bigDecimalValue.scale();
final int digits = bigDecimalValue.scale() >= 0
? Math.max(bigDecimalValue.precision(), bigDecimalValue.scale())
: bigDecimalValue.precision() - bigDecimalValue.scale();
if ((precision == null || precision >= digits) && (bigDecimalValue.scale() <= (scale == null ? 0 : scale))) {
result = bigDecimalValue.toPlainString();
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets)");
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets)");
}
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
return result;

View File

@ -30,26 +30,30 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
public final class EdmDouble extends SingletonPrimitiveType {
protected static final String NEGATIVE_INFINITY = "-INF";
protected static final String POSITIVE_INFINITY = "INF";
protected static final String NaN = "NaN";
private static final Pattern PATTERN = Pattern.compile(
"(?:\\+|-)?\\p{Digit}{1,17}(?:\\.\\p{Digit}{1,17})?(?:(?:E|e)(?:\\+|-)?\\p{Digit}{1,3})?");
private static final EdmDouble instance = new EdmDouble();
"(?:\\+|-)?\\p{Digit}{1,17}(?:\\.\\p{Digit}{1,17})?(?:(?:E|e)(?:\\+|-)?\\p{Digit}{1,3})?");
private static final EdmDouble INSTANCE = new EdmDouble();
public static EdmDouble getInstance() {
return instance;
return INSTANCE;
}
@Override
public boolean isCompatible(final EdmPrimitiveType primitiveType) {
return primitiveType instanceof Uint7
|| primitiveType instanceof EdmByte
|| primitiveType instanceof EdmSByte
|| primitiveType instanceof EdmInt16
|| primitiveType instanceof EdmInt32
|| primitiveType instanceof EdmInt64
|| primitiveType instanceof EdmSingle
|| primitiveType instanceof EdmDouble;
|| primitiveType instanceof EdmByte
|| primitiveType instanceof EdmSByte
|| primitiveType instanceof EdmInt16
|| primitiveType instanceof EdmInt32
|| primitiveType instanceof EdmInt64
|| primitiveType instanceof EdmSingle
|| primitiveType instanceof EdmDouble;
}
@Override
@ -59,8 +63,9 @@ public final class EdmDouble extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
Double result = null;
BigDecimal bigDecimalValue = null;
// Handle special values first.
@ -93,25 +98,25 @@ public final class EdmDouble extends SingletonPrimitiveType {
return returnType.cast(result.floatValue());
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType)");
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType)");
}
} else {
try {
return EdmDecimal.convertDecimal(bigDecimalValue, returnType);
} catch (final IllegalArgumentException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
} catch (final ClassCastException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
}
}
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
if (value instanceof Long) {
if (Math.abs((Long) value) < 1L << 51) {
return value.toString();
@ -121,11 +126,11 @@ public final class EdmDouble extends SingletonPrimitiveType {
} else if (value instanceof Integer || value instanceof Short || value instanceof Byte) {
return value.toString();
} else if (value instanceof Double) {
return (Double) value == Double.NEGATIVE_INFINITY ? NEGATIVE_INFINITY :
(Double) value == Double.POSITIVE_INFINITY ? POSITIVE_INFINITY : value.toString();
return (Double) value == Double.NEGATIVE_INFINITY ? NEGATIVE_INFINITY
: (Double) value == Double.POSITIVE_INFINITY ? POSITIVE_INFINITY : value.toString();
} else if (value instanceof Float) {
return (Float) value == Float.NEGATIVE_INFINITY ? NEGATIVE_INFINITY :
(Float) value == Float.POSITIVE_INFINITY ? POSITIVE_INFINITY : value.toString();
return (Float) value == Float.NEGATIVE_INFINITY ? NEGATIVE_INFINITY
: (Float) value == Float.POSITIVE_INFINITY ? POSITIVE_INFINITY : value.toString();
} else if (value instanceof BigDecimal) {
final double doubleValue = ((BigDecimal) value).doubleValue();
if (!Double.isInfinite(doubleValue) && BigDecimal.valueOf(doubleValue).compareTo((BigDecimal) value) == 0) {
@ -135,7 +140,7 @@ public final class EdmDouble extends SingletonPrimitiveType {
}
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
}
}

View File

@ -28,16 +28,18 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
public final class EdmDuration extends SingletonPrimitiveType {
private static final Pattern PATTERN = Pattern.compile(
"[-+]?P(?:(\\p{Digit}+)D)?(?:T(?:(\\p{Digit}+)H)?(?:(\\p{Digit}+)M)?"
"[-+]?P(?:(\\p{Digit}+)D)?(?:T(?:(\\p{Digit}+)H)?(?:(\\p{Digit}+)M)?"
+ "(?:(\\p{Digit}+(?:\\.(?:\\p{Digit}+?)0*)?)S)?)?");
private static final EdmDuration instance = new EdmDuration();
private static final EdmDuration INSTANCE = new EdmDuration();
{
uriPrefix = "duration'";
uriSuffix = "'";
}
public static EdmDuration getInstance() {
return instance;
return INSTANCE;
}
@Override
@ -47,46 +49,47 @@ public final class EdmDuration extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Matcher matcher = PATTERN.matcher(value);
if (!matcher.matches()
|| matcher.group(1) == null && matcher.group(2) == null && matcher.group(3) == null
&& matcher.group(4) == null) {
&& matcher.group(4) == null) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(literal)");
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(literal)");
}
BigDecimal result = (matcher.group(1) == null ? BigDecimal.ZERO :
new BigDecimal(matcher.group(1)).multiply(BigDecimal.valueOf(24 * 60 * 60)))
.add(matcher.group(2) == null ? BigDecimal.ZERO :
new BigDecimal(matcher.group(2)).multiply(BigDecimal.valueOf(60 * 60)))
.add(matcher.group(3) == null ? BigDecimal.ZERO :
new BigDecimal(matcher.group(3)).multiply(BigDecimal.valueOf(60)))
.add(matcher.group(4) == null ? BigDecimal.ZERO : new BigDecimal(matcher.group(4)));
BigDecimal result = (matcher.group(1) == null ? BigDecimal.ZERO
: new BigDecimal(matcher.group(1)).multiply(BigDecimal.valueOf(24 * 60 * 60))).
add(matcher.group(2) == null ? BigDecimal.ZERO
: new BigDecimal(matcher.group(2)).multiply(BigDecimal.valueOf(60 * 60))).
add(matcher.group(3) == null ? BigDecimal.ZERO
: new BigDecimal(matcher.group(3)).multiply(BigDecimal.valueOf(60))).
add(matcher.group(4) == null ? BigDecimal.ZERO : new BigDecimal(matcher.group(4)));
if (result.scale() <= (precision == null ? 0 : precision)) {
result = value.startsWith("-") ? result.negate() : result;
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(literal, facets)");
"EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(literal, facets)");
}
try {
return EdmDecimal.convertDecimal(result, returnType);
} catch (final IllegalArgumentException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
} catch (final ClassCastException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
}
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
BigDecimal valueDecimal;
if (value instanceof BigDecimal) {
valueDecimal = (BigDecimal) value;
@ -96,15 +99,15 @@ public final class EdmDuration extends SingletonPrimitiveType {
valueDecimal = new BigDecimal((BigInteger) value);
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
if (valueDecimal.scale() > (precision == null ? 0 : precision)) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets)");
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets)");
}
StringBuilder result = new StringBuilder();
final StringBuilder result = new StringBuilder();
if (valueDecimal.signum() == -1) {
result.append('-');
valueDecimal = valueDecimal.negate();

View File

@ -28,10 +28,11 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
public final class EdmGuid extends SingletonPrimitiveType {
private static final String PATTERN = "\\p{XDigit}{8}-\\p{XDigit}{4}-\\p{XDigit}{4}-\\p{XDigit}{4}-\\p{XDigit}{12}";
private static final EdmGuid instance = new EdmGuid();
private static final EdmGuid INSTANCE = new EdmGuid();
public static EdmGuid getInstance() {
return instance;
return INSTANCE;
}
@Override
@ -41,8 +42,8 @@ public final class EdmGuid extends SingletonPrimitiveType {
@Override
public boolean validate(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) {
return value == null ? isNullable == null || isNullable : validateLiteral(value);
}
@ -52,34 +53,36 @@ public final class EdmGuid extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode,
final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode,
final Class<T> returnType) throws EdmPrimitiveTypeException {
UUID result;
if (validateLiteral(value)) {
result = UUID.fromString(value);
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
}
if (returnType.isAssignableFrom(UUID.class)) {
return returnType.cast(result);
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType)");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType)");
}
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
if (value instanceof UUID) {
return ((UUID) value).toString();
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
}
}

View File

@ -28,18 +28,18 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
*/
public final class EdmInt16 extends SingletonPrimitiveType {
private static final EdmInt16 instance = new EdmInt16();
private static final EdmInt16 INSTANCE = new EdmInt16();
public static EdmInt16 getInstance() {
return instance;
return INSTANCE;
}
@Override
public boolean isCompatible(final EdmPrimitiveType primitiveType) {
return primitiveType instanceof Uint7
|| primitiveType instanceof EdmByte
|| primitiveType instanceof EdmSByte
|| primitiveType instanceof EdmInt16;
|| primitiveType instanceof EdmByte
|| primitiveType instanceof EdmSByte
|| primitiveType instanceof EdmInt16;
}
@Override
@ -49,31 +49,31 @@ public final class EdmInt16 extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
Short valueShort;
try {
valueShort = Short.parseShort(value);
} catch (final NumberFormatException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)", e);
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)", e);
}
try {
return EdmInt64.convertNumber(valueShort, returnType);
} catch (final IllegalArgumentException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
} catch (final ClassCastException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
}
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
if (value instanceof Byte || value instanceof Short) {
return value.toString();
} else if (value instanceof Integer || value instanceof Long) {
@ -82,18 +82,18 @@ public final class EdmInt16 extends SingletonPrimitiveType {
return value.toString();
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
}
} else if (value instanceof BigInteger) {
if (((BigInteger) value).bitLength() < Short.SIZE) {
return value.toString();
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
}
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
}
}

View File

@ -28,19 +28,19 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
*/
public final class EdmInt32 extends SingletonPrimitiveType {
private static final EdmInt32 instance = new EdmInt32();
private static final EdmInt32 INSTANCE = new EdmInt32();
public static EdmInt32 getInstance() {
return instance;
return INSTANCE;
}
@Override
public boolean isCompatible(final EdmPrimitiveType primitiveType) {
return primitiveType instanceof Uint7
|| primitiveType instanceof EdmByte
|| primitiveType instanceof EdmSByte
|| primitiveType instanceof EdmInt16
|| primitiveType instanceof EdmInt32;
|| primitiveType instanceof EdmByte
|| primitiveType instanceof EdmSByte
|| primitiveType instanceof EdmInt16
|| primitiveType instanceof EdmInt32;
}
@Override
@ -50,8 +50,9 @@ public final class EdmInt32 extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
Integer valueInteger;
try {
valueInteger = Integer.parseInt(value);
@ -63,17 +64,18 @@ public final class EdmInt32 extends SingletonPrimitiveType {
return EdmInt64.convertNumber(valueInteger, returnType);
} catch (final IllegalArgumentException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
} catch (final ClassCastException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
}
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
if (value instanceof Byte || value instanceof Short || value instanceof Integer) {
return value.toString();
} else if (value instanceof Long) {
@ -81,18 +83,18 @@ public final class EdmInt32 extends SingletonPrimitiveType {
return value.toString();
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
}
} else if (value instanceof BigInteger) {
if (((BigInteger) value).bitLength() < Integer.SIZE) {
return value.toString();
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
}
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
}
}

View File

@ -28,20 +28,20 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
*/
public final class EdmInt64 extends SingletonPrimitiveType {
private static final EdmInt64 instance = new EdmInt64();
private static final EdmInt64 INSTANCE = new EdmInt64();
public static EdmInt64 getInstance() {
return instance;
return INSTANCE;
}
@Override
public boolean isCompatible(final EdmPrimitiveType primitiveType) {
return primitiveType instanceof Uint7
|| primitiveType instanceof EdmByte
|| primitiveType instanceof EdmSByte
|| primitiveType instanceof EdmInt16
|| primitiveType instanceof EdmInt32
|| primitiveType instanceof EdmInt64;
|| primitiveType instanceof EdmByte
|| primitiveType instanceof EdmSByte
|| primitiveType instanceof EdmInt16
|| primitiveType instanceof EdmInt32
|| primitiveType instanceof EdmInt64;
}
@Override
@ -51,29 +51,31 @@ public final class EdmInt64 extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
Long valueLong;
try {
valueLong = Long.parseLong(value);
} catch (final NumberFormatException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)", e);
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)", e);
}
try {
return convertNumber(valueLong, returnType);
} catch (final IllegalArgumentException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
} catch (final ClassCastException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
}
}
/**
* Converts a whole {@link Number} value into the requested return type if possible.
*
* @param value the value
* @param returnType the class of the returned value; it must be one of {@link BigInteger}, {@link Long},
* {@link Integer}, {@link Short}, or {@link Byte}
@ -81,8 +83,9 @@ public final class EdmInt64 extends SingletonPrimitiveType {
* @throws IllegalArgumentException if the conversion is not possible
* @throws ClassCastException if the return type is not allowed
*/
public static <T> T convertNumber(final Number value, final Class<T> returnType) throws IllegalArgumentException,
ClassCastException {
public static <T> T convertNumber(final Number value, final Class<T> returnType)
throws IllegalArgumentException, ClassCastException {
if (returnType.isAssignableFrom(Long.class)) {
return returnType.cast(value.longValue());
} else if (returnType.isAssignableFrom(BigInteger.class)) {
@ -112,8 +115,9 @@ public final class EdmInt64 extends SingletonPrimitiveType {
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
if (value instanceof Byte || value instanceof Short || value instanceof Integer || value instanceof Long) {
return value.toString();
} else if (value instanceof BigInteger) {
@ -121,11 +125,11 @@ public final class EdmInt64 extends SingletonPrimitiveType {
return value.toString();
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
}
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
}
}

View File

@ -26,10 +26,10 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
*/
public final class EdmNull extends SingletonPrimitiveType {
private static final EdmNull instance = new EdmNull();
private static final EdmNull INSTANCE = new EdmNull();
public static EdmNull getInstance() {
return instance;
return INSTANCE;
}
@Override
@ -49,15 +49,17 @@ public final class EdmNull extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
return null;
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
return null;
}

View File

@ -23,11 +23,13 @@ import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
//TODO: Should we delete this typekind and use a facade?
public enum EdmPrimitiveTypeKind {
Binary, Boolean, Byte, Date, DateTimeOffset, Decimal, Double, Duration, Guid,
Int16, Int32, Int64, SByte, Single, String, TimeOfDay;
/**
* Returns the {@link FullQualifiedName} for this type kind.
*
* @return {@link FullQualifiedName}
*/
public FullQualifiedName getFullQualifiedName() {
@ -36,44 +38,45 @@ public enum EdmPrimitiveTypeKind {
/**
* Returns an instance for this {@link EdmPrimitiveTypeKind} in the form of {@link EdmPrimitiveType}.
*
* @return {@link EdmPrimitiveType} instance
*/
public EdmPrimitiveType getEdmPrimitiveTypeInstance() {
switch (this) {
case Binary:
return EdmBinary.getInstance();
case Boolean:
return EdmBoolean.getInstance();
case Byte:
return EdmByte.getInstance();
case Date:
return EdmDate.getInstance();
case DateTimeOffset:
return EdmDateTimeOffset.getInstance();
case Decimal:
return EdmDecimal.getInstance();
case Double:
return EdmDouble.getInstance();
case Duration:
return EdmDuration.getInstance();
case Guid:
return EdmGuid.getInstance();
case Int16:
return EdmInt16.getInstance();
case Int32:
return EdmInt32.getInstance();
case Int64:
return EdmInt64.getInstance();
case SByte:
return EdmSByte.getInstance();
case Single:
return EdmSingle.getInstance();
case String:
return EdmString.getInstance();
case TimeOfDay:
return EdmTimeOfDay.getInstance();
default:
throw new RuntimeException("Wrong type:" + this);
case Binary:
return EdmBinary.getInstance();
case Boolean:
return EdmBoolean.getInstance();
case Byte:
return EdmByte.getInstance();
case Date:
return EdmDate.getInstance();
case DateTimeOffset:
return EdmDateTimeOffset.getInstance();
case Decimal:
return EdmDecimal.getInstance();
case Double:
return EdmDouble.getInstance();
case Duration:
return EdmDuration.getInstance();
case Guid:
return EdmGuid.getInstance();
case Int16:
return EdmInt16.getInstance();
case Int32:
return EdmInt32.getInstance();
case Int64:
return EdmInt64.getInstance();
case SByte:
return EdmSByte.getInstance();
case Single:
return EdmSingle.getInstance();
case String:
return EdmString.getInstance();
case TimeOfDay:
return EdmTimeOfDay.getInstance();
default:
throw new RuntimeException("Wrong type:" + this);
}
}
}

View File

@ -28,16 +28,16 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
*/
public final class EdmSByte extends SingletonPrimitiveType {
private static final EdmSByte instance = new EdmSByte();
private static final EdmSByte INSTANCE = new EdmSByte();
public static EdmSByte getInstance() {
return instance;
return INSTANCE;
}
@Override
public boolean isCompatible(final EdmPrimitiveType primitiveType) {
return primitiveType instanceof Uint7
|| primitiveType instanceof EdmSByte;
|| primitiveType instanceof EdmSByte;
}
@Override
@ -47,28 +47,30 @@ public final class EdmSByte extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
Byte valueByte;
try {
valueByte = Byte.parseByte(value);
} catch (final NumberFormatException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)", e);
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)", e);
}
try {
return EdmInt64.convertNumber(valueByte, returnType);
} catch (final ClassCastException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
}
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
if (value instanceof Byte) {
return value.toString();
} else if (value instanceof Short || value instanceof Integer || value instanceof Long) {
@ -76,18 +78,18 @@ public final class EdmSByte extends SingletonPrimitiveType {
return value.toString();
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
}
} else if (value instanceof BigInteger) {
if (((BigInteger) value).bitLength() < Byte.SIZE) {
return value.toString();
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
"EdmPrimitiveTypeException.VALUE_ILLEGAL_CONTENT.addContent(value)");
}
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
}
}

View File

@ -30,22 +30,23 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
public final class EdmSingle extends SingletonPrimitiveType {
private static final Pattern PATTERN = Pattern.compile(
"(?:\\+|-)?\\p{Digit}{1,9}(?:\\.\\p{Digit}{1,9})?(?:(?:E|e)(?:\\+|-)?\\p{Digit}{1,2})?");
private static final EdmSingle instance = new EdmSingle();
"(?:\\+|-)?\\p{Digit}{1,9}(?:\\.\\p{Digit}{1,9})?(?:(?:E|e)(?:\\+|-)?\\p{Digit}{1,2})?");
private static final EdmSingle INSTANCE = new EdmSingle();
public static EdmSingle getInstance() {
return instance;
return INSTANCE;
}
@Override
public boolean isCompatible(final EdmPrimitiveType primitiveType) {
return primitiveType instanceof Uint7
|| primitiveType instanceof EdmByte
|| primitiveType instanceof EdmSByte
|| primitiveType instanceof EdmInt16
|| primitiveType instanceof EdmInt32
|| primitiveType instanceof EdmInt64
|| primitiveType instanceof EdmSingle;
|| primitiveType instanceof EdmByte
|| primitiveType instanceof EdmSByte
|| primitiveType instanceof EdmInt16
|| primitiveType instanceof EdmInt32
|| primitiveType instanceof EdmInt64
|| primitiveType instanceof EdmSingle;
}
@Override
@ -55,8 +56,9 @@ public final class EdmSingle extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
Float result = null;
BigDecimal bigDecimalValue = null;
// Handle special values first.
@ -89,25 +91,26 @@ public final class EdmSingle extends SingletonPrimitiveType {
return returnType.cast(result.doubleValue());
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType)");
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType)");
}
} else {
try {
return EdmDecimal.convertDecimal(bigDecimalValue, returnType);
} catch (final IllegalArgumentException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
} catch (final ClassCastException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
}
}
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
if (value instanceof Long || value instanceof Integer) {
if (Math.abs(((Number) value).longValue()) < 1L << 22) {
return value.toString();
@ -128,8 +131,8 @@ public final class EdmSingle extends SingletonPrimitiveType {
}
}
} else if (value instanceof Float) {
return (Float) value == Float.NEGATIVE_INFINITY ? EdmDouble.NEGATIVE_INFINITY :
(Float) value == Float.POSITIVE_INFINITY ? EdmDouble.POSITIVE_INFINITY : value.toString();
return (Float) value == Float.NEGATIVE_INFINITY ? EdmDouble.NEGATIVE_INFINITY
: (Float) value == Float.POSITIVE_INFINITY ? EdmDouble.POSITIVE_INFINITY : value.toString();
} else if (value instanceof BigDecimal) {
final float floatValue = ((BigDecimal) value).floatValue();
if (!Float.isInfinite(floatValue) && BigDecimal.valueOf(floatValue).compareTo((BigDecimal) value) == 0) {
@ -139,7 +142,7 @@ public final class EdmSingle extends SingletonPrimitiveType {
}
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
}
}
}

View File

@ -28,14 +28,16 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
public final class EdmString extends SingletonPrimitiveType {
private static final Pattern PATTERN_ASCII = Pattern.compile("\\p{ASCII}*");
private static final EdmString instance = new EdmString();
private static final EdmString INSTANCE = new EdmString();
{
uriPrefix = "'";
uriSuffix = "'";
}
public static EdmString getInstance() {
return instance;
return INSTANCE;
}
@Override
@ -45,32 +47,34 @@ public final class EdmString extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
if (isUnicode != null && !isUnicode && !PATTERN_ASCII.matcher(value).matches()
|| maxLength != null && maxLength < value.length()) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(value, facets)");
"EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(value, facets)");
}
if (returnType.isAssignableFrom(String.class)) {
return returnType.cast(value);
} else {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType)");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType)");
}
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final String result = value instanceof String ? (String) value : String.valueOf(value);
if (isUnicode != null && !isUnicode && !PATTERN_ASCII.matcher(result).matches()
|| maxLength != null && maxLength < result.length()) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets)");
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets)");
}
return result;
@ -84,7 +88,7 @@ public final class EdmString extends SingletonPrimitiveType {
final int length = literal.length();
StringBuilder uriLiteral = new StringBuilder(length + 2);
final StringBuilder uriLiteral = new StringBuilder(length + 2);
uriLiteral.append(uriPrefix);
for (int i = 0; i < length; i++) {
final char c = literal.charAt(i);

View File

@ -28,11 +28,12 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
public final class EdmTimeOfDay extends SingletonPrimitiveType {
private static final Pattern PATTERN = Pattern.compile(
"(\\p{Digit}{2}):(\\p{Digit}{2})(?::(\\p{Digit}{2})(\\.(\\p{Digit}{0,3}?)0*)?)?");
private static final EdmTimeOfDay instance = new EdmTimeOfDay();
"(\\p{Digit}{2}):(\\p{Digit}{2})(?::(\\p{Digit}{2})(\\.(\\p{Digit}{0,3}?)0*)?)?");
private static final EdmTimeOfDay INSTANCE = new EdmTimeOfDay();
public static EdmTimeOfDay getInstance() {
return instance;
return INSTANCE;
}
@Override
@ -42,14 +43,15 @@ public final class EdmTimeOfDay extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
final Matcher matcher = PATTERN.matcher(value);
if (!matcher.matches()) {
throw new EdmPrimitiveTypeException("EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value)");
}
Calendar dateTimeValue = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
final Calendar dateTimeValue = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
dateTimeValue.clear();
dateTimeValue.set(Calendar.HOUR_OF_DAY, Byte.parseByte(matcher.group(1)));
dateTimeValue.set(Calendar.MINUTE, Byte.parseByte(matcher.group(2)));
@ -62,7 +64,7 @@ public final class EdmTimeOfDay extends SingletonPrimitiveType {
final String decimals = matcher.group(5);
if (decimals.length() > (precision == null ? 0 : precision)) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(value, facets)");
"EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(value, facets)");
}
final String milliSeconds = decimals + "000".substring(decimals.length());
dateTimeValue.set(Calendar.MILLISECOND, Short.parseShort(milliSeconds));
@ -72,20 +74,21 @@ public final class EdmTimeOfDay extends SingletonPrimitiveType {
return EdmDateTimeOffset.convertDateTime(dateTimeValue, returnType);
} catch (final IllegalArgumentException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value), e");
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value), e");
} catch (final ClassCastException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
}
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
final Calendar dateTimeValue = EdmDateTimeOffset.createDateTime(value);
StringBuilder result = new StringBuilder(8); // Eight characters are enough for "normal" times.
final StringBuilder result = new StringBuilder(8); // Eight characters are enough for "normal" times.
EdmDateTimeOffset.appendTwoDigits(result, dateTimeValue.get(Calendar.HOUR_OF_DAY));
result.append(':');
EdmDateTimeOffset.appendTwoDigits(result, dateTimeValue.get(Calendar.MINUTE));
@ -96,7 +99,7 @@ public final class EdmTimeOfDay extends SingletonPrimitiveType {
EdmDateTimeOffset.appendMilliseconds(result, dateTimeValue.get(Calendar.MILLISECOND), precision);
} catch (final IllegalArgumentException e) {
throw new EdmPrimitiveTypeException(
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets), e");
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets), e");
}
return result.toString();

View File

@ -25,10 +25,10 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
*/
public final class Uint7 extends SingletonPrimitiveType {
private static final Uint7 instance = new Uint7();
private static final Uint7 INSTANCE = new Uint7();
public static Uint7 getInstance() {
return instance;
return INSTANCE;
}
@Override
@ -48,16 +48,19 @@ public final class Uint7 extends SingletonPrimitiveType {
@Override
protected <T> T internalValueOfString(final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
return EdmSByte.getInstance().internalValueOfString(value, isNullable, maxLength, precision, scale, isUnicode,
returnType);
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
return EdmSByte.getInstance().internalValueOfString(
value, isNullable, maxLength, precision, scale, isUnicode, returnType);
}
@Override
protected <T> String internalValueToString(final T value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
return EdmSByte.getInstance().internalValueToString(value, isNullable, maxLength, precision, scale, isUnicode);
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
return EdmSByte.getInstance().internalValueToString(
value, isNullable, maxLength, precision, scale, isUnicode);
}
}

View File

@ -29,6 +29,7 @@ import org.junit.Test;
public class ActionMapKeyTest {
private final FullQualifiedName fqn = new FullQualifiedName("namespace", "name");
private final FullQualifiedName fqnType = new FullQualifiedName("namespace2", "name2");
@Test
@ -44,7 +45,7 @@ public class ActionMapKeyTest {
}
private void createAndCheckForEdmException(final FullQualifiedName fqn, final FullQualifiedName typeName,
final Boolean collection) {
final Boolean collection) {
try {
new ActionMapKey(fqn, typeName, collection);
} catch (EdmException e) {

View File

@ -46,7 +46,9 @@ import org.junit.Test;
public class EdmImplCachingTest {
private final FullQualifiedName NAME1 = new FullQualifiedName("testNamespace1", "testName1");
private final FullQualifiedName NAME2 = new FullQualifiedName("testNamespace2", "testName2");
private Edm edm;
@Test
@ -244,7 +246,8 @@ public class EdmImplCachingTest {
edm = new LocalEdm();
}
private class LocalEdm extends EdmImpl {
private class LocalEdm extends AbstractEdmImpl {
@Override
public EdmEntityContainer createEntityContainer(final FullQualifiedName fqn) {
if (NAME1.equals(fqn) || fqn == null) {
@ -307,7 +310,7 @@ public class EdmImplCachingTest {
@Override
public EdmAction createBoundAction(final FullQualifiedName fqn, final FullQualifiedName bindingParameterTypeName,
final Boolean isBindingParameterCollection) {
final Boolean isBindingParameterCollection) {
if (NAME1.equals(fqn)) {
EdmAction action = mock(EdmAction.class);
when(action.getNamespace()).thenReturn(fqn.getNamespace());
@ -324,8 +327,8 @@ public class EdmImplCachingTest {
@Override
public EdmFunction createBoundFunction(final FullQualifiedName fqn,
final FullQualifiedName bindingParameterTypeName,
final Boolean isBindingParameterCollection, final List<String> bindingParameterNames) {
final FullQualifiedName bindingParameterTypeName,
final Boolean isBindingParameterCollection, final List<String> bindingParameterNames) {
if (NAME1.equals(fqn)) {
EdmFunction function = mock(EdmFunction.class);
when(function.getNamespace()).thenReturn(fqn.getNamespace());

View File

@ -46,7 +46,9 @@ import org.junit.Test;
public class EdmImplCallCreateTest {
private final FullQualifiedName FQN = new FullQualifiedName("testNamespace", "testName");
private final FullQualifiedName WRONG_FQN = new FullQualifiedName("wrong", "wrong");
private Edm edm;
@Test
@ -148,7 +150,8 @@ public class EdmImplCallCreateTest {
edm = new LocalEdm();
}
private class LocalEdm extends EdmImpl {
private class LocalEdm extends AbstractEdmImpl {
@Override
public EdmEntityContainer createEntityContainer(final FullQualifiedName fqn) {
if (fqn == null || FQN.getNamespace().equals(fqn.getNamespace()) && FQN.getName().equals(fqn.getName())) {
@ -206,7 +209,7 @@ public class EdmImplCallCreateTest {
@Override
public EdmAction createBoundAction(final FullQualifiedName fqn, final FullQualifiedName bindingParameterTypeName,
final Boolean isBindingParameterCollection) {
final Boolean isBindingParameterCollection) {
if (FQN.getNamespace().equals(fqn.getNamespace()) && FQN.getName().equals(fqn.getName())) {
EdmAction action = mock(EdmAction.class);
when(action.getNamespace()).thenReturn(fqn.getNamespace());
@ -218,8 +221,8 @@ public class EdmImplCallCreateTest {
@Override
public EdmFunction createBoundFunction(final FullQualifiedName fqn,
final FullQualifiedName bindingParameterTypeName,
final Boolean isBindingParameterCollection, final List<String> bindingParameterNames) {
final FullQualifiedName bindingParameterTypeName,
final Boolean isBindingParameterCollection, final List<String> bindingParameterNames) {
if (FQN.getNamespace().equals(fqn.getNamespace()) && FQN.getName().equals(fqn.getName())) {
EdmFunction function = mock(EdmFunction.class);
when(function.getNamespace()).thenReturn(fqn.getNamespace());

View File

@ -30,6 +30,7 @@ import org.junit.Test;
public class FunctionMapKeyTest {
private final FullQualifiedName fqn = new FullQualifiedName("namespace", "name");
private final FullQualifiedName fqnType = new FullQualifiedName("namespace2", "name2");
@Test

View File

@ -86,23 +86,23 @@ public class EdmSingleTest extends PrimitiveTypeBaseTest {
assertEquals(Float.valueOf(42.0F), instance.valueOfString("42", null, null, null, null, null, Float.class));
assertEquals(Float.valueOf(2.2E38F), instance.valueOfString("22E37", null, null, null, null, null, Float.class));
assertEquals(Float.valueOf(1.23E-38F), instance.valueOfString("12.3E-39", null, null, null, null, null,
Float.class));
Float.class));
assertEquals(BigDecimal.TEN, instance.valueOfString("10", null, null, null, null, null, BigDecimal.class));
assertEquals(Byte.valueOf((byte) 0), instance.valueOfString("0", null, null, null, null, null, Byte.class));
assertEquals(Short.valueOf((short) 1), instance.valueOfString("1.00", null, null, null, null, null, Short.class));
assertEquals(Integer.valueOf(42), instance.valueOfString("4.2E1", null, null, null, null, null, Integer.class));
assertEquals(Long.valueOf(12345678), instance.valueOfString("12345.678E+03", null, null, null, null, null,
Long.class));
Long.class));
assertEquals(Float.valueOf(Float.NaN), instance.valueOfString("NaN", null, null, null, null, null, Float.class));
assertEquals(Float.valueOf(Float.NEGATIVE_INFINITY), instance.valueOfString("-INF", null, null, null, null, null,
Float.class));
Float.class));
assertEquals(Float.valueOf(Float.POSITIVE_INFINITY), instance.valueOfString("INF", null, null, null, null, null,
Float.class));
Float.class));
assertEquals(Double.valueOf(Double.NaN), instance.valueOfString("NaN", null, null, null, null, null,
Double.class));
Double.class));
assertEquals(Double.valueOf(Double.NEGATIVE_INFINITY), instance.valueOfString("-INF", null, null, null, null, null,
Double.class));
Double.class));
expectContentErrorInValueOfString(instance, "0.");
expectContentErrorInValueOfString(instance, ".0");

View File

@ -69,7 +69,7 @@ public class EdmTimeOfDayTest extends PrimitiveTypeBaseTest {
assertEquals(dateTime, instance.valueOfString("00:00", null, null, null, null, null, Calendar.class));
assertEquals(dateTime, instance.valueOfString("00:00:00", null, null, null, null, null, Calendar.class));
assertEquals(dateTime, instance.valueOfString("00:00:00.000000000000", null, null, null, null, null,
Calendar.class));
Calendar.class));
dateTime.set(Calendar.MILLISECOND, 999);
assertEquals(dateTime, instance.valueOfString("00:00:00.999", null, null, 3, null, null, Calendar.class));

View File

@ -28,9 +28,9 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveTypeException;
public abstract class PrimitiveTypeBaseTest {
private void expectErrorInValueToString(final EdmPrimitiveType instance,
final Object value, final Boolean isNullable, final Integer maxLength,
final Integer precision, final Integer scale, final Boolean isUnicode,
final String messageReferenceString) {
final Object value, final Boolean isNullable, final Integer maxLength,
final Integer precision, final Integer scale, final Boolean isUnicode,
final String messageReferenceString) {
try {
instance.valueToString(value, isNullable, maxLength, precision, scale, isUnicode);
fail("Expected exception not thrown");
@ -41,7 +41,7 @@ public abstract class PrimitiveTypeBaseTest {
}
private void expectErrorInValueToString(final EdmPrimitiveType instance, final Object value,
final String messageReference) {
final String messageReference) {
expectErrorInValueToString(instance, value, null, null, null, null, null, messageReference);
}
@ -54,20 +54,22 @@ public abstract class PrimitiveTypeBaseTest {
}
protected void expectFacetsErrorInValueToString(final EdmPrimitiveType instance, final Object value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) {
expectErrorInValueToString(instance, value, isNullable, maxLength, precision, scale, isUnicode,
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED");
"EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED");
}
protected void expectNullErrorInValueToString(final EdmPrimitiveType instance) {
expectErrorInValueToString(instance, null, false, null, null, null, null,
"EdmPrimitiveTypeException.VALUE_NULL_NOT_ALLOWED");
"EdmPrimitiveTypeException.VALUE_NULL_NOT_ALLOWED");
}
private void expectErrorInValueOfString(final EdmPrimitiveType instance,
final String value, final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<?> returnType, final String messageReferenceString) {
final String value, final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode, final Class<?> returnType,
final String messageReferenceString) {
try {
instance.valueOfString(value, isNullable, maxLength, precision, scale, isUnicode, returnType);
fail("Expected exception not thrown");
@ -79,30 +81,30 @@ public abstract class PrimitiveTypeBaseTest {
protected void expectTypeErrorInValueOfString(final EdmPrimitiveType instance, final String value) {
expectErrorInValueOfString(instance, value, null, null, null, null, null, Class.class,
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED");
"EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED");
}
protected void expectUnconvertibleErrorInValueOfString(final EdmPrimitiveType instance, final String value,
final Class<?> type) {
final Class<?> type) {
expectErrorInValueOfString(instance, value, null, null, null, null, null, type,
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE");
"EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE");
}
protected void expectContentErrorInValueOfString(final EdmPrimitiveType instance, final String value) {
expectErrorInValueOfString(instance, value, null, null, null, null, null, instance.getDefaultType(),
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT");
"EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT");
}
protected void expectFacetsErrorInValueOfString(final EdmPrimitiveType instance, final String value,
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) {
final Boolean isNullable, final Integer maxLength, final Integer precision,
final Integer scale, final Boolean isUnicode) {
expectErrorInValueOfString(instance, value, isNullable, maxLength, precision, scale, isUnicode,
instance.getDefaultType(), "EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED");
instance.getDefaultType(), "EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED");
}
protected void expectNullErrorInValueOfString(final EdmPrimitiveType instance) {
expectErrorInValueOfString(instance, null, false, null, null, null, null, instance.getDefaultType(),
"EdmPrimitiveTypeException.LITERAL_NULL_NOT_ALLOWED");
"EdmPrimitiveTypeException.LITERAL_NULL_NOT_ALLOWED");
}
protected void expectErrorInFromUriLiteral(final EdmPrimitiveType instance, final String value) {

View File

@ -35,7 +35,7 @@ import org.apache.olingo.odata4.commons.api.edm.EdmFunction;
import org.apache.olingo.odata4.commons.api.edm.EdmServiceMetadata;
import org.apache.olingo.odata4.commons.api.edm.EdmTypeDefinition;
import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
import org.apache.olingo.odata4.commons.core.edm.EdmImpl;
import org.apache.olingo.odata4.commons.core.edm.AbstractEdmImpl;
import org.apache.olingo.odata4.server.api.edm.provider.Action;
import org.apache.olingo.odata4.server.api.edm.provider.AliasInfo;
import org.apache.olingo.odata4.server.api.edm.provider.ComplexType;
@ -47,7 +47,7 @@ import org.apache.olingo.odata4.server.api.edm.provider.Function;
import org.apache.olingo.odata4.server.api.edm.provider.Parameter;
import org.apache.olingo.odata4.server.api.edm.provider.TypeDefinition;
public class EdmProviderImpl extends EdmImpl {
public class EdmProviderImpl extends AbstractEdmImpl {
private final EdmProvider provider;
private final Map<FullQualifiedName, List<Action>> actionsMap = new HashMap<FullQualifiedName, List<Action>>();

View File

@ -23,17 +23,17 @@ import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveType;
import org.apache.olingo.odata4.commons.api.edm.EdmReturnType;
import org.apache.olingo.odata4.commons.api.edm.EdmType;
import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
import org.apache.olingo.odata4.commons.core.edm.EdmImpl;
import org.apache.olingo.odata4.commons.core.edm.AbstractEdmImpl;
import org.apache.olingo.odata4.commons.core.edm.primitivetype.EdmPrimitiveTypeKind;
import org.apache.olingo.odata4.server.api.edm.provider.ReturnType;
public class EdmReturnTypeImpl implements EdmReturnType {
private final EdmImpl edm;
private final AbstractEdmImpl edm;
private final ReturnType returnType;
private EdmType typeImpl;
public EdmReturnTypeImpl(final EdmImpl edm, final ReturnType returnType) {
public EdmReturnTypeImpl(final AbstractEdmImpl edm, final ReturnType returnType) {
this.edm = edm;
this.returnType = returnType;
}