private long getProcessInstanceIdThatCanContainBusinessData(long processInstanceId) throws SProcessInstanceReadException, SBonitaReadException, SProcessInstanceNotFoundException, SFlowNodeReadException, SFlowNodeNotFoundException { try { SProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId); if (isSubProcess(processInstance)) { return getParentOfSubProcess(processInstance); } return processInstanceId; } catch (SProcessInstanceNotFoundException e) { //No caller type in archived process instance, get archive business data not supported from event subprocess return processInstanceId; } }
private SRefBusinessDataInstance getRefBusinessDataUsingFlowNodeContext(BusinessDataContext context) throws SBonitaReadException, SFlowNodeReadException, SRefBusinessDataInstanceNotFoundException, SProcessInstanceReadException { SRefBusinessDataInstance refBusinessDataInstance = getRefBusinessDataInFlowNode(context); if (refBusinessDataInstance != null) { return refBusinessDataInstance; } return getRefBusinessDataInProcess(context, getProcessInstanceIdFromFlowNode(context)); }
private SRefBusinessDataInstance getRefBusinessDataUsingProcessContext(BusinessDataContext context) throws SBonitaReadException, SRefBusinessDataInstanceNotFoundException, SProcessInstanceReadException, SProcessInstanceNotFoundException, SFlowNodeReadException, SFlowNodeNotFoundException { return getRefBusinessDataInProcess(context, getProcessInstanceIdThatCanContainBusinessData(context.getContainer().getId())); }
public SRefBusinessDataInstance getRefBusinessDataInstance(BusinessDataContext context) throws SBonitaException { if (isProcessContext(context)) { return getRefBusinessDataUsingProcessContext(context); } return getRefBusinessDataUsingFlowNodeContext(context); }
@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); } }
public SRefBusinessDataInstance getRefBusinessDataInstance(BusinessDataContext context) throws SBonitaException { if (isProcessContext(context)) { return getRefBusinessDataUsingProcessContext(context); } return getRefBusinessDataUsingFlowNodeContext(context); }
@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); } }
private SRefBusinessDataInstance getRefBusinessDataUsingFlowNodeContext(BusinessDataContext context) throws SBonitaReadException, SFlowNodeReadException, SRefBusinessDataInstanceNotFoundException, SProcessInstanceReadException { SRefBusinessDataInstance refBusinessDataInstance = getRefBusinessDataInFlowNode(context); if (refBusinessDataInstance != null) { return refBusinessDataInstance; } return getRefBusinessDataInProcess(context, getProcessInstanceIdFromFlowNode(context)); }
private long getProcessInstanceIdThatCanContainBusinessData(long processInstanceId) throws SProcessInstanceReadException, SBonitaReadException, SProcessInstanceNotFoundException, SFlowNodeReadException, SFlowNodeNotFoundException { try { SProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId); if (isSubProcess(processInstance)) { return getParentOfSubProcess(processInstance); } return processInstanceId; } catch (SProcessInstanceNotFoundException e) { //No caller type in archived process instance, get archive business data not supported from event subprocess return processInstanceId; } }
@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; }
private SRefBusinessDataInstance getRefBusinessDataUsingProcessContext(BusinessDataContext context) throws SBonitaReadException, SRefBusinessDataInstanceNotFoundException, SProcessInstanceReadException, SProcessInstanceNotFoundException, SFlowNodeReadException, SFlowNodeNotFoundException { return getRefBusinessDataInProcess(context, getProcessInstanceIdThatCanContainBusinessData(context.getContainer().getId())); }
private long getProcessInstanceIdFromFlowNode(BusinessDataContext context) throws SFlowNodeReadException, SBonitaReadException, SProcessInstanceReadException { try { SFlowNodeInstance flowNodeInstance = flowNodeInstanceService.getFlowNodeInstance(context.getContainer().getId()); SProcessInstance processInstance = processInstanceService.getProcessInstance(flowNodeInstance.getParentProcessInstanceId()); if (isSubProcess(processInstance)) { return getParentOfSubProcess(processInstance); } return flowNodeInstance.getParentProcessInstanceId(); } catch (SFlowNodeNotFoundException | SProcessInstanceNotFoundException e) { SAFlowNodeInstance lastArchivedFlowNodeInstance = flowNodeInstanceService .getLastArchivedFlowNodeInstance(SAFlowNodeInstance.class, context.getContainer().getId()); //No caller type in archived process instance, get archive business data not supported from event subprocess return lastArchivedFlowNodeInstance.getParentProcessInstanceId(); } }
@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; }
private long getProcessInstanceIdFromFlowNode(BusinessDataContext context) throws SFlowNodeReadException, SBonitaReadException, SProcessInstanceReadException { try { SFlowNodeInstance flowNodeInstance = flowNodeInstanceService.getFlowNodeInstance(context.getContainer().getId()); SProcessInstance processInstance = processInstanceService.getProcessInstance(flowNodeInstance.getParentProcessInstanceId()); if (isSubProcess(processInstance)) { return getParentOfSubProcess(processInstance); } return flowNodeInstance.getParentProcessInstanceId(); } catch (SFlowNodeNotFoundException | SProcessInstanceNotFoundException e) { SAFlowNodeInstance lastArchivedFlowNodeInstance = flowNodeInstanceService .getLastArchivedFlowNodeInstance(SAFlowNodeInstance.class, context.getContainer().getId()); //No caller type in archived process instance, get archive business data not supported from event subprocess return lastArchivedFlowNodeInstance.getParentProcessInstanceId(); } }
@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()); } }