@SuppressWarnings("unchecked") @Override public Object callJavaOperation(final Object businessObject, final Object valueToSetObjectWith, final String methodName, final String parameterType) throws SBusinessDataNotFoundException, SBusinessDataRepositoryException { if (businessObject == null) { throw new SBusinessDataNotFoundException("business data is null"); } if (isEntity(businessObject)) { return callJavaOperationOnEntity((Entity) businessObject, valueToSetObjectWith, methodName, parameterType); } if (isListOfEntities(businessObject)) { return callJavaOperationOnEntityList((List<Entity>) businessObject, valueToSetObjectWith, methodName, parameterType); } throw new SBusinessDataRepositoryException("not a business data"); }
private Query getCountQueryDefinition(Class<? extends Entity> businessDataClass, BusinessObject businessObject, Query queryDefinition) { final Query countQueryDefinition = countQueryProvider.getCountQueryDefinition(businessObject, queryDefinition); if (ensureQueryIsDefinedInEntity(businessDataClass, countQueryDefinition)) { return countQueryDefinition; } return null; }
@SuppressWarnings("unchecked") private Object loadValueToSet(final Entity businessObject, final Object valueToSetObjectWith, final String methodName) throws SBusinessDataNotFoundException, SBusinessDataRepositoryException { Object valueToSet; if (isEntity(valueToSetObjectWith)) { final Type relationType = getRelationType(businessObject, methodName); valueToSet = getPersistedValue((Entity) valueToSetObjectWith, relationType); } else if (isListOfEntities(valueToSetObjectWith)) { final Type relationType = getRelationType(businessObject, methodName); valueToSet = getPersistedValues((List<Entity>) valueToSetObjectWith, relationType); } else { valueToSet = valueToSetObjectWith; } return valueToSet; }
@Override public BusinessDataQueryResult getJsonQueryEntities(final String entityClassName, final String queryName, final Map<String, Serializable> parameters, final Integer startIndex, final Integer maxResults, final String businessDataURIPattern) throws SBusinessDataRepositoryException { final Class<? extends Entity> businessDataClass = loadClass(entityClassName); BusinessObject businessObject = getBusinessObjectFromClassName(entityClassName); final Query queryDefinition = getQueryDefinition(businessObject, entityClassName, queryName); final Map<String, Serializable> queryParameters = getQueryParameters(queryDefinition, parameters); final List<? extends Serializable> list = businessDataRepository.findListByNamedQuery(getQualifiedQueryName(businessDataClass, queryName), getQueryReturnType(queryDefinition, entityClassName), queryParameters, startIndex, maxResults); BusinessDataQueryMetadataImpl businessDataQueryMetadata = null; final Query countQueryDefinition = getCountQueryDefinition(businessDataClass, businessObject, queryDefinition); if (countQueryDefinition != null) { try { businessDataQueryMetadata = new BusinessDataQueryMetadataImpl(startIndex, maxResults, (Long) businessDataRepository.findByNamedQuery(getQualifiedQueryName(businessDataClass, countQueryDefinition.getName()), getQueryReturnType(countQueryDefinition, entityClassName), queryParameters)); } catch (NonUniqueResultException e) { throw new SBusinessDataRepositoryException("unable to count results for query " + queryName); } } Serializable jsonResults = jsonBusinessDataSerializer.serializeEntities((List<Entity>) list, businessDataURIPattern); return new BusinessDataQueryResultImpl(jsonResults, businessDataQueryMetadata); }
private Map<String, Serializable> getQueryParameters(final Query queryDefinition, final Map<String, Serializable> parameters) throws SBusinessDataRepositoryException { final Set<String> errors = new HashSet<>(); final Map<String, Serializable> queryParameters = new HashMap<>(); for (final QueryParameter queryParameter : queryDefinition.getQueryParameters()) { if (parameters != null && parameters.containsKey(queryParameter.getName())) { queryParameters.put(queryParameter.getName(), convertToType(loadSerializableClass(queryParameter.getClassName()), parameters.get(queryParameter.getName()))); } else { errors.add(queryParameter.getName()); } } if (!errors.isEmpty()) { final StringBuilder errorMessage = new StringBuilder().append("parameter(s) are missing for query named ").append(queryDefinition.getName()) .append(" : "); errorMessage.append(StringUtils.join(errors, ",")); throw new SBusinessDataRepositoryException(errorMessage.toString()); } return queryParameters; }
private Object getPersistedValues(final List<Entity> entities, final Type type) throws SBusinessDataNotFoundException { if (entities.isEmpty()) { return new ArrayList<Entity>(); } if (Type.AGGREGATION.equals(type)) { return businessDataRepository.findByIds(businessDataReloader.getEntityRealClass(entities.get(0)), getPrimaryKeys(entities)); } else { return entities; } }
private Type getRelationType(final Entity businessObject, final String methodName) throws SBusinessDataRepositoryException { final String fieldName = ClassReflector.getFieldName(methodName); Annotation[] annotations; try { annotations = businessObject.getClass().getDeclaredField(fieldName).getAnnotations(); } catch (final NoSuchFieldException e) { return null; } catch (final SecurityException e) { throw new SBusinessDataRepositoryException(e); } for (final Annotation annotation : annotations) { final Set<Class<? extends Annotation>> annotationKeySet = getAnnotationKeySet(); if (annotationKeySet.contains(annotation.annotationType())) { try { final Method cascade = annotation.getClass().getMethod("cascade"); final CascadeType[] cascadeTypes = (CascadeType[]) cascade.invoke(annotation); if (CascadeType.MERGE.equals(cascadeTypes[0])) { return Type.AGGREGATION; } if (CascadeType.ALL.equals(cascadeTypes[0])) { return Type.COMPOSITION; } } catch (final Exception e) { throw new SBusinessDataRepositoryException(e); } } } return null; }
@Override public BusinessDataQueryResult getJsonQueryEntities(final String entityClassName, final String queryName, final Map<String, Serializable> parameters, final Integer startIndex, final Integer maxResults, final String businessDataURIPattern) throws SBusinessDataRepositoryException { final Class<? extends Entity> businessDataClass = loadClass(entityClassName); BusinessObject businessObject = getBusinessObjectFromClassName(entityClassName); final Query queryDefinition = getQueryDefinition(businessObject, entityClassName, queryName); final Map<String, Serializable> queryParameters = getQueryParameters(queryDefinition, parameters); final List<? extends Serializable> list = businessDataRepository.findListByNamedQuery(getQualifiedQueryName(businessDataClass, queryName), getQueryReturnType(queryDefinition, entityClassName), queryParameters, startIndex, maxResults); BusinessDataQueryMetadataImpl businessDataQueryMetadata = null; final Query countQueryDefinition = getCountQueryDefinition(businessDataClass, businessObject, queryDefinition); if (countQueryDefinition != null) { try { businessDataQueryMetadata = new BusinessDataQueryMetadataImpl(startIndex, maxResults, (Long) businessDataRepository.findByNamedQuery(getQualifiedQueryName(businessDataClass, countQueryDefinition.getName()), getQueryReturnType(countQueryDefinition, entityClassName), queryParameters)); } catch (NonUniqueResultException e) { throw new SBusinessDataRepositoryException("unable to count results for query " + queryName); } } Serializable jsonResults = jsonBusinessDataSerializer.serializeEntities((List<Entity>) list, businessDataURIPattern); return new BusinessDataQueryResultImpl(jsonResults, businessDataQueryMetadata); }
private Map<String, Serializable> getQueryParameters(final Query queryDefinition, final Map<String, Serializable> parameters) throws SBusinessDataRepositoryException { final Set<String> errors = new HashSet<>(); final Map<String, Serializable> queryParameters = new HashMap<>(); for (final QueryParameter queryParameter : queryDefinition.getQueryParameters()) { if (parameters != null && parameters.containsKey(queryParameter.getName())) { queryParameters.put(queryParameter.getName(), convertToType(loadSerializableClass(queryParameter.getClassName()), parameters.get(queryParameter.getName()))); } else { errors.add(queryParameter.getName()); } } if (!errors.isEmpty()) { final StringBuilder errorMessage = new StringBuilder().append("parameter(s) are missing for query named ").append(queryDefinition.getName()) .append(" : "); errorMessage.append(StringUtils.join(errors, ",")); throw new SBusinessDataRepositoryException(errorMessage.toString()); } return queryParameters; }
private Object getPersistedValues(final List<Entity> entities, final Type type) throws SBusinessDataNotFoundException { if (entities.isEmpty()) { return new ArrayList<Entity>(); } if (Type.AGGREGATION.equals(type)) { return businessDataRepository.findByIds(businessDataReloader.getEntityRealClass(entities.get(0)), getPrimaryKeys(entities)); } else { return entities; } }
private Type getRelationType(final Entity businessObject, final String methodName) throws SBusinessDataRepositoryException { final String fieldName = ClassReflector.getFieldName(methodName); Annotation[] annotations; try { annotations = businessObject.getClass().getDeclaredField(fieldName).getAnnotations(); } catch (final NoSuchFieldException e) { return null; } catch (final SecurityException e) { throw new SBusinessDataRepositoryException(e); } for (final Annotation annotation : annotations) { final Set<Class<? extends Annotation>> annotationKeySet = getAnnotationKeySet(); if (annotationKeySet.contains(annotation.annotationType())) { try { final Method cascade = annotation.getClass().getMethod("cascade"); final CascadeType[] cascadeTypes = (CascadeType[]) cascade.invoke(annotation); if (CascadeType.MERGE.equals(cascadeTypes[0])) { return Type.AGGREGATION; } if (CascadeType.ALL.equals(cascadeTypes[0])) { return Type.COMPOSITION; } } catch (final Exception e) { throw new SBusinessDataRepositoryException(e); } } } return null; }
@SuppressWarnings("unchecked") private Object loadValueToSet(final Entity businessObject, final Object valueToSetObjectWith, final String methodName) throws SBusinessDataNotFoundException, SBusinessDataRepositoryException { Object valueToSet; if (isEntity(valueToSetObjectWith)) { final Type relationType = getRelationType(businessObject, methodName); valueToSet = getPersistedValue((Entity) valueToSetObjectWith, relationType); } else if (isListOfEntities(valueToSetObjectWith)) { final Type relationType = getRelationType(businessObject, methodName); valueToSet = getPersistedValues((List<Entity>) valueToSetObjectWith, relationType); } else { valueToSet = valueToSetObjectWith; } return valueToSet; }
@SuppressWarnings("unchecked") @Override public Object callJavaOperation(final Object businessObject, final Object valueToSetObjectWith, final String methodName, final String parameterType) throws SBusinessDataNotFoundException, SBusinessDataRepositoryException { if (businessObject == null) { throw new SBusinessDataNotFoundException("business data is null"); } if (isEntity(businessObject)) { return callJavaOperationOnEntity((Entity) businessObject, valueToSetObjectWith, methodName, parameterType); } if (isListOfEntities(businessObject)) { return callJavaOperationOnEntityList((List<Entity>) businessObject, valueToSetObjectWith, methodName, parameterType); } throw new SBusinessDataRepositoryException("not a business data"); }
private Query getCountQueryDefinition(Class<? extends Entity> businessDataClass, BusinessObject businessObject, Query queryDefinition) { final Query countQueryDefinition = countQueryProvider.getCountQueryDefinition(businessObject, queryDefinition); if (ensureQueryIsDefinedInEntity(businessDataClass, countQueryDefinition)) { return countQueryDefinition; } return null; }