diff --git a/cibseven-direct-provider/.gitignore b/cibseven-direct-provider/.gitignore
new file mode 100644
index 000000000..8cdd3077b
--- /dev/null
+++ b/cibseven-direct-provider/.gitignore
@@ -0,0 +1,15 @@
+/target/
+/.settings/
+/.classpath
+/.project
+/bin/
+/.springBeans
+/build/
+/src/main/resources/seven-webclient.yaml
+
+# IntelliJ
+.idea/
+*.iml
+
+# MacOS
+.DS_Store
diff --git a/cibseven-direct-provider/pom.xml b/cibseven-direct-provider/pom.xml
new file mode 100755
index 000000000..bcf2767bc
--- /dev/null
+++ b/cibseven-direct-provider/pom.xml
@@ -0,0 +1,37 @@
+
+ 4.0.0
+
+ org.cibseven.webapp
+ cibseven-webclient
+ 2.2.0-SNAPSHOT
+
+ cibseven-direct-provider
+ CIB seven webclient direct provider
+ Services of the direct provider access to the cibseven engine
+
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+
+
+ org.cibseven.bpm
+ cibseven-engine-rest-core-jakarta
+ ${project.version}
+
+
+ org.cibseven.bpm
+ cibseven-engine
+ provided
+ jar
+ ${project.version}
+
+
+ org.cibseven.webapp
+ cibseven-interfaces
+ ${project.version}
+
+
+
+
+
diff --git a/cibseven-direct-provider/src/main/java/org/cibseven/webapp/providers/DirectActivityProvider.java b/cibseven-direct-provider/src/main/java/org/cibseven/webapp/providers/DirectActivityProvider.java
new file mode 100755
index 000000000..05189a1fa
--- /dev/null
+++ b/cibseven-direct-provider/src/main/java/org/cibseven/webapp/providers/DirectActivityProvider.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright CIB software GmbH and/or licensed to CIB software GmbH
+ * under one or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
+ * ownership. CIB software licenses this file to you under the Apache License,
+ * Version 2.0; you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.cibseven.webapp.providers;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.cibseven.bpm.engine.AuthorizationException;
+import org.cibseven.bpm.engine.ProcessEngineException;
+import org.cibseven.bpm.engine.exception.NotFoundException;
+import org.cibseven.bpm.engine.history.HistoricActivityInstance;
+import org.cibseven.bpm.engine.history.HistoricActivityInstanceQuery;
+import org.cibseven.bpm.engine.rest.dto.history.HistoricActivityInstanceDto;
+import org.cibseven.bpm.engine.rest.dto.history.HistoricActivityInstanceQueryDto;
+import org.cibseven.bpm.engine.rest.dto.runtime.ActivityInstanceDto;
+import org.cibseven.bpm.engine.rest.util.QueryUtil;
+import org.cibseven.webapp.auth.CIBUser;
+import org.cibseven.webapp.exception.NoObjectFoundException;
+import org.cibseven.webapp.exception.SystemException;
+import org.cibseven.webapp.rest.model.ActivityInstance;
+import org.cibseven.webapp.rest.model.ActivityInstanceHistory;
+
+public class DirectActivityProvider implements IActivityProvider {
+
+ DirectProviderUtil directProviderUtil;
+ public DirectActivityProvider(DirectProviderUtil directProviderUtil){
+ this.directProviderUtil = directProviderUtil;
+ }
+
+ @Override
+ public ActivityInstance findActivityInstance(String processInstanceId, CIBUser user) {
+ org.cibseven.bpm.engine.runtime.ActivityInstance activityInstance = null;
+ try {
+ activityInstance = directProviderUtil.getProcessEngine(user).getRuntimeService().getActivityInstance(processInstanceId);
+ } catch (AuthorizationException e) {
+ throw e;
+ } catch (ProcessEngineException e) {
+ throw new SystemException(e.getMessage(), e);
+ }
+
+ if (activityInstance == null) {
+ throw new NoObjectFoundException(new SystemException("Process instance with id " + processInstanceId + " does not exist"));
+ }
+
+ ActivityInstanceDto result = ActivityInstanceDto.fromActivityInstance(activityInstance);
+ return directProviderUtil.convertValue(result, ActivityInstance.class, user);
+ }
+
+ @Override
+ public List findActivitiesInstancesHistory(Map queryParams, CIBUser user) {
+ HistoricActivityInstanceQueryDto queryHistoricActivityInstanceDto = directProviderUtil.getObjectMapper(user).convertValue(queryParams,
+ HistoricActivityInstanceQueryDto.class);
+ return queryHistoricActivityInstance(queryHistoricActivityInstanceDto, user);
+
+ }
+
+ @Override
+ public List findActivitiesInstancesHistory(String processInstanceId, CIBUser user) {
+ HistoricActivityInstanceQueryDto queryHistoricActivityInstanceDto = new HistoricActivityInstanceQueryDto();
+ queryHistoricActivityInstanceDto.setProcessInstanceId(processInstanceId);
+ return queryHistoricActivityInstance(queryHistoricActivityInstanceDto, user);
+ }
+
+ @Override
+ public ActivityInstance findActivityInstances(String processInstanceId, CIBUser user) throws SystemException {
+
+ org.cibseven.bpm.engine.runtime.ActivityInstance activityInstance = null;
+
+ try {
+ activityInstance = directProviderUtil.getProcessEngine(user).getRuntimeService().getActivityInstance(processInstanceId);
+ } catch (AuthorizationException e) {
+ throw e;
+ } catch (ProcessEngineException e) {
+ throw new SystemException(e.getMessage(), e);
+ }
+
+ if (activityInstance == null) {
+ throw new NoObjectFoundException(new SystemException("Process instance with id " + processInstanceId + " does not exist"));
+ }
+
+ ActivityInstanceDto result = ActivityInstanceDto.fromActivityInstance(activityInstance);
+ return directProviderUtil.convertValue(result, ActivityInstance.class, user);
+ }
+
+ @Override
+ public List findActivityInstanceHistory(String processInstanceId, CIBUser user)
+ throws SystemException {
+
+ HistoricActivityInstanceQueryDto queryHistoricActivityInstanceDto = new HistoricActivityInstanceQueryDto();
+ queryHistoricActivityInstanceDto.setProcessInstanceId(processInstanceId);
+ return queryHistoricActivityInstance(queryHistoricActivityInstanceDto, user);
+ }
+
+ @Override
+ public void deleteVariableByExecutionId(String executionId, String variableName, CIBUser user) {
+ try {
+ directProviderUtil.getProcessEngine(user).getRuntimeService().removeVariableLocal(executionId, variableName);
+ } catch (AuthorizationException e) {
+ throw e;
+ } catch (ProcessEngineException e) {
+ String errorMessage = String.format("Cannot delete %s variable %s: %s", executionId, variableName, e.getMessage());
+ throw new SystemException(errorMessage, e);
+ }
+
+ }
+
+ @Override
+ public void deleteVariableHistoryInstance(String id, CIBUser user) {
+ try {
+ directProviderUtil.getProcessEngine(user).getHistoryService().deleteHistoricVariableInstance(id);
+ } catch (NotFoundException nfe) { // rewrite status code from bad request
+ // (400) to not found (404)
+ throw new SystemException(nfe.getMessage(), nfe);
+ }
+ }
+
+ @Override
+ public Collection findActivitiesProcessDefinitionHistory(String processDefinitionId,
+ Map params, CIBUser user) {
+ HistoricActivityInstanceQueryDto queryHistoricActivityInstanceDto = directProviderUtil.getObjectMapper(user).convertValue(params,
+ HistoricActivityInstanceQueryDto.class);
+ queryHistoricActivityInstanceDto.setProcessDefinitionId(processDefinitionId);
+ return queryHistoricActivityInstance(queryHistoricActivityInstanceDto, user);
+
+ }
+
+ private List queryHistoricActivityInstance(
+ HistoricActivityInstanceQueryDto queryHistoricActivityInstanceDto, CIBUser user) {
+ queryHistoricActivityInstanceDto.setObjectMapper(directProviderUtil.getObjectMapper(user));
+ HistoricActivityInstanceQuery query = queryHistoricActivityInstanceDto.toQuery(directProviderUtil.getProcessEngine(user));
+ List matchingHistoricActivityInstances = QueryUtil.list(query, null, null);
+
+ List historicActivityInstanceResults = new ArrayList<>();
+ for (HistoricActivityInstance historicActivityInstance : matchingHistoricActivityInstances) {
+ HistoricActivityInstanceDto resultHistoricActivityInstance = new HistoricActivityInstanceDto();
+ HistoricActivityInstanceDto.fromHistoricActivityInstance(resultHistoricActivityInstance, historicActivityInstance);
+ historicActivityInstanceResults.add(directProviderUtil.convertValue(resultHistoricActivityInstance, ActivityInstanceHistory.class, user));
+ }
+ return historicActivityInstanceResults;
+ }
+
+}
diff --git a/cibseven-direct-provider/src/main/java/org/cibseven/webapp/providers/DirectBatchProvider.java b/cibseven-direct-provider/src/main/java/org/cibseven/webapp/providers/DirectBatchProvider.java
new file mode 100755
index 000000000..1d7e3db60
--- /dev/null
+++ b/cibseven-direct-provider/src/main/java/org/cibseven/webapp/providers/DirectBatchProvider.java
@@ -0,0 +1,274 @@
+/*
+ * Copyright CIB software GmbH and/or licensed to CIB software GmbH
+ * under one or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
+ * ownership. CIB software licenses this file to you under the Apache License,
+ * Version 2.0; you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.cibseven.webapp.providers;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.cibseven.bpm.engine.BadUserRequestException;
+import org.cibseven.bpm.engine.ProcessEngine;
+import org.cibseven.bpm.engine.batch.BatchQuery;
+import org.cibseven.bpm.engine.batch.BatchStatistics;
+import org.cibseven.bpm.engine.batch.BatchStatisticsQuery;
+import org.cibseven.bpm.engine.batch.history.HistoricBatch;
+import org.cibseven.bpm.engine.batch.history.HistoricBatchQuery;
+import org.cibseven.bpm.engine.history.CleanableHistoricBatchReport;
+import org.cibseven.bpm.engine.history.CleanableHistoricBatchReportResult;
+import org.cibseven.bpm.engine.history.SetRemovalTimeSelectModeForHistoricBatchesBuilder;
+import org.cibseven.bpm.engine.rest.dto.batch.BatchDto;
+import org.cibseven.bpm.engine.rest.dto.batch.BatchQueryDto;
+import org.cibseven.bpm.engine.rest.dto.batch.BatchStatisticsDto;
+import org.cibseven.bpm.engine.rest.dto.batch.BatchStatisticsQueryDto;
+import org.cibseven.bpm.engine.rest.dto.history.batch.CleanableHistoricBatchReportDto;
+import org.cibseven.bpm.engine.rest.dto.history.batch.CleanableHistoricBatchReportResultDto;
+import org.cibseven.bpm.engine.rest.dto.history.batch.HistoricBatchDto;
+import org.cibseven.bpm.engine.rest.dto.history.batch.HistoricBatchQueryDto;
+import org.cibseven.bpm.engine.rest.dto.history.batch.removaltime.SetRemovalTimeToHistoricBatchesDto;
+import org.cibseven.bpm.engine.rest.util.QueryUtil;
+import org.cibseven.webapp.auth.CIBUser;
+import org.cibseven.webapp.exception.NoObjectFoundException;
+import org.cibseven.webapp.exception.SystemException;
+import org.cibseven.webapp.rest.model.Batch;
+import org.cibseven.webapp.rest.model.HistoryBatch;
+
+import jakarta.ws.rs.core.MultivaluedHashMap;
+import jakarta.ws.rs.core.MultivaluedMap;
+
+public class DirectBatchProvider implements IBatchProvider {
+
+ DirectProviderUtil directProviderUtil;
+
+ DirectBatchProvider(DirectProviderUtil directProviderUtil){
+ this.directProviderUtil = directProviderUtil;
+ }
+
+ @Override
+ public Collection getBatches(Map params, CIBUser user) {
+ MultivaluedMap multiValueMap = new MultivaluedHashMap<>();
+ Integer firstResult = null;
+ Integer maxResults = null;
+ for (Entry entry : params.entrySet()) {
+ if (entry.getKey().equals("firstResult"))
+ firstResult = Integer.parseInt((String) params.get("firstResult"));
+ else if (entry.getKey().equals("maxResults"))
+ maxResults = Integer.parseInt((String) params.get("maxResults"));
+ else
+ multiValueMap.put(entry.getKey(), Arrays.asList((String) entry.getValue()));
+ }
+ BatchQueryDto queryDto = new BatchQueryDto(directProviderUtil.getObjectMapper(user), multiValueMap);
+ BatchQuery query = queryDto.toQuery(directProviderUtil.getProcessEngine(user));
+
+ List matchingBatches = QueryUtil.list(query, firstResult, maxResults);
+
+ List batchResults = new ArrayList<>();
+ for (org.cibseven.bpm.engine.batch.Batch matchingBatch : matchingBatches) {
+ batchResults.add(directProviderUtil.convertValue(BatchDto.fromBatch(matchingBatch), Batch.class, user));
+ }
+ batchResults.forEach(batch -> {
+
+ String batchId = batch.getId();
+ Map statParams = new HashMap<>();
+ statParams.put("batchId", batchId);
+
+ Collection statList = getBatchStatistics(statParams, user);
+ if (!statList.isEmpty()) {
+ Batch stats = statList.iterator().next();
+ batch.setCompletedJobs(stats.getCompletedJobs());
+ batch.setRemainingJobs(stats.getRemainingJobs());
+ batch.setFailedJobs(stats.getFailedJobs());
+ }
+ });
+
+ return batchResults;
+ }
+
+ @Override
+ public Collection getBatchStatistics(Map params, CIBUser user) {
+ MultivaluedMap multiValueMap = new MultivaluedHashMap<>();
+ Integer firstResult = null;
+ Integer maxResults = null;
+ for (Entry entry : params.entrySet()) {
+ if (entry.getKey().equals("firstResult"))
+ firstResult = Integer.parseInt((String) entry.getValue());
+ else if (entry.getKey().equals("maxResults"))
+ maxResults = Integer.parseInt((String) entry.getValue());
+ else
+ multiValueMap.put(entry.getKey(), Arrays.asList((String) entry.getValue()));
+ }
+ BatchStatisticsQueryDto queryDto = new BatchStatisticsQueryDto(directProviderUtil.getObjectMapper(user), multiValueMap);
+ BatchStatisticsQuery query = queryDto.toQuery(directProviderUtil.getProcessEngine(user));
+
+ List batchStatisticsList = QueryUtil.list(query, firstResult, maxResults);
+
+ List statisticsResults = new ArrayList<>();
+ for (BatchStatistics batchStatistics : batchStatisticsList) {
+ statisticsResults.add(directProviderUtil.convertValue(BatchStatisticsDto.fromBatchStatistics(batchStatistics), Batch.class, user));
+ }
+
+ return statisticsResults;
+ }
+
+ @Override
+ public void deleteBatch(String id, Map params, CIBUser user) {
+ Boolean cascade = false;
+ if (params.containsKey("cascade"))
+ cascade = params.get("cascade").equals("true");
+ try {
+ directProviderUtil.getProcessEngine(user).getManagementService().deleteBatch(id, cascade);
+ } catch (BadUserRequestException e) {
+ throw new SystemException("Unable to delete batch with id '" + id + "'", e);
+ }
+ }
+
+ @Override
+ public void setBatchSuspensionState(String id, Map params, CIBUser user) {
+ Boolean suspended = false;
+ if (params.containsKey("suspended"))
+ suspended = params.get("suspended").equals("true");
+
+ if (suspended) {
+ try {
+ directProviderUtil.getProcessEngine(user).getManagementService().suspendBatchById(id);
+ } catch (BadUserRequestException e) {
+ throw new SystemException("Unable to suspend batch with id '" + id + "'", e);
+ }
+ } else {
+ try {
+ directProviderUtil.getProcessEngine(user).getManagementService().activateBatchById(id);
+ } catch (BadUserRequestException e) {
+ throw new SystemException("Unable to activate batch with id '" + id + "'", e);
+ }
+ }
+ }
+
+ @Override
+ public Collection getHistoricBatches(Map params, CIBUser user) {
+ HistoricBatchQueryDto queryDto = directProviderUtil.getObjectMapper(user).convertValue(params, HistoricBatchQueryDto.class);
+ HistoricBatchQuery query = queryDto.toQuery(directProviderUtil.getProcessEngine(user));
+ Integer firstResult = null;
+ Integer maxResults = null;
+ for (Entry entry : params.entrySet()) {
+ if (entry.getKey().equals("firstResult"))
+ firstResult = Integer.parseInt((String) params.get("firstResult"));
+ else if (entry.getKey().equals("maxResults"))
+ maxResults = Integer.parseInt((String) params.get("maxResults"));
+ }
+ List matchingBatches = QueryUtil.list(query, firstResult, maxResults);
+
+ List batchResults = new ArrayList<>();
+ for (HistoricBatch matchingBatch : matchingBatches) {
+ batchResults.add(directProviderUtil.convertValue(HistoricBatchDto.fromBatch(matchingBatch), HistoryBatch.class, user));
+ }
+ return batchResults;
+ }
+
+ @Override
+ public Long getHistoricBatchCount(Map queryParams, CIBUser user) {
+ HistoricBatchQueryDto queryDto = directProviderUtil.getObjectMapper(user).convertValue(queryParams, HistoricBatchQueryDto.class);
+ HistoricBatchQuery query = queryDto.toQuery(directProviderUtil.getProcessEngine(user));
+ return query.count();
+ }
+
+ @Override
+ public HistoryBatch getHistoricBatchById(String id, CIBUser user) {
+ HistoricBatch batch = directProviderUtil.getProcessEngine(user).getHistoryService().createHistoricBatchQuery().batchId(id).singleResult();
+
+ if (batch == null) {
+ throw new NoObjectFoundException(new SystemException("Historic batch with id '" + id + "' does not exist"));
+ }
+
+ return directProviderUtil.convertValue(HistoricBatchDto.fromBatch(batch), HistoryBatch.class, user);
+ }
+
+ @Override
+ public void deleteHistoricBatch(String id, CIBUser user) {
+ try {
+ directProviderUtil.getProcessEngine(user).getHistoryService().deleteHistoricBatch(id);
+ } catch (BadUserRequestException e) {
+ throw new SystemException("Unable to delete historic batch with id '" + id + "'", e);
+ }
+ }
+
+ @Override
+ public Object setRemovalTime(Map payload, CIBUser user) {
+ SetRemovalTimeToHistoricBatchesDto dto = directProviderUtil.getObjectMapper(user).convertValue(payload, SetRemovalTimeToHistoricBatchesDto.class);
+ HistoricBatchQuery historicBatchQuery = null;
+
+ if (dto.getHistoricBatchQuery() != null) {
+ historicBatchQuery = dto.getHistoricBatchQuery().toQuery(directProviderUtil.getProcessEngine(user));
+ }
+
+ SetRemovalTimeSelectModeForHistoricBatchesBuilder builder = directProviderUtil.getProcessEngine(user).getHistoryService().setRemovalTimeToHistoricBatches();
+
+ if (dto.isCalculatedRemovalTime()) {
+ builder.calculatedRemovalTime();
+ }
+
+ Date removalTime = dto.getAbsoluteRemovalTime();
+ if (dto.getAbsoluteRemovalTime() != null) {
+ builder.absoluteRemovalTime(removalTime);
+ }
+
+ if (dto.isClearedRemovalTime()) {
+ builder.clearedRemovalTime();
+ }
+
+ builder.byIds(dto.getHistoricBatchIds());
+ builder.byQuery(historicBatchQuery);
+
+ org.cibseven.bpm.engine.batch.Batch batch = builder.executeAsync();
+ return directProviderUtil.convertValue(BatchDto.fromBatch(batch), Batch.class, user);
+ }
+
+ @Override
+ public Object getCleanableBatchReport(Map queryParams, CIBUser user) {
+ MultivaluedMap multiValueMap = new MultivaluedHashMap<>();
+ for (String key : queryParams.keySet()) {
+ multiValueMap.put(key, Arrays.asList((String) queryParams.get(key)));
+ }
+ CleanableHistoricBatchReportDto queryDto = new CleanableHistoricBatchReportDto(directProviderUtil.getObjectMapper(user), multiValueMap);
+ CleanableHistoricBatchReport query = queryDto.toQuery(directProviderUtil.getProcessEngine(user));
+
+ List reportResult = QueryUtil.list(query, null, null);
+
+ return CleanableHistoricBatchReportResultDto.convert(reportResult);
+ }
+
+ @Override
+ public Object getCleanableBatchReportCount(CIBUser user) {
+ MultivaluedMap multiValueMap = new MultivaluedHashMap<>();
+ CleanableHistoricBatchReportDto queryDto = new CleanableHistoricBatchReportDto(directProviderUtil.getObjectMapper(user), multiValueMap);
+ queryDto.setObjectMapper(directProviderUtil.getObjectMapper(user));
+ CleanableHistoricBatchReport query = queryDto.toQuery(directProviderUtil.getProcessEngine(user));
+ return query.count();
+ }
+
+ @Override
+ public Long getRuntimeBatchCount(Map queryParams, CIBUser user) {
+ ProcessEngine processEngine = directProviderUtil.getProcessEngine(user);
+ BatchQueryDto queryDto = directProviderUtil.getObjectMapper(user).convertValue(queryParams, BatchQueryDto.class);
+ BatchQuery query = queryDto.toQuery(processEngine);
+
+ return query.count();
+ }
+}
diff --git a/cibseven-direct-provider/src/main/java/org/cibseven/webapp/providers/DirectDecisionProvider.java b/cibseven-direct-provider/src/main/java/org/cibseven/webapp/providers/DirectDecisionProvider.java
new file mode 100755
index 000000000..cc211270c
--- /dev/null
+++ b/cibseven-direct-provider/src/main/java/org/cibseven/webapp/providers/DirectDecisionProvider.java
@@ -0,0 +1,416 @@
+/*
+ * Copyright CIB software GmbH and/or licensed to CIB software GmbH
+ * under one or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
+ * ownership. CIB software licenses this file to you under the Apache License,
+ * Version 2.0; you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.cibseven.webapp.providers;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import org.apache.commons.io.IOUtils;
+import org.cibseven.bpm.dmn.engine.DmnDecisionResult;
+import org.cibseven.bpm.dmn.engine.DmnDecisionResultEntries;
+import org.cibseven.bpm.dmn.engine.DmnEngineException;
+import org.cibseven.bpm.engine.AuthorizationException;
+import org.cibseven.bpm.engine.BadUserRequestException;
+import org.cibseven.bpm.engine.ProcessEngineException;
+import org.cibseven.bpm.engine.exception.NotFoundException;
+import org.cibseven.bpm.engine.exception.NotValidException;
+import org.cibseven.bpm.engine.history.HistoricDecisionInstanceQuery;
+import org.cibseven.bpm.engine.history.SetRemovalTimeSelectModeForHistoricDecisionInstancesBuilder;
+import org.cibseven.bpm.engine.impl.util.IoUtil;
+import org.cibseven.bpm.engine.repository.DecisionDefinition;
+import org.cibseven.bpm.engine.repository.DecisionDefinitionQuery;
+import org.cibseven.bpm.engine.rest.dto.HistoryTimeToLiveDto;
+import org.cibseven.bpm.engine.rest.dto.VariableValueDto;
+import org.cibseven.bpm.engine.rest.dto.batch.BatchDto;
+import org.cibseven.bpm.engine.rest.dto.dmn.EvaluateDecisionDto;
+import org.cibseven.bpm.engine.rest.dto.history.HistoricDecisionInstanceDto;
+import org.cibseven.bpm.engine.rest.dto.history.HistoricDecisionInstanceQueryDto;
+import org.cibseven.bpm.engine.rest.dto.history.batch.DeleteHistoricDecisionInstancesDto;
+import org.cibseven.bpm.engine.rest.dto.history.batch.removaltime.SetRemovalTimeToHistoricDecisionInstancesDto;
+import org.cibseven.bpm.engine.rest.dto.repository.DecisionDefinitionDiagramDto;
+import org.cibseven.bpm.engine.rest.dto.repository.DecisionDefinitionDto;
+import org.cibseven.bpm.engine.rest.dto.repository.DecisionDefinitionQueryDto;
+import org.cibseven.bpm.engine.rest.util.QueryUtil;
+import org.cibseven.bpm.engine.variable.VariableMap;
+import org.cibseven.bpm.engine.variable.Variables;
+import org.cibseven.bpm.engine.variable.value.TypedValue;
+import org.cibseven.webapp.auth.CIBUser;
+import org.cibseven.webapp.exception.NoObjectFoundException;
+import org.cibseven.webapp.exception.SystemException;
+import org.cibseven.webapp.rest.model.Decision;
+import org.cibseven.webapp.rest.model.HistoricDecisionInstance;
+
+public class DirectDecisionProvider implements IDecisionProvider {
+
+ DirectProviderUtil directProviderUtil;
+
+ DirectDecisionProvider(DirectProviderUtil directProviderUtil){
+ this.directProviderUtil = directProviderUtil;
+ }
+
+ @Override
+ public Collection getDecisionDefinitionList(Map queryParams, CIBUser user) {
+ DecisionDefinitionQueryDto queryDto = directProviderUtil.getObjectMapper(user).convertValue(queryParams, DecisionDefinitionQueryDto.class);
+ List definitions = new ArrayList<>();
+ DecisionDefinitionQuery query = queryDto.toQuery(directProviderUtil.getProcessEngine(user));
+ List matchingDefinitions = QueryUtil.list(query, null, null);
+ for (DecisionDefinition definition : matchingDefinitions) {
+ DecisionDefinitionDto def = DecisionDefinitionDto.fromDecisionDefinition(definition);
+ definitions.add(directProviderUtil.convertValue(def, Decision.class, user));
+ }
+ return definitions;
+ }
+
+ @Override
+ public Long getDecisionDefinitionListCount(Map queryParams, CIBUser user) {
+ DecisionDefinitionQueryDto queryDto = directProviderUtil.getObjectMapper(user).convertValue(queryParams, DecisionDefinitionQueryDto.class);
+ DecisionDefinitionQuery query = queryDto.toQuery(directProviderUtil.getProcessEngine(user));
+ return query.count();
+ }
+
+ @Override
+ public Decision getDecisionDefinitionByKey(String key, CIBUser user) {
+ DecisionDefinition decisionDefinition = getDecisionDefinitionByKeyAndTenantImpl(key, null, user);
+ return directProviderUtil.convertValue(DecisionDefinitionDto.fromDecisionDefinition(decisionDefinition), Decision.class, user);
+ }
+
+ @Override
+ public Object getDiagramByKey(String key, CIBUser user) {
+ return getDiagramByKeyAndTenant(key, null, user);
+ }
+
+ @Override
+ public Object evaluateDecisionDefinitionByKey(Map data, String key, CIBUser user) {
+ DecisionDefinition decisionDefinition = getDecisionDefinitionByKeyAndTenantImpl(key, null, user);
+
+ return evaluateDecisionDefinitionById(decisionDefinition.getId(), data, user);
+ }
+
+ @Override
+ public void updateHistoryTTLByKey(Map data, String key, CIBUser user) {
+
+ HistoryTimeToLiveDto historyTimeToLiveDto = directProviderUtil.getObjectMapper(user).convertValue(data, HistoryTimeToLiveDto.class);
+ DecisionDefinition decisionDefinition = getDecisionDefinitionByKeyAndTenantImpl(key, null, user);
+ directProviderUtil.getProcessEngine(user).getRepositoryService().updateDecisionDefinitionHistoryTimeToLive(decisionDefinition.getId(),
+ historyTimeToLiveDto.getHistoryTimeToLive());
+ }
+
+ @Override
+ public Decision getDecisionDefinitionByKeyAndTenant(String key, String tenant, CIBUser user) {
+ DecisionDefinition decisionDefinition = getDecisionDefinitionByKeyAndTenantImpl(key, tenant, user);
+ DecisionDefinitionDto dto = DecisionDefinitionDto.fromDecisionDefinition(decisionDefinition);
+ return directProviderUtil.convertValue(dto, Decision.class, user);
+ }
+
+ @Override
+ public Object getDiagramByKeyAndTenant(String key, String tenant, CIBUser user) {
+ DecisionDefinition decisionDefinition = getDecisionDefinitionByKeyAndTenantImpl(key, tenant, user);
+ return getDiagramByDecisionDefinition(decisionDefinition, user);
+ }
+
+ @Override
+ public Object evaluateDecisionDefinitionByKeyAndTenant(Map data, String key, String tenant, CIBUser user) {
+ DecisionDefinition decisionDefinition = getDecisionDefinitionByKeyAndTenantImpl(key, tenant, user);
+
+ return evaluateDecisionDefinitionById(decisionDefinition.getId(), data, user);
+ }
+
+ @Override
+ public void updateHistoryTTLByKeyAndTenant(Map data, String key, String tenant, CIBUser user) {
+ DecisionDefinition decisionDefinition = getDecisionDefinitionByKeyAndTenantImpl(key, tenant, user);
+ updateHistoryTTLById(decisionDefinition.getId(), data, user);
+ }
+
+ @Override
+ public Object getXmlByKey(String key, CIBUser user) {
+ return getXmlByKeyAndTenant(key, null, user);
+ }
+
+ @Override
+ public Object getXmlByKeyAndTenant(String key, String tenant, CIBUser user) {
+ DecisionDefinition decisionDefinition = getDecisionDefinitionByKeyAndTenantImpl(key, tenant, user);
+ return getXmlByDefinitionId(decisionDefinition.getId(), user);
+ }
+
+ @Override
+ public Decision getDecisionDefinitionById(String id, Optional extraInfo, CIBUser user) {
+ DecisionDefinition definition = getDecisionDefinitionById(id, user);
+ Decision decision = directProviderUtil.convertValue(DecisionDefinitionDto.fromDecisionDefinition(definition), Decision.class, user);
+ if (extraInfo.isPresent() && extraInfo.get()) {
+ Map queryParams = new HashMap<>();
+ queryParams.put("decisionDefinitionId", definition.getId());
+ Long count = getHistoricDecisionInstanceCount(queryParams, user);
+ decision.setAllInstances(count);
+ }
+ return decision;
+ }
+
+ @Override
+ public Object getDiagramById(String id, CIBUser user) {
+ DecisionDefinition definition = getDecisionDefinitionById(id, user);
+ return getDiagramByDecisionDefinition(definition, user);
+ }
+
+ @Override
+ public Object evaluateDecisionDefinitionById(String id, Map data, CIBUser user) {
+ try {
+ EvaluateDecisionDto parameters = directProviderUtil.getObjectMapper(user).convertValue(data, EvaluateDecisionDto.class);
+ Map variables = VariableValueDto.toMap(parameters.getVariables(), directProviderUtil.getProcessEngine(user), directProviderUtil.getObjectMapper(user));
+ DmnDecisionResult decisionResult = directProviderUtil.getProcessEngine(user).getDecisionService().evaluateDecisionById(id)
+ .variables(variables).evaluate();
+
+ List