You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2013/09/13 16:59:33 UTC
git commit: OLINGO-9 JPA Support for char type:
Updated Branches:
refs/heads/master 336528180 -> b6fbd3be4
OLINGO-9 JPA Support for char type:
Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/commit/b6fbd3be
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/tree/b6fbd3be
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/diff/b6fbd3be
Branch: refs/heads/master
Commit: b6fbd3be4e5a46d1d1ea26ff39b216949b87446e
Parents: 3365281
Author: Chandan V A <ch...@sap.com>
Authored: Fri Sep 13 20:28:42 2013 +0530
Committer: Chandan V A <ch...@sap.com>
Committed: Fri Sep 13 20:28:42 2013 +0530
----------------------------------------------------------------------
.../core/jpa/access/data/JPAEntity.java | 14 +++-
.../core/jpa/access/data/JPAEntityParser.java | 78 ++++++++++++--------
.../core/jpa/access/model/JPATypeConvertor.java | 3 +-
3 files changed, 63 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/b6fbd3be/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntity.java
----------------------------------------------------------------------
diff --git a/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntity.java b/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntity.java
index 31448c6..59b8313 100644
--- a/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntity.java
+++ b/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntity.java
@@ -246,7 +246,19 @@ public class JPAEntity {
protected void setProperty(final Method method, final Object entity, final Object entityPropertyValue) throws
IllegalAccessException, IllegalArgumentException, InvocationTargetException {
if (entityPropertyValue != null) {
- method.invoke(entity, entityPropertyValue);
+ Class<?> parameterType = method.getParameterTypes()[0];
+ if (parameterType.equals(char[].class))
+ {
+ char[] characters = ((String) entityPropertyValue).toCharArray();
+ method.invoke(entity, characters);
+ }
+ else if (parameterType.equals(Character[].class))
+ {
+ Character[] characters = JPAEntityParser.toCharacterArray((String) entityPropertyValue);
+ method.invoke(entity, (Object)characters);
+ }
+ else
+ method.invoke(entity, entityPropertyValue);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/b6fbd3be/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntityParser.java
----------------------------------------------------------------------
diff --git a/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntityParser.java b/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntityParser.java
index ccc64ba..f22fd79 100644
--- a/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntityParser.java
+++ b/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/data/JPAEntityParser.java
@@ -93,14 +93,14 @@ public final class JPAEntityParser {
method = propertyVal.getClass().getMethod(
namePart, (Class<?>[]) null);
method.setAccessible(true);
- propertyVal = method.invoke(propertyVal);
+ propertyVal = getProperty(method, propertyVal);
}
edmEntity.put(property.getName(), propertyVal);
} else {
method = jpaEntity.getClass().getMethod(methodName,
(Class<?>[]) null);
method.setAccessible(true);
- propertyValue = method.invoke(jpaEntity);
+ propertyValue = getProperty(method, jpaEntity);
key = property.getName();
if (property.getType().getKind()
.equals(EdmTypeKind.COMPLEX)) {
@@ -130,14 +130,6 @@ public final class JPAEntityParser {
throw ODataJPARuntimeException.throwException(
ODataJPARuntimeException.GENERAL.addContent(e
.getMessage()), e);
- } catch (IllegalAccessException e) {
- throw ODataJPARuntimeException.throwException(
- ODataJPARuntimeException.GENERAL.addContent(e
- .getMessage()), e);
- } catch (InvocationTargetException e) {
- throw ODataJPARuntimeException.throwException(
- ODataJPARuntimeException.GENERAL.addContent(e
- .getMessage()), e);
}
}
@@ -187,9 +179,8 @@ public final class JPAEntityParser {
if (method != null) {
getters.get(key).setAccessible(true);
- propertyValue = getters.get(key).invoke(jpaEntity);
+ propertyValue = getProperty(method, jpaEntity);
}
-
if (property.getType().getKind().equals(EdmTypeKind.COMPLEX)) {
propertyValue = parse2EdmPropertyValueMap(propertyValue,
(EdmStructuralType) property.getType());
@@ -209,7 +200,7 @@ public final class JPAEntityParser {
method = propertyValue.getClass().getMethod(
namePart, (Class<?>[]) null);
method.setAccessible(true);
- propertyValue = method.invoke(propertyValue);
+ propertyValue = getProperty(method, jpaEntity);
}
edmEntity.put(key, propertyValue);
}
@@ -230,14 +221,6 @@ public final class JPAEntityParser {
throw ODataJPARuntimeException
.throwException(ODataJPARuntimeException.GENERAL
.addContent(e.getMessage()), e);
- } catch (IllegalAccessException e) {
- throw ODataJPARuntimeException
- .throwException(ODataJPARuntimeException.GENERAL
- .addContent(e.getMessage()), e);
- } catch (InvocationTargetException e) {
- throw ODataJPARuntimeException
- .throwException(ODataJPARuntimeException.GENERAL
- .addContent(e.getMessage()), e);
}
return edmEntity;
}
@@ -260,21 +243,13 @@ public final class JPAEntityParser {
Method getterMethod = jpaEntity.getClass()
.getDeclaredMethod(methodName, (Class<?>[]) null);
getterMethod.setAccessible(true);
- result = getterMethod.invoke(jpaEntity);
+ result = getProperty(getterMethod, jpaEntity);
navigationMap.put(navigationProperty.getName(), result);
}
} catch (IllegalArgumentException e) {
throw ODataJPARuntimeException.throwException(
ODataJPARuntimeException.GENERAL.addContent(e
.getMessage()), e);
- } catch (IllegalAccessException e) {
- throw ODataJPARuntimeException.throwException(
- ODataJPARuntimeException.GENERAL.addContent(e
- .getMessage()), e);
- } catch (InvocationTargetException e) {
- throw ODataJPARuntimeException.throwException(
- ODataJPARuntimeException.GENERAL.addContent(e
- .getMessage()), e);
} catch (EdmException e) {
throw ODataJPARuntimeException.throwException(
ODataJPARuntimeException.GENERAL.addContent(e
@@ -365,6 +340,49 @@ public final class JPAEntityParser {
return accessModifierMap;
}
+ public static Object getProperty(Method method, Object entity) throws ODataJPARuntimeException {
+ Object propertyValue = null;
+ try {
+ Class<?> returnType = method.getReturnType();
+
+ if (returnType.equals(char[].class))
+ propertyValue = (String) String.valueOf((char[]) method.invoke(entity));
+ else if (returnType.equals(Character[].class))
+ propertyValue = (String) toString((Character[]) method.invoke(entity));
+ else
+ propertyValue = method.invoke(entity);
+ } catch (IllegalAccessException e) {
+ throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, e);
+ } catch (IllegalArgumentException e) {
+ throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, e);
+ } catch (InvocationTargetException e) {
+ throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, e);
+ }
+ return propertyValue;
+ }
+
+ public static String toString(Character[] input) {
+ if (input == null) return null;
+
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < input.length; i++)
+ builder.append(input[i].charValue());
+
+ return builder.toString();
+
+ }
+
+ public static Character[] toCharacterArray(String input) {
+ if (input == null) return null;
+
+ Character[] characters = new Character[input.length()];
+ char[] chars = ((String) input).toCharArray();
+ for (int i = 0; i < input.length(); i++)
+ characters[i] = new Character(chars[i]);
+
+ return characters;
+ }
+
public static String getAccessModifierName(final String propertyName, final EdmMapping mapping, final String accessModifier)
throws ODataJPARuntimeException {
String name = null;
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/b6fbd3be/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/model/JPATypeConvertor.java
----------------------------------------------------------------------
diff --git a/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/model/JPATypeConvertor.java b/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/model/JPATypeConvertor.java
index 730c0f2..6bb69b5 100644
--- a/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/model/JPATypeConvertor.java
+++ b/jpa-core/src/main/java/org/apache/olingo/odata2/processor/core/jpa/access/model/JPATypeConvertor.java
@@ -52,7 +52,8 @@ public class JPATypeConvertor {
* @see EdmSimpleTypeKind
*/
public static EdmSimpleTypeKind convertToEdmSimpleType(final Class<?> jpaType, final Attribute<?, ?> currentAttribute) throws ODataJPAModelException {
- if (jpaType.equals(String.class)) {
+ if (jpaType.equals(String.class) || jpaType.equals(Character.class) || jpaType.equals(char.class) || jpaType.equals(char[].class) ||
+ jpaType.equals(Character[].class)) {
return EdmSimpleTypeKind.String;
} else if (jpaType.equals(Long.class) || jpaType.equals(long.class)) {
return EdmSimpleTypeKind.Int64;