in odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntity.java [455:532]
protected void setProperty(final Method method, final Object entity, final Object entityPropertyValue, final EdmSimpleType type,
String propertyName, boolean isNullable)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, ODataJPARuntimeException, EdmException {
if (entityPropertyValue != null || isNullable) {
if (propertyName != null) {
method.invoke(entity, propertyName, entityPropertyValue);
return;
}
Class<?> parameterType = method.getParameterTypes()[0];
if (type != null && type.getDefaultType()
.equals(String.class)) {
if (parameterType.equals(String.class)) {
method.invoke(entity, entityPropertyValue);
} else if (parameterType.equals(char[].class)) {
char[] characters = entityPropertyValue != null ? ((String) entityPropertyValue).toCharArray() : null;
method.invoke(entity, characters);
} else if (parameterType.equals(char.class)) {
char c = entityPropertyValue != null ? ((String) entityPropertyValue).charAt(0) : '\u0000';
method.invoke(entity, c);
} else if (parameterType.equals(Character[].class)) {
Character[] characters =
entityPropertyValue != null ? JPAEntityParser.toCharacterArray((String) entityPropertyValue) : null;
method.invoke(entity, (Object) characters);
} else if (parameterType.equals(Character.class)) {
Character c = entityPropertyValue != null ? Character.valueOf(((String) entityPropertyValue).charAt(0)) : null;
method.invoke(entity, c);
} else if (parameterType.isEnum()) {
Enum e = entityPropertyValue != null ? Enum.valueOf((Class<Enum>) parameterType, (String) entityPropertyValue) : null;
method.invoke(entity, e);
} else {
String setterName = method.getName();
String getterName = setterName.replace("set", "get");
try {
Method getMethod = entity.getClass()
.getDeclaredMethod(getterName);
if (getMethod.isAnnotationPresent(XmlJavaTypeAdapter.class)) {
XmlAdapter xmlAdapter = getMethod.getAnnotation(XmlJavaTypeAdapter.class)
.value()
.newInstance();
method.invoke(entity, xmlAdapter.unmarshal(entityPropertyValue));
}
} catch (Exception e) {
throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL, e);
}
}
} else if (parameterType.equals(Blob.class)) {
if (onJPAWriteContent == null) {
throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.ERROR_JPA_BLOB_NULL, null);
}
method.invoke(entity, entityPropertyValue != null ? onJPAWriteContent.getJPABlob((byte[]) entityPropertyValue) : null);
} else if (parameterType.equals(Clob.class)) {
if (onJPAWriteContent == null) {
throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.ERROR_JPA_CLOB_NULL, null);
}
method.invoke(entity,
entityPropertyValue != null ? onJPAWriteContent.getJPAClob(((String) entityPropertyValue).toCharArray()) : null);
} else if (parameterType.equals(Timestamp.class)) {
Timestamp ts = entityPropertyValue != null ? new Timestamp(((Calendar) entityPropertyValue).getTimeInMillis()) : null;
method.invoke(entity, ts);
} else if (parameterType.equals(java.util.Date.class)) {
Date d = entityPropertyValue != null ? ((Calendar) entityPropertyValue).getTime() : null;
method.invoke(entity, d);
} else if (parameterType.equals(java.sql.Date.class)) {
java.sql.Date d =
entityPropertyValue != null ? new java.sql.Date(((Calendar) entityPropertyValue).getTimeInMillis()) : null;
method.invoke(entity, d);
} else if (parameterType.equals(java.sql.Time.class)) {
java.sql.Time t =
entityPropertyValue != null ? new java.sql.Time(((Calendar) entityPropertyValue).getTimeInMillis()) : null;
method.invoke(entity, t);
} else if (parameterType.equals(byte.class)) {
byte b = entityPropertyValue != null ? Byte.parseByte(entityPropertyValue.toString()) : 0;
method.invoke(entity, b);
} else {
method.invoke(entity, entityPropertyValue);
}
}
}