public Object load(final Method method, final long persistenceId) { EntityGetter getter = new EntityGetter(method); final Map<String, Serializable> queryParameters = new HashMap<>(); queryParameters.put(Field.PERSISTENCE_ID, persistenceId); if (getter.returnsList()) { return businessDataRepository.findListByNamedQuery(getter.getAssociatedNamedQuery(), (Class<? extends Serializable>) getter.getTargetEntityClass(), queryParameters, 0, Integer.MAX_VALUE); } try { return businessDataRepository.findByNamedQuery(getter.getAssociatedNamedQuery(), (Class<? extends Serializable>) getter.getTargetEntityClass(), queryParameters); } catch (NonUniqueResultException e) { // cannot appear throw new RuntimeException(); } }
/** * Reloads the {@link Entity} from database using the current {@code Entity} className and persistenceId * * @param entityToReload the entity to be reloaded * @return the {@link Entity} reload from the database * @throws SBusinessDataNotFoundException */ public Entity reloadEntity(Entity entityToReload) throws SBusinessDataNotFoundException { final Class realClass = getEntityRealClass(entityToReload); return businessDataRepository.findById(realClass, entityToReload.getPersistenceId()); }
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; } }
@SuppressWarnings("unchecked") protected void removeBusinessData(final SRefBusinessDataInstance reference) throws ClassNotFoundException, SBusinessDataNotFoundException { final Class<Entity> dataClass = (Class<Entity>) Thread.currentThread().getContextClassLoader().loadClass(reference.getDataClassName()); if (reference instanceof SSimpleRefBusinessDataInstance) { final SSimpleRefBusinessDataInstance simpleRef = (SSimpleRefBusinessDataInstance) reference; final Entity entity = businessDataRepository.findById(dataClass, simpleRef.getDataId()); businessDataRepository.remove(entity); } else { final SMultiRefBusinessDataInstance multiRef = (SMultiRefBusinessDataInstance) reference; for (final Long dataId : multiRef.getDataIds()) { final Entity entity = businessDataRepository.findById(dataClass, dataId); businessDataRepository.remove(entity); } } }
@SuppressWarnings("unchecked") protected Object getBusinessData(final String businessDataName, final long containerId, final String containerType) throws SBonitaReadException { try { final SRefBusinessDataInstance reference = refBusinessDataRetriever.getRefBusinessDataInstance(new BusinessDataContext(businessDataName, new Container(containerId, containerType))); final Class<Entity> dataClass = (Class<Entity>) Thread.currentThread().getContextClassLoader().loadClass(reference.getDataClassName()); if (reference instanceof SSimpleRefBusinessDataInstance) { final SSimpleRefBusinessDataInstance simpleRef = (SSimpleRefBusinessDataInstance) reference; final Long dataId = simpleRef.getDataId(); if (dataId != null) { return businessDataRepository.findById(dataClass, dataId); } return dataClass.newInstance(); } final SMultiRefBusinessDataInstance multiRef = (SMultiRefBusinessDataInstance) reference; final List<Long> dataIds = multiRef.getDataIds(); if (!dataIds.isEmpty()) { return businessDataRepository.findByIds(dataClass, dataIds); } return new ArrayList<Entity>(); } catch (final Exception e) { throw new SBonitaReadException(e); } }
@SuppressWarnings("unchecked") @Override public Serializable getJsonChildEntity(final String entityClassName, final Long identifier, final String childFieldName, final String businessDataURIPattern) throws SBusinessDataNotFoundException, SBusinessDataRepositoryException { final Class<? extends Entity> entityClass = loadClass(entityClassName); final Object entity = businessDataRepository.findById(entityClass, identifier); Object childEntity; java.lang.reflect.Type getterReturnType; try { final String getterName = ClassReflector.getGetterName(childFieldName); childEntity = ClassReflector.invokeGetter(entity, getterName); getterReturnType = ClassReflector.getGetterReturnType(entityClass, getterName); } catch (final SReflectException e) { throw new SBusinessDataRepositoryException(e); } if (childEntity == null) { return JsonBusinessDataSerializer.EMPTY_OBJECT; } if (childEntity instanceof Entity) { final Entity unwrap = businessDataRepository.unwrap((Entity) childEntity); return jsonBusinessDataSerializer.serializeEntity(unwrap, businessDataURIPattern); } else if (childEntity instanceof List) { final Class<?> type = (Class<?>) ((ParameterizedType) getterReturnType).getActualTypeArguments()[0]; if (Entity.class.isAssignableFrom(type)) { return jsonBusinessDataSerializer.serializeEntities((List<Entity>) childEntity, businessDataURIPattern); } } return null; }
@Override public Entity execute(final Entity entity, final BusinessDataContext businessDataContext) throws SEntityActionExecutionException { if (entity == null) { throw new SEntityActionExecutionException("Unable to insert/update a null business object instance"); } try { return repository.merge(ServerProxyfier.unProxifyIfNeeded(entity)); } catch (final IllegalArgumentException iae) { throw new SEntityActionExecutionException(iae); } }
@Override @SuppressWarnings("unchecked") public Serializable getJsonEntities(final String entityClassName, final List<Long> identifiers, final String businessDataURIPattern) throws SBusinessDataRepositoryException { final Class<? extends Entity> entityClass = loadClass(entityClassName); final List<? extends Entity> entities = businessDataRepository.findByIdentifiers(entityClass, identifiers); return jsonBusinessDataSerializer.serializeEntities(entities, businessDataURIPattern); }
@Override public List<Problem> checkResolution(final SProcessDefinition processDefinition) { final List<SBusinessDataDefinition> businessDataDefinitions = processDefinition.getProcessContainer().getBusinessDataDefinitions(); if (businessDataDefinitions.isEmpty()) { return Collections.emptyList(); } final List<Problem> problems = new ArrayList<>(); final Set<String> entityClassNames = businessDataRepository.getEntityClassNames(); for (final SBusinessDataDefinition sBusinessDataDefinition : businessDataDefinitions) { final String className = sBusinessDataDefinition.getClassName(); if (!entityClassNames.contains(className)) { final Problem problem = new ProblemImpl(Level.ERROR, sBusinessDataDefinition.getName(), "business data", "The business data '" + sBusinessDataDefinition.getName() + "' with the class name '" + className + "', is not managed by the current version of the BDM"); problems.add(problem); } } return problems; }
@SuppressWarnings("unchecked") protected Object getBusinessData(final String businessDataName, final long containerId, final String containerType) throws SBonitaReadException { try { final SRefBusinessDataInstance reference = refBusinessDataRetriever.getRefBusinessDataInstance(new BusinessDataContext(businessDataName, new Container(containerId, containerType))); final Class<Entity> dataClass = (Class<Entity>) Thread.currentThread().getContextClassLoader().loadClass(reference.getDataClassName()); if (reference instanceof SSimpleRefBusinessDataInstance) { final SSimpleRefBusinessDataInstance simpleRef = (SSimpleRefBusinessDataInstance) reference; final Long dataId = simpleRef.getDataId(); if (dataId != null) { return businessDataRepository.findById(dataClass, dataId); } return dataClass.newInstance(); } final SMultiRefBusinessDataInstance multiRef = (SMultiRefBusinessDataInstance) reference; final List<Long> dataIds = multiRef.getDataIds(); if (!dataIds.isEmpty()) { return businessDataRepository.findByIds(dataClass, dataIds); } return new ArrayList<Entity>(); } catch (final Exception e) { throw new SBonitaReadException(e); } }
@SuppressWarnings("unchecked") protected void removeBusinessData(final SRefBusinessDataInstance reference) throws ClassNotFoundException, SBusinessDataNotFoundException { final Class<Entity> dataClass = (Class<Entity>) Thread.currentThread().getContextClassLoader().loadClass(reference.getDataClassName()); if (reference instanceof SSimpleRefBusinessDataInstance) { final SSimpleRefBusinessDataInstance simpleRef = (SSimpleRefBusinessDataInstance) reference; final Entity entity = businessDataRepository.findById(dataClass, simpleRef.getDataId()); businessDataRepository.remove(entity); } else { final SMultiRefBusinessDataInstance multiRef = (SMultiRefBusinessDataInstance) reference; for (final Long dataId : multiRef.getDataIds()) { final Entity entity = businessDataRepository.findById(dataClass, dataId); businessDataRepository.remove(entity); } } }
@SuppressWarnings("unchecked") @Override public Serializable getJsonChildEntity(final String entityClassName, final Long identifier, final String childFieldName, final String businessDataURIPattern) throws SBusinessDataNotFoundException, SBusinessDataRepositoryException { final Class<? extends Entity> entityClass = loadClass(entityClassName); final Object entity = businessDataRepository.findById(entityClass, identifier); Object childEntity; java.lang.reflect.Type getterReturnType; try { final String getterName = ClassReflector.getGetterName(childFieldName); childEntity = ClassReflector.invokeGetter(entity, getterName); getterReturnType = ClassReflector.getGetterReturnType(entityClass, getterName); } catch (final SReflectException e) { throw new SBusinessDataRepositoryException(e); } if (childEntity == null) { return JsonBusinessDataSerializer.EMPTY_OBJECT; } if (childEntity instanceof Entity) { final Entity unwrap = businessDataRepository.unwrap((Entity) childEntity); return jsonBusinessDataSerializer.serializeEntity(unwrap, businessDataURIPattern); } else if (childEntity instanceof List) { final Class<?> type = (Class<?>) ((ParameterizedType) getterReturnType).getActualTypeArguments()[0]; if (Entity.class.isAssignableFrom(type)) { return jsonBusinessDataSerializer.serializeEntities((List<Entity>) childEntity, businessDataURIPattern); } } return null; }
private Long saveBusinessData(final Entity entity) throws SObjectCreationException { try { final Entity mergedBusinessData = businessDataRepository.merge(ServerProxyfier.unProxifyIfNeeded(entity)); if (mergedBusinessData == null) { return null; } return mergedBusinessData.getPersistenceId(); } catch (IllegalArgumentException e) { throw new SObjectCreationException("Unable to save the business data", e); } }
@Override @SuppressWarnings("unchecked") public Serializable getJsonEntities(final String entityClassName, final List<Long> identifiers, final String businessDataURIPattern) throws SBusinessDataRepositoryException { final Class<? extends Entity> entityClass = loadClass(entityClassName); final List<? extends Entity> entities = businessDataRepository.findByIdentifiers(entityClass, identifiers); return jsonBusinessDataSerializer.serializeEntities(entities, businessDataURIPattern); }
@Override public List<Problem> checkResolution(final SProcessDefinition processDefinition) { final List<SBusinessDataDefinition> businessDataDefinitions = processDefinition.getProcessContainer().getBusinessDataDefinitions(); if (businessDataDefinitions.isEmpty()) { return Collections.emptyList(); } final List<Problem> problems = new ArrayList<>(); final Set<String> entityClassNames = businessDataRepository.getEntityClassNames(); for (final SBusinessDataDefinition sBusinessDataDefinition : businessDataDefinitions) { final String className = sBusinessDataDefinition.getClassName(); if (!entityClassNames.contains(className)) { final Problem problem = new ProblemImpl(Level.ERROR, sBusinessDataDefinition.getName(), "business data", "The business data '" + sBusinessDataDefinition.getName() + "' with the class name '" + className + "', is not managed by the current version of the BDM"); problems.add(problem); } } return problems; }
public Object load(final Method method, final long persistenceId) { EntityGetter getter = new EntityGetter(method); final Map<String, Serializable> queryParameters = new HashMap<>(); queryParameters.put(Field.PERSISTENCE_ID, persistenceId); if (getter.returnsList()) { return businessDataRepository.findListByNamedQuery(getter.getAssociatedNamedQuery(), (Class<? extends Serializable>) getter.getTargetEntityClass(), queryParameters, 0, Integer.MAX_VALUE); } try { return businessDataRepository.findByNamedQuery(getter.getAssociatedNamedQuery(), (Class<? extends Serializable>) getter.getTargetEntityClass(), queryParameters); } catch (NonUniqueResultException e) { // cannot appear throw new RuntimeException(); } }
/** * Reloads the {@link Entity} from database using the current {@code Entity} className and persistenceId * * @param entityToReload the entity to be reloaded * @return the {@link Entity} reload from the database * @throws SBusinessDataNotFoundException */ public Entity reloadEntity(Entity entityToReload) throws SBusinessDataNotFoundException { final Class realClass = getEntityRealClass(entityToReload); return businessDataRepository.findById(realClass, entityToReload.getPersistenceId()); }
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; } }
@Override public Entity execute(final Entity entity, final BusinessDataContext businessDataContext) throws SEntityActionExecutionException { if (entity == null) { throw new SEntityActionExecutionException("Unable to insert/update a null business object instance"); } try { return repository.merge(ServerProxyfier.unProxifyIfNeeded(entity)); } catch (final IllegalArgumentException iae) { throw new SEntityActionExecutionException(iae); } }
@Override public Serializable execute(final Map<String, Serializable> parameters, final TenantServiceAccessor serviceAccessor) throws SCommandParameterizationException, SCommandExecutionException { final String queryName = getStringMandadoryParameter(parameters, QUERY_NAME); @SuppressWarnings("unchecked") final Map<String, Serializable> queryParameters = (Map<String, Serializable>) parameters.get(QUERY_PARAMETERS); final String returnType = getStringMandadoryParameter(parameters, RETURN_TYPE); Class<? extends Serializable> resultClass = loadClass(returnType); final BusinessDataRepository businessDataRepository = serviceAccessor.getBusinessDataRepository(); final Boolean returnsList = (Boolean) parameters.get(RETURNS_LIST); final Serializable result; if (toBoolean(returnsList)) { final Integer startIndex = getIntegerMandadoryParameter(parameters, START_INDEX); final Integer maxResults = getIntegerMandadoryParameter(parameters, MAX_RESULTS); result = (Serializable) businessDataRepository.findListByNamedQuery(queryName, resultClass, queryParameters, startIndex, maxResults); } else { try { result = businessDataRepository.findByNamedQuery(queryName, resultClass, queryParameters); } catch (final NonUniqueResultException e) { throw new SCommandExecutionException(e); } } return serializeResult(result); }