@Override public void handleNull(final BusinessDataContext businessDataContext) throws SEntityActionExecutionException { try { final SRefBusinessDataInstance reference = refBusinessDataRetriever.getRefBusinessDataInstance(businessDataContext); if (reference instanceof SSimpleRefBusinessDataInstance) { final SSimpleRefBusinessDataInstance simpleReference = (SSimpleRefBusinessDataInstance) reference; refBusinessDataService.updateRefBusinessDataInstance(simpleReference, null); } else { final SMultiRefBusinessDataInstance multiReference = (SMultiRefBusinessDataInstance) reference; refBusinessDataService.updateRefBusinessDataInstance(multiReference, new ArrayList<Long>()); } } catch (final SBonitaException sbe) { throw new SEntityActionExecutionException(sbe); } }
@Override public void handleNull(final BusinessDataContext businessDataContext) throws SEntityActionExecutionException { try { final SRefBusinessDataInstance reference = refBusinessDataRetriever.getRefBusinessDataInstance(businessDataContext); if (reference instanceof SSimpleRefBusinessDataInstance) { final SSimpleRefBusinessDataInstance simpleReference = (SSimpleRefBusinessDataInstance) reference; refBusinessDataService.updateRefBusinessDataInstance(simpleReference, null); } else { final SMultiRefBusinessDataInstance multiReference = (SMultiRefBusinessDataInstance) reference; refBusinessDataService.updateRefBusinessDataInstance(multiReference, new ArrayList<Long>()); } } catch (final SBonitaException sbe) { throw new SEntityActionExecutionException(sbe); } }
@Override public List<Entity> execute(final List<Entity> entities, final BusinessDataContext businessDataContext) throws SEntityActionExecutionException { try { final SRefBusinessDataInstance reference = refBusinessDataRetriever.getRefBusinessDataInstance(businessDataContext); checkThatIsMultiRef(reference); final SMultiRefBusinessDataInstance multiRef = (SMultiRefBusinessDataInstance) reference; final ArrayList<Long> dataIds = buildDataIdsList(entities); if (!multiRef.getDataIds().containsAll(dataIds) || multiRef.getDataIds().size() != dataIds.size()) { refBusinessDataService.updateRefBusinessDataInstance(multiRef, dataIds); } } catch (final SBonitaException e) { throw new SEntityActionExecutionException(e); } return entities; }
@Override public List<Entity> execute(final List<Entity> entities, final BusinessDataContext businessDataContext) throws SEntityActionExecutionException { try { final SRefBusinessDataInstance reference = refBusinessDataRetriever.getRefBusinessDataInstance(businessDataContext); checkThatIsMultiRef(reference); final SMultiRefBusinessDataInstance multiRef = (SMultiRefBusinessDataInstance) reference; final ArrayList<Long> dataIds = buildDataIdsList(entities); if (!multiRef.getDataIds().containsAll(dataIds) || multiRef.getDataIds().size() != dataIds.size()) { refBusinessDataService.updateRefBusinessDataInstance(multiRef, dataIds); } } catch (final SBonitaException e) { throw new SEntityActionExecutionException(e); } return entities; }
@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 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); } }
@Override public Entity execute(final Entity entity, final BusinessDataContext businessDataContext) throws SEntityActionExecutionException { try { final SRefBusinessDataInstance reference = refBusinessDataRetriever.getRefBusinessDataInstance(businessDataContext); checkThatIsSimpleRef(reference); final SSimpleRefBusinessDataInstance simpleRef = (SSimpleRefBusinessDataInstance) reference; if (!entity.getPersistenceId().equals(simpleRef.getDataId())) { refBusinessDataService.updateRefBusinessDataInstance(simpleRef, entity.getPersistenceId()); } } catch (final SBonitaException e) { throw new SEntityActionExecutionException(e); } return entity; }
@Override public Entity execute(final Entity entity, final BusinessDataContext businessDataContext) throws SEntityActionExecutionException { try { final SRefBusinessDataInstance reference = refBusinessDataRetriever.getRefBusinessDataInstance(businessDataContext); checkThatIsSimpleRef(reference); final SSimpleRefBusinessDataInstance simpleRef = (SSimpleRefBusinessDataInstance) reference; if (!entity.getPersistenceId().equals(simpleRef.getDataId())) { refBusinessDataService.updateRefBusinessDataInstance(simpleRef, entity.getPersistenceId()); } } catch (final SBonitaException e) { throw new SEntityActionExecutionException(e); } return entity; }
@Override public Object evaluate(final SExpression expression, final Map<String, Object> context, final Map<Integer, Object> resolvedExpressions, final ContainerState containerState) throws SExpressionEvaluationException { final String businessDataName = expression.getContent(); if (context.containsKey(businessDataName)) { return context.get(businessDataName); } final Long containerId = (Long) context.get(SExpressionContext.CONTAINER_ID_KEY); final String containerType = (String) context.get(SExpressionContext.CONTAINER_TYPE_KEY); try { final SRefBusinessDataInstance refBusinessDataInstance = refBusinessDataRetriever.getRefBusinessDataInstance(new BusinessDataContext( businessDataName, new Container(containerId, containerType))); return businessDataRetriever.getBusinessData(refBusinessDataInstance); } catch (final SBonitaReadException | SFlowNodeReadException e) { throw new SExpressionEvaluationException("Unable to retrieve business data instance with name " + businessDataName, e, businessDataName); } catch (final SBonitaException e) { setProcessInstanceId(containerId, containerType, e); throw new SExpressionEvaluationException(e, expression.getName()); } }
@Override public Object evaluate(final SExpression expression, final Map<String, Object> context, final Map<Integer, Object> resolvedExpressions, final ContainerState containerState) throws SExpressionEvaluationException { final String businessDataName = expression.getContent(); if (context.containsKey(businessDataName)) { return context.get(businessDataName); } final Long containerId = (Long) context.get(SExpressionContext.CONTAINER_ID_KEY); final String containerType = (String) context.get(SExpressionContext.CONTAINER_TYPE_KEY); try { final SRefBusinessDataInstance refBusinessDataInstance = refBusinessDataRetriever.getRefBusinessDataInstance(new BusinessDataContext( businessDataName, new Container(containerId, containerType))); return businessDataRetriever.getBusinessData(refBusinessDataInstance); } catch (final SBonitaReadException | SFlowNodeReadException e) { throw new SExpressionEvaluationException("Unable to retrieve business data instance with name " + businessDataName, e, businessDataName); } catch (final SBonitaException e) { setProcessInstanceId(containerId, containerType, e); throw new SExpressionEvaluationException(e, expression.getName()); } }
@Override public Object evaluate(final SExpression expression, final Map<String, Object> context, final Map<Integer, Object> resolvedExpressions, final ContainerState containerState) throws SExpressionEvaluationException { final String businessDataName = expression.getContent(); final Long containerId = (Long) context.get(SExpressionContext.CONTAINER_ID_KEY); final String containerType = (String) context.get(SExpressionContext.CONTAINER_TYPE_KEY); try { final SRefBusinessDataInstance refBusinessDataInstance = refBusinessDataRetriever.getRefBusinessDataInstance(new BusinessDataContext( businessDataName, new Container(containerId, containerType))); return ModelConvertor.toBusinessDataReference(refBusinessDataInstance); } catch (final SBonitaReadException e) { throw new SExpressionEvaluationException(e, "Unable to retrieve business data instance with name " + businessDataName); } catch (final SBonitaException e) { setProcessInstanceId(containerId, containerType, e); throw new SExpressionEvaluationException(e, expression.getName()); } }
@Override public Object evaluate(final SExpression expression, final Map<String, Object> context, final Map<Integer, Object> resolvedExpressions, final ContainerState containerState) throws SExpressionEvaluationException { final String businessDataName = expression.getContent(); final Long containerId = (Long) context.get(SExpressionContext.CONTAINER_ID_KEY); final String containerType = (String) context.get(SExpressionContext.CONTAINER_TYPE_KEY); try { final SRefBusinessDataInstance refBusinessDataInstance = refBusinessDataRetriever.getRefBusinessDataInstance(new BusinessDataContext( businessDataName, new Container(containerId, containerType))); return ModelConvertor.toBusinessDataReference(refBusinessDataInstance); } catch (final SBonitaReadException e) { throw new SExpressionEvaluationException(e, "Unable to retrieve business data instance with name " + businessDataName); } catch (final SBonitaException e) { setProcessInstanceId(containerId, containerType, e); throw new SExpressionEvaluationException(e, expression.getName()); } }
@Override public void delete(final SLeftOperand sLeftOperand, final long containerId, final String containerType) throws SOperationExecutionException { try { final SRefBusinessDataInstance refBusinessDataInstance = refBusinessDataRetriever.getRefBusinessDataInstance(new BusinessDataContext(sLeftOperand .getName(), new Container(containerId, containerType))); removeBusinessData(refBusinessDataInstance); dereferenceBusinessData(refBusinessDataInstance); } catch (final Exception e) { throw new SOperationExecutionException(e); } }
@Override public void delete(final SLeftOperand sLeftOperand, final long containerId, final String containerType) throws SOperationExecutionException { try { final SRefBusinessDataInstance refBusinessDataInstance = refBusinessDataRetriever.getRefBusinessDataInstance(new BusinessDataContext(sLeftOperand .getName(), new Container(containerId, containerType))); removeBusinessData(refBusinessDataInstance); dereferenceBusinessData(refBusinessDataInstance); } catch (final Exception e) { throw new SOperationExecutionException(e); } }