in odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParser.java [557:640]
private HashMap<String, Method> getAccessModifiers(final List<EdmProperty> edmProperties,
final Class<?> jpaEntityType,
final String accessModifier) throws ODataJPARuntimeException {
HashMap<String, Method> accessModifierMap = jpaEntityAccessMap.get(jpaEntityType.getName());
if (accessModifierMap == null) {
accessModifierMap = new HashMap<String, Method>();
jpaEntityAccessMap.put(jpaEntityType.getName(), accessModifierMap);
}
HashMap<String, String> embeddableKey = jpaEmbeddableKeyMap.get(jpaEntityType.getName());
if (embeddableKey == null) {
embeddableKey = new HashMap<String, String>();
}
Method method = null;
try {
for (EdmProperty property : edmProperties) {
String propertyName = property.getName();
if (accessModifierMap.containsKey(propertyName)) {
continue;
}
String methodName = getAccessModifierName(property.getName(), property.getMapping(), accessModifier);
String[] nameParts = methodName != null ? methodName.split("\\.") : new String[0];
try {
if (nameParts.length > 1) {
if (!embeddableKey.containsKey(propertyName)) {
embeddableKey.put(propertyName, methodName);
continue;
}
} else {
if (accessModifier.equals(ACCESS_MODIFIER_SET)) {
JPAEdmMapping jpaEdmMapping = (JPAEdmMapping) property.getMapping();
if(jpaEdmMapping != null && jpaEdmMapping.isVirtualAccess()) {
accessModifierMap.put(propertyName, jpaEntityType.getMethod(ACCESS_MODIFIER_SET,
new Class<?>[] { String.class,Object.class }));
}else {
accessModifierMap.put(propertyName, jpaEntityType.getMethod(methodName,
new Class<?>[] { jpaEdmMapping != null ?
jpaEdmMapping.getJPAType() : null }));
}
} else {
JPAEdmMapping jpaEdmMapping = (JPAEdmMapping) property.getMapping();
if(jpaEdmMapping != null && jpaEdmMapping.isVirtualAccess()) {
method = jpaEntityType.getMethod(ACCESS_MODIFIER_GET, String.class);
}else{
method = jpaEntityType.getMethod(methodName, (Class<?>[]) null);
}
}
}
} catch (EdmException exp) {
throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, exp);
} catch (NoSuchMethodException e1) {
try {
EdmSimpleType edmSimpleType = (EdmSimpleType) property.getType();
if (edmSimpleType == EdmSimpleTypeKind.Boolean.getEdmSimpleTypeInstance()
&& accessModifier.equals(ACCESS_MODIFIER_GET)) {
String nameWithIs = getAccessModifierName(property.getName(),
property.getMapping(), ACCESS_MODIFIER_IS);
method = jpaEntityType.getMethod(nameWithIs, (Class<?>[]) null);
} else {
throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, e1);
}
} catch (EdmException exp) {
throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, exp);
} catch (NoSuchMethodException exp) {
throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, exp);
} catch (SecurityException exp) {
throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, exp);
}
} catch (SecurityException e1) {
throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, e1);
}
if (method != null) {
accessModifierMap.put(propertyName, method);
}
}
} catch (EdmException exp) {
throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, exp);
}
if (!embeddableKey.isEmpty()) {
jpaEmbeddableKeyMap.put(jpaEntityType.getName(), embeddableKey);
}
return accessModifierMap;
}