public List<SMappedDocument> getAllDocumentOfTheList(final long processInstanceId, final String name) throws SBonitaReadException { QueryOptions queryOptions = new QueryOptions(0, 100); List<SMappedDocument> mappedDocuments; final List<SMappedDocument> result = new ArrayList<SMappedDocument>(); do { mappedDocuments = documentService.getDocumentList(name, processInstanceId, queryOptions.getFromIndex(), queryOptions.getNumberOfResults()); result.addAll(mappedDocuments); queryOptions = QueryOptions.getNextPage(queryOptions); } while (mappedDocuments.size() == 100); return result; }
public List<SMappedDocument> getAllDocumentOfTheList(final long processInstanceId, final String name) throws SBonitaReadException { QueryOptions queryOptions = new QueryOptions(0, 100); List<SMappedDocument> mappedDocuments; final List<SMappedDocument> result = new ArrayList<SMappedDocument>(); do { mappedDocuments = documentService.getDocumentList(name, processInstanceId, queryOptions.getFromIndex(), queryOptions.getNumberOfResults()); result.addAll(mappedDocuments); queryOptions = QueryOptions.getNextPage(queryOptions); } while (mappedDocuments.size() == 100); return result; }
private List<SMappedDocument> getAllDocumentOfTheList(final long processInstanceId, final String name, final Long time) throws SBonitaReadException { if (time != null) { return documentService.getDocumentList(name, processInstanceId, time); } QueryOptions queryOptions = new QueryOptions(0, 100); List<SMappedDocument> mappedDocuments; final List<SMappedDocument> result = new ArrayList<SMappedDocument>(); do { mappedDocuments = documentService.getDocumentList(name, processInstanceId, queryOptions.getFromIndex(), queryOptions.getNumberOfResults()); result.addAll(mappedDocuments); queryOptions = QueryOptions.getNextPage(queryOptions); } while (mappedDocuments.size() == 100); return result; }
public List<Problem> checkResolution(final ActorMappingService actorMappingService, final long processDefinitionId) { try { final List<Problem> problems = new ArrayList<Problem>(); QueryOptions queryOptions = new QueryOptions(0, 100, SActor.class, "id", OrderByType.ASC); List<SActor> actors = actorMappingService.getActors(processDefinitionId, queryOptions); while (!actors.isEmpty()) { for (final SActor sActor : actors) { checkIfAActorMemberExists(actorMappingService, problems, sActor); } queryOptions = QueryOptions.getNextPage(queryOptions); actors = actorMappingService.getActors(processDefinitionId, queryOptions); } return problems; } catch (final SBonitaReadException e) { return Collections.singletonList((Problem) new ProblemImpl(Level.ERROR, processDefinitionId, "process", "Unable to read actors")); } }
private List<SMappedDocument> getAllDocumentOfTheList(final long processInstanceId, final String name, final Long time) throws SBonitaReadException { if (time != null) { return documentService.getDocumentList(name, processInstanceId, time); } QueryOptions queryOptions = new QueryOptions(0, 100); List<SMappedDocument> mappedDocuments; final List<SMappedDocument> result = new ArrayList<SMappedDocument>(); do { mappedDocuments = documentService.getDocumentList(name, processInstanceId, queryOptions.getFromIndex(), queryOptions.getNumberOfResults()); result.addAll(mappedDocuments); queryOptions = QueryOptions.getNextPage(queryOptions); } while (mappedDocuments.size() == 100); return result; }
public List<Problem> checkResolution(final ActorMappingService actorMappingService, final long processDefinitionId) { try { final List<Problem> problems = new ArrayList<Problem>(); QueryOptions queryOptions = new QueryOptions(0, 100, SActor.class, "id", OrderByType.ASC); List<SActor> actors = actorMappingService.getActors(processDefinitionId, queryOptions); while (!actors.isEmpty()) { for (final SActor sActor : actors) { checkIfAActorMemberExists(actorMappingService, problems, sActor); } queryOptions = QueryOptions.getNextPage(queryOptions); actors = actorMappingService.getActors(processDefinitionId, queryOptions); } return problems; } catch (final SBonitaReadException e) { return Collections.singletonList((Problem) new ProblemImpl(Level.ERROR, processDefinitionId, "process", "Unable to read actors")); } }
private boolean isArchivedTaskDoneByOneOfTheSubordinates(final long processInstanceId, final ActivityInstanceService activityInstanceService, final List<SUser> subordinates) throws SBonitaReadException { QueryOptions archivedQueryOptions = buildArchivedTasksQueryOptions(processInstanceId); List<SAHumanTaskInstance> sArchivedHumanTasks = activityInstanceService.searchArchivedTasks(archivedQueryOptions); while (!sArchivedHumanTasks.isEmpty()) { for (final SAHumanTaskInstance sArchivedHumanTask : sArchivedHumanTasks) { if (isTaskDoneByAUserInTheList(sArchivedHumanTask, subordinates)) { return true; } } archivedQueryOptions = QueryOptions.getNextPage(archivedQueryOptions); sArchivedHumanTasks = activityInstanceService.searchArchivedTasks(archivedQueryOptions); } return false; }
private boolean isArchivedTaskDoneByOneOfTheSubordinates(final long processInstanceId, final ActivityInstanceService activityInstanceService, final List<SUser> subordinates) throws SBonitaReadException { QueryOptions archivedQueryOptions = buildArchivedTasksQueryOptions(processInstanceId); List<SAHumanTaskInstance> sArchivedHumanTasks = activityInstanceService.searchArchivedTasks(archivedQueryOptions); while (!sArchivedHumanTasks.isEmpty()) { for (final SAHumanTaskInstance sArchivedHumanTask : sArchivedHumanTasks) { if (isTaskDoneByAUserInTheList(sArchivedHumanTask, subordinates)) { return true; } } archivedQueryOptions = QueryOptions.getNextPage(archivedQueryOptions); sArchivedHumanTasks = activityInstanceService.searchArchivedTasks(archivedQueryOptions); } return false; }
Set<Long> updatePageMappings(long pageId) throws SBonitaReadException, SObjectModificationException, SObjectNotFoundException { List<SFormMapping> formMappings; QueryOptions queryOptions = new QueryOptions(0, 20, Collections.singletonList(new OrderByOption(SFormMapping.class, FormMappingSearchDescriptor.ID, OrderByType.ASC)), Collections.singletonList(new FilterOption(SPageMapping.class, FormMappingSearchDescriptor.PAGE_ID, pageId)), null); final Set<Long> processDefinitionIds = new HashSet<>(); do { formMappings = formMappingService.searchFormMappings(queryOptions); for (final SFormMapping formMapping : formMappings) { pageMappingService.update(formMapping.getPageMapping(), null); processDefinitionIds.add(formMapping.getProcessDefinitionId()); } queryOptions = QueryOptions.getNextPage(queryOptions); } while (formMappings.size() == 20); return processDefinitionIds; }
Set<Long> updatePageMappings(long pageId) throws SBonitaReadException, SObjectModificationException, SObjectNotFoundException { List<SFormMapping> formMappings; QueryOptions queryOptions = new QueryOptions(0, 20, Collections.singletonList(new OrderByOption(SFormMapping.class, FormMappingSearchDescriptor.ID, OrderByType.ASC)), Collections.singletonList(new FilterOption(SPageMapping.class, FormMappingSearchDescriptor.PAGE_ID, pageId)), null); final Set<Long> processDefinitionIds = new HashSet<>(); do { formMappings = formMappingService.searchFormMappings(queryOptions); for (final SFormMapping formMapping : formMappings) { pageMappingService.update(formMapping.getPageMapping(), null); processDefinitionIds.add(formMapping.getProcessDefinitionId()); } queryOptions = QueryOptions.getNextPage(queryOptions); } while (formMappings.size() == 20); return processDefinitionIds; }
@Override public void beforeServicesStart(final PlatformServiceAccessor platformServiceAccessor, final TenantServiceAccessor tenantServiceAccessor) throws RestartException { try { final long tenantId = tenantServiceAccessor.getTenantId(); final TechnicalLoggerService logger = tenantServiceAccessor.getTechnicalLoggerService(); final ArrayList<Long> flownodesToRestart = new ArrayList<>(); flownodesToRestartByTenant.put(tenantId, flownodesToRestart); final FlowNodeInstanceService flowNodeInstanceService = tenantServiceAccessor.getActivityInstanceService(); // using a to low page size (100) causes too many access to the database and causes timeout exception if there are lot of elements. // As we retrieve only the id we can use a greater page size QueryOptions queryOptions = new QueryOptions(0, 50000); List<Long> ids; logInfo(logger, "Restarting flow nodes..."); do { ids = flowNodeInstanceService.getFlowNodeInstanceIdsToRestart(queryOptions); flownodesToRestart.addAll(ids); queryOptions = QueryOptions.getNextPage(queryOptions); } while (ids.size() == queryOptions.getNumberOfResults()); logInfo(logger, "Found " + flownodesToRestart.size() + " flow nodes to restart on tenant " + tenantId); } catch (final SBonitaReadException e) { throw new RestartException("unable to flag elements as to be restarted", e); } }
@Override public void beforeServicesStart(final PlatformServiceAccessor platformServiceAccessor, final TenantServiceAccessor tenantServiceAccessor) throws RestartException { final ProcessInstanceService processInstanceService = tenantServiceAccessor.getProcessInstanceService(); final TechnicalLoggerService logger = tenantServiceAccessor.getTechnicalLoggerService(); final long tenantId = tenantServiceAccessor.getTenantId(); final List<Long> ids = new ArrayList<Long>(); processInstancesByTenant.put(tenantId, ids); QueryOptions queryOptions = new QueryOptions(0, 1000, SProcessInstance.class, "id", OrderByType.ASC); try { List<SProcessInstance> processInstances; do { processInstances = processInstanceService.getProcessInstancesInStates(queryOptions, ProcessInstanceState.INITIALIZING, ProcessInstanceState.COMPLETING, ProcessInstanceState.COMPLETED, ProcessInstanceState.ABORTED, ProcessInstanceState.CANCELLED); queryOptions = QueryOptions.getNextPage(queryOptions); for (final SProcessInstance sProcessInstance : processInstances) { ids.add(sProcessInstance.getId()); } } while (processInstances.size() == queryOptions.getNumberOfResults()); logInfo(logger, "Found " + ids.size() + " process to restart on tenant " + tenantId); } catch (final SProcessInstanceReadException e) { handleException(e, "Unable to restart process: can't read process instances"); } }
public boolean isExecutorOfArchivedTaskOfProcess(long userId, Long rootProcessInstanceId) throws SBonitaReadException { final ActivityInstanceService activityInstanceService = getTenantServiceAccessor().getActivityInstanceService(); QueryOptions archivedQueryOptions = buildArchivedTasksQueryOptions(rootProcessInstanceId); List<SAHumanTaskInstance> sArchivedHumanTasks = activityInstanceService.searchArchivedTasks(archivedQueryOptions); while (!sArchivedHumanTasks.isEmpty()) { for (final SAHumanTaskInstance sArchivedHumanTask : sArchivedHumanTasks) { if (userId == sArchivedHumanTask.getExecutedBy()) { return true; } } archivedQueryOptions = QueryOptions.getNextPage(archivedQueryOptions); sArchivedHumanTasks = activityInstanceService.searchArchivedTasks(archivedQueryOptions); } return false; }
public boolean isExecutorOfArchivedTaskOfProcess(long userId, Long rootProcessInstanceId) throws SBonitaReadException { final ActivityInstanceService activityInstanceService = getTenantServiceAccessor().getActivityInstanceService(); QueryOptions archivedQueryOptions = buildArchivedTasksQueryOptions(rootProcessInstanceId); List<SAHumanTaskInstance> sArchivedHumanTasks = activityInstanceService.searchArchivedTasks(archivedQueryOptions); while (!sArchivedHumanTasks.isEmpty()) { for (final SAHumanTaskInstance sArchivedHumanTask : sArchivedHumanTasks) { if (userId == sArchivedHumanTask.getExecutedBy()) { return true; } } archivedQueryOptions = QueryOptions.getNextPage(archivedQueryOptions); sArchivedHumanTasks = activityInstanceService.searchArchivedTasks(archivedQueryOptions); } return false; }
private void deleteJobsOnFlowNodeInstances(final SProcessDefinition processDefinition, final SCatchEventDefinition sCatchEventDefinition, final SProcessInstance sProcessInstance) throws SBonitaReadException { final ActivityInstanceService activityInstanceService = getTenantAccessor().getActivityInstanceService(); final List<OrderByOption> orderByOptions = Collections.singletonList(new OrderByOption(SCatchEventInstance.class, "id", OrderByType.ASC)); final FilterOption filterOption1 = new FilterOption(SCatchEventInstance.class, "flowNodeDefinitionId", sCatchEventDefinition.getId()); final FilterOption filterOption2 = new FilterOption(SCatchEventInstance.class, "logicalGroup4", sProcessInstance.getId()); QueryOptions queryOptions = new QueryOptions(0, 100, orderByOptions, Arrays.asList(filterOption1, filterOption2), null); List<SCatchEventInstance> sCatchEventInstances = activityInstanceService.searchFlowNodeInstances(SCatchEventInstance.class, queryOptions); while (!sCatchEventInstances.isEmpty()) { for (final SCatchEventInstance sCatchEventInstance : sCatchEventInstances) { deleteJobsOnFlowNodeInstance(processDefinition, sCatchEventDefinition, sCatchEventInstance); } queryOptions = QueryOptions.getNextPage(queryOptions); sCatchEventInstances = activityInstanceService.searchFlowNodeInstances(SCatchEventInstance.class, queryOptions); } }
private void deleteJobsOnFlowNodeInstances(final SProcessDefinition processDefinition, final SCatchEventDefinition sCatchEventDefinition, final SProcessInstance sProcessInstance) throws SBonitaReadException { final ActivityInstanceService activityInstanceService = getTenantAccessor().getActivityInstanceService(); final List<OrderByOption> orderByOptions = Collections.singletonList(new OrderByOption(SCatchEventInstance.class, "id", OrderByType.ASC)); final FilterOption filterOption1 = new FilterOption(SCatchEventInstance.class, "flowNodeDefinitionId", sCatchEventDefinition.getId()); final FilterOption filterOption2 = new FilterOption(SCatchEventInstance.class, "logicalGroup4", sProcessInstance.getId()); QueryOptions queryOptions = new QueryOptions(0, 100, orderByOptions, Arrays.asList(filterOption1, filterOption2), null); List<SCatchEventInstance> sCatchEventInstances = activityInstanceService.searchFlowNodeInstances(SCatchEventInstance.class, queryOptions); while (!sCatchEventInstances.isEmpty()) { for (final SCatchEventInstance sCatchEventInstance : sCatchEventInstances) { deleteJobsOnFlowNodeInstance(processDefinition, sCatchEventDefinition, sCatchEventInstance); } queryOptions = QueryOptions.getNextPage(queryOptions); sCatchEventInstances = activityInstanceService.searchFlowNodeInstances(SCatchEventInstance.class, queryOptions); } }
public void interruptSubActivities(final long parentActivityInstanceId, final SStateCategory stateCategory) throws SBonitaException { QueryOptions queryOptions = activityInstanceService.buildQueryOptionsForSubActivitiesInNormalStateAndNotTerminal(parentActivityInstanceId, MAX_NUMBER_OF_RESULTS); List<SActivityInstance> childrenToEnd; do { childrenToEnd = activityInstanceService.searchActivityInstances(SActivityInstance.class, queryOptions); for (final SActivityInstance child : childrenToEnd) { activityInstanceService.setStateCategory(child, stateCategory); if (child.isStable()) { containerRegistry.executeFlowNode(child.getProcessDefinitionId(), child.getLogicalGroup(BuilderFactory.get(SAAutomaticTaskInstanceBuilderFactory.class).getParentProcessInstanceIndex()), child.getId()); } } queryOptions = QueryOptions.getNextPage(queryOptions); } while (!childrenToEnd.isEmpty()); }
public void interruptSubActivities(final long parentActivityInstanceId, final SStateCategory stateCategory) throws SBonitaException { QueryOptions queryOptions = activityInstanceService.buildQueryOptionsForSubActivitiesInNormalStateAndNotTerminal(parentActivityInstanceId, MAX_NUMBER_OF_RESULTS); List<SActivityInstance> childrenToEnd; do { childrenToEnd = activityInstanceService.searchActivityInstances(SActivityInstance.class, queryOptions); for (final SActivityInstance child : childrenToEnd) { activityInstanceService.setStateCategory(child, stateCategory); if (child.isStable()) { containerRegistry.executeFlowNode(child.getProcessDefinitionId(), child.getLogicalGroup(BuilderFactory.get(SAAutomaticTaskInstanceBuilderFactory.class).getParentProcessInstanceIndex()), child.getId()); } } queryOptions = QueryOptions.getNextPage(queryOptions); } while (!childrenToEnd.isEmpty()); }
public ActorMapping getActorMapping() throws SBonitaException { final ActorMapping actorMapping = new ActorMapping(); QueryOptions queryOptions = new QueryOptions(0, 100, SActor.class, "id", OrderByType.ASC); List<SActor> actors = actorMappingService.getActors(processDefinitionId, queryOptions); while (!actors.isEmpty()) { for (final SActor sActor : actors) { final Actor actor = new Actor(sActor.getName()); final List<SActorMember> actorMembers = actorMappingService.getActorMembers(sActor.getId(), 0, Integer.MAX_VALUE); for (final SActorMember sActorMember : actorMembers) { addUser(actor, sActorMember); addGroup(actor, sActorMember); addRole(actor, sActorMember); addMembership(actor, sActorMember); } actorMapping.addActor(actor); } queryOptions = QueryOptions.getNextPage(queryOptions); actors = actorMappingService.getActors(processDefinitionId, queryOptions); } return actorMapping; }
public ActorMapping getActorMapping() throws SBonitaException { final ActorMapping actorMapping = new ActorMapping(); QueryOptions queryOptions = new QueryOptions(0, 100, SActor.class, "id", OrderByType.ASC); List<SActor> actors = actorMappingService.getActors(processDefinitionId, queryOptions); while (!actors.isEmpty()) { for (final SActor sActor : actors) { final Actor actor = new Actor(sActor.getName()); final List<SActorMember> actorMembers = actorMappingService.getActorMembers(sActor.getId(), 0, Integer.MAX_VALUE); for (final SActorMember sActorMember : actorMembers) { addUser(actor, sActorMember); addGroup(actor, sActorMember); addRole(actor, sActorMember); addMembership(actor, sActorMember); } actorMapping.addActor(actor); } queryOptions = QueryOptions.getNextPage(queryOptions); actors = actorMappingService.getActors(processDefinitionId, queryOptions); } return actorMapping; }