diff --git a/camel-container-tests/camel-container-integration-tests/src/test/filtered-resources/org/kie/camel/container/integration/tests/kjar/pom.xml b/camel-container-tests/camel-container-integration-tests/src/test/filtered-resources/org/kie/camel/container/integration/tests/kjar/pom.xml
index e898899c81..faf9c39053 100644
--- a/camel-container-tests/camel-container-integration-tests/src/test/filtered-resources/org/kie/camel/container/integration/tests/kjar/pom.xml
+++ b/camel-container-tests/camel-container-integration-tests/src/test/filtered-resources/org/kie/camel/container/integration/tests/kjar/pom.xml
@@ -12,18 +12,6 @@
camel-container-tests-model${project.version}
-
- org.optaplanner
- optaplanner-persistence-xstream
- provided
- ${version.org.kie}
-
-
- org.optaplanner
- optaplanner-persistence-jaxb
- provided
- ${version.org.kie}
- org.codehaus.jacksonjackson-core-asl
diff --git a/camel-container-tests/camel-container-integration-tests/src/test/java/org/kie/camel/container/integration/tests/remote/AbstractRemoteIntegrationTest.java b/camel-container-tests/camel-container-integration-tests/src/test/java/org/kie/camel/container/integration/tests/remote/AbstractRemoteIntegrationTest.java
index 2c6396b9a8..5dc275fb61 100644
--- a/camel-container-tests/camel-container-integration-tests/src/test/java/org/kie/camel/container/integration/tests/remote/AbstractRemoteIntegrationTest.java
+++ b/camel-container-tests/camel-container-integration-tests/src/test/java/org/kie/camel/container/integration/tests/remote/AbstractRemoteIntegrationTest.java
@@ -57,8 +57,6 @@ public class AbstractRemoteIntegrationTest extends AbstractKieCamelIntegrationTe
protected static final String PROCESS_WITH_SIGNAL_FILE_NAME = "processWithSignal.bpmn2";
protected static final String PROCESS_WITH_HUMAN_TASK_FILE_NAME = "processWithHumanTask.bpmn2";
protected static final String RULES_FILE_NAME = "rules.drl";
- protected static final String CLOUD_BALANCE_SOLVER_CONFIG = "cloudbalance-solver.xml";
- protected static final String CLOUD_BALANCE_SCORE_RULES = "cloudBalancingScoreRules.drl";
protected static final String DMN_FUNCTION_DEFINITION = "FunctionDefinition.dmn";
protected static final ReleaseId RELEASE_ID =
new ReleaseId("org.drools", "camel-container-tests-kjar", "1.0.0");
@@ -90,10 +88,6 @@ public static void createKieJar() throws IOException {
KJAR_TEST_PACKAGE_PATH + RULES_FILE_NAME, kfs);
kfs = addClasspathResourceToKjar(KJAR_RESOURCES_PATH + PROCESS_WITH_HUMAN_TASK_FILE_NAME,
KJAR_TEST_PACKAGE_PATH + PROCESS_WITH_HUMAN_TASK_FILE_NAME, kfs);
- kfs = addClasspathResourceToKjar(KJAR_RESOURCES_PATH + CLOUD_BALANCE_SOLVER_CONFIG,
- KJAR_TEST_PACKAGE_PATH + CLOUD_BALANCE_SOLVER_CONFIG, kfs);
- kfs = addClasspathResourceToKjar(KJAR_RESOURCES_PATH + CLOUD_BALANCE_SCORE_RULES,
- KJAR_TEST_PACKAGE_PATH + CLOUD_BALANCE_SCORE_RULES, kfs);
kfs = addClasspathResourceToKjar(KJAR_RESOURCES_PATH + DMN_FUNCTION_DEFINITION,
KJAR_TEST_PACKAGE_PATH + DMN_FUNCTION_DEFINITION, kfs);
diff --git a/camel-container-tests/camel-container-integration-tests/src/test/java/org/kie/camel/container/integration/tests/remote/CloudBalancingGenerator.java b/camel-container-tests/camel-container-integration-tests/src/test/java/org/kie/camel/container/integration/tests/remote/CloudBalancingGenerator.java
deleted file mode 100644
index 40f312fe18..0000000000
--- a/camel-container-tests/camel-container-integration-tests/src/test/java/org/kie/camel/container/integration/tests/remote/CloudBalancingGenerator.java
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.camel.container.integration.tests.remote;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-
-import org.kie.camel.container.api.model.cloudbalance.CloudBalance;
-import org.kie.camel.container.api.model.cloudbalance.CloudComputer;
-import org.kie.camel.container.api.model.cloudbalance.CloudProcess;
-
-public class CloudBalancingGenerator {
-
- private static class Price {
-
- private int hardwareValue;
- private String description;
- private int cost;
-
- private Price(int hardwareValue,
- String description,
- int cost) {
- this.hardwareValue = hardwareValue;
- this.description = description;
- this.cost = cost;
- }
-
- public int getHardwareValue() {
- return hardwareValue;
- }
-
- public String getDescription() {
- return description;
- }
-
- public int getCost() {
- return cost;
- }
- }
-
- private static final Price[] CPU_POWER_PRICES = { // in gigahertz
- new Price(3,
- "single core 3ghz",
- 110),
- new Price(4,
- "dual core 2ghz",
- 140),
- new Price(6,
- "dual core 3ghz",
- 180),
- new Price(8,
- "quad core 2ghz",
- 270),
- new Price(12,
- "quad core 3ghz",
- 400),
- new Price(16,
- "quad core 4ghz",
- 1000),
- new Price(24,
- "eight core 3ghz",
- 3000),
- };
- private static final Price[] MEMORY_PRICES = { // in gigabyte RAM
- new Price(2,
- "2 gigabyte",
- 140),
- new Price(4,
- "4 gigabyte",
- 180),
- new Price(8,
- "8 gigabyte",
- 220),
- new Price(16,
- "16 gigabyte",
- 300),
- new Price(32,
- "32 gigabyte",
- 400),
- new Price(64,
- "64 gigabyte",
- 600),
- new Price(96,
- "96 gigabyte",
- 1000),
- };
- private static final Price[] NETWORK_BANDWIDTH_PRICES = { // in gigabyte per hour
- new Price(2,
- "2 gigabyte",
- 100),
- new Price(4,
- "4 gigabyte",
- 200),
- new Price(6,
- "6 gigabyte",
- 300),
- new Price(8,
- "8 gigabyte",
- 400),
- new Price(12,
- "12 gigabyte",
- 600),
- new Price(16,
- "16 gigabyte",
- 800),
- new Price(20,
- "20 gigabyte",
- 1000),
- };
-
- private static final int MAXIMUM_REQUIRED_CPU_POWER = 12; // in gigahertz
- private static final int MAXIMUM_REQUIRED_MEMORY = 32; // in gigabyte RAM
- private static final int MAXIMUM_REQUIRED_NETWORK_BANDWIDTH = 12; // in gigabyte per hour
-
- protected Random random;
-
- public CloudBalancingGenerator() {
- checkConfiguration();
- }
-
- private void checkConfiguration() {
- if (CPU_POWER_PRICES.length != MEMORY_PRICES.length || CPU_POWER_PRICES.length != NETWORK_BANDWIDTH_PRICES.length) {
- throw new IllegalStateException("All price arrays must be equal in length.");
- }
- }
-
- public CloudBalance createCloudBalance(int computerListSize,
- int processListSize) {
- return createCloudBalance(determineFileName(computerListSize,
- processListSize),
- computerListSize,
- processListSize);
- }
-
- private String determineFileName(int computerListSize,
- int processListSize) {
- return computerListSize + "computers-" + processListSize + "processes";
- }
-
- public CloudBalance createCloudBalance(String inputId,
- int computerListSize,
- int processListSize) {
- random = new Random(47);
- CloudBalance cloudBalance = new CloudBalance();
- cloudBalance.setId(0L);
- createComputerList(cloudBalance,
- computerListSize);
- createProcessList(cloudBalance,
- processListSize);
- assureComputerCapacityTotalAtLeastProcessRequiredTotal(cloudBalance);
- BigInteger possibleSolutionSize = BigInteger.valueOf(cloudBalance.getComputerList().size()).pow(
- cloudBalance.getProcessList().size());
- return cloudBalance;
- }
-
- public CloudComputer createCloudComputer(int currentNumberOfComputers) {
- random = new Random(47);
- return generateCloudComputer(currentNumberOfComputers);
- }
-
- private void createComputerList(CloudBalance cloudBalance,
- int computerListSize) {
- List computerList = new ArrayList(computerListSize);
- for (int i = 0; i < computerListSize; i++) {
- CloudComputer computer = generateCloudComputer((long) i);
- computerList.add(computer);
- }
- cloudBalance.setComputerList(computerList);
- }
-
- private CloudComputer generateCloudComputer(long id) {
- CloudComputer computer = new CloudComputer();
- computer.setId(id);
- int cpuPowerPricesIndex = random.nextInt(CPU_POWER_PRICES.length);
- computer.setCpuPower(CPU_POWER_PRICES[cpuPowerPricesIndex].getHardwareValue());
- int memoryPricesIndex = distortIndex(cpuPowerPricesIndex,
- MEMORY_PRICES.length);
- computer.setMemory(MEMORY_PRICES[memoryPricesIndex].getHardwareValue());
- int networkBandwidthPricesIndex = distortIndex(cpuPowerPricesIndex,
- NETWORK_BANDWIDTH_PRICES.length);
- computer.setNetworkBandwidth(NETWORK_BANDWIDTH_PRICES[networkBandwidthPricesIndex].getHardwareValue());
- int cost = CPU_POWER_PRICES[cpuPowerPricesIndex].getCost()
- + MEMORY_PRICES[memoryPricesIndex].getCost()
- + NETWORK_BANDWIDTH_PRICES[networkBandwidthPricesIndex].getCost();
- computer.setCost(cost);
- return computer;
- }
-
- private int distortIndex(int referenceIndex,
- int length) {
- int index = referenceIndex;
- double randomDouble = random.nextDouble();
- double loweringThreshold = 0.25;
- while (randomDouble < loweringThreshold && index >= 1) {
- index--;
- loweringThreshold *= 0.10;
- }
- double heighteningThreshold = 0.75;
- while (randomDouble >= heighteningThreshold && index <= (length - 2)) {
- index++;
- heighteningThreshold = (1.0 - ((1.0 - heighteningThreshold) * 0.10));
- }
- return index;
- }
-
- private void createProcessList(CloudBalance cloudBalance,
- int processListSize) {
- List processList = new ArrayList(processListSize);
- for (int i = 0; i < processListSize; i++) {
- CloudProcess process = new CloudProcess();
- process.setId((long) i);
- int requiredCpuPower = generateRandom(MAXIMUM_REQUIRED_CPU_POWER);
- process.setRequiredCpuPower(requiredCpuPower);
- int requiredMemory = generateRandom(MAXIMUM_REQUIRED_MEMORY);
- process.setRequiredMemory(requiredMemory);
- int requiredNetworkBandwidth = generateRandom(MAXIMUM_REQUIRED_NETWORK_BANDWIDTH);
- process.setRequiredNetworkBandwidth(requiredNetworkBandwidth);
- // Notice that we leave the PlanningVariable properties on null
- processList.add(process);
- }
- cloudBalance.setProcessList(processList);
- }
-
- private int generateRandom(int maximumValue) {
- double randomDouble = random.nextDouble();
- double parabolaBase = 2000.0;
- double parabolaRandomDouble = (Math.pow(parabolaBase,
- randomDouble) - 1.0) / (parabolaBase - 1.0);
- if (parabolaRandomDouble < 0.0 || parabolaRandomDouble >= 1.0) {
- throw new IllegalArgumentException("Invalid generated parabolaRandomDouble (" + parabolaRandomDouble + ")");
- }
- int value = ((int) Math.floor(parabolaRandomDouble * ((double) maximumValue))) + 1;
- if (value < 1 || value > maximumValue) {
- throw new IllegalArgumentException("Invalid generated value (" + value + ")");
- }
- return value;
- }
-
- private void assureComputerCapacityTotalAtLeastProcessRequiredTotal(CloudBalance cloudBalance) {
- List computerList = cloudBalance.getComputerList();
- int cpuPowerTotal = 0;
- int memoryTotal = 0;
- int networkBandwidthTotal = 0;
- for (CloudComputer computer : computerList) {
- cpuPowerTotal += computer.getCpuPower();
- memoryTotal += computer.getMemory();
- networkBandwidthTotal += computer.getNetworkBandwidth();
- }
- int requiredCpuPowerTotal = 0;
- int requiredMemoryTotal = 0;
- int requiredNetworkBandwidthTotal = 0;
- for (CloudProcess process : cloudBalance.getProcessList()) {
- requiredCpuPowerTotal += process.getRequiredCpuPower();
- requiredMemoryTotal += process.getRequiredMemory();
- requiredNetworkBandwidthTotal += process.getRequiredNetworkBandwidth();
- }
- int cpuPowerLacking = requiredCpuPowerTotal - cpuPowerTotal;
- while (cpuPowerLacking > 0) {
- CloudComputer computer = computerList.get(random.nextInt(computerList.size()));
- int upgrade = determineUpgrade(cpuPowerLacking);
- computer.setCpuPower(computer.getCpuPower() + upgrade);
- cpuPowerLacking -= upgrade;
- }
- int memoryLacking = requiredMemoryTotal - memoryTotal;
- while (memoryLacking > 0) {
- CloudComputer computer = computerList.get(random.nextInt(computerList.size()));
- int upgrade = determineUpgrade(memoryLacking);
- computer.setMemory(computer.getMemory() + upgrade);
- memoryLacking -= upgrade;
- }
- int networkBandwidthLacking = requiredNetworkBandwidthTotal - networkBandwidthTotal;
- while (networkBandwidthLacking > 0) {
- CloudComputer computer = computerList.get(random.nextInt(computerList.size()));
- int upgrade = determineUpgrade(networkBandwidthLacking);
- computer.setNetworkBandwidth(computer.getNetworkBandwidth() + upgrade);
- networkBandwidthLacking -= upgrade;
- }
- }
-
- private int determineUpgrade(int lacking) {
- for (int upgrade : new int[]{8, 4, 2, 1}) {
- if (lacking >= upgrade) {
- return upgrade;
- }
- }
- throw new IllegalStateException("Lacking (" + lacking + ") should be at least 1.");
- }
-}
diff --git a/camel-container-tests/camel-container-integration-tests/src/test/java/org/kie/camel/container/integration/tests/remote/SolverClientIntegrationTest.java b/camel-container-tests/camel-container-integration-tests/src/test/java/org/kie/camel/container/integration/tests/remote/SolverClientIntegrationTest.java
deleted file mode 100644
index 5945a768a4..0000000000
--- a/camel-container-tests/camel-container-integration-tests/src/test/java/org/kie/camel/container/integration/tests/remote/SolverClientIntegrationTest.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.camel.container.integration.tests.remote;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.assertj.core.api.Assertions;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.kie.camel.container.api.ExecutionServerCommand;
-import org.kie.camel.container.api.model.cloudbalance.CloudBalance;
-import org.kie.server.api.model.instance.SolverInstance;
-
-public class SolverClientIntegrationTest extends AbstractRemoteIntegrationTest {
-
- private static final String CLOUD_BALANCE_SOLVER_ID = "cloudsolver";
-
- @Test
- public void testGetSolver() {
- final Map parameters = new HashMap<>();
- parameters.put("containerId", CONTAINER_ID);
- parameters.put("solverId", CLOUD_BALANCE_SOLVER_ID);
- final ExecutionServerCommand executionServerCommand = new ExecutionServerCommand();
- executionServerCommand.setClient("solver");
- executionServerCommand.setOperation("getSolver");
- executionServerCommand.setParameters(parameters);
- final Object response = runOnExecutionServer(executionServerCommand);
- Assertions.assertThat(response).isNotNull();
- Assertions.assertThat(response).isInstanceOf(SolverInstance.class);
-
- final SolverInstance solverInstance = (SolverInstance) response;
- Assertions.assertThat(solverInstance.getContainerId()).isEqualTo(CONTAINER_ID);
- Assertions.assertThat(solverInstance.getSolverId()).isEqualTo(CLOUD_BALANCE_SOLVER_ID);
- }
-
- @Test
- public void testSolveCloudBalanceProblem() throws InterruptedException {
- final CloudBalancingGenerator cloudBalancingGenerator = new CloudBalancingGenerator();
- final CloudBalance cloudBalanceProblem = cloudBalancingGenerator
- .createCloudBalance(5, 15);
-
- final Map parameters = new HashMap<>();
- parameters.put("containerId", CONTAINER_ID);
- parameters.put("solverId", CLOUD_BALANCE_SOLVER_ID);
- parameters.put("planningProblem", cloudBalanceProblem);
- final ExecutionServerCommand executionServerCommand = new ExecutionServerCommand();
- executionServerCommand.setClient("solver");
- executionServerCommand.setOperation("solvePlanningProblem");
- executionServerCommand.setParameters(parameters);
- runOnExecutionServer(executionServerCommand);
-
- SolverInstance.SolverStatus solverStatus = getSolverStatus();
- Assertions.assertThat(solverStatus).isEqualTo(SolverInstance.SolverStatus.SOLVING);
-
- Thread.sleep(5000);
-
- solverStatus = getSolverStatus();
- Assertions.assertThat(solverStatus).isEqualTo(SolverInstance.SolverStatus.NOT_SOLVING);
- }
-
- @Before
- public void createTestSolver() {
- final Map parameters = new HashMap<>();
- parameters.put("containerId", CONTAINER_ID);
- parameters.put("solverId", CLOUD_BALANCE_SOLVER_ID);
- parameters.put("configFile", "org/test/" + CLOUD_BALANCE_SOLVER_CONFIG);
- final ExecutionServerCommand executionServerCommand = new ExecutionServerCommand();
- executionServerCommand.setClient("solver");
- executionServerCommand.setOperation("createSolver");
- executionServerCommand.setParameters(parameters);
- final Object response = runOnExecutionServer(executionServerCommand);
- Assertions.assertThat(response).isNotNull();
- Assertions.assertThat(response).isInstanceOf(SolverInstance.class);
- }
-
- @After
- public void cleanUpSolvers() {
- final Map parameters = new HashMap<>();
- parameters.put("containerId", CONTAINER_ID);
- final ExecutionServerCommand executionServerCommand = new ExecutionServerCommand();
- executionServerCommand.setClient("solver");
- executionServerCommand.setOperation("getSolvers");
- executionServerCommand.setParameters(parameters);
- final Object response = runOnExecutionServer(executionServerCommand);
-
- final List solverInstances = (List) response;
- for (SolverInstance solverInstance : solverInstances) {
- disposeSolver(solverInstance.getSolverId());
- }
- }
-
- private SolverInstance.SolverStatus getSolverStatus() {
- final Map parameters = new HashMap<>();
- parameters.put("containerId", CONTAINER_ID);
- parameters.put("solverId", CLOUD_BALANCE_SOLVER_ID);
- final ExecutionServerCommand executionServerCommand = new ExecutionServerCommand();
- executionServerCommand.setClient("solver");
- executionServerCommand.setOperation("getSolver");
- executionServerCommand.setParameters(parameters);
- final Object response = runOnExecutionServer(executionServerCommand);
- Assertions.assertThat(response).isNotNull();
- Assertions.assertThat(response).isInstanceOf(SolverInstance.class);
-
- final SolverInstance solverInstance = (SolverInstance) response;
- return solverInstance.getStatus();
- }
-
- private void disposeSolver(final String solverId) {
- final Map parameters = new HashMap<>();
- parameters.put("containerId", CONTAINER_ID);
- parameters.put("solverId", solverId);
- final ExecutionServerCommand executionServerCommand = new ExecutionServerCommand();
- executionServerCommand.setClient("solver");
- executionServerCommand.setOperation("disposeSolver");
- executionServerCommand.setParameters(parameters);
- runOnExecutionServer(executionServerCommand);
- }
-}
diff --git a/camel-container-tests/camel-container-integration-tests/src/test/resources/org/kie/camel/container/integration/tests/kjar/cloudBalancingScoreRules.drl b/camel-container-tests/camel-container-integration-tests/src/test/resources/org/kie/camel/container/integration/tests/kjar/cloudBalancingScoreRules.drl
deleted file mode 100644
index f15d0a3fb7..0000000000
--- a/camel-container-tests/camel-container-integration-tests/src/test/resources/org/kie/camel/container/integration/tests/kjar/cloudBalancingScoreRules.drl
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.test.rules;
-
-import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScoreHolder;
-
-import org.kie.camel.container.api.model.cloudbalance.CloudBalance;
-import org.kie.camel.container.api.model.cloudbalance.CloudComputer;
-import org.kie.camel.container.api.model.cloudbalance.CloudProcess;
-
-global HardSoftScoreHolder scoreHolder;
-
-// ############################################################################
-// Hard constraints
-// ############################################################################
-
-rule "requiredCpuPowerTotal"
- when
- $computer : CloudComputer($cpuPower : cpuPower)
- $requiredCpuPowerTotal : Number(intValue > $cpuPower) from accumulate(
- CloudProcess(
- computer == $computer,
- $requiredCpuPower : requiredCpuPower),
- sum($requiredCpuPower)
- )
- then
- scoreHolder.addHardConstraintMatch(kcontext, $cpuPower - $requiredCpuPowerTotal.intValue());
-end
-
-rule "requiredMemoryTotal"
- when
- $computer : CloudComputer($memory : memory)
- $requiredMemoryTotal : Number(intValue > $memory) from accumulate(
- CloudProcess(
- computer == $computer,
- $requiredMemory : requiredMemory),
- sum($requiredMemory)
- )
- then
- scoreHolder.addHardConstraintMatch(kcontext, $memory - $requiredMemoryTotal.intValue());
-end
-
-rule "requiredNetworkBandwidthTotal"
- when
- $computer : CloudComputer($networkBandwidth : networkBandwidth)
- $requiredNetworkBandwidthTotal : Number(intValue > $networkBandwidth) from accumulate(
- CloudProcess(
- computer == $computer,
- $requiredNetworkBandwidth : requiredNetworkBandwidth),
- sum($requiredNetworkBandwidth)
- )
- then
- scoreHolder.addHardConstraintMatch(kcontext, $networkBandwidth - $requiredNetworkBandwidthTotal.intValue());
-end
-
-// ############################################################################
-// Soft constraints
-// ############################################################################
-
-rule "computerCost"
- when
- $computer : CloudComputer($cost : cost)
- exists CloudProcess(computer == $computer)
- then
- scoreHolder.addSoftConstraintMatch(kcontext, - $cost);
-end
diff --git a/camel-container-tests/camel-container-integration-tests/src/test/resources/org/kie/camel/container/integration/tests/kjar/cloudbalance-solver.xml b/camel-container-tests/camel-container-integration-tests/src/test/resources/org/kie/camel/container/integration/tests/kjar/cloudbalance-solver.xml
deleted file mode 100644
index 9ee20127b9..0000000000
--- a/camel-container-tests/camel-container-integration-tests/src/test/resources/org/kie/camel/container/integration/tests/kjar/cloudbalance-solver.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
- org.kie.camel.container.api.model.cloudbalance.CloudBalance
- org.kie.camel.container.api.model.cloudbalance.CloudProcess
-
-
-
- ONLY_DOWN
-
-
-
-
- 2
-
-
diff --git a/camel-container-tests/camel-container-tests-api/pom.xml b/camel-container-tests/camel-container-tests-api/pom.xml
index 47e7384671..01ea0be358 100644
--- a/camel-container-tests/camel-container-tests-api/pom.xml
+++ b/camel-container-tests/camel-container-tests-api/pom.xml
@@ -29,10 +29,6 @@
org.droolsdrools-core
-
- org.optaplanner
- optaplanner-core
- org.kie.serverkie-server-api
diff --git a/camel-container-tests/camel-container-tests-model/pom.xml b/camel-container-tests/camel-container-tests-model/pom.xml
index 12c46ec7ba..90d4b54ace 100644
--- a/camel-container-tests/camel-container-tests-model/pom.xml
+++ b/camel-container-tests/camel-container-tests-model/pom.xml
@@ -13,18 +13,8 @@
- org.optaplanner
- optaplanner-core
- provided
-
-
- org.optaplanner
- optaplanner-persistence-xstream
- provided
-
-
- org.optaplanner
- optaplanner-persistence-jaxb
+ jakarta.xml.bind
+ jakarta.xml.bind-apiprovided
@@ -43,4 +33,4 @@
provided
-
\ No newline at end of file
+
diff --git a/camel-container-tests/camel-container-tests-model/src/main/java/org/kie/camel/container/api/model/cloudbalance/AbstractPersistable.java b/camel-container-tests/camel-container-tests-model/src/main/java/org/kie/camel/container/api/model/cloudbalance/AbstractPersistable.java
deleted file mode 100644
index 924a3c4d80..0000000000
--- a/camel-container-tests/camel-container-tests-model/src/main/java/org/kie/camel/container/api/model/cloudbalance/AbstractPersistable.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.camel.container.api.model.cloudbalance;
-
-import java.io.Serializable;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.apache.commons.lang3.builder.CompareToBuilder;
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
-import org.optaplanner.core.api.domain.lookup.PlanningId;
-import org.optaplanner.core.api.score.constraint.ConstraintMatch;
-
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public abstract class AbstractPersistable implements Serializable,
- Comparable {
-
- // TODO Use @XmlID @XmlJavaTypeAdapter(IdAdapter.class) to allow CloudProcess's usage of @XmlIDREF
- @PlanningId
- protected Long id;
-
- protected AbstractPersistable() {
- }
-
- protected AbstractPersistable(long id) {
- this.id = id;
- }
-
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- /**
- * Used by the GUI to sort the {@link ConstraintMatch} list
- * by {@link ConstraintMatch#getJustificationList()}.
- * @param other never null
- * @return comparison
- */
- public int compareTo(AbstractPersistable other) {
- return new CompareToBuilder()
- .append(getClass().getName(),
- other.getClass().getName())
- .append(id,
- other.id)
- .toComparison();
- }
-
- public String toString() {
- return getClass().getName().replaceAll(".*\\.",
- "") + "-" + id;
- }
-
- public int hashCode() {
- return new HashCodeBuilder()
- .append(id)
- .toHashCode();
- }
-
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- } else if (o instanceof AbstractPersistable) {
- AbstractPersistable other = (AbstractPersistable) o;
- return new EqualsBuilder()
- .append(id,
- other.id)
- .isEquals();
- } else {
- return false;
- }
- }
-}
diff --git a/camel-container-tests/camel-container-tests-model/src/main/java/org/kie/camel/container/api/model/cloudbalance/CloudBalance.java b/camel-container-tests/camel-container-tests-model/src/main/java/org/kie/camel/container/api/model/cloudbalance/CloudBalance.java
deleted file mode 100644
index a324496ba7..0000000000
--- a/camel-container-tests/camel-container-tests-model/src/main/java/org/kie/camel/container/api/model/cloudbalance/CloudBalance.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2010 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.camel.container.api.model.cloudbalance;
-
-import java.util.List;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamConverter;
-import org.optaplanner.core.api.domain.solution.PlanningEntityCollectionProperty;
-import org.optaplanner.core.api.domain.solution.PlanningScore;
-import org.optaplanner.core.api.domain.solution.PlanningSolution;
-import org.optaplanner.core.api.domain.solution.drools.ProblemFactCollectionProperty;
-import org.optaplanner.core.api.domain.valuerange.ValueRangeProvider;
-import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
-import org.optaplanner.core.impl.score.buildin.hardsoft.HardSoftScoreDefinition;
-import org.optaplanner.persistence.jaxb.api.score.buildin.hardsoft.HardSoftScoreJaxbXmlAdapter;
-import org.optaplanner.persistence.xstream.api.score.buildin.hardsoft.HardSoftScoreXStreamConverter ;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-
-@PlanningSolution
-@XStreamAlias("CloudBalance")
-@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD)
-public class CloudBalance extends AbstractPersistable {
-
- private List computerList;
-
- private List processList;
-
- @XStreamConverter(HardSoftScoreXStreamConverter.class)
- @XmlJavaTypeAdapter(HardSoftScoreJaxbXmlAdapter.class)
- private HardSoftScore score;
-
- @ValueRangeProvider(id = "computerRange")
- @ProblemFactCollectionProperty
- public List getComputerList() {
- return computerList;
- }
-
- public void setComputerList(List computerList) {
- this.computerList = computerList;
- }
-
- @PlanningEntityCollectionProperty
- public List getProcessList() {
- return processList;
- }
-
- public void setProcessList(List processList) {
- this.processList = processList;
- }
-
- @PlanningScore
- public HardSoftScore getScore() {
- return score;
- }
-
- public void setScore(HardSoftScore score) {
- this.score = score;
- }
-
- // ************************************************************************
- // Complex methods
- // ************************************************************************
-
-}
diff --git a/camel-container-tests/camel-container-tests-model/src/main/java/org/kie/camel/container/api/model/cloudbalance/CloudComputer.java b/camel-container-tests/camel-container-tests-model/src/main/java/org/kie/camel/container/api/model/cloudbalance/CloudComputer.java
deleted file mode 100644
index 1f0c93943f..0000000000
--- a/camel-container-tests/camel-container-tests-model/src/main/java/org/kie/camel/container/api/model/cloudbalance/CloudComputer.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.camel.container.api.model.cloudbalance;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import org.codehaus.jackson.annotate.JsonIgnore;
-
-@XStreamAlias("CloudComputer")
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public class CloudComputer extends AbstractPersistable {
-
- private int cpuPower; // in gigahertz
- private int memory; // in gigabyte RAM
- private int networkBandwidth; // in gigabyte per hour
- private int cost; // in euro per month
-
- public int getCpuPower() {
- return cpuPower;
- }
-
- public void setCpuPower(int cpuPower) {
- this.cpuPower = cpuPower;
- }
-
- public int getMemory() {
- return memory;
- }
-
- public void setMemory(int memory) {
- this.memory = memory;
- }
-
- public int getNetworkBandwidth() {
- return networkBandwidth;
- }
-
- public void setNetworkBandwidth(int networkBandwidth) {
- this.networkBandwidth = networkBandwidth;
- }
-
- public int getCost() {
- return cost;
- }
-
- public void setCost(int cost) {
- this.cost = cost;
- }
-
- // ************************************************************************
- // Complex methods
- // ************************************************************************
-
- @JsonIgnore
- public int getMultiplicand() {
- return cpuPower * memory * networkBandwidth;
- }
-
-}
diff --git a/camel-container-tests/camel-container-tests-model/src/main/java/org/kie/camel/container/api/model/cloudbalance/CloudProcess.java b/camel-container-tests/camel-container-tests-model/src/main/java/org/kie/camel/container/api/model/cloudbalance/CloudProcess.java
deleted file mode 100644
index 7797141c83..0000000000
--- a/camel-container-tests/camel-container-tests-model/src/main/java/org/kie/camel/container/api/model/cloudbalance/CloudProcess.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.camel.container.api.model.cloudbalance;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import org.codehaus.jackson.annotate.JsonIgnore;
-import org.optaplanner.core.api.domain.entity.PlanningEntity;
-import org.optaplanner.core.api.domain.variable.PlanningVariable;
-
-@PlanningEntity()
-@XStreamAlias("CloudProcess")
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public class CloudProcess extends AbstractPersistable {
-
- private int requiredCpuPower; // in gigahertz
- private int requiredMemory; // in gigabyte RAM
- private int requiredNetworkBandwidth; // in gigabyte per hour
-
- // Planning variables: changes during planning, between score calculations.
- // TODO use @XmlIDREF to avoid XML duplication
- private CloudComputer computer;
-
- public int getRequiredCpuPower() {
- return requiredCpuPower;
- }
-
- public void setRequiredCpuPower(int requiredCpuPower) {
- this.requiredCpuPower = requiredCpuPower;
- }
-
- public int getRequiredMemory() {
- return requiredMemory;
- }
-
- public void setRequiredMemory(int requiredMemory) {
- this.requiredMemory = requiredMemory;
- }
-
- public int getRequiredNetworkBandwidth() {
- return requiredNetworkBandwidth;
- }
-
- public void setRequiredNetworkBandwidth(int requiredNetworkBandwidth) {
- this.requiredNetworkBandwidth = requiredNetworkBandwidth;
- }
-
- @PlanningVariable(valueRangeProviderRefs = {"computerRange"})
- public CloudComputer getComputer() {
- return computer;
- }
-
- public void setComputer(CloudComputer computer) {
- this.computer = computer;
- }
-
- // ************************************************************************
- // Complex methods
- // ************************************************************************
-
- @JsonIgnore
- public int getRequiredMultiplicand() {
- return requiredCpuPower * requiredMemory * requiredNetworkBandwidth;
- }
-
- @JsonIgnore
- public String getLabel() {
- return "Process " + id;
- }
-
-}
diff --git a/camel-container-tests/camel-container-tests-module/src/main/java/org/kie/camel/container/module/CamelKieServiceConfigurationCustomizer.java b/camel-container-tests/camel-container-tests-module/src/main/java/org/kie/camel/container/module/CamelKieServiceConfigurationCustomizer.java
index 8bb52900b6..8801b1ff84 100644
--- a/camel-container-tests/camel-container-tests-module/src/main/java/org/kie/camel/container/module/CamelKieServiceConfigurationCustomizer.java
+++ b/camel-container-tests/camel-container-tests-module/src/main/java/org/kie/camel/container/module/CamelKieServiceConfigurationCustomizer.java
@@ -15,15 +15,11 @@
*/
package org.kie.camel.container.module;
-import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.kie.camel.KieServicesConfigurationCustomizer;
import org.kie.camel.container.api.model.Person;
-import org.kie.camel.container.api.model.cloudbalance.CloudBalance;
-import org.kie.camel.container.api.model.cloudbalance.CloudComputer;
-import org.kie.camel.container.api.model.cloudbalance.CloudProcess;
import org.kie.server.client.KieServicesConfiguration;
@@ -35,9 +31,6 @@ public class CamelKieServiceConfigurationCustomizer implements KieServicesConfig
public KieServicesConfiguration apply(KieServicesConfiguration configuration) {
final Set> additionalClasses = new HashSet<>();
additionalClasses.add(Person.class);
- additionalClasses.add(CloudBalance.class);
- additionalClasses.add(CloudComputer.class);
- additionalClasses.add(CloudProcess.class);
final KieServicesConfiguration conf = configuration.clone();
conf.addExtraClasses(additionalClasses);
diff --git a/kie-camel/src/main/java/org/kie/camel/KieProducer.java b/kie-camel/src/main/java/org/kie/camel/KieProducer.java
index d7b899ae50..e0e824f4b7 100644
--- a/kie-camel/src/main/java/org/kie/camel/KieProducer.java
+++ b/kie-camel/src/main/java/org/kie/camel/KieProducer.java
@@ -46,7 +46,6 @@
import org.kie.server.client.ProcessServicesClient;
import org.kie.server.client.QueryServicesClient;
import org.kie.server.client.RuleServicesClient;
-import org.kie.server.client.SolverServicesClient;
import org.kie.server.client.UIServicesClient;
import org.kie.server.client.UserTaskServicesClient;
import org.slf4j.Logger;
@@ -323,13 +322,6 @@ public QueryProducer(KieServicesClient client, String clientName, KieEndpoint en
}
}
- static class SolverProducer extends AbstractReflectiveProducer {
-
- public SolverProducer(KieServicesClient client, String clientName, KieEndpoint endpoint) {
- super(client.getServicesClient(SolverServicesClient.class), clientName, endpoint);
- }
- }
-
static class UiProducer extends AbstractReflectiveProducer {
public UiProducer(KieServicesClient client, String clientName, KieEndpoint endpoint) {
diff --git a/kie-camel/src/test/java/org/kie/camel/KieClientServicesIntegrationTest.java b/kie-camel/src/test/java/org/kie/camel/KieClientServicesIntegrationTest.java
index eb2083a1c9..e56bd259af 100644
--- a/kie-camel/src/test/java/org/kie/camel/KieClientServicesIntegrationTest.java
+++ b/kie-camel/src/test/java/org/kie/camel/KieClientServicesIntegrationTest.java
@@ -41,7 +41,6 @@
import org.kie.server.api.model.instance.NodeInstanceList;
import org.kie.server.api.model.instance.RequestInfoInstance;
import org.kie.server.api.model.instance.RequestInfoInstanceList;
-import org.kie.server.api.model.instance.SolverInstanceList;
import org.kie.server.api.model.instance.TaskSummary;
import org.kie.server.api.model.instance.TaskSummaryList;
@@ -123,21 +122,6 @@ public void testQueryServiceCamelProducer() throws Exception {
assertCollectionSize(nodeInstanceList, 0);
}
- @Test
- public void testSolverServiceCamelProducer() throws Exception {
- MockEndpoint mockEndpoint = getMockEndpoint("mock:result");
- mockEndpoint.expectedMessageCount(1);
-
- Map headers = new HashMap<>();
- headers.put(KIE_CLIENT, "solver");
- headers.put(KIE_OPERATION, "getSolvers");
- headers.put(asCamelKieName("containerId"), "my-container");
- template.sendBodyAndHeaders("direct:start", null, headers);
- assertMockEndpointsSatisfied();
- List nodeInstanceList = getResultMessage(mockEndpoint.getExchanges().get(0)).getBody(List.class);
- assertCollectionSize(nodeInstanceList, 0);
- }
-
@Test
public void testUiServiceCamelProducer() throws Exception {
MockEndpoint mockEndpoint = getMockEndpoint("mock:result");
@@ -177,7 +161,7 @@ protected RouteBuilder createRouteBuilder() throws Exception {
KieServerInfo info = new KieServerInfo("mock", "1.2.3");
List capabilities = Arrays.asList(KieServerConstants.CAPABILITY_BPM, KieServerConstants.CAPABILITY_BPM_UI,
- KieServerConstants.CAPABILITY_BRM, KieServerConstants.CAPABILITY_BRP,
+ KieServerConstants.CAPABILITY_BRM,
KieServerConstants.CAPABILITY_CASE, KieServerConstants.CAPABILITY_DMN);
info.setCapabilities(capabilities);
ServiceResponse response = new ServiceResponse(ResponseType.SUCCESS, "Kie Server info");
@@ -226,14 +210,6 @@ protected RouteBuilder createRouteBuilder() throws Exception {
.withHeader("Content-Type", "application/xml")
.withBody(toXML(queryResponse,
NodeInstanceList.class))));
- // solver service mock response
- SolverInstanceList solverResponse = new SolverInstanceList();
- stubFor(get(urlMatching("/containers/my-container/solvers"))
- .willReturn(aResponse()
- .withStatus(200)
- .withHeader("Content-Type", "application/xml")
- .withBody(toXML(solverResponse,
- SolverInstanceList.class))));
// ui service mock response
stubFor(get(urlMatching("/containers/my-container/forms/processes/my-process.*"))
diff --git a/kie-maven-plugin/pom.xml b/kie-maven-plugin/pom.xml
index e3553b23ea..55a583aae7 100644
--- a/kie-maven-plugin/pom.xml
+++ b/kie-maven-plugin/pom.xml
@@ -326,16 +326,6 @@
drools-workbench-models-guided-scorecardruntime
-
- org.optaplanner
- optaplanner-workbench-models-datamodel-api
- runtime
-
-
- org.optaplanner
- optaplanner-core
- runtime
- org.kiekie-dmn-core
diff --git a/kie-osgi/kie-karaf-features/pom.xml b/kie-osgi/kie-karaf-features/pom.xml
index a37eb8f4ee..00cbb81382 100644
--- a/kie-osgi/kie-karaf-features/pom.xml
+++ b/kie-osgi/kie-karaf-features/pom.xml
@@ -502,11 +502,6 @@
jbpm-executorprovided
-
- org.optaplanner
- optaplanner-core
- provided
- org.kie.serverkie-server-api
diff --git a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/PlannerCloudBalanceIntegrationTest.java b/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/PlannerCloudBalanceIntegrationTest.java
deleted file mode 100644
index f138e3b81c..0000000000
--- a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/PlannerCloudBalanceIntegrationTest.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright 2018 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.karaf.itest.planner;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Random;
-
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.kie.karaf.itest.AbstractKarafIntegrationTest;
-import org.kie.karaf.itest.planner.domain.CloudBalance;
-import org.kie.karaf.itest.planner.domain.CloudComputer;
-import org.kie.karaf.itest.planner.domain.CloudProcess;
-import org.kie.karaf.itest.planner.domain.score.CloudBalancingIncrementalScoreCalculator;
-import org.ops4j.pax.exam.Configuration;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.PaxExam;
-import org.ops4j.pax.exam.karaf.options.LogLevelOption;
-import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
-import org.ops4j.pax.exam.spi.reactors.PerClass;
-import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
-import org.optaplanner.core.api.solver.Solver;
-import org.optaplanner.core.api.solver.SolverFactory;
-import org.optaplanner.core.config.constructionheuristic.ConstructionHeuristicPhaseConfig;
-import org.optaplanner.core.config.constructionheuristic.ConstructionHeuristicType;
-import org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig;
-import org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig;
-import org.optaplanner.core.config.solver.SolverConfig;
-import org.optaplanner.core.config.solver.termination.TerminationConfig;
-
-import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.configureConsole;
-import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.logLevel;
-
-@RunWith(PaxExam.class)
-@ExamReactorStrategy(PerClass.class)
-public class PlannerCloudBalanceIntegrationTest extends AbstractKarafIntegrationTest {
-
- private static final String CLOUD_BALANCE_INCREMENTAL_CONFIG_FILE = "cloudBalanceIncrementalConfig.xml";
- private static final String CLOUD_BALANCE_DROOLS_CONFIG_FILE = "cloudBalanceDroolsConfig.xml";
-
- @Test
- public void plannerCloudBalanceTest() {
- solveSolution(cloudBalanceGeneratorForFuse(5, 10, 0));
- }
-
- @Test
- @Ignore("RHPAM-1554")
- public void plannerSolverFactoryTest() {
- solveUsingSolverFactory(CLOUD_BALANCE_INCREMENTAL_CONFIG_FILE);
- }
-
- @Test
- @Ignore("RHPAM-1554")
- public void plannerSolverFactoryDroolsTest() {
- solveUsingSolverFactory(CLOUD_BALANCE_DROOLS_CONFIG_FILE);
- }
-
- private CloudBalance cloudBalanceGeneratorForFuse(int computerNum, int processNum, int seed) {
- Random random = new Random(seed);
-
- int costRange = 10000;
- int costBaseline = 1000;
-
- int cpuPowerRange = 100;
- int cpuPowerBaseLine = 10;
-
- int memoryRange = 100;
- int memoryBaseLine = 10;
-
- int networkRange = 100;
- int networkBaseLine = 10;
-
- CloudBalance cloudBalance = new CloudBalance();
- String string = Integer.MIN_VALUE + "hard";
- string += "/";
- string += Integer.MIN_VALUE + "soft";
- cloudBalance.setScore(HardSoftScore.parseScore(string));
-
- List computerList = new ArrayList<>();
- for (int i = 0; i < computerNum; i++) {
- CloudComputer computer = new CloudComputer();
- computer.setCost(random.nextInt(costRange) + costBaseline);
- computer.setCpuPower(random.nextInt(cpuPowerRange) + cpuPowerBaseLine);
- computer.setMemory(random.nextInt(memoryRange) + memoryBaseLine);
- computer.setNetworkBandwidth(random.nextInt(networkRange) + networkBaseLine);
- computerList.add(computer);
- }
-
- int processCpuPowerRange = 50;
- int processCpuPowerBaseLine = 1;
-
- int processMemoryRange = 50;
- int processMemoryBaseLine = 1;
-
- int processNetworkRange = 50;
- int processNetworkBaseLine = 1;
-
- List processList = new ArrayList<>();
- for (int i = 0; i < processNum; i++) {
- CloudProcess process = new CloudProcess();
- process.setRequiredCpuPower(random.nextInt(processCpuPowerRange) + processCpuPowerBaseLine);
- process.setRequiredMemory(random.nextInt(processMemoryRange) + processMemoryBaseLine);
- process.setRequiredNetworkBandwidth(random.nextInt(processNetworkRange) + processNetworkBaseLine);
- processList.add(process);
- }
- cloudBalance.setComputerList(computerList);
- cloudBalance.setProcessList(processList);
- return cloudBalance;
- }
-
- private void solveSolution(CloudBalance cloudBalance) {
- LocalSearchPhaseConfig localSearchPhaseConfig = new LocalSearchPhaseConfig();
- localSearchPhaseConfig.setTerminationConfig(new TerminationConfig().withStepCountLimit(20));
- SolverConfig config = new SolverConfig()
- .withEntityClassList(Arrays.asList(CloudProcess.class))
- .withSolutionClass(CloudBalance.class)
- .withScoreDirectorFactory(
- new ScoreDirectorFactoryConfig()
- .withIncrementalScoreCalculatorClass(CloudBalancingIncrementalScoreCalculator.class))
- .withPhases(
- new ConstructionHeuristicPhaseConfig()
- .withConstructionHeuristicType(ConstructionHeuristicType.FIRST_FIT_DECREASING),
- localSearchPhaseConfig);
-
- Assert.assertEquals(cloudBalance.getScore().getHardScore(), Integer.MIN_VALUE);
- Assert.assertEquals(cloudBalance.getScore().getSoftScore(), Integer.MIN_VALUE);
-
- SolverFactory solverFactory = SolverFactory.create(config);
- Solver solver = solverFactory.buildSolver();
- solver.solve(cloudBalance);
-
- CloudBalance solution = solver.getBestSolution();
-
- Assert.assertNotEquals(solution.getScore().getHardScore(), Integer.MIN_VALUE);
- Assert.assertNotEquals(solution.getScore().getSoftScore(), Integer.MIN_VALUE);
- }
-
- private void solveUsingSolverFactory(String configFile) {
- SolverFactory solverFactory = SolverFactory
- .createFromXmlResource(configFile, PlannerCloudBalanceIntegrationTest.class.getClassLoader());
-
- CloudBalance cloudBalance = cloudBalanceGeneratorForFuse(10, 20, 0);
- Assert.assertEquals(cloudBalance.getScore().getHardScore(), Integer.MIN_VALUE);
- Assert.assertEquals(cloudBalance.getScore().getSoftScore(), Integer.MIN_VALUE);
-
- Solver solver = solverFactory.buildSolver();
- solver.solve(cloudBalance);
-
- CloudBalance solution = solver.getBestSolution();
-
- Assert.assertNotEquals(solution.getScore().getHardScore(), Integer.MIN_VALUE);
- Assert.assertNotEquals(solution.getScore().getSoftScore(), Integer.MIN_VALUE);
- }
-
- @Configuration
- public static Option[] configure() {
- return new Option[]{
- // Install Karaf Container
- getKarafDistributionOption(),
-
- // Don't bother with local console output as it just ends up cluttering the logs
- configureConsole().ignoreLocalConsole(),
- // Force the log level to INFO so we have more details during the test. It defaults to WARN.
- logLevel(LogLevelOption.LogLevel.WARN),
-
- // Option to be used to do remote debugging
- // debugConfiguration("5005", true),
-
- loadKieFeatures("optaplanner-engine"),
- };
- }
-}
diff --git a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/CloudBalance.java b/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/CloudBalance.java
deleted file mode 100644
index ccbb90e6b8..0000000000
--- a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/CloudBalance.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2018 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.karaf.itest.planner.domain;
-
-import java.util.List;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamConverter;
-import org.optaplanner.core.api.domain.solution.PlanningEntityCollectionProperty;
-import org.optaplanner.core.api.domain.solution.PlanningScore;
-import org.optaplanner.core.api.domain.solution.PlanningSolution;
-import org.optaplanner.core.api.domain.solution.drools.ProblemFactCollectionProperty;
-import org.optaplanner.core.api.domain.valuerange.ValueRangeProvider;
-import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
-import org.optaplanner.persistence.xstream.api.score.buildin.hardsoft.HardSoftScoreXStreamConverter;
-
-@PlanningSolution
-@XStreamAlias("CloudBalance")
-public class CloudBalance {
-
- private List computerList;
-
- private List processList;
-
- @XStreamConverter(HardSoftScoreXStreamConverter.class)
- private HardSoftScore score;
-
- @ValueRangeProvider(id = "computerRange")
- @ProblemFactCollectionProperty
- public List getComputerList() {
- return computerList;
- }
-
- public void setComputerList(List computerList) {
- this.computerList = computerList;
- }
-
- @PlanningEntityCollectionProperty
- public List getProcessList() {
- return processList;
- }
-
- public void setProcessList(List processList) {
- this.processList = processList;
- }
-
- @PlanningScore
- public HardSoftScore getScore() {
- return score;
- }
-
- public void setScore(HardSoftScore score) {
- this.score = score;
- }
-}
diff --git a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/CloudComputer.java b/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/CloudComputer.java
deleted file mode 100644
index 5079cacb95..0000000000
--- a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/CloudComputer.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2018 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.karaf.itest.planner.domain;
-
-public class CloudComputer {
-
- private int id;
- private int cpuPower; // in gigahertz
- private int memory; // in gigabyte RAM
- private int networkBandwidth; // in gigabyte per hour
- private int cost; // in euro per month
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public int getCpuPower() {
- return cpuPower;
- }
-
- public void setCpuPower(int cpuPower) {
- this.cpuPower = cpuPower;
- }
-
- public int getMemory() {
- return memory;
- }
-
- public void setMemory(int memory) {
- this.memory = memory;
- }
-
- public int getNetworkBandwidth() {
- return networkBandwidth;
- }
-
- public void setNetworkBandwidth(int networkBandwidth) {
- this.networkBandwidth = networkBandwidth;
- }
-
- public int getCost() {
- return cost;
- }
-
- public void setCost(int cost) {
- this.cost = cost;
- }
-
- public int getMultiplicand() {
- return cpuPower * memory * networkBandwidth;
- }
-}
diff --git a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/CloudProcess.java b/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/CloudProcess.java
deleted file mode 100644
index 4ccb5dc2b7..0000000000
--- a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/CloudProcess.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2018 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.karaf.itest.planner.domain;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import org.kie.karaf.itest.planner.domain.solver.CloudComputerStrengthComparator;
-import org.kie.karaf.itest.planner.domain.solver.CloudProcessDifficultyComparator;
-import org.optaplanner.core.api.domain.entity.PlanningEntity;
-import org.optaplanner.core.api.domain.variable.PlanningVariable;
-
-@PlanningEntity(difficultyComparatorClass = CloudProcessDifficultyComparator.class)
-@XStreamAlias("CloudProcess")
-public class CloudProcess {
-
- private int id;
- private int requiredCpuPower; // in gigahertz
- private int requiredMemory; // in gigabyte RAM
- private int requiredNetworkBandwidth; // in gigabyte per hour
-
- // Planning variables: changes during planning, between score calculations.
- private CloudComputer computer;
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public int getRequiredCpuPower() {
- return requiredCpuPower;
- }
-
- public void setRequiredCpuPower(int requiredCpuPower) {
- this.requiredCpuPower = requiredCpuPower;
- }
-
- public int getRequiredMemory() {
- return requiredMemory;
- }
-
- public void setRequiredMemory(int requiredMemory) {
- this.requiredMemory = requiredMemory;
- }
-
- public int getRequiredNetworkBandwidth() {
- return requiredNetworkBandwidth;
- }
-
- public void setRequiredNetworkBandwidth(int requiredNetworkBandwidth) {
- this.requiredNetworkBandwidth = requiredNetworkBandwidth;
- }
-
- @PlanningVariable(valueRangeProviderRefs = {"computerRange"},
- strengthComparatorClass = CloudComputerStrengthComparator.class)
- public CloudComputer getComputer() {
- return computer;
- }
-
- public void setComputer(CloudComputer computer) {
- this.computer = computer;
- }
-
- public int getRequiredMultiplicand() {
- return requiredCpuPower * requiredMemory * requiredNetworkBandwidth;
- }
-}
diff --git a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/score/CloudBalancingIncrementalScoreCalculator.java b/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/score/CloudBalancingIncrementalScoreCalculator.java
deleted file mode 100644
index bf961affff..0000000000
--- a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/score/CloudBalancingIncrementalScoreCalculator.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright 2018 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.karaf.itest.planner.domain.score;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.kie.karaf.itest.planner.domain.CloudBalance;
-import org.kie.karaf.itest.planner.domain.CloudComputer;
-import org.kie.karaf.itest.planner.domain.CloudProcess;
-import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
-import org.optaplanner.core.impl.score.director.incremental.AbstractIncrementalScoreCalculator;
-
-public class CloudBalancingIncrementalScoreCalculator extends AbstractIncrementalScoreCalculator {
-
- private Map cpuPowerUsageMap;
- private Map memoryUsageMap;
- private Map networkBandwidthUsageMap;
- private Map processCountMap;
-
- private int hardScore;
- private int softScore;
-
- public void resetWorkingSolution(CloudBalance cloudBalance) {
- int computerListSize = cloudBalance.getComputerList().size();
- cpuPowerUsageMap = new HashMap(computerListSize);
- memoryUsageMap = new HashMap(computerListSize);
- networkBandwidthUsageMap = new HashMap(computerListSize);
- processCountMap = new HashMap(computerListSize);
- for (CloudComputer computer : cloudBalance.getComputerList()) {
- cpuPowerUsageMap.put(computer, 0);
- memoryUsageMap.put(computer, 0);
- networkBandwidthUsageMap.put(computer, 0);
- processCountMap.put(computer, 0);
- }
- hardScore = 0;
- softScore = 0;
- for (CloudProcess process : cloudBalance.getProcessList()) {
- insert(process);
- }
- }
-
- public void beforeEntityAdded(Object entity) {
- // Do nothing
- }
-
- public void afterEntityAdded(Object entity) {
- // TODO the maps should probably be adjusted
- insert((CloudProcess) entity);
- }
-
- public void beforeVariableChanged(Object entity, String variableName) {
- retract((CloudProcess) entity);
- }
-
- public void afterVariableChanged(Object entity, String variableName) {
- insert((CloudProcess) entity);
- }
-
- public void beforeEntityRemoved(Object entity) {
- retract((CloudProcess) entity);
- }
-
- public void afterEntityRemoved(Object entity) {
- // Do nothing
- // TODO the maps should probably be adjusted
- }
-
- private void insert(CloudProcess process) {
- CloudComputer computer = process.getComputer();
- if (computer != null) {
- int cpuPower = computer.getCpuPower();
- int oldCpuPowerUsage = cpuPowerUsageMap.get(computer);
- int oldCpuPowerAvailable = cpuPower - oldCpuPowerUsage;
- int newCpuPowerUsage = oldCpuPowerUsage + process.getRequiredCpuPower();
- int newCpuPowerAvailable = cpuPower - newCpuPowerUsage;
- hardScore += Math.min(newCpuPowerAvailable, 0) - Math.min(oldCpuPowerAvailable, 0);
- cpuPowerUsageMap.put(computer, newCpuPowerUsage);
-
- int memory = computer.getMemory();
- int oldMemoryUsage = memoryUsageMap.get(computer);
- int oldMemoryAvailable = memory - oldMemoryUsage;
- int newMemoryUsage = oldMemoryUsage + process.getRequiredMemory();
- int newMemoryAvailable = memory - newMemoryUsage;
- hardScore += Math.min(newMemoryAvailable, 0) - Math.min(oldMemoryAvailable, 0);
- memoryUsageMap.put(computer, newMemoryUsage);
-
- int networkBandwidth = computer.getNetworkBandwidth();
- int oldNetworkBandwidthUsage = networkBandwidthUsageMap.get(computer);
- int oldNetworkBandwidthAvailable = networkBandwidth - oldNetworkBandwidthUsage;
- int newNetworkBandwidthUsage = oldNetworkBandwidthUsage + process.getRequiredNetworkBandwidth();
- int newNetworkBandwidthAvailable = networkBandwidth - newNetworkBandwidthUsage;
- hardScore += Math.min(newNetworkBandwidthAvailable, 0) - Math.min(oldNetworkBandwidthAvailable, 0);
- networkBandwidthUsageMap.put(computer, newNetworkBandwidthUsage);
-
- int oldProcessCount = processCountMap.get(computer);
- if (oldProcessCount == 0) {
- softScore -= computer.getCost();
- }
- int newProcessCount = oldProcessCount + 1;
- processCountMap.put(computer, newProcessCount);
- }
- }
-
- private void retract(CloudProcess process) {
- CloudComputer computer = process.getComputer();
- if (computer != null) {
- int cpuPower = computer.getCpuPower();
- int oldCpuPowerUsage = cpuPowerUsageMap.get(computer);
- int oldCpuPowerAvailable = cpuPower - oldCpuPowerUsage;
- int newCpuPowerUsage = oldCpuPowerUsage - process.getRequiredCpuPower();
- int newCpuPowerAvailable = cpuPower - newCpuPowerUsage;
- hardScore += Math.min(newCpuPowerAvailable, 0) - Math.min(oldCpuPowerAvailable, 0);
- cpuPowerUsageMap.put(computer, newCpuPowerUsage);
-
- int memory = computer.getMemory();
- int oldMemoryUsage = memoryUsageMap.get(computer);
- int oldMemoryAvailable = memory - oldMemoryUsage;
- int newMemoryUsage = oldMemoryUsage - process.getRequiredMemory();
- int newMemoryAvailable = memory - newMemoryUsage;
- hardScore += Math.min(newMemoryAvailable, 0) - Math.min(oldMemoryAvailable, 0);
- memoryUsageMap.put(computer, newMemoryUsage);
-
- int networkBandwidth = computer.getNetworkBandwidth();
- int oldNetworkBandwidthUsage = networkBandwidthUsageMap.get(computer);
- int oldNetworkBandwidthAvailable = networkBandwidth - oldNetworkBandwidthUsage;
- int newNetworkBandwidthUsage = oldNetworkBandwidthUsage - process.getRequiredNetworkBandwidth();
- int newNetworkBandwidthAvailable = networkBandwidth - newNetworkBandwidthUsage;
- hardScore += Math.min(newNetworkBandwidthAvailable, 0) - Math.min(oldNetworkBandwidthAvailable, 0);
- networkBandwidthUsageMap.put(computer, newNetworkBandwidthUsage);
-
- int oldProcessCount = processCountMap.get(computer);
- int newProcessCount = oldProcessCount - 1;
- if (newProcessCount == 0) {
- softScore += computer.getCost();
- }
- processCountMap.put(computer, newProcessCount);
- }
- }
-
- public HardSoftScore calculateScore() {
- return HardSoftScore.valueOf(hardScore, softScore);
- }
-}
diff --git a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/solver/CloudComputerStrengthComparator.java b/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/solver/CloudComputerStrengthComparator.java
deleted file mode 100644
index 9037df7e01..0000000000
--- a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/solver/CloudComputerStrengthComparator.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2018 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.karaf.itest.planner.domain.solver;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-import org.apache.commons.lang3.builder.CompareToBuilder;
-import org.kie.karaf.itest.planner.domain.CloudComputer;
-
-public class CloudComputerStrengthComparator implements Comparator,
- Serializable {
- public int compare(CloudComputer a, CloudComputer b) {
- return new CompareToBuilder()
- .append(a.getMultiplicand(), b.getMultiplicand())
- .append(b.getCost(), a.getCost()) // Descending (but this is debatable)
- .append(a.getId(), b.getId())
- .toComparison();
- }
-}
diff --git a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/solver/CloudProcessDifficultyComparator.java b/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/solver/CloudProcessDifficultyComparator.java
deleted file mode 100644
index a22e9c880d..0000000000
--- a/kie-osgi/kie-karaf-itests/src/test/java/org/kie/karaf/itest/planner/domain/solver/CloudProcessDifficultyComparator.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2018 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.karaf.itest.planner.domain.solver;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-import org.apache.commons.lang3.builder.CompareToBuilder;
-import org.kie.karaf.itest.planner.domain.CloudProcess;
-
-public class CloudProcessDifficultyComparator implements Comparator,
- Serializable {
- public int compare(CloudProcess a, CloudProcess b) {
- return new CompareToBuilder()
- .append(a.getRequiredMultiplicand(), b.getRequiredMultiplicand())
- .append(a.getId(), b.getId())
- .toComparison();
- }
-
-}
diff --git a/kie-osgi/kie-karaf-itests/src/test/resources/org/kie/karaf/itest/planner/cloudBalanceDroolsConfig.xml b/kie-osgi/kie-karaf-itests/src/test/resources/org/kie/karaf/itest/planner/cloudBalanceDroolsConfig.xml
deleted file mode 100644
index 8c64319a79..0000000000
--- a/kie-osgi/kie-karaf-itests/src/test/resources/org/kie/karaf/itest/planner/cloudBalanceDroolsConfig.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
- REPRODUCIBLE
-
-
- org.jboss.qa.brms.fuse.optaplanner.cloudbalancing.domain.CloudBalance
- org.jboss.qa.brms.fuse.optaplanner.cloudbalancing.domain.CloudProcess
-
-
-
- HARD_SOFT
- org/jboss/qa/brms/fuse/optaplanner/cloudBalancingScoreRules.drl
- ONLY_DOWN
-
-
-
-
- 5
-
-
- FIRST_FIT_DECREASING
-
-
-
-
-
-
-
-
-
- 7
-
-
- 1000
-
-
-
diff --git a/kie-osgi/kie-karaf-itests/src/test/resources/org/kie/karaf/itest/planner/cloudBalanceIncrementalConfig.xml b/kie-osgi/kie-karaf-itests/src/test/resources/org/kie/karaf/itest/planner/cloudBalanceIncrementalConfig.xml
deleted file mode 100644
index 1594aaee2e..0000000000
--- a/kie-osgi/kie-karaf-itests/src/test/resources/org/kie/karaf/itest/planner/cloudBalanceIncrementalConfig.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
- REPRODUCIBLE
-
-
- org.kie.karaf.itest.planner.domain.CloudBalance
- org.kie.karaf.itest.planner.domain.CloudProcess
-
-
-
- HARD_SOFT
- org.kie.karaf.itest.planner.score.CloudBalancingIncrementalScoreCalculator
- ONLY_DOWN
-
-
-
-
- 5
-
-
- FIRST_FIT_DECREASING
-
-
-
-
-
-
-
-
-
- 7
-
-
- 1000
-
-
-
diff --git a/kie-osgi/kie-karaf-itests/src/test/resources/org/kie/karaf/itest/planner/cloudBalancingScoreRules.drl b/kie-osgi/kie-karaf-itests/src/test/resources/org/kie/karaf/itest/planner/cloudBalancingScoreRules.drl
deleted file mode 100644
index 45e4f5fc69..0000000000
--- a/kie-osgi/kie-karaf-itests/src/test/resources/org/kie/karaf/itest/planner/cloudBalancingScoreRules.drl
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2010 JBoss Inc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.karaf.itest.planner;
- dialect "java"
-
-import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScoreHolder;
-
-import org.kie.karaf.itest.planner.domain.CloudBalance;
-import org.kie.karaf.itest.planner.domain.CloudComputer;
-import org.kie.karaf.itest.planner.domain.CloudProcess;
-
-global HardSoftScoreHolder scoreHolder;
-
-// ############################################################################
-// Hard constraints
-// ############################################################################
-
-rule "requiredCpuPowerTotal"
- when
- $computer : CloudComputer($cpuPower : cpuPower)
- $requiredCpuPowerTotal : Number(intValue > $cpuPower) from accumulate(
- CloudProcess(
- computer == $computer,
- $requiredCpuPower : requiredCpuPower),
- sum($requiredCpuPower)
- )
- then
- scoreHolder.addHardConstraintMatch(kcontext, $cpuPower - $requiredCpuPowerTotal.intValue());
-end
-
-rule "requiredMemoryTotal"
- when
- $computer : CloudComputer($memory : memory)
- $requiredMemoryTotal : Number(intValue > $memory) from accumulate(
- CloudProcess(
- computer == $computer,
- $requiredMemory : requiredMemory),
- sum($requiredMemory)
- )
- then
- scoreHolder.addHardConstraintMatch(kcontext, $memory - $requiredMemoryTotal.intValue());
-end
-
-rule "requiredNetworkBandwidthTotal"
- when
- $computer : CloudComputer($networkBandwidth : networkBandwidth)
- $requiredNetworkBandwidthTotal : Number(intValue > $networkBandwidth) from accumulate(
- CloudProcess(
- computer == $computer,
- $requiredNetworkBandwidth : requiredNetworkBandwidth),
- sum($requiredNetworkBandwidth)
- )
- then
- scoreHolder.addHardConstraintMatch(kcontext, $networkBandwidth - $requiredNetworkBandwidthTotal.intValue());
-end
-
-// ############################################################################
-// Soft constraints
-// ############################################################################
-
-rule "computerCost"
- when
- $computer : CloudComputer($cost : cost)
- exists CloudProcess(computer == $computer)
- then
- scoreHolder.addSoftConstraintMatch(kcontext, - $cost);
-end
\ No newline at end of file
diff --git a/kie-plugins-testing/pom.xml b/kie-plugins-testing/pom.xml
index 36e2246588..4b77479cc3 100644
--- a/kie-plugins-testing/pom.xml
+++ b/kie-plugins-testing/pom.xml
@@ -259,11 +259,6 @@
drools-workbench-models-guided-scorecardruntime
-
- org.optaplanner
- optaplanner-core
- runtime
- org.kiekie-dmn-core
diff --git a/kie-server-parent/kie-server-api/pom.xml b/kie-server-parent/kie-server-api/pom.xml
index b9fa88a609..8691b308b8 100644
--- a/kie-server-parent/kie-server-api/pom.xml
+++ b/kie-server-parent/kie-server-api/pom.xml
@@ -61,18 +61,6 @@
org.droolsdrools-core
-
- org.optaplanner
- optaplanner-core
-
-
- org.optaplanner
- optaplanner-persistence-xstream
-
-
- org.optaplanner
- optaplanner-persistence-jaxb
-
diff --git a/kie-server-parent/kie-server-api/src/build/revapi-config.json b/kie-server-parent/kie-server-api/src/build/revapi-config.json
deleted file mode 100644
index 4b71f4b1cb..0000000000
--- a/kie-server-parent/kie-server-api/src/build/revapi-config.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "filters": {
- "revapi": {
- "java": {
- "filter": {
- "_comment": "We don't want to check transitive classes, e.g. from OptaPlanner, since we already check them in their own module.",
- "packages": {
- "regex": true,
- "include": [
- "org\\.kie\\.server\\.api.*"
- ],
- "exclude": [
- "org\\.kie\\.server\\.api\\.marshalling\\.json"
- ]
- }
- }
- }
- }
- },
- "ignores": {
- "revapi": {
- "_comment": "Changes between 7.67.0.Final and the current branch. These changes are desired and thus ignored.",
- "ignore": []
- }
- }
-}
diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/KieServerConstants.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/KieServerConstants.java
index ce2bf88373..8009d872e4 100644
--- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/KieServerConstants.java
+++ b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/KieServerConstants.java
@@ -30,15 +30,12 @@ public class KieServerConstants {
public static final String KIE_DROOLS_SERVER_EXT_DISABLED = "org.drools.server.ext.disabled";
public static final String KIE_JBPM_SERVER_EXT_DISABLED = "org.jbpm.server.ext.disabled";
public static final String KIE_JBPM_UI_SERVER_EXT_DISABLED = "org.jbpm.ui.server.ext.disabled";
- public static final String KIE_OPTAPLANNER_SERVER_EXT_DISABLED = "org.optaplanner.server.ext.disabled";
public static final String KIE_CASE_SERVER_EXT_DISABLED = "org.jbpm.case.server.ext.disabled";
public static final String KIE_DMN_SERVER_EXT_DISABLED = "org.kie.dmn.server.ext.disabled";
public static final String KIE_SWAGGER_SERVER_EXT_DISABLED = "org.kie.swagger.server.ext.disabled";
public static final String KIE_KAFKA_SERVER_EXT_DISABLED = "org.kie.kafka.server.ext.disabled";
public static final String KIE_PROMETHEUS_SERVER_EXT_DISABLED = "org.kie.prometheus.server.ext.disabled";
public static final String KIE_SCENARIO_SIMULATION_SERVER_EXT_DISABLED = "org.kie.scenariosimulation.server.ext.disabled";
- public static final String KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED = "org.kie.server.taskAssigning.planning.ext.disabled";
- public static final String KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED = "org.kie.server.taskAssigning.runtime.ext.disabled";
public static final String KIE_JBPM_CLUSTER_SERVER_EXT_DISABLED = "org.kie.jbpm.cluster.server.ext.disabled";
public static final String KIE_DROOLS_FILTER_REMOTEABLE_CLASSES = "org.drools.server.filter.classes";
@@ -130,8 +127,6 @@ public class KieServerConstants {
public static final String KIE_SERVER_ROUTER_ATTEMPT_INTERVAL = "org.kie.server.router.connect";
- public static final String KIE_OPTAPLANNER_THREAD_POOL_QUEUE_SIZE = "org.optaplanner.server.ext.thread.pool.queue.size";
-
// ProcessConfig configuration item constants
public static final String PCFG_RUNTIME_STRATEGY = "RuntimeStrategy";
public static final String PCFG_KIE_BASE = "KBase";
@@ -141,14 +136,12 @@ public class KieServerConstants {
public static final String CAPABILITY_BRM = "BRM"; // Business Rules Management
public static final String CAPABILITY_BPM = "BPM"; // Business Process Management
public static final String CAPABILITY_BPM_UI = "BPM-UI"; // Business Process Management UI
- public static final String CAPABILITY_BRP = "BRP"; // Business Resource Planning
public static final String CAPABILITY_CASE = "CaseMgmt"; // Case Management
public static final String CAPABILITY_DMN = "DMN"; // DMN
public static final String CAPABILITY_SWAGGER = "Swagger"; // Swagger
public static final String CAPABILITY_BPM_KAFKA = "BPM-KAFKA"; // Business Process Management Kafka
public static final String CAPABILITY_PROMETHEUS = "Prometheus"; // Prometheus
public static final String CAPABILITY_SCENARIO_SIMULATION = "Scenario Simulation"; // Scenario Simulation
- public static final String CAPABILITY_TASK_ASSIGNING_RUNTIME = "TaskAssigningRuntime"; //Task Assigning Runtime
public static final String CAPABILITY_JBPM_CLUSTER = "BPM-Cluster"; // Business Process Management cluster support
public static final String FAILURE_REASON_PROP = "failure-reason";
diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/CommandScript.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/CommandScript.java
index 773717be3d..4d9f918b58 100644
--- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/CommandScript.java
+++ b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/CommandScript.java
@@ -29,16 +29,6 @@
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.thoughtworks.xstream.annotations.XStreamAlias;
-import org.kie.server.api.commands.optaplanner.AddProblemFactChangeCommand;
-import org.kie.server.api.commands.optaplanner.AddProblemFactChangesCommand;
-import org.kie.server.api.commands.optaplanner.CreateSolverCommand;
-import org.kie.server.api.commands.optaplanner.DisposeSolverCommand;
-import org.kie.server.api.commands.optaplanner.GetSolverCommand;
-import org.kie.server.api.commands.optaplanner.GetSolverWithBestSolutionCommand;
-import org.kie.server.api.commands.optaplanner.GetSolversCommand;
-import org.kie.server.api.commands.optaplanner.IsEveryProblemFactChangeProcessedCommand;
-import org.kie.server.api.commands.optaplanner.SolvePlanningProblemCommand;
-import org.kie.server.api.commands.optaplanner.TerminateSolverEarlyCommand;
import org.kie.server.api.model.KieServerCommand;
import org.kie.server.api.model.KieServerConfig;
import org.kie.server.api.model.KieServerConfigItem;
@@ -70,18 +60,6 @@ public class CommandScript implements Serializable {
// TODO can this be added somewhere else? if not here JAXRS cannot deserialize content
@XmlElement(name = "kie-server-config", type = KieServerConfig.class),
@XmlElement(name = "kie-server-config-item", type = KieServerConfigItem.class),
-
- // optaplanner commands
- @XmlElement(name = "create-solver", type = CreateSolverCommand.class),
- @XmlElement(name = "dispose-solver", type = DisposeSolverCommand.class),
- @XmlElement(name = "get-solver-with-best-solution", type = GetSolverWithBestSolutionCommand.class),
- @XmlElement(name = "get-solvers", type = GetSolversCommand.class),
- @XmlElement(name = "get-solver", type = GetSolverCommand.class),
- @XmlElement(name = "start-solver", type = SolvePlanningProblemCommand.class),
- @XmlElement(name = "terminate-solver", type = TerminateSolverEarlyCommand.class),
- @XmlElement(name = "add-problem-fact-change", type = AddProblemFactChangeCommand.class),
- @XmlElement(name = "add-problem-fact-changes", type = AddProblemFactChangesCommand.class),
- @XmlElement(name = "is-every-problem-fact-change-processed", type = IsEveryProblemFactChangeProcessedCommand.class)
})
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
protected List commands;
diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/AddProblemFactChangeCommand.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/AddProblemFactChangeCommand.java
deleted file mode 100644
index 33a5c04d26..0000000000
--- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/AddProblemFactChangeCommand.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2017 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.api.commands.optaplanner;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import org.kie.server.api.model.KieServerCommand;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-@XmlRootElement(name = "add-problem-fact-change")
-@XStreamAlias("add-problem-fact-change")
-@XmlAccessorType(XmlAccessType.NONE)
-public class AddProblemFactChangeCommand
- implements KieServerCommand {
-
- private static final long serialVersionUID = -1803374525440238478L;
-
- @XmlAttribute(name = "container-id")
- @XStreamAlias("container-id")
- private String containerId;
-
- @XmlAttribute(name = "solver-id")
- @XStreamAlias("solver-id")
- private String solverId;
-
- @XmlElement
- @XStreamAlias("problem-fact-change")
- // It's not possible to use ProblemFactChange type here due to JAXB marshaller limitations
- private Object problemFactChange;
-
- public AddProblemFactChangeCommand() {
- }
-
- public AddProblemFactChangeCommand(String containerId,
- String solverId,
- ProblemFactChange problemFactChange) {
- this.containerId = containerId;
- this.solverId = solverId;
- this.problemFactChange = problemFactChange;
- }
-
- public String getContainerId() {
- return containerId;
- }
-
- public void setContainerId(String containerId) {
- this.containerId = containerId;
- }
-
- public String getSolverId() {
- return solverId;
- }
-
- public void setSolverId(String solverId) {
- this.solverId = solverId;
- }
-
- public ProblemFactChange getProblemFactChange() {
- return (ProblemFactChange) problemFactChange;
- }
-
- public void setProblemFactChange(ProblemFactChange problemFactChange) {
- this.problemFactChange = problemFactChange;
- }
-
- @Override
- public String toString() {
- return "AddProblemFactChangeCommand{" +
- "containerId='" + containerId + '\'' +
- ", solverId='" + solverId + '\'' +
- ", problemFactChange='" + problemFactChange + '\'' +
- '}';
- }
-}
diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/AddProblemFactChangesCommand.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/AddProblemFactChangesCommand.java
deleted file mode 100644
index 0781c4ac35..0000000000
--- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/AddProblemFactChangesCommand.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2017 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.api.commands.optaplanner;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import org.kie.server.api.model.KieServerCommand;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-@XmlRootElement(name = "add-problem-fact-changes")
-@XStreamAlias("add-problem-fact-changes")
-@XmlAccessorType(XmlAccessType.NONE)
-public class AddProblemFactChangesCommand
- implements KieServerCommand {
-
- private static final long serialVersionUID = -1803374525440238478L;
-
- @XmlAttribute(name = "container-id")
- @XStreamAlias("container-id")
- private String containerId;
-
- @XmlAttribute(name = "solver-id")
- @XStreamAlias("solver-id")
- private String solverId;
-
- public AddProblemFactChangesCommand() {
- }
-
- @XmlElement
- @XStreamAlias("problem-fact-changes")
- // It's not possible to use ProblemFactChange list type here due to JAXB marshaller limitations
- private List
-
- org.optaplanner
- optaplanner-core
- org.droolsdrools-core
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/build/revapi-config.json b/kie-server-parent/kie-server-remote/kie-server-client/src/build/revapi-config.json
index 3c3d9ede1a..08907b6026 100644
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/build/revapi-config.json
+++ b/kie-server-parent/kie-server-remote/kie-server-client/src/build/revapi-config.json
@@ -29,7 +29,6 @@
"org.kie.server.client.helper.DroolsServicesClientBuilder",
"org.kie.server.client.helper.JBPMServicesClientBuilder",
"org.kie.server.client.helper.JBPMUIServicesClientBuilder",
- "org.kie.server.client.helper.OptaplannerServicesClientBuilder",
"org.kie.server.client.KieServicesException",
"org.kie.server.client.KieServicesFactory"
]
@@ -60,8 +59,56 @@
"methodName": "countProcessInstancesByContainerId",
"elementKind": "method",
"justification": "[RHPAM-4028] Allow count process instances by ContainerId and Status"
+ },
+ {
+ "code": "java.class.removed",
+ "old": "interface org.kie.server.client.SolverServicesClient",
+ "package": "org.kie.server.client",
+ "classSimpleName": "SolverServicesClient",
+ "elementKind": "interface",
+ "justification": "OptaPlanner extension removed."
+ },
+ {
+ "code": "java.class.removed",
+ "old": "interface org.kie.server.client.TaskAssigningRuntimeClient",
+ "package": "org.kie.server.client",
+ "classSimpleName": "TaskAssigningRuntimeClient",
+ "elementKind": "interface",
+ "justification": "Task Assigning extension removed."
+ },
+ {
+ "code": "java.class.removed",
+ "old": "class org.kie.server.client.TaskAssigningRuntimeClientFactory",
+ "package": "org.kie.server.client",
+ "classSimpleName": "TaskAssigningRuntimeClientFactory",
+ "elementKind": "class",
+ "justification": "Task Assigning extension removed."
+ },
+ {
+ "code": "java.class.removed",
+ "old": "class org.kie.server.client.helper.OptaplannerServicesClientBuilder",
+ "package": "org.kie.server.client.helper",
+ "classSimpleName": "OptaplannerServicesClientBuilder",
+ "elementKind": "class",
+ "justification": "OptaPlanner extension removed."
+ },
+ {
+ "code": "java.class.removed",
+ "old": "class org.kie.server.client.helper.TaskAssigningRuntimeServicesClientBuilder",
+ "package": "org.kie.server.client.helper",
+ "classSimpleName": "TaskAssigningRuntimeServicesClientBuilder",
+ "elementKind": "class",
+ "justification": "Task Assigning extension removed."
+ },
+ {
+ "code": "java.class.removed",
+ "old": "class org.kie.server.client.util.TaskDataReader",
+ "package": "org.kie.server.client.util",
+ "classSimpleName": "TaskDataReader",
+ "elementKind": "class",
+ "justification": "Task Assigning extension removed."
}
- ]
+ ]
}
}
}
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/SolverServicesClient.java b/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/SolverServicesClient.java
deleted file mode 100644
index b352c5349c..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/SolverServicesClient.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2015 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * 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.kie.server.client;
-
-import java.util.List;
-
-import org.kie.server.api.model.instance.SolverInstance;
-import org.kie.server.client.jms.ResponseHandler;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-public interface SolverServicesClient {
-
- SolverInstance createSolver(String containerId,
- String solverId,
- String configFile);
-
- List getSolvers(String containerId);
-
- SolverInstance getSolver(String containerId,
- String solverId);
-
- SolverInstance getSolverWithBestSolution(String containerId,
- String solverId);
-
- void solvePlanningProblem(String containerId,
- String solverId,
- Object planningProblem);
-
- void terminateSolverEarly(String containerId,
- String solverId);
-
- void addProblemFactChange(String containerId,
- String solverId,
- ProblemFactChange problemFactChange);
-
- void addProblemFactChanges(String containerId,
- String solverId,
- List problemFactChange);
-
- Boolean isEveryProblemFactChangeProcessed(String containerId,
- String solverId);
-
- void disposeSolver(String containerId,
- String solverId);
-
- void setResponseHandler(ResponseHandler responseHandler);
-}
-
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/TaskAssigningRuntimeClient.java b/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/TaskAssigningRuntimeClient.java
deleted file mode 100644
index 5d83f0a4e5..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/TaskAssigningRuntimeClient.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.client;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-import org.kie.server.api.model.taskassigning.PlanningExecutionResult;
-import org.kie.server.api.model.taskassigning.PlanningItemList;
-import org.kie.server.api.model.taskassigning.TaskDataList;
-import org.kie.server.api.model.taskassigning.TaskInputVariablesReadMode;
-
-public interface TaskAssigningRuntimeClient {
-
- PlanningExecutionResult executePlanning(PlanningItemList planningItemList, String userId);
-
- /**
- * Executes a parametrized query over the jBPM tasks. This method is intended for the tasks assigning integration
- * implementation internal use. Third parties interested in consuming the information type returned by this method
- * should use the simplified variant of this of this method {@link #findTasks(Long, List, LocalDateTime, Integer, Integer)}
- * or any other of the jBPM runtime client/queries methods, etc.
- *
- * @param fromTaskId filters the tasks with taskId >= fromTaskId. If null no filtering is applied.
- * @param status filters the tasks that are in one of the following status. If null or the empty list no filtering
- * is applied.
- * @param fromLastModificationDate filters the tasks with lastModificationDate >= fromLastModificationDate. If null
- * no filtering is applied.
- * @param page sets the starting page for the paged reading.
- * @param pageSize sets the pageSize for the paged reading.
- * @param taskInputVariablesReadMode establishes the tasks input variables reading mode.
- * @return a list of TaskData with the jBPM tasks that met the filtering conditions. The potential owners of the task
- * are always loaded but there's no warranty that the potential owners of the last consumed task fits the page/pageSize
- * configuration. The task inputs data is loaded accordingly with the selected taskInputVariablesReadMode.
- * @see TaskInputVariablesReadMode
- */
- TaskDataList findTasks(Long fromTaskId, List status, LocalDateTime fromLastModificationDate,
- Integer page, Integer pageSize,
- TaskInputVariablesReadMode taskInputVariablesReadMode);
-
- /**
- * Executes a parametrized query over the jBPM tasks. This method is intended for the tasks assigning integration
- * implementation. Third parties that might use this method must be aware that no task inputs data is loaded. If this
- * information is needed the standard jBPM runtime client/queries must be used instead.
- *
- * @param fromTaskId filters the tasks with taskId >= fromTaskId. If null no filtering is applied.
- * @param status filters the tasks that are in one of the following status. If null or the empty list no filtering
- * is applied.
- * @param fromLastModificationDate filters the tasks with lastModificationDate >= fromLastModificationDate. If null
- * no filtering is applied.
- * @param page sets the starting page for the paged reading.
- * @param pageSize sets the pageSize for the paged reading.
- * @return a list of TaskData with the jBPM tasks that met the filtering conditions. The potential owners of the task
- * is always loaded but there's no warranty that the potential owners of the last consumed taks fits the page/pageSize
- * configuration. NO task inputs data is loaded by this method.
- * @see TaskInputVariablesReadMode
- */
- TaskDataList findTasks(Long fromTaskId, List status, LocalDateTime fromLastModificationDate,
- Integer page, Integer pageSize);
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/TaskAssigningRuntimeClientFactory.java b/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/TaskAssigningRuntimeClientFactory.java
deleted file mode 100644
index 9464c7b91d..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/TaskAssigningRuntimeClientFactory.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.client;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.kie.server.api.marshalling.MarshallingFormat;
-import org.kie.server.api.model.taskassigning.LocalDateTimeValue;
-
-import static org.kie.server.api.KieServerConstants.CAPABILITY_BPM;
-import static org.kie.server.api.KieServerConstants.CAPABILITY_TASK_ASSIGNING_RUNTIME;
-import static org.kie.server.api.KieServerConstants.CFG_BYPASS_AUTH_USER;
-
-public class TaskAssigningRuntimeClientFactory {
-
- static {
- // Ensure user bypass is on to be able to e.g. let the client "admin" user to claim/delegate tasks on behalf
- // of other users
- System.setProperty(CFG_BYPASS_AUTH_USER, Boolean.TRUE.toString());
- }
-
- private TaskAssigningRuntimeClientFactory() {
- }
-
- static KieServicesClient createKieServicesClient(final String endpoint,
- final String login,
- final String password,
- final long timeout) {
-
- final KieServicesConfiguration configuration = KieServicesFactory.newRestConfiguration(endpoint, login, password);
- configuration.setTimeout(timeout);
- configuration.setCapabilities(Arrays.asList(CAPABILITY_BPM, CAPABILITY_TASK_ASSIGNING_RUNTIME));
- configuration.setMarshallingFormat(MarshallingFormat.XSTREAM);
- Set> extraClasses = new HashSet<>();
- //JAXB and JSON required.
- extraClasses.add(LocalDateTimeValue.class);
- configuration.setExtraClasses(extraClasses);
- return KieServicesFactory.newKieServicesClient(configuration);
- }
-
- public static TaskAssigningRuntimeClient newRuntimeClient(final String endpoint,
- final String login,
- final String password,
- final long timeout) {
- KieServicesClient servicesClient = createKieServicesClient(endpoint, login, password, timeout);
- return servicesClient.getServicesClient(TaskAssigningRuntimeClient.class);
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/helper/OptaplannerServicesClientBuilder.java b/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/helper/OptaplannerServicesClientBuilder.java
deleted file mode 100644
index d9bf80dead..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/helper/OptaplannerServicesClientBuilder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2015 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * 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.kie.server.client.helper;
-
-import org.kie.server.api.KieServerConstants;
-import org.kie.server.client.KieServicesConfiguration;
-import org.kie.server.client.RuleServicesClient;
-import org.kie.server.client.SolverServicesClient;
-import org.kie.server.client.impl.RuleServicesClientImpl;
-import org.kie.server.client.impl.SolverServicesClientImpl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class OptaplannerServicesClientBuilder
- implements KieServicesClientBuilder {
-
- @Override
- public String getImplementedCapability() {
- return KieServerConstants.CAPABILITY_BRP;
- }
-
- @Override
- public Map, Object> build(KieServicesConfiguration configuration, ClassLoader classLoader) {
- Map, Object> services = new HashMap, Object>();
-
- services.put(SolverServicesClient.class, new SolverServicesClientImpl(configuration, classLoader));
-
- return services;
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/helper/TaskAssigningRuntimeServicesClientBuilder.java b/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/helper/TaskAssigningRuntimeServicesClientBuilder.java
deleted file mode 100644
index 4805fde0d5..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/helper/TaskAssigningRuntimeServicesClientBuilder.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.client.helper;
-
-import java.util.Collections;
-import java.util.Map;
-
-import org.kie.server.client.KieServicesConfiguration;
-import org.kie.server.client.TaskAssigningRuntimeClient;
-import org.kie.server.client.impl.TaskAssigningRuntimeClientImpl;
-
-import static org.kie.server.api.KieServerConstants.CAPABILITY_TASK_ASSIGNING_RUNTIME;
-
-public class TaskAssigningRuntimeServicesClientBuilder implements KieServicesClientBuilder {
-
- @Override
- public String getImplementedCapability() {
- return CAPABILITY_TASK_ASSIGNING_RUNTIME;
- }
-
- @Override
- public Map, Object> build(KieServicesConfiguration configuration, ClassLoader classLoader) {
- return Collections.singletonMap(TaskAssigningRuntimeClient.class,
- new TaskAssigningRuntimeClientImpl(configuration, classLoader));
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/impl/SolverServicesClientImpl.java b/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/impl/SolverServicesClientImpl.java
deleted file mode 100644
index 07f9aba3fd..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/impl/SolverServicesClientImpl.java
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Copyright 2015 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * 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.kie.server.client.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.kie.server.api.KieServerConstants;
-import org.kie.server.api.commands.CommandScript;
-import org.kie.server.api.commands.optaplanner.AddProblemFactChangeCommand;
-import org.kie.server.api.commands.optaplanner.AddProblemFactChangesCommand;
-import org.kie.server.api.commands.optaplanner.CreateSolverCommand;
-import org.kie.server.api.commands.optaplanner.DisposeSolverCommand;
-import org.kie.server.api.commands.optaplanner.IsEveryProblemFactChangeProcessedCommand;
-import org.kie.server.api.commands.optaplanner.GetSolverCommand;
-import org.kie.server.api.commands.optaplanner.GetSolverWithBestSolutionCommand;
-import org.kie.server.api.commands.optaplanner.GetSolversCommand;
-import org.kie.server.api.commands.optaplanner.SolvePlanningProblemCommand;
-import org.kie.server.api.commands.optaplanner.TerminateSolverEarlyCommand;
-import org.kie.server.api.exception.KieServicesException;
-import org.kie.server.api.model.ServiceResponse;
-import org.kie.server.api.model.instance.SolverInstance;
-import org.kie.server.api.model.instance.SolverInstanceList;
-import org.kie.server.api.model.type.JaxbBoolean;
-import org.kie.server.api.rest.RestURI;
-import org.kie.server.client.KieServicesConfiguration;
-import org.kie.server.client.SolverServicesClient;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-public class SolverServicesClientImpl
- extends AbstractKieServicesClientImpl
- implements SolverServicesClient {
-
- public SolverServicesClientImpl(KieServicesConfiguration config) {
- super(config);
- }
-
- public SolverServicesClientImpl(KieServicesConfiguration config,
- ClassLoader classLoader) {
- super(config,
- classLoader);
- }
-
- @Override
- public List getSolvers(String containerId) {
- checkMandatoryParameter("ContainerID",
- containerId);
-
- final SolverInstanceList solverInstanceList;
- if (config.isRest()) {
- String uri = getURI(containerId);
- solverInstanceList = makeHttpGetRequestAndCreateCustomResponse(uri,
- SolverInstanceList.class);
- } else {
- CommandScript script = new CommandScript(Collections.singletonList(new GetSolversCommand(containerId)));
- ServiceResponse response = (ServiceResponse) executeJmsCommand(script,
- GetSolversCommand.class.getName(),
- KieServerConstants.CAPABILITY_BRP,
- containerId).getResponses().get(0);
- throwExceptionOnFailure(response);
- if (shouldReturnWithNullResponse(response)) {
- return null;
- }
- solverInstanceList = response.getResult();
- }
- if (solverInstanceList != null && solverInstanceList.getContainers() != null) {
- return new ArrayList<>(solverInstanceList.getContainers());
- }
-
- return Collections.emptyList();
- }
-
- @Override
- public SolverInstance createSolver(String containerId,
- String solverId,
- String configFile) {
- checkMandatoryParameter("ContainerId",
- containerId);
- checkMandatoryParameter("SolverId",
- solverId);
- checkMandatoryParameter("ConfigFile",
- configFile);
- if (config.isRest()) {
- String uri = getURI(containerId,
- solverId);
-
- SolverInstance instance = new SolverInstance();
- instance.setSolverConfigFile(configFile);
- instance.setContainerId(containerId);
- instance.setSolverId(solverId);
-
- return makeHttpPutRequestAndCreateCustomResponse(uri,
- instance,
- SolverInstance.class,
- Collections.emptyMap());
- } else {
- CommandScript script = new CommandScript(Collections.singletonList(new CreateSolverCommand(containerId,
- solverId,
- configFile)));
- ServiceResponse response = (ServiceResponse) executeJmsCommand(script,
- CreateSolverCommand.class.getName(),
- KieServerConstants.CAPABILITY_BRP,
- containerId).getResponses().get(0);
- throwExceptionOnFailure(response);
- if (shouldReturnWithNullResponse(response)) {
- return null;
- }
- return response.getResult();
- }
- }
-
- @Override
- public SolverInstance getSolver(String containerId,
- String solverId) {
- checkMandatoryParameter("ContainerID",
- containerId);
- checkMandatoryParameter("SolverId",
- solverId);
- if (config.isRest()) {
- String uri = getURI(containerId,
- solverId);
- return makeHttpGetRequestAndCreateCustomResponse(uri,
- SolverInstance.class);
- } else {
- CommandScript script = new CommandScript(Collections.singletonList(new GetSolverCommand(containerId,
- solverId)));
- ServiceResponse response = (ServiceResponse) executeJmsCommand(script,
- GetSolverCommand.class.getName(),
- KieServerConstants.CAPABILITY_BRP,
- containerId).getResponses().get(0);
-
- throwExceptionOnFailure(response);
- if (shouldReturnWithNullResponse(response)) {
- return null;
- }
- return response.getResult();
- }
- }
-
- @Override
- public SolverInstance getSolverWithBestSolution(String containerId,
- String solverId) {
- checkMandatoryParameter("ContainerID",
- containerId);
- checkMandatoryParameter("SolverId",
- solverId);
- if (config.isRest()) {
- String uri = getURI(containerId,
- solverId) + "/" + RestURI.SOLVER_BEST_SOLUTION;
- return makeHttpGetRequestAndCreateCustomResponse(uri,
- SolverInstance.class);
- } else {
- CommandScript script = new CommandScript(Collections.singletonList(new GetSolverWithBestSolutionCommand(containerId,
- solverId)));
- ServiceResponse response = (ServiceResponse) executeJmsCommand(script,
- GetSolverWithBestSolutionCommand.class.getName(),
- KieServerConstants.CAPABILITY_BRP,
- containerId).getResponses().get(0);
-
- throwExceptionOnFailure(response);
- if (shouldReturnWithNullResponse(response)) {
- return null;
- }
- return response.getResult();
- }
- }
-
- @Override
- public void solvePlanningProblem(String containerId,
- String solverId,
- Object planningProblem) {
- checkMandatoryParameter("ContainerID",
- containerId);
- checkMandatoryParameter("SolverId",
- solverId);
- checkMandatoryParameter("planningSolution",
- planningProblem);
-
- if (config.isRest()) {
- String uri = getURI(containerId,
- solverId) + "/" + RestURI.SOLVER_STATE_RUNNING;
- makeHttpPostRequestAndCreateCustomResponse(uri,
- planningProblem,
- ServiceResponse.class,
- getHeaders(planningProblem));
- } else {
- CommandScript script = new CommandScript(Collections.singletonList(new SolvePlanningProblemCommand(containerId,
- solverId,
- serialize(planningProblem))));
- ServiceResponse response = (ServiceResponse) executeJmsCommand(script,
- SolvePlanningProblemCommand.class.getName(),
- KieServerConstants.CAPABILITY_BRP,
- containerId).getResponses().get(0);
- throwExceptionOnFailure(response);
- }
- }
-
- @Override
- public void terminateSolverEarly(String containerId,
- String solverId) {
- checkMandatoryParameter("ContainerID",
- containerId);
- checkMandatoryParameter("SolverId",
- solverId);
-
- if (config.isRest()) {
-
- String uri = getURI(containerId,
- solverId) + "/" + RestURI.SOLVER_STATE_TERMINATING;
-
- makeHttpPostRequestAndCreateCustomResponse(uri,
- "",
- ServiceResponse.class);
- } else {
- CommandScript script = new CommandScript(Collections.singletonList(new TerminateSolverEarlyCommand(containerId,
- solverId)));
- ServiceResponse response = (ServiceResponse) executeJmsCommand(script,
- TerminateSolverEarlyCommand.class.getName(),
- KieServerConstants.CAPABILITY_BRP,
- containerId).getResponses().get(0);
- throwExceptionOnFailure(response);
- }
- }
-
- @Override
- public void addProblemFactChange(String containerId,
- String solverId,
- ProblemFactChange problemFactChange) {
- checkMandatoryParameter("containerId",
- containerId);
- checkMandatoryParameter("solverId",
- solverId);
- checkMandatoryParameter("problemFactChange",
- problemFactChange);
-
- if (config.isRest()) {
- String uri = getURI(containerId,
- solverId) + "/" + RestURI.SOLVER_PROBLEM_FACT_CHANGES;
- makeHttpPostRequestAndCreateCustomResponse(uri,
- problemFactChange,
- ServiceResponse.class,
- getHeaders(problemFactChange));
- } else {
- CommandScript script = new CommandScript(Collections.singletonList(new AddProblemFactChangeCommand(containerId,
- solverId,
- problemFactChange)));
- ServiceResponse response = (ServiceResponse) executeJmsCommand(script,
- AddProblemFactChangeCommand.class.getName(),
- KieServerConstants.CAPABILITY_BRP,
- containerId).getResponses().get(0);
- throwExceptionOnFailure(response);
- }
- }
-
- @Override
- public void addProblemFactChanges(String containerId,
- String solverId,
- List problemFactChanges) {
- checkMandatoryParameter("containerId",
- containerId);
- checkMandatoryParameter("solverId",
- solverId);
- checkMandatoryParameter("problemFactChange",
- problemFactChanges);
-
- if (config.isRest()) {
- String uri = getURI(containerId,
- solverId) + "/" + RestURI.SOLVER_PROBLEM_FACT_CHANGES;
- makeHttpPostRequestAndCreateCustomResponse(uri,
- problemFactChanges,
- ServiceResponse.class,
- getHeaders(problemFactChanges));
- } else {
- CommandScript script = new CommandScript(Collections.singletonList(new AddProblemFactChangesCommand(containerId,
- solverId,
- problemFactChanges)));
- ServiceResponse response = (ServiceResponse) executeJmsCommand(script,
- AddProblemFactChangeCommand.class.getName(),
- KieServerConstants.CAPABILITY_BRP,
- containerId).getResponses().get(0);
- throwExceptionOnFailure(response);
- }
- }
-
- @Override
- public Boolean isEveryProblemFactChangeProcessed(String containerId,
- String solverId) {
- checkMandatoryParameter("ContainerID",
- containerId);
- checkMandatoryParameter("SolverId",
- solverId);
-
- Object result = null;
- if (config.isRest()) {
- String uri = getURI(containerId,
- solverId) + "/" + RestURI.SOLVER_PROBLEM_FACTS_CHANGES_PROCESSED;
-
- result = makeHttpGetRequestAndCreateCustomResponse(uri,
- Object.class);
- } else {
- CommandScript script = new CommandScript(Collections.singletonList(new IsEveryProblemFactChangeProcessedCommand(containerId,
- solverId)));
- ServiceResponse response = (ServiceResponse) executeJmsCommand(script,
- IsEveryProblemFactChangeProcessedCommand.class.getName(),
- KieServerConstants.CAPABILITY_BRP,
- containerId).getResponses().get(0);
- throwExceptionOnFailure(response);
- if (shouldReturnWithNullResponse(response)) {
- return null;
- }
- result = response.getResult();
- }
-
- if (result instanceof JaxbBoolean) {
- return ((JaxbBoolean) result).unwrap();
- }
- return (Boolean) result;
- }
-
- @Override
- public void disposeSolver(String containerId,
- String solverId) {
- checkMandatoryParameter("ContainerID",
- containerId);
- checkMandatoryParameter("SolverId",
- solverId);
- if (config.isRest()) {
- String uri = getURI(containerId,
- solverId);
- makeHttpDeleteRequestAndCreateCustomResponse(uri,
- ServiceResponse.class);
- } else {
- CommandScript script = new CommandScript(Collections.singletonList(new DisposeSolverCommand(containerId,
- solverId)));
- ServiceResponse response = (ServiceResponse) executeJmsCommand(script,
- DisposeSolverCommand.class.getName(),
- KieServerConstants.CAPABILITY_BRP,
- containerId).getResponses().get(0);
- throwExceptionOnFailure(response);
- }
- }
-
- private String getURI(String containerId) {
- return (loadBalancer.getUrl() + "/" + RestURI.SOLVER_URI).replace("{" + RestURI.CONTAINER_ID + "}",
- containerId);
- }
-
- private String getURI(String containerId,
- String solverId) {
- return (loadBalancer.getUrl() + "/" + RestURI.SOLVER_URI + "/" + RestURI.SOLVER_ID_URI).replace("{" + RestURI.CONTAINER_ID + "}",
- containerId).replace("{" + RestURI.SOLVER_ID + "}",
- solverId);
- }
-
- private void checkMandatoryParameter(String parameterName,
- Object parameter) {
- if (parameter == null || ((parameter instanceof String) && ((String) parameter).isEmpty())) {
- throw new IllegalArgumentException(parameterName + " can not be null or empty.");
- }
- }
-
- protected void throwExceptionOnFailure(ServiceResponse> serviceResponse) {
- if (serviceResponse != null && ServiceResponse.ResponseType.FAILURE.equals(serviceResponse.getType())) {
- throw new KieServicesException(serviceResponse.getMsg());
- }
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/impl/TaskAssigningRuntimeClientImpl.java b/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/impl/TaskAssigningRuntimeClientImpl.java
deleted file mode 100644
index 4d2c5002ba..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/impl/TaskAssigningRuntimeClientImpl.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.client.impl;
-
-import java.time.LocalDateTime;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.kie.server.api.exception.KieServicesException;
-import org.kie.server.api.model.taskassigning.PlanningExecutionResult;
-import org.kie.server.api.model.taskassigning.LocalDateTimeValue;
-import org.kie.server.api.model.taskassigning.PlanningItemList;
-import org.kie.server.api.model.taskassigning.TaskDataList;
-import org.kie.server.api.model.taskassigning.TaskInputVariablesReadMode;
-import org.kie.server.api.rest.RestURI;
-import org.kie.server.client.KieServicesConfiguration;
-import org.kie.server.client.TaskAssigningRuntimeClient;
-
-import static org.kie.server.api.model.taskassigning.QueryParamName.FROM_LAST_MODIFICATION_DATE;
-import static org.kie.server.api.model.taskassigning.QueryParamName.FROM_TASK_ID;
-import static org.kie.server.api.model.taskassigning.QueryParamName.PAGE;
-import static org.kie.server.api.model.taskassigning.QueryParamName.PAGE_SIZE;
-import static org.kie.server.api.model.taskassigning.QueryParamName.STATUS;
-import static org.kie.server.api.model.taskassigning.QueryParamName.TASK_INPUT_VARIABLES_MODE;
-import static org.kie.server.api.model.taskassigning.TaskAssigningRestURI.TASK_ASSIGNING_EXECUTE_PLANNING_URI;
-import static org.kie.server.api.model.taskassigning.TaskAssigningRestURI.TASK_ASSIGNING_QUERIES_TASK_DATA_URI;
-import static org.kie.server.api.model.taskassigning.TaskAssigningRestURI.TASK_ASSIGNING_RUNTIME_URI;
-
-public class TaskAssigningRuntimeClientImpl extends AbstractKieServicesClientImpl implements TaskAssigningRuntimeClient {
-
- public TaskAssigningRuntimeClientImpl(KieServicesConfiguration config) {
- super(config);
- }
-
- public TaskAssigningRuntimeClientImpl(KieServicesConfiguration config, ClassLoader classLoader) {
- super(config, classLoader);
- }
-
- @Override
- public PlanningExecutionResult executePlanning(PlanningItemList planningItemList, String userId) {
- if (config.isRest()) {
- final String uri = TASK_ASSIGNING_RUNTIME_URI + "/" + TASK_ASSIGNING_EXECUTE_PLANNING_URI + "?user=" + userId;
- return makeHttpPostRequestAndCreateCustomResponse(RestURI.build(loadBalancer.getUrl(),
- uri,
- Collections.emptyMap()),
- planningItemList,
- PlanningExecutionResult.class);
- } else {
- throw new KieServicesException("JMS protocol is not implemented for this service.");
- }
- }
-
- @Override
- public TaskDataList findTasks(Long fromTaskId, List status, LocalDateTime fromLastModificationDate,
- Integer page, Integer pageSize,
- TaskInputVariablesReadMode inputVariablesReadMode) {
- final Map params = TaskQueryParamsBuilder.builder()
- .fromTaskId(fromTaskId)
- .status(status)
- .fromLastModificationDate(fromLastModificationDate)
- .page(page)
- .pageSize(pageSize)
- .taskInputVariablesReadMode(inputVariablesReadMode)
- .build();
- return executeFindTasksQuery(params);
- }
-
- @Override
- public TaskDataList findTasks(Long fromTaskId, List status, LocalDateTime fromLastModificationDate,
- Integer page, Integer pageSize) {
- return findTasks(fromTaskId, status, fromLastModificationDate, page, pageSize, TaskInputVariablesReadMode.DONT_READ);
- }
-
- private TaskDataList executeFindTasksQuery(Map params) {
- if (config.isRest()) {
- final String uri = TASK_ASSIGNING_RUNTIME_URI + "/" + TASK_ASSIGNING_QUERIES_TASK_DATA_URI;
- return makeHttpPostRequestAndCreateCustomResponse(RestURI.build(loadBalancer.getUrl(),
- uri,
- Collections.emptyMap()),
- params,
- TaskDataList.class);
- } else {
- throw new KieServicesException("JMS protocol is not implemented for this service.");
- }
- }
-
- // intended for facilitating testing.
- public KieServicesConfiguration getConfig() {
- return super.config;
- }
-
- static class TaskQueryParamsBuilder {
-
- private Map params = new HashMap<>();
-
- private TaskQueryParamsBuilder() {
- }
-
- public static TaskQueryParamsBuilder builder() {
- return new TaskQueryParamsBuilder();
- }
-
- public TaskQueryParamsBuilder fromTaskId(Long taskId) {
- params.put(FROM_TASK_ID, taskId);
- return this;
- }
-
- public TaskQueryParamsBuilder status(List status) {
- params.put(STATUS, status);
- return this;
- }
-
- public TaskQueryParamsBuilder fromLastModificationDate(LocalDateTime lastModificationDate) {
- params.put(FROM_LAST_MODIFICATION_DATE, LocalDateTimeValue.from(lastModificationDate));
- return this;
- }
-
- public TaskQueryParamsBuilder page(Integer page) {
- params.put(PAGE, page);
- return this;
- }
-
- public TaskQueryParamsBuilder pageSize(Integer pageSize) {
- params.put(PAGE_SIZE, pageSize);
- return this;
- }
-
- public TaskQueryParamsBuilder taskInputVariablesReadMode(TaskInputVariablesReadMode inputVariablesReadMode) {
- if (inputVariablesReadMode != null) {
- params.put(TASK_INPUT_VARIABLES_MODE, inputVariablesReadMode.name());
- }
- return this;
- }
-
- public Map build() {
- return params;
- }
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/util/TaskDataReader.java b/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/util/TaskDataReader.java
deleted file mode 100644
index c3bc21c4a7..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/main/java/org/kie/server/client/util/TaskDataReader.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.client.util;
-
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.kie.server.api.model.taskassigning.TaskData;
-import org.kie.server.api.model.taskassigning.TaskDataList;
-import org.kie.server.api.model.taskassigning.TaskInputVariablesReadMode;
-import org.kie.server.client.TaskAssigningRuntimeClient;
-
-/**
- * Helper class for reading all the elements returned by the {@link TaskAssigningRuntimeClient#findTasks} methods.
- * This class manages the required pagination for getting all the results.
- */
-public class TaskDataReader {
-
- private TaskAssigningRuntimeClient runtimeClient;
-
- private TaskDataReader(TaskAssigningRuntimeClient runtimeClient) {
- this.runtimeClient = runtimeClient;
- }
-
- public static class Result {
-
- private LocalDateTime queryTime;
-
- private List tasks;
-
- private Result(LocalDateTime queryTime, List tasks) {
- this.queryTime = queryTime;
- this.tasks = tasks;
- }
-
- public LocalDateTime getQueryTime() {
- return queryTime;
- }
-
- public List getTasks() {
- return tasks;
- }
- }
-
- public static TaskDataReader from(TaskAssigningRuntimeClient runtimeClient) {
- return new TaskDataReader(runtimeClient);
- }
-
- /**
- * Executes the {@link TaskAssigningRuntimeClient#findTasks(Long, List, LocalDateTime, Integer, Integer, TaskInputVariablesReadMode)}
- * method and return all the results. The paging reading is managed internally by this method.
- *
- * @param fromTaskId filters the tasks with taskId >= fromTaskId. If null no filtering is applied.
- * @param status filters the tasks that are in one of the following status. If null or the empty list no filtering
- * is applied.
- * @param fromLastModificationDate filters the tasks with lastModificationDate >= fromLastModificationDate. If null
- * no filtering is applied.
- * @param pageSize sets the pageSize for the paged reading.
- * @param taskInputVariablesReadMode establishes the tasks input variables reading mode.
- * @return a list of TaskData with the jBPM tasks that met the filtering conditions. The potential owners of the task
- * is properly loaded with all the elements. The task inputs data is loaded accordingly with the selected taskInputVariablesReadMode.
- * @see TaskInputVariablesReadMode
- */
- public Result readTasks(long fromTaskId, List status, LocalDateTime fromLastModificationDate,
- int pageSize, TaskInputVariablesReadMode taskInputVariablesReadMode) {
- final List result = new ArrayList<>();
- boolean finished = false;
- List partialResult;
- TaskDataList taskDataList;
- TaskData lastItem = null;
- LocalDateTime queryTime = null;
-
- long taskId = fromTaskId;
- int nextPageSize = pageSize;
- while (!finished) {
- taskDataList = runtimeClient.findTasks(taskId, status, fromLastModificationDate,
- 0, nextPageSize, taskInputVariablesReadMode);
- partialResult = new ArrayList<>(taskDataList.getItems());
- if (queryTime == null) {
- queryTime = taskDataList.getQueryTime();
- }
- if (partialResult.isEmpty()) {
- finished = true;
- } else {
- if (lastItem == null || partialResult.size() > 1) {
- lastItem = partialResult.remove(partialResult.size() - 1);
- taskId = lastItem.getTaskId();
- nextPageSize = pageSize;
- result.addAll(partialResult);
- } else {
- // the lastItem determines if the query returned all the potential owners for it,
- // or it might be the case when some of them fall out of the pageSize.
- if (lastItem.getTaskId().equals(partialResult.get(0).getTaskId())) {
- if (partialResult.get(0).getPotentialOwners().isEmpty()) {
- // no potential owners, check if a taskId+1 exists prior to exit.
- result.add(partialResult.get(0));
- lastItem = null;
- taskId++;
- nextPageSize = pageSize;
- } else if (partialResult.get(0).getPotentialOwners().size() < nextPageSize) {
- // the potential owners fits the page margins, we can exit.
- result.add(partialResult.get(0));
- finished = true;
- } else {
- // there might exists more potential owners and in the worst case we loaded only one element
- // in last page. increase the page size to ensure we can fetch all.
- nextPageSize = nextPageSize * 2;
- }
- } else {
- // last item might have been disappeared from result since last query, retry.
- lastItem = partialResult.get(0);
- taskId = lastItem.getTaskId();
- nextPageSize = pageSize;
- }
- }
- }
- }
- return new Result(queryTime, result);
- }
-
- /**
- * Executes the {@link TaskAssigningRuntimeClient#findTasks(Long, List, LocalDateTime, Integer, Integer, TaskInputVariablesReadMode)}
- * method and return all the results. The paging reading is managed internally by this method.
- *
- * @param fromTaskId filters the tasks with taskId >= fromTaskId. If null no filtering is applied.
- * @param status filters the tasks that are in one of the following status. If null or the empty list no filtering
- * is applied.
- * @param fromLastModificationDate filters the tasks with lastModificationDate >= fromLastModificationDate. If null
- * no filtering is applied.
- * @param pageSize sets the pageSize for the paged reading.
- * @return a list of TaskData with the jBPM tasks that met the filtering conditions. The potential owners of the task
- * is properly loaded with all the elements. No task inputs data is loaded by this method.
- */
- public Result readTasks(long fromTaskId, List status, LocalDateTime fromLastModificationDate, int pageSize) {
- return readTasks(fromTaskId, status, fromLastModificationDate, pageSize, TaskInputVariablesReadMode.DONT_READ);
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/main/resources/META-INF/services/org.kie.server.client.helper.KieServicesClientBuilder b/kie-server-parent/kie-server-remote/kie-server-client/src/main/resources/META-INF/services/org.kie.server.client.helper.KieServicesClientBuilder
index 965fb99f1b..c0cd786c15 100644
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/main/resources/META-INF/services/org.kie.server.client.helper.KieServicesClientBuilder
+++ b/kie-server-parent/kie-server-remote/kie-server-client/src/main/resources/META-INF/services/org.kie.server.client.helper.KieServicesClientBuilder
@@ -1,9 +1,7 @@
org.kie.server.client.helper.JBPMServicesClientBuilder
org.kie.server.client.helper.DroolsServicesClientBuilder
org.kie.server.client.helper.JBPMUIServicesClientBuilder
-org.kie.server.client.helper.OptaplannerServicesClientBuilder
org.kie.server.client.helper.CaseServicesClientBuilder
org.kie.server.client.helper.DMNServicesClientBuilder
org.kie.server.client.helper.ScenarioSimulationServicesClientBuilder
-org.kie.server.client.helper.TaskAssigningRuntimeServicesClientBuilder
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/test/java/org/kie/server/client/TaskAssigningRuntimeClientFactoryTest.java b/kie-server-parent/kie-server-remote/kie-server-client/src/test/java/org/kie/server/client/TaskAssigningRuntimeClientFactoryTest.java
deleted file mode 100644
index c0a90cb6a2..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/test/java/org/kie/server/client/TaskAssigningRuntimeClientFactoryTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.client;
-
-import org.junit.Test;
-import org.kie.server.client.impl.TaskAssigningRuntimeClientImpl;
-
-import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertTrue;
-import static org.kie.server.api.KieServerConstants.CFG_BYPASS_AUTH_USER;
-
-public class TaskAssigningRuntimeClientFactoryTest {
-
- private static final String ENDPOINT = "ENDPOINT";
- private static final String USER = "USER";
- private static final String PWD = "PWD";
- private static final long TIMEOUT = 1234L;
-
- @Test
- public void newRuntimeClient() {
- TaskAssigningRuntimeClient client = TaskAssigningRuntimeClientFactory.newRuntimeClient(ENDPOINT, USER, PWD, TIMEOUT);
- assertTrue(client instanceof TaskAssigningRuntimeClientImpl);
- TaskAssigningRuntimeClientImpl clientImpl = (TaskAssigningRuntimeClientImpl) client;
- KieServicesConfiguration config = clientImpl.getConfig();
- assertEquals(ENDPOINT, config.getServerUrl());
- assertEquals(USER, config.getUserName());
- assertEquals(PWD, config.getPassword());
- assertEquals(TIMEOUT, config.getTimeout(), 0);
- assertEquals("true", System.getProperty(CFG_BYPASS_AUTH_USER));
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/test/java/org/kie/server/client/helper/TaskAssigningRuntimeServicesClientBuilderTest.java b/kie-server-parent/kie-server-remote/kie-server-client/src/test/java/org/kie/server/client/helper/TaskAssigningRuntimeServicesClientBuilderTest.java
deleted file mode 100644
index d48697d85f..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/test/java/org/kie/server/client/helper/TaskAssigningRuntimeServicesClientBuilderTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.client.helper;
-
-import java.util.Map;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.kie.server.api.marshalling.MarshallingFormat;
-import org.kie.server.client.KieServicesConfiguration;
-import org.kie.server.client.TaskAssigningRuntimeClient;
-import org.kie.server.client.impl.TaskAssigningRuntimeClientImpl;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.kie.server.api.KieServerConstants.CAPABILITY_TASK_ASSIGNING_RUNTIME;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public class TaskAssigningRuntimeServicesClientBuilderTest {
-
- @Mock
- private KieServicesConfiguration configuration;
-
- @Mock
- private ClassLoader classLoader;
-
- private TaskAssigningRuntimeServicesClientBuilder clientBuilder;
-
- @Before
- public void setUp() {
- when(configuration.getMarshallingFormat()).thenReturn(MarshallingFormat.XSTREAM);
- clientBuilder = new TaskAssigningRuntimeServicesClientBuilder();
- }
-
- @Test
- public void getImplementedCapability() {
- assertEquals(CAPABILITY_TASK_ASSIGNING_RUNTIME, clientBuilder.getImplementedCapability());
- }
-
- @Test
- public void build() {
- Map, Object> result = clientBuilder.build(configuration, classLoader);
- assertTrue(result.get(TaskAssigningRuntimeClient.class) instanceof TaskAssigningRuntimeClientImpl);
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/test/java/org/kie/server/client/impl/TaskAssigningRuntimeClientImplTest.java b/kie-server-parent/kie-server-remote/kie-server-client/src/test/java/org/kie/server/client/impl/TaskAssigningRuntimeClientImplTest.java
deleted file mode 100644
index d5a80a9210..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/test/java/org/kie/server/client/impl/TaskAssigningRuntimeClientImplTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.client.impl;
-
-import java.time.LocalDateTime;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-import org.assertj.core.api.Assertions;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.kie.server.api.marshalling.MarshallingFormat;
-import org.kie.server.api.model.taskassigning.PlanningExecutionResult;
-import org.kie.server.api.model.taskassigning.PlanningItemList;
-import org.kie.server.api.model.taskassigning.QueryParamName;
-import org.kie.server.api.model.taskassigning.TaskDataList;
-import org.kie.server.api.model.taskassigning.TaskInputVariablesReadMode;
-import org.kie.server.client.KieServicesConfiguration;
-import org.kie.server.client.balancer.LoadBalancer;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.junit.Assert.assertEquals;
-import static org.kie.server.api.model.taskassigning.TaskAssigningRestURI.TASK_ASSIGNING_EXECUTE_PLANNING_URI;
-import static org.kie.server.api.model.taskassigning.TaskAssigningRestURI.TASK_ASSIGNING_QUERIES_TASK_DATA_URI;
-import static org.kie.server.api.model.taskassigning.TaskAssigningRestURI.TASK_ASSIGNING_RUNTIME_URI;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public class TaskAssigningRuntimeClientImplTest {
-
- private static final String SERVER_URL = "SERVER_URL";
- private static final String USER_ID = "USER_ID";
-
- private static final Long FROM_TASK_ID = 1L;
- private static final List STATUS = Arrays.asList("Reserved", "InProgress");
- private static final LocalDateTime FROM_LAST_MODIFICATION_DATE = LocalDateTime.now();
- private static final Integer PAGE = 1;
- private static final Integer PAGE_SIZE = 10;
-
- @Mock
- private KieServicesConfiguration config;
-
- @Mock
- private LoadBalancer loadBalancer;
-
- @Mock
- private ClassLoader classLoader;
-
- @Mock
- private PlanningExecutionResult planningExecutionResult;
-
- @Mock
- private PlanningItemList planningItemList;
-
- @Mock
- private TaskDataList taskDataList;
-
- private Map queryParams;
-
- private TaskAssigningRuntimeClientImpl runtimeClient;
-
- @Before
- public void setUp() {
- when(config.getMarshallingFormat()).thenReturn(MarshallingFormat.XSTREAM);
- when(config.getLoadBalancer()).thenReturn(loadBalancer);
- when(config.clone()).thenReturn(config);
- when(loadBalancer.getUrl()).thenReturn(SERVER_URL);
- runtimeClient = spy(new TaskAssigningRuntimeClientImpl(config, classLoader));
- }
-
- @Test
- public void executePlanningRest() {
- when(config.isRest()).thenReturn(true);
- String expectedUri = SERVER_URL + "/" + TASK_ASSIGNING_RUNTIME_URI + "/" + TASK_ASSIGNING_EXECUTE_PLANNING_URI + "?user=" + USER_ID;
- doReturn(planningExecutionResult)
- .when(runtimeClient)
- .makeHttpPostRequestAndCreateCustomResponse(eq(expectedUri),
- eq(planningItemList),
- eq(PlanningExecutionResult.class));
- PlanningExecutionResult result = runtimeClient.executePlanning(planningItemList, USER_ID);
- assertEquals(planningExecutionResult, result);
- }
-
- @Test
- public void executePlanningJms() {
- when(config.isRest()).thenReturn(false);
- Assertions.assertThatThrownBy(() -> runtimeClient.executePlanning(planningItemList, USER_ID))
- .hasMessage("JMS protocol is not implemented for this service.");
- }
-
- @Test
- public void findTasksWithReadModeRest() {
- when(config.isRest()).thenReturn(true);
- findTasksRest(TaskInputVariablesReadMode.READ_FOR_ALL);
- }
-
- @Test
- public void findTasksWithoutReadModeRest() {
- when(config.isRest()).thenReturn(true);
- findTasksRest(null);
- }
-
- @Test
- public void findTasksWithReadModeJms() {
- when(config.isRest()).thenReturn(false);
- Assertions.assertThatThrownBy(() -> runtimeClient.findTasks(FROM_TASK_ID, STATUS, FROM_LAST_MODIFICATION_DATE, PAGE, PAGE_SIZE, TaskInputVariablesReadMode.READ_FOR_ALL))
- .hasMessage("JMS protocol is not implemented for this service.");
- }
-
- @Test
- public void findTasksWithoutReadModeJms() {
- when(config.isRest()).thenReturn(false);
- Assertions.assertThatThrownBy(() -> runtimeClient.findTasks(FROM_TASK_ID, STATUS, FROM_LAST_MODIFICATION_DATE, PAGE, PAGE_SIZE))
- .hasMessage("JMS protocol is not implemented for this service.");
- }
-
- private void findTasksRest(TaskInputVariablesReadMode mode) {
- queryParams = TaskAssigningRuntimeClientImpl.TaskQueryParamsBuilder.builder()
- .fromTaskId(FROM_TASK_ID)
- .status(STATUS)
- .fromLastModificationDate(FROM_LAST_MODIFICATION_DATE)
- .page(PAGE)
- .pageSize(PAGE_SIZE)
- .build();
- if (mode == null) {
- queryParams.put(QueryParamName.TASK_INPUT_VARIABLES_MODE, TaskInputVariablesReadMode.DONT_READ.name());
- } else {
- queryParams.put(QueryParamName.TASK_INPUT_VARIABLES_MODE, mode.name());
- }
- when(config.isRest()).thenReturn(true);
- String expectedUri = SERVER_URL + "/" + TASK_ASSIGNING_RUNTIME_URI + "/" + TASK_ASSIGNING_QUERIES_TASK_DATA_URI;
-
- doReturn(taskDataList)
- .when(runtimeClient)
- .makeHttpPostRequestAndCreateCustomResponse(eq(expectedUri),
- eq(queryParams),
- eq(TaskDataList.class));
- TaskDataList result;
- if (mode == null) {
- result = runtimeClient.findTasks(FROM_TASK_ID, STATUS, FROM_LAST_MODIFICATION_DATE, PAGE, PAGE_SIZE);
- } else {
- result = runtimeClient.findTasks(FROM_TASK_ID, STATUS, FROM_LAST_MODIFICATION_DATE, PAGE, PAGE_SIZE, mode);
- }
- assertEquals(taskDataList, result);
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-client/src/test/java/org/kie/server/client/util/TaskDataReaderTest.java b/kie-server-parent/kie-server-remote/kie-server-client/src/test/java/org/kie/server/client/util/TaskDataReaderTest.java
deleted file mode 100644
index e054024cc6..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-client/src/test/java/org/kie/server/client/util/TaskDataReaderTest.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.client.util;
-
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import org.apache.commons.lang3.tuple.Pair;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.kie.server.api.model.taskassigning.PlanningExecutionResult;
-import org.kie.server.api.model.taskassigning.OrganizationalEntity;
-import org.kie.server.api.model.taskassigning.PlanningItemList;
-import org.kie.server.api.model.taskassigning.TaskData;
-import org.kie.server.api.model.taskassigning.TaskDataList;
-import org.kie.server.api.model.taskassigning.TaskInputVariablesReadMode;
-import org.kie.server.client.TaskAssigningRuntimeClient;
-
-import static org.apache.commons.lang3.StringUtils.isEmpty;
-import static org.junit.Assert.assertEquals;
-
-@RunWith(Parameterized.class)
-public class TaskDataReaderTest {
-
- private long TASK1 = 1;
- private long TASK2 = 2;
- private long TASK3 = 3;
- private long TASK4 = 4;
- private long TASK5 = 5;
-
- private String PO1 = "PO1";
- private String PO2 = "PO2";
- private String PO3 = "PO3";
- private String PO4 = "PO4";
- private String PO5 = "PO5";
-
- private TaskAssigningRuntimeClient runtimeClient;
-
- private List> dataSet = new ArrayList<>();
-
- private TaskDataReader reader;
-
- @Parameterized.Parameter
- public int pageSize;
-
- @Parameterized.Parameters(name = "readTasks({0})")
- public static Object[] data() {
- return new Object[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
- }
-
- @Before
- public void setUp() {
- runtimeClient = new TaskAssigningRuntimeClientMock();
- this.reader = TaskDataReader.from(runtimeClient);
-
- dataSet = Arrays.asList(Pair.of(TASK1, PO1),
- Pair.of(TASK1, PO2),
- Pair.of(TASK1, PO3),
- Pair.of(TASK2, null),
- Pair.of(TASK3, PO1),
- Pair.of(TASK3, PO2),
- Pair.of(TASK3, PO3),
- Pair.of(TASK3, PO4),
- Pair.of(TASK4, PO5),
- Pair.of(TASK5, PO2),
- Pair.of(TASK5, PO3),
- Pair.of(TASK5, PO4),
- Pair.of(TASK5, PO5));
- }
-
- @Test
- public void readTasks1() {
- TaskDataReader.Result result = reader.readTasks(0, null, null, pageSize, null);
- verifyTasks(result.getTasks());
- }
-
- @Test
- public void readTasks2() {
- TaskDataReader.Result result = reader.readTasks(0, null, null, pageSize);
- verifyTasks(result.getTasks());
- }
-
- private void verifyTasks(List taskDataList) {
- assertEquals(mockTaskData(TASK1, PO1, PO2, PO3), taskDataList.get(0));
- assertEquals(mockTaskData(TASK2), taskDataList.get(1));
- assertEquals(mockTaskData(TASK3, PO1, PO2, PO3, PO4), taskDataList.get(2));
- assertEquals(mockTaskData(TASK4, PO5), taskDataList.get(3));
- assertEquals(mockTaskData(TASK5, PO2, PO3, PO4, PO5), taskDataList.get(4));
- }
-
- private class TaskAssigningRuntimeClientMock implements TaskAssigningRuntimeClient {
-
- @Override
- public PlanningExecutionResult executePlanning(PlanningItemList planningItemList, String userId) {
- return null;
- }
-
- @Override
- public TaskDataList findTasks(Long fromTaskId, List status, LocalDateTime fromLastModificationDate, Integer page, Integer pageSize) {
- return findTasks(fromTaskId, status, fromLastModificationDate, page, pageSize);
- }
-
- /**
- * emulate the DB paged querying.
- */
- @Override
- public TaskDataList findTasks(Long fromTaskId, List status, LocalDateTime fromLastModificationDate,
- Integer page, Integer pageSize, TaskInputVariablesReadMode taskInputVariablesReadMode) {
- int offset = page * pageSize;
- int count = 0;
- long taskId;
- long previousTaskId = -1;
- String potentialOwnerId;
- List result = new ArrayList<>();
- TaskData taskData = null;
- // Emulate the DB query. For the test purposes the other parameters like lastModificationDate, status, etc.
- // are not relevant since the goal is to check the consumption of the total tasks in a paged based basis
- // and not the query filtering.
- List> filteredDataSet = dataSet.stream().filter(row -> row.getLeft() >= fromTaskId).collect(Collectors.toList());
-
- while (offset < filteredDataSet.size() && count < pageSize) {
- taskId = filteredDataSet.get(offset).getLeft();
- if (previousTaskId != taskId) {
- previousTaskId = taskId;
- taskData = TaskData.builder().taskId(taskId).potentialOwners(new HashSet<>()).build();
- result.add(taskData);
- }
- potentialOwnerId = filteredDataSet.get(offset).getRight();
- if (!isEmpty(potentialOwnerId)) {
- taskData.getPotentialOwners().add(OrganizationalEntity.builder().name(potentialOwnerId).build());
- }
- count++;
- offset++;
- }
- return new TaskDataList(result);
- }
- }
-
- private TaskData mockTaskData(Long taskId, String... potentialOwners) {
- Set potentialOwnersSet = Stream.of(potentialOwners).map(po -> OrganizationalEntity.builder()
- .name(po)
- .build())
- .collect(Collectors.toSet());
- return TaskData.builder()
- .taskId(taskId)
- .potentialOwners(potentialOwnersSet)
- .build();
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/.gitignore b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/.gitignore
deleted file mode 100644
index 222af0cf11..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-/target
-/local
-
-# Eclipse, Netbeans and IntelliJ files
-/.*
-!.gitignore
-/nbproject
-/*.ipr
-/*.iws
-/*.iml
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/pom.xml b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/pom.xml
deleted file mode 100644
index 7a393c4045..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/pom.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-
- org.kie.server
- kie-server-rest
- 7.75.0-SNAPSHOT
-
- 4.0.0
-
- kie-server-rest-optaplanner
-
- KIE :: Execution Server :: Remote :: REST :: OptaPlanner
- KIE OptaPlanner Execution Server Extension
-
-
- org.kie.server.rest.optaplanner
-
-
-
-
- org.kie
- kie-api
-
-
- org.kie
- kie-internal
-
-
-
- org.kie.server
- kie-server-api
-
-
- org.kie.server
- kie-server-services-common
-
-
- org.kie.server
- kie-server-services-optaplanner
-
-
- org.kie.server
- kie-server-rest-common
-
-
-
- org.kie.server
- kie-server-common
-
-
-
- org.optaplanner
- optaplanner-core
-
-
- org.optaplanner
- optaplanner-persistence-xstream
-
-
- org.optaplanner
- optaplanner-persistence-jaxb
-
-
-
- io.swagger
- swagger-annotations
-
-
-
- org.slf4j
- slf4j-api
-
-
-
-
- org.mockito
- mockito-core
- test
-
-
-
-
-
-
- org.revapi
- revapi-maven-plugin
-
-
-
-
-
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/build/revapi-config.json b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/build/revapi-config.json
deleted file mode 100644
index 221dd8c7d4..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/build/revapi-config.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "filters": {
- "revapi": {
- "java": {
- "_comment": "Only classes with javax.ws.rs annotations are included since we want to check only REST API.",
- "filter": {
- "packages": {
- "comment": "We don't want to check transitive classes, e.g. from kie-server-api, since we already check them in their own module.",
- "regex": true,
- "include": [
- "org\\.kie\\.server\\.remote\\.rest\\.optaplanner.*"
- ],
- "exclude": [
- "org\\.kie\\.server\\.remote\\.rest\\.optaplanner\\.resources"
- ]
- },
- "classes": {
- "_comment": "Classes are excluded, not included, so new classes in future are discovered by revapi.",
- "regex": false,
- "exclude": [
- "org.kie.server.remote.rest.optaplanner.OptaplannerRestApplicationComponentsService"
- ]
- }
- }
- }
- }
- },
-
- "ignores": {
- "revapi": {
- "_comment": "Changes between 7.67.0.Final and the current branch. These changes are desired and thus ignored.",
- "ignore": []
- }
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/main/java/org/kie/server/remote/rest/optaplanner/OptaplannerRestApplicationComponentsService.java b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/main/java/org/kie/server/remote/rest/optaplanner/OptaplannerRestApplicationComponentsService.java
deleted file mode 100644
index f014e103b5..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/main/java/org/kie/server/remote/rest/optaplanner/OptaplannerRestApplicationComponentsService.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2015 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * 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.kie.server.remote.rest.optaplanner;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.kie.server.services.api.KieServerApplicationComponentsService;
-import org.kie.server.services.api.KieServerRegistry;
-import org.kie.server.services.api.SupportedTransports;
-import org.kie.server.services.optaplanner.OptaplannerKieServerExtension;
-import org.kie.server.services.optaplanner.SolverServiceBase;
-
-public class OptaplannerRestApplicationComponentsService
- implements KieServerApplicationComponentsService {
-
- private static final String OWNER_EXTENSION = OptaplannerKieServerExtension.EXTENSION_NAME;
-
- @Override
- public Collection getAppComponents(String extension, SupportedTransports type, Object... services) {
- // skip calls from other than owning extension
- if ( !OWNER_EXTENSION.equals( extension ) ) {
- return Collections.emptyList();
- }
-
- SolverServiceBase solverServiceBase = null;
- KieServerRegistry context = null;
-
- for ( Object object : services ) {
- // in case given service is null (meaning was not configured) continue with next one
- if ( object == null ) {
- continue;
- }
- if ( SolverServiceBase.class.isAssignableFrom( object.getClass() ) ) {
- solverServiceBase = (SolverServiceBase) object;
- continue;
- } else if ( KieServerRegistry.class.isAssignableFrom( object.getClass() ) ) {
- context = (KieServerRegistry) object;
- continue;
- }
- }
-
- List components = new ArrayList( 1 );
- components.add( new SolverResource( solverServiceBase ) );
-
- return components;
- }
-
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/main/java/org/kie/server/remote/rest/optaplanner/SolverResource.java b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/main/java/org/kie/server/remote/rest/optaplanner/SolverResource.java
deleted file mode 100644
index dc44c7501d..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/main/java/org/kie/server/remote/rest/optaplanner/SolverResource.java
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
- * Copyright 2015 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * 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.kie.server.remote.rest.optaplanner;
-
-import static org.kie.server.api.rest.RestURI.CONTAINER_ID;
-import static org.kie.server.api.rest.RestURI.SOLVER_BEST_SOLUTION;
-import static org.kie.server.api.rest.RestURI.SOLVER_ID;
-import static org.kie.server.api.rest.RestURI.SOLVER_ID_URI;
-import static org.kie.server.api.rest.RestURI.SOLVER_PROBLEM_FACT_CHANGES;
-import static org.kie.server.api.rest.RestURI.SOLVER_PROBLEM_FACTS_CHANGES_PROCESSED;
-import static org.kie.server.api.rest.RestURI.SOLVER_STATE_RUNNING;
-import static org.kie.server.api.rest.RestURI.SOLVER_STATE_TERMINATING;
-import static org.kie.server.remote.rest.common.util.RestUtils.buildConversationIdHeader;
-import static org.kie.server.remote.rest.common.util.RestUtils.createCorrectVariant;
-import static org.kie.server.remote.rest.common.util.RestUtils.createResponse;
-import static org.kie.server.remote.rest.common.util.RestUtils.getContentType;
-import static org.kie.server.remote.rest.common.util.RestUtils.getVariant;
-import static org.kie.server.remote.rest.common.util.RestUtils.internalServerError;
-
-import java.text.MessageFormat;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Variant;
-
-import org.kie.server.api.model.ServiceResponse;
-import org.kie.server.api.model.instance.SolverInstance;
-import org.kie.server.api.model.instance.SolverInstanceList;
-import org.kie.server.api.rest.RestURI;
-import org.kie.server.remote.rest.common.Header;
-import org.kie.server.remote.rest.optaplanner.resources.Messages;
-import org.kie.server.services.impl.locator.ContainerLocatorProvider;
-import org.kie.server.services.impl.marshal.MarshallerHelper;
-import org.kie.server.services.optaplanner.SolverServiceBase;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
-
-@Api(value="Planning and solvers :: BRP")
-@Path("server/" + RestURI.SOLVER_URI)
-public class SolverResource {
-
- public static final Logger logger = LoggerFactory.getLogger(SolverResource.class);
-
- private SolverServiceBase solverService;
- private MarshallerHelper marshallerHelper;
-
- public SolverResource() {
- }
-
- public SolverResource(SolverServiceBase solverServiceBase) {
- this.solverService = solverServiceBase;
- this.marshallerHelper = new MarshallerHelper(solverService.getKieServerRegistry());
- }
-
- @ApiOperation(value="Creates solver within given container",
- response=SolverInstance.class, code=200)
- @ApiResponses(value = { @ApiResponse(code = 500, message = "Unexpected error"),
- @ApiResponse(code = 400, message = "Container does not exist or failure in creating solver") })
- @PUT
- @Path(RestURI.SOLVER_ID_URI)
- @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public Response createSolver(
- @javax.ws.rs.core.Context HttpHeaders headers,
- @ApiParam(value = "container id where the solver config resides", required = true) @PathParam(CONTAINER_ID) String containerId,
- @ApiParam(value = "identifier of the solver to create", required = true) @PathParam(SOLVER_ID) String solverId,
- @ApiParam(value = "solver instance details as SolverInstance type", required = true) String payload) {
- logger.debug("About to create solver {} on container {}",
- solverId,
- containerId);
- Variant v = getVariant(headers);
- Header conversationIdHeader = buildConversationIdHeader(containerId,
- solverService.getKieServerRegistry(),
- headers);
- try {
- String contentType = getContentType(headers);
-
- if (solverService.getKieServerRegistry().getContainer(containerId,
- ContainerLocatorProvider.get().getLocator()) == null) {
- ServiceResponse response = new ServiceResponse(ServiceResponse.ResponseType.FAILURE,
- "Failed to create solver. Container does not exist: " + containerId);
- return createCorrectVariant(response,
- headers,
- Response.Status.BAD_REQUEST);
- }
- SolverInstance solverInstance = marshallerHelper.unmarshal(containerId,
- payload,
- contentType,
- SolverInstance.class);
- ServiceResponse response = solverService.createSolver(containerId,
- solverId,
- solverInstance);
- if (response.getType() == ServiceResponse.ResponseType.SUCCESS) {
- return createCorrectVariant(marshallerHelper,
- containerId,
- response.getResult(),
- headers,
- Response.Status.CREATED,
- conversationIdHeader);
- }
- return createCorrectVariant(marshallerHelper,
- containerId,
- response.getMsg(),
- headers,
- Response.Status.BAD_REQUEST,
- conversationIdHeader);
- } catch (Exception e) {
- logger.error("Unexpected error creating solver '{}' on container '{}': {}",
- solverId,
- containerId,
- e.getMessage(),
- e);
- return internalServerError(MessageFormat.format(Messages.UNEXPECTED_ERROR,
- e.getMessage()),
- v,
- conversationIdHeader);
- }
- }
-
- @ApiOperation(value="Retrieves solvers from given container",
- response=SolverInstanceList.class, code=200)
- @ApiResponses(value = { @ApiResponse(code = 500, message = "Unexpected error"),
- @ApiResponse(code = 404, message = "Container does not exist or failure in creating solver") })
- @GET
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public Response getSolvers(@javax.ws.rs.core.Context HttpHeaders headers,
- @ApiParam(value = "container id where the solvers reside", required = true) @PathParam(CONTAINER_ID) String containerId) {
- Variant v = getVariant(headers);
- Header conversationIdHeader = buildConversationIdHeader(containerId,
- solverService.getKieServerRegistry(),
- headers);
- try {
- ServiceResponse result = solverService.getSolvers(containerId);
- if (result.getType() == ServiceResponse.ResponseType.SUCCESS) {
- return createCorrectVariant(marshallerHelper,
- containerId,
- result.getResult(),
- headers,
- Response.Status.OK,
- conversationIdHeader);
- }
- return createCorrectVariant(marshallerHelper,
- containerId,
- result.getMsg(),
- headers,
- Response.Status.NOT_FOUND,
- conversationIdHeader);
- } catch (Exception e) {
- logger.error("Unexpected error retrieving solvers. Message: '{}'",
- e.getMessage(),
- e);
- return internalServerError(MessageFormat.format(Messages.UNEXPECTED_ERROR,
- e.getMessage()),
- v,
- conversationIdHeader);
- }
- }
-
- @ApiOperation(value="Retrieves solver by its identifier from given container",
- response=SolverInstance.class, code=200)
- @ApiResponses(value = { @ApiResponse(code = 500, message = "Unexpected error"),
- @ApiResponse(code = 404, message = "Container does not exist or failure in creating solver") })
- @GET
- @Path(RestURI.SOLVER_ID_URI)
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public Response getSolver(@javax.ws.rs.core.Context HttpHeaders headers,
- @ApiParam(value = "container id where the solver resides", required = true) @PathParam(CONTAINER_ID) String containerId,
- @ApiParam(value = "identifier of the solver", required = true) @PathParam(SOLVER_ID) String solverId) {
- Variant v = getVariant(headers);
- Header conversationIdHeader = buildConversationIdHeader(containerId,
- solverService.getKieServerRegistry(),
- headers);
- try {
- ServiceResponse result = solverService.getSolver(containerId,
- solverId);
- if (result.getType() == ServiceResponse.ResponseType.SUCCESS) {
- return createCorrectVariant(marshallerHelper,
- containerId,
- result.getResult(),
- headers,
- Response.Status.OK,
- conversationIdHeader);
- }
- return createCorrectVariant(marshallerHelper,
- containerId,
- result.getMsg(),
- headers,
- Response.Status.NOT_FOUND,
- conversationIdHeader);
- } catch (Exception e) {
- logger.error("Unexpected error retrieving solver state {}",
- e.getMessage(),
- e);
- return internalServerError(MessageFormat.format(Messages.UNEXPECTED_ERROR,
- e.getMessage()),
- v,
- conversationIdHeader);
- }
- }
-
- @ApiOperation(value="Retrieves best solution from solver within container",
- response=SolverInstance.class, code=200)
- @ApiResponses(value = { @ApiResponse(code = 500, message = "Unexpected error"),
- @ApiResponse(code = 404, message = "Container does not exist or failure in creating solver") })
- @GET
- @Path(SOLVER_ID_URI + "/" + SOLVER_BEST_SOLUTION)
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public Response getSolverWithBestSolution(@javax.ws.rs.core.Context HttpHeaders headers,
- @ApiParam(value = "container id where the solver resides", required = true) @PathParam(CONTAINER_ID) String containerId,
- @ApiParam(value = "identifier of the solver", required = true) @PathParam(SOLVER_ID) String solverId) {
- Variant v = getVariant(headers);
- Header conversationIdHeader = buildConversationIdHeader(containerId,
- solverService.getKieServerRegistry(),
- headers);
- try {
- ServiceResponse result = solverService.getSolverWithBestSolution(containerId,
- solverId);
- if (result.getType() == ServiceResponse.ResponseType.SUCCESS) {
- return createCorrectVariant(marshallerHelper,
- containerId,
- result.getResult(),
- headers,
- Response.Status.OK,
- conversationIdHeader);
- }
- return createCorrectVariant(marshallerHelper,
- containerId,
- result.getMsg(),
- headers,
- Response.Status.NOT_FOUND,
- conversationIdHeader);
- } catch (Exception e) {
- logger.error("Unexpected error during processing {}",
- e.getMessage(),
- e);
- return internalServerError(MessageFormat.format(Messages.UNEXPECTED_ERROR,
- e.getMessage()),
- v,
- conversationIdHeader);
- }
- }
-
- @ApiOperation(value="Solves given planning problem with given solver",
- response=Void.class, code=200)
- @ApiResponses(value = { @ApiResponse(code = 500, message = "Unexpected error"),
- @ApiResponse(code = 404, message = "Container does not exist or failure in creating solver") })
- @POST
- @Path(RestURI.SOLVER_ID_URI + "/" + SOLVER_STATE_RUNNING)
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public Response solvePlanningProblem(@javax.ws.rs.core.Context HttpHeaders headers,
- @ApiParam(value = "container id where the solver resides", required = true) @PathParam(CONTAINER_ID) String containerId,
- @ApiParam(value = "identifier of the solver", required = true) @PathParam(SOLVER_ID) String solverId,
- @ApiParam(value = "planning problem", required = true) String payload) {
- Variant v = getVariant(headers);
- Header conversationIdHeader = buildConversationIdHeader(containerId,
- solverService.getKieServerRegistry(),
- headers);
- try {
- String contentType = getContentType(headers);
-
- Object planningProblem = marshallerHelper.unmarshal(containerId,
- payload,
- contentType,
- Object.class);
-
- ServiceResponse result = solverService.solvePlanningProblem(containerId,
- solverId,
- planningProblem);
- if (result.getType() == ServiceResponse.ResponseType.SUCCESS) {
- return createResponse("",
- v,
- Response.Status.OK,
- conversationIdHeader);
- }
- return createCorrectVariant(marshallerHelper,
- containerId,
- result.getMsg(),
- headers,
- Response.Status.BAD_REQUEST,
- conversationIdHeader);
- } catch (Exception e) {
- logger.error("Unexpected error retrieving solver state {}",
- e.getMessage(),
- e);
- return internalServerError(MessageFormat.format(Messages.UNEXPECTED_ERROR,
- e.getMessage()),
- v,
- conversationIdHeader);
- }
- }
-
- @ApiOperation(value="Terminates early running solver with given id within container",
- response=Void.class, code=200)
- @ApiResponses(value = { @ApiResponse(code = 500, message = "Unexpected error"),
- @ApiResponse(code = 400, message = "Container does not exist or failure in creating solver") })
- @POST
- @Path(RestURI.SOLVER_ID_URI + "/" + SOLVER_STATE_TERMINATING)
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public Response terminateSolverEarly(@javax.ws.rs.core.Context HttpHeaders headers,
- @ApiParam(value = "container id where the solver resides", required = true) @PathParam(CONTAINER_ID) String containerId,
- @ApiParam(value = "identifier of the solver", required = true) @PathParam(SOLVER_ID) String solverId) {
- Variant v = getVariant(headers);
- Header conversationIdHeader = buildConversationIdHeader(containerId,
- solverService.getKieServerRegistry(),
- headers);
- try {
- ServiceResponse result = solverService.terminateSolverEarly(containerId,
- solverId);
- if (result.getType() == ServiceResponse.ResponseType.SUCCESS) {
- return createResponse("",
- v,
- Response.Status.OK,
- conversationIdHeader);
- }
- return createCorrectVariant(marshallerHelper,
- containerId,
- result.getMsg(),
- headers,
- Response.Status.BAD_REQUEST,
- conversationIdHeader);
- } catch (Exception e) {
- logger.error("Unexpected error retrieving solver state {}",
- e.getMessage(),
- e);
- return internalServerError(MessageFormat.format(Messages.UNEXPECTED_ERROR,
- e.getMessage()),
- v,
- conversationIdHeader);
- }
- }
-
- @ApiOperation(value="Adds problem fact changes to given solver",
- response=Void.class, code=200)
- @ApiResponses(value = { @ApiResponse(code = 500, message = "Unexpected error"),
- @ApiResponse(code = 400, message = "Container does not exist or failure in creating solver") })
- @POST
- @Path(RestURI.SOLVER_ID_URI + "/" + SOLVER_PROBLEM_FACT_CHANGES)
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public Response addProblemFactChanges(@javax.ws.rs.core.Context HttpHeaders headers,
- @ApiParam(value = "container id where the solver resides", required = true) @PathParam(CONTAINER_ID) String containerId,
- @ApiParam(value = "identifier of the solver", required = true) @PathParam(SOLVER_ID) String solverId,
- @ApiParam(value = "Problem fact changes, either single one or a list of them", required = true) String payload) {
- Variant v = getVariant(headers);
- Header conversationIdHeader = buildConversationIdHeader(containerId,
- solverService.getKieServerRegistry(),
- headers);
- try {
- String contentType = getContentType(headers);
-
- Object problemFactChange = marshallerHelper.unmarshal(containerId,
- payload,
- contentType,
- Object.class);
-
- ServiceResponse result = solverService.addProblemFactChanges(containerId,
- solverId,
- problemFactChange);
- if (result.getType() == ServiceResponse.ResponseType.SUCCESS) {
- return createResponse("",
- v,
- Response.Status.OK,
- conversationIdHeader);
- }
- return createCorrectVariant(marshallerHelper,
- containerId,
- result.getMsg(),
- headers,
- Response.Status.BAD_REQUEST,
- conversationIdHeader);
- } catch (Exception e) {
- logger.error("Unexpected error retrieving solver state {}",
- e.getMessage(),
- e);
- return internalServerError(MessageFormat.format(Messages.UNEXPECTED_ERROR,
- e.getMessage()),
- v,
- conversationIdHeader);
- }
- }
-
- @ApiOperation(value="Retrieves status if problem fact changes have been processed in given solver",
- response=Boolean.class, code=200)
- @ApiResponses(value = { @ApiResponse(code = 500, message = "Unexpected error"),
- @ApiResponse(code = 404, message = "Container does not exist or failure in creating solver") })
- @GET
- @Path(RestURI.SOLVER_ID_URI + "/" + SOLVER_PROBLEM_FACTS_CHANGES_PROCESSED)
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public Response isEveryProblemFactChangeProcessed(@javax.ws.rs.core.Context HttpHeaders headers,
- @ApiParam(value = "container id where the solver resides", required = true) @PathParam(CONTAINER_ID) String containerId,
- @ApiParam(value = "identifier of the solver", required = true) @PathParam(SOLVER_ID) String solverId) {
- Variant v = getVariant(headers);
- Header conversationIdHeader = buildConversationIdHeader(containerId,
- solverService.getKieServerRegistry(),
- headers);
- try {
- ServiceResponse result = solverService.isEveryProblemFactChangeProcessed(containerId,
- solverId);
- if (result.getType() == ServiceResponse.ResponseType.SUCCESS) {
- return createCorrectVariant(marshallerHelper,
- containerId,
- result.getResult(),
- headers,
- Response.Status.OK,
- conversationIdHeader);
- }
- return createCorrectVariant(marshallerHelper,
- containerId,
- result.getMsg(),
- headers,
- Response.Status.NOT_FOUND,
- conversationIdHeader);
- } catch (Exception e) {
- logger.error("Unexpected error querying problem facts processing state {}",
- e.getMessage(),
- e);
- return internalServerError(MessageFormat.format(Messages.UNEXPECTED_ERROR,
- e.getMessage()),
- v,
- conversationIdHeader);
- }
- }
-
- @ApiOperation(value="Disposes given solver",
- response=Void.class, code=200)
- @ApiResponses(value = { @ApiResponse(code = 500, message = "Unexpected error"),
- @ApiResponse(code = 404, message = "Container does not exist or failure in creating solver") })
- @DELETE
- @Path(RestURI.SOLVER_ID_URI)
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public Response disposeSolver(@javax.ws.rs.core.Context HttpHeaders headers,
- @ApiParam(value = "container id where the solver resides", required = true) @PathParam(CONTAINER_ID) String containerId,
- @ApiParam(value = "identifier of the solver", required = true) @PathParam(SOLVER_ID) String solverId) {
- Variant v = getVariant(headers);
- Header conversationIdHeader = buildConversationIdHeader(containerId,
- solverService.getKieServerRegistry(),
- headers);
- try {
- ServiceResponse result = solverService.disposeSolver(containerId,
- solverId);
- if (result.getType() == ServiceResponse.ResponseType.SUCCESS) {
- return createResponse("",
- v,
- Response.Status.OK,
- conversationIdHeader);
- }
- return createCorrectVariant(marshallerHelper,
- containerId,
- result.getMsg(),
- headers,
- Response.Status.BAD_REQUEST,
- conversationIdHeader);
- } catch (Exception e) {
- logger.error("Unexpected error disposing solver {} on container {}. Message: '{}'",
- solverId,
- containerId,
- e.getMessage(),
- e);
- return internalServerError(MessageFormat.format(Messages.UNEXPECTED_ERROR,
- e.getMessage()),
- v,
- conversationIdHeader);
- }
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/main/java/org/kie/server/remote/rest/optaplanner/resources/Messages.java b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/main/java/org/kie/server/remote/rest/optaplanner/resources/Messages.java
deleted file mode 100644
index 0230c55a92..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/main/java/org/kie/server/remote/rest/optaplanner/resources/Messages.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2015 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * 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.kie.server.remote.rest.optaplanner.resources;
-
-public class Messages {
-
- public static final String UNEXPECTED_ERROR = "Unexpected error during processing: {0}";
-
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerApplicationComponentsService b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerApplicationComponentsService
deleted file mode 100644
index c1d00adc1b..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerApplicationComponentsService
+++ /dev/null
@@ -1 +0,0 @@
-org.kie.server.remote.rest.optaplanner.OptaplannerRestApplicationComponentsService
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/test/java/org/kie/server/remote/rest/optaplanner/OptaplannerApplicationComponentsServiceTest.java b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/test/java/org/kie/server/remote/rest/optaplanner/OptaplannerApplicationComponentsServiceTest.java
deleted file mode 100644
index 88913e3625..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-optaplanner/src/test/java/org/kie/server/remote/rest/optaplanner/OptaplannerApplicationComponentsServiceTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2015 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * 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.kie.server.remote.rest.optaplanner;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.ServiceLoader;
-
-import org.junit.Test;
-import org.kie.server.services.api.KieServerApplicationComponentsService;
-import org.kie.server.services.api.KieServerRegistry;
-import org.kie.server.services.api.SupportedTransports;
-import org.kie.server.services.optaplanner.OptaplannerKieServerExtension;
-import org.kie.server.services.optaplanner.SolverServiceBase;
-import org.mockito.Mockito;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-
-public class OptaplannerApplicationComponentsServiceTest {
-
- @Test
- public void createResources() {
- ServiceLoader appComponentsServices
- = ServiceLoader.load( KieServerApplicationComponentsService.class );
- List appComponentsList = new ArrayList();
- Object[] services = {
- mock( SolverServiceBase.class ),
- mock( KieServerRegistry.class, Mockito.RETURNS_MOCKS )
- };
- for ( KieServerApplicationComponentsService appComponentsService : appComponentsServices ) {
- appComponentsList.addAll(
- appComponentsService.getAppComponents(
- OptaplannerKieServerExtension.EXTENSION_NAME,
- SupportedTransports.REST, services ) );
- }
-
- int numComponents = 1;
- assertEquals( "Unexpected num application components!", numComponents, appComponentsList.size() );
- for ( Object appComponent : appComponentsList ) {
- assertTrue(
- "Unexpected app component type: " + Object.class.getSimpleName(),
- appComponent instanceof SolverResource
- );
- }
- }
-
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/.gitignore b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/.gitignore
deleted file mode 100644
index 91a87d3ed0..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/.gitignore
+++ /dev/null
@@ -1,20 +0,0 @@
-# everywhere
-target/
-
-# only in the root directory
-/classes
-/local
-/repository
-/repositories
-
-# Eclipse, Netbeans and IntelliJ files
-/.*
-/**/.*
-!.gitignore
-/nbproject
-*.ipr
-*.iws
-*.iml
-
-# Repository wide ignore mac DS_Store files
-.DS_Store
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/pom.xml b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/pom.xml
deleted file mode 100644
index d4477576ce..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/pom.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
- 4.0.0
-
-
- org.kie.server
- kie-server-rest
- 7.75.0-SNAPSHOT
-
-
- kie-server-rest-task-assigning-runtime
-
- KIE :: Execution Server :: Rest :: Task Assigning :: Runtime
- KIE Execution Server Rest Task Assigning Runtime
-
-
-
- org.kie.server
- kie-server-services-common
-
-
- org.kie.server
- kie-server-rest-common
-
-
- org.kie.server
- kie-server-services-task-assigning-runtime
-
-
- jakarta.ws.rs
- jakarta.ws.rs-api
-
-
- io.swagger
- swagger-annotations
-
-
-
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/main/java/org/kie/server/remote/rest/taskassigning/runtime/TaskAssigningRuntimeResource.java b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/main/java/org/kie/server/remote/rest/taskassigning/runtime/TaskAssigningRuntimeResource.java
deleted file mode 100644
index ecbae2f818..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/main/java/org/kie/server/remote/rest/taskassigning/runtime/TaskAssigningRuntimeResource.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.remote.rest.taskassigning.runtime;
-
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Variant;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import io.swagger.annotations.Example;
-import io.swagger.annotations.ExampleProperty;
-import org.kie.server.api.model.taskassigning.PlanningExecutionResult;
-import org.kie.server.api.model.taskassigning.PlanningItemList;
-import org.kie.server.api.model.taskassigning.TaskData;
-import org.kie.server.api.model.taskassigning.TaskDataList;
-import org.kie.server.remote.rest.common.Header;
-import org.kie.server.services.api.KieServerRegistry;
-import org.kie.server.services.impl.marshal.MarshallerHelper;
-import org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeServiceBase;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.kie.server.api.model.taskassigning.TaskAssigningRestURI.TASK_ASSIGNING_EXECUTE_PLANNING_URI;
-import static org.kie.server.api.model.taskassigning.TaskAssigningRestURI.TASK_ASSIGNING_QUERIES_TASK_DATA_URI;
-import static org.kie.server.api.model.taskassigning.TaskAssigningRestURI.TASK_ASSIGNING_RUNTIME_URI;
-import static org.kie.server.remote.rest.common.util.RestUtils.buildConversationIdHeader;
-import static org.kie.server.remote.rest.common.util.RestUtils.createCorrectVariant;
-import static org.kie.server.remote.rest.common.util.RestUtils.errorMessage;
-import static org.kie.server.remote.rest.common.util.RestUtils.getContentType;
-import static org.kie.server.remote.rest.common.util.RestUtils.getVariant;
-import static org.kie.server.remote.rest.common.util.RestUtils.internalServerError;
-import static org.kie.server.remote.rest.taskassigning.runtime.docs.ParameterSamples.TASKS_QUERY_PARAMS_MAP_EXAMPLE_JSON;
-import static org.kie.server.remote.rest.taskassigning.runtime.docs.ParameterSamples.TASKS_QUERY_PARAMS_MAP_EXAMPLE_XML;
-
-@Api(value = "Task assigning integration")
-@Path("server/" + TASK_ASSIGNING_RUNTIME_URI)
-public class TaskAssigningRuntimeResource {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(TaskAssigningRuntimeResource.class);
-
- private TaskAssigningRuntimeServiceBase runtimeServiceBase;
- private KieServerRegistry context;
- private MarshallerHelper marshallerHelper;
-
- public TaskAssigningRuntimeResource(TaskAssigningRuntimeServiceBase runtimeServiceBase,
- KieServerRegistry context) {
- this.runtimeServiceBase = runtimeServiceBase;
- this.context = context;
- this.marshallerHelper = new MarshallerHelper(context);
- }
-
- @ApiOperation(value = "Executes a planning into the processes runtime.",
- notes = "This operation is intended for the task assigning integration implementation, third parties should avoid using it.",
- response = PlanningExecutionResult.class)
- @POST
- @Path(TASK_ASSIGNING_EXECUTE_PLANNING_URI)
- @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
- @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
- public Response executePlanning(@javax.ws.rs.core.Context HttpHeaders headers,
- @ApiParam(value = "identifier of the user to execute the planning on behalf of", required = true) @QueryParam("user") String userId,
- @ApiParam(value = "planning definition represented as PlanningItemList", required = true) String payload) {
- final Variant v = getVariant(headers);
- // no container id available so only used to transfer conversation id if given by client
- final Header conversationIdHeader = buildConversationIdHeader("", context, headers);
- try {
- final String contentType = getContentType(headers);
- final PlanningItemList planningItemList = marshallerHelper.unmarshal(payload,
- contentType,
- PlanningItemList.class);
- final PlanningExecutionResult result = runtimeServiceBase.executePlanning(planningItemList, userId);
- return createCorrectVariant(result, headers, Response.Status.OK, conversationIdHeader);
- } catch (Exception e) {
- LOGGER.error("Unexpected error executing planning {}", e.getMessage(), e);
- return internalServerError(errorMessage(e), v);
- }
- }
-
- @ApiOperation(value = "Executes the task assigning integration query for returning the tasks information as a TaskDataList.",
- notes = "This operation is mainly intended for the tasks assigning integration implementation, third parties are recommended to use the queries described in the task assigning getting started guide.",
- response = TaskDataList.class)
- @POST
- @Path(TASK_ASSIGNING_QUERIES_TASK_DATA_URI)
- @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
- @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
- public Response executeTasksQuery(@javax.ws.rs.core.Context HttpHeaders headers,
- @ApiParam(value = "map with the query parameters", required = true, examples = @Example(value = {
- @ExampleProperty(mediaType = MediaType.APPLICATION_JSON, value = TASKS_QUERY_PARAMS_MAP_EXAMPLE_JSON),
- @ExampleProperty(mediaType = MediaType.APPLICATION_XML, value = TASKS_QUERY_PARAMS_MAP_EXAMPLE_XML)})) String payload) {
- final Variant v = getVariant(headers);
- // no container id available so only used to transfer conversation id if given by client
- final Header conversationIdHeader = buildConversationIdHeader("", context, headers);
- try {
- String contentType = getContentType(headers);
- @SuppressWarnings("unchecked")
- final Map queryParameters = marshallerHelper.unmarshal(payload,
- contentType,
- Map.class);
- final LocalDateTime queryTime = LocalDateTime.now();
- final List taskDataList = runtimeServiceBase.executeFindTasksQuery(queryParameters);
- final TaskDataList result = new TaskDataList(taskDataList);
- result.setQueryTime(queryTime);
- return createCorrectVariant(result, headers, Response.Status.OK, conversationIdHeader);
- } catch (Exception e) {
- LOGGER.error("Unexpected error finding tasks {}", e.getMessage(), e);
- return internalServerError(errorMessage(e), v, conversationIdHeader);
- }
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/main/java/org/kie/server/remote/rest/taskassigning/runtime/TaskAssigningRuntimeRestApplicationComponentsService.java b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/main/java/org/kie/server/remote/rest/taskassigning/runtime/TaskAssigningRuntimeRestApplicationComponentsService.java
deleted file mode 100644
index 9fb550e5a0..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/main/java/org/kie/server/remote/rest/taskassigning/runtime/TaskAssigningRuntimeRestApplicationComponentsService.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.remote.rest.taskassigning.runtime;
-
-import java.util.Collection;
-import java.util.Collections;
-
-import org.kie.server.services.api.KieServerApplicationComponentsService;
-import org.kie.server.services.api.KieServerRegistry;
-import org.kie.server.services.api.SupportedTransports;
-import org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtension;
-import org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeServiceBase;
-
-public class TaskAssigningRuntimeRestApplicationComponentsService implements KieServerApplicationComponentsService {
-
- private static final String OWNER_EXTENSION = TaskAssigningRuntimeKieServerExtension.EXTENSION_NAME;
-
- @Override
- public Collection getAppComponents(String extension, SupportedTransports type, Object... services) {
- if (!OWNER_EXTENSION.equals(extension)) {
- return Collections.emptyList();
- }
- TaskAssigningRuntimeServiceBase taskAssigningRuntimeServiceBase = null;
- KieServerRegistry context = null;
-
- for (Object object : services) {
- // in case given service is null (meaning was not configured) continue with next one
- if (object != null) {
- if (TaskAssigningRuntimeServiceBase.class.isAssignableFrom(object.getClass())) {
- taskAssigningRuntimeServiceBase = (TaskAssigningRuntimeServiceBase) object;
- } else if (KieServerRegistry.class.isAssignableFrom(object.getClass())) {
- context = (KieServerRegistry) object;
- }
- }
- }
-
- return Collections.singleton(new TaskAssigningRuntimeResource(taskAssigningRuntimeServiceBase, context));
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/main/java/org/kie/server/remote/rest/taskassigning/runtime/docs/ParameterSamples.java b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/main/java/org/kie/server/remote/rest/taskassigning/runtime/docs/ParameterSamples.java
deleted file mode 100644
index 6e84f03519..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/main/java/org/kie/server/remote/rest/taskassigning/runtime/docs/ParameterSamples.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.remote.rest.taskassigning.runtime.docs;
-
-/**
- * Example values for the TaskAssigning API.
- */
-public class ParameterSamples {
-
- private ParameterSamples() {
- }
-
- public static final String TASKS_QUERY_PARAMS_MAP_EXAMPLE_JSON = "{\n" +
- " \"fromTaskId\" : 0,\n" +
- " \"page\" : 0,\n" +
- " \"pageSize\" : 30,\n" +
- " \"status\" : [ \"Reserved\", \"InProgress\", \"Suspended\" ]\n" +
- "}";
-
- public static final String TASKS_QUERY_PARAMS_MAP_EXAMPLE_XML = "\n" +
- "\n" +
- " \n" +
- " \n" +
- " fromTaskId\n" +
- " 0\n" +
- " \n" +
- " \n" +
- " page\n" +
- " 0\n" +
- " \n" +
- " \n" +
- " pageSize\n" +
- " 30\n" +
- " \n" +
- " \n" +
- " status\n" +
- " \n" +
- " \n" +
- " Reserved\n" +
- " InProgress\n" +
- " Suspended\n" +
- " \n" +
- " \n" +
- " \n" +
- " \n" +
- "";
-}
-
-
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerApplicationComponentsService b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerApplicationComponentsService
deleted file mode 100644
index 5ee4db458a..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerApplicationComponentsService
+++ /dev/null
@@ -1 +0,0 @@
-org.kie.server.remote.rest.taskassigning.runtime.TaskAssigningRuntimeRestApplicationComponentsService
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/test/java/org/kie/server/remote/rest/taskassigning/runtime/TaskAssigningRuntimeResourceTest.java b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/test/java/org/kie/server/remote/rest/taskassigning/runtime/TaskAssigningRuntimeResourceTest.java
deleted file mode 100644
index a78ffd5839..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/test/java/org/kie/server/remote/rest/taskassigning/runtime/TaskAssigningRuntimeResourceTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.remote.rest.taskassigning.runtime;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MultivaluedHashMap;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.kie.server.api.marshalling.Marshaller;
-import org.kie.server.api.marshalling.MarshallerFactory;
-import org.kie.server.api.model.taskassigning.PlanningExecutionResult;
-import org.kie.server.api.model.taskassigning.PlanningItemList;
-import org.kie.server.api.model.taskassigning.TaskData;
-import org.kie.server.api.model.taskassigning.TaskDataList;
-import org.kie.server.services.api.KieServerRegistry;
-import org.kie.server.services.impl.KieServerRegistryImpl;
-import org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeServiceBase;
-import org.mockito.Mock;
-import org.mockito.Spy;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.junit.Assert.assertEquals;
-import static org.kie.server.api.KieServerConstants.KIE_CONTENT_TYPE_HEADER;
-import static org.kie.server.api.marshalling.MarshallingFormat.XSTREAM;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public class TaskAssigningRuntimeResourceTest {
-
- private static final String USER_ID = "USER_ID";
-
- @Mock
- private HttpHeaders httpHeaders;
-
- @Mock
- private TaskAssigningRuntimeServiceBase runtimeServiceBase;
-
- @Spy
- private KieServerRegistry kieServerRegistry = new KieServerRegistryImpl();
-
- private TaskAssigningRuntimeResource resource;
-
- @Before
- public void setUp() {
- when(httpHeaders.getRequestHeaders()).thenReturn(new MultivaluedHashMap<>());
- when(httpHeaders.getRequestHeader(KIE_CONTENT_TYPE_HEADER)).thenReturn(Collections.singletonList(XSTREAM.getType()));
- resource = new TaskAssigningRuntimeResource(runtimeServiceBase, kieServerRegistry);
- }
-
- @Test
- public void executePlanning() {
- Marshaller marshaller = MarshallerFactory.getMarshaller(XSTREAM, this.getClass().getClassLoader());
- PlanningItemList planningItemList = new PlanningItemList();
- String payload = marshaller.marshall(planningItemList);
-
- PlanningExecutionResult expectedResult = PlanningExecutionResult.builder().build();
- when(runtimeServiceBase.executePlanning(eq(planningItemList), eq(USER_ID))).thenReturn(expectedResult);
-
- String rawResult = resource.executePlanning(httpHeaders, USER_ID, payload).getEntity().toString();
- String expectedResultInRawFormat = marshaller.marshall(expectedResult);
- assertEquals(expectedResultInRawFormat, rawResult);
- }
-
- @Test
- public void executeFindTasksQuery() {
- Marshaller marshaller = MarshallerFactory.getMarshaller(XSTREAM, this.getClass().getClassLoader());
- Map params = new HashMap<>();
- params.put("param", "value");
- String payload = marshaller.marshall(params);
-
- List expectedResult = new ArrayList<>();
- expectedResult.add(TaskData.builder()
- .taskId(1L)
- .name("SomeTask")
- .build());
- when(runtimeServiceBase.executeFindTasksQuery(eq(params))).thenReturn(expectedResult);
-
- String rawResult = resource.executeTasksQuery(httpHeaders, payload).getEntity().toString();
- TaskDataList unMarshalledResult = marshaller.unmarshall(rawResult, TaskDataList.class);
- assertEquals(expectedResult, unMarshalledResult.getItems());
- }
-}
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/test/java/org/kie/server/remote/rest/taskassigning/runtime/TaskAssigningRuntimeRestApplicationComponentsServiceTest.java b/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/test/java/org/kie/server/remote/rest/taskassigning/runtime/TaskAssigningRuntimeRestApplicationComponentsServiceTest.java
deleted file mode 100644
index 12dcc48063..0000000000
--- a/kie-server-parent/kie-server-remote/kie-server-rest/kie-server-rest-task-assigning-runtime/src/test/java/org/kie/server/remote/rest/taskassigning/runtime/TaskAssigningRuntimeRestApplicationComponentsServiceTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.remote.rest.taskassigning.runtime;
-
-import java.util.Collection;
-
-import org.junit.Test;
-import org.kie.server.services.api.KieServerRegistry;
-import org.kie.server.services.api.SupportedTransports;
-import org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtension;
-import org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeServiceBase;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-
-public class TaskAssigningRuntimeRestApplicationComponentsServiceTest {
-
- @Test
- public void getAppComponents() {
- TaskAssigningRuntimeServiceBase serviceMock = mock(TaskAssigningRuntimeServiceBase.class);
- KieServerRegistry registryMock = mock(KieServerRegistry.class);
-
- TaskAssigningRuntimeRestApplicationComponentsService componentsService = new TaskAssigningRuntimeRestApplicationComponentsService();
- Collection result = componentsService.getAppComponents(TaskAssigningRuntimeKieServerExtension.EXTENSION_NAME,
- SupportedTransports.REST,
- serviceMock,
- registryMock);
- assertEquals(1, result.size());
- assertTrue(result.iterator().next() instanceof TaskAssigningRuntimeResource);
- }
-}
diff --git a/kie-server-parent/kie-server-remote/kie-server-rest/pom.xml b/kie-server-parent/kie-server-remote/kie-server-rest/pom.xml
index e17042b3aa..8f697788e4 100644
--- a/kie-server-parent/kie-server-remote/kie-server-rest/pom.xml
+++ b/kie-server-parent/kie-server-remote/kie-server-rest/pom.xml
@@ -19,13 +19,11 @@
kie-server-rest-jbpmkie-server-rest-droolskie-server-rest-jbpm-ui
- kie-server-rest-optaplannerkie-server-rest-case-mgmtkie-server-rest-dmnkie-server-rest-swaggerkie-server-rest-prometheuskie-server-rest-scenario-simulation
- kie-server-rest-task-assigning-runtime
diff --git a/kie-server-parent/kie-server-router/kie-server-router-proxy/src/main/java/org/kie/server/router/KieServerRouterResponsesUtil.java b/kie-server-parent/kie-server-router/kie-server-router-proxy/src/main/java/org/kie/server/router/KieServerRouterResponsesUtil.java
index 92cdb68860..06c48902c1 100644
--- a/kie-server-parent/kie-server-router/kie-server-router-proxy/src/main/java/org/kie/server/router/KieServerRouterResponsesUtil.java
+++ b/kie-server-parent/kie-server-router/kie-server-router-proxy/src/main/java/org/kie/server/router/KieServerRouterResponsesUtil.java
@@ -27,7 +27,7 @@ public static String buildServerInfo (KieServerRouterEnvironment environment) {
" \"version\" : \"LATEST\",\n" +
" \"name\" : \"" + environment.getRouterName() + "\",\n" +
" \"location\" : \"" + environment.getRouterExternalUrl() + "\",\n" +
- " \"capabilities\" : [ \"KieServer\", \"BRM\", \"BPM\", \"CaseMgmt\", \"BPM-UI\", \"BRP\" ],\n" +
+ " \"capabilities\" : [ \"KieServer\", \"BRM\", \"BPM\", \"CaseMgmt\", \"BPM-UI\" ],\n" +
" \"id\" : \"" + environment.getRouterId() + "\"\n" +
"}";
}
@@ -40,7 +40,6 @@ public static String buildJAXBServerInfoReponse(KieServerRouterEnvironment envir
" BPM\n"+
" CaseMgmt\n"+
" BPM-UI\n"+
- " BRP\n"+
" " + environment.getRouterExternalUrl() + "\n"+
" \n"+
" " + environment.getRouterName() + "\n"+
@@ -59,7 +58,7 @@ public static String buildJSONServerInfoReponse(KieServerRouterEnvironment envir
" \"version\" : \"LATEST\",\n"+
" \"name\" : \"" + environment.getRouterName() + "\",\n"+
" \"location\" : \"" + environment.getRouterExternalUrl() + "\",\n"+
- " \"capabilities\" : [ \"KieServer\", \"BRM\", \"BPM\", \"CaseMgmt\", \"BPM-UI\", \"BRP\" ],\n"+
+ " \"capabilities\" : [ \"KieServer\", \"BRM\", \"BPM\", \"CaseMgmt\", \"BPM-UI\" ],\n"+
" \"id\" : \"" + environment.getRouterId() + "\"\n"+
" }\n"+
" }\n"+
@@ -81,7 +80,6 @@ public static String buildXSTREAMServerInfoReponse(KieServerRouterEnvironment en
" BPM\n"+
" CaseMgmt\n"+
" BPM-UI\n"+
- " BRP\n"+
" \n" +
" \n"+
"";
diff --git a/kie-server-parent/kie-server-router/kie-server-router-proxy/src/main/java/org/kie/server/router/proxy/aggragate/JaxbXMLResponseAggregator.java b/kie-server-parent/kie-server-router/kie-server-router-proxy/src/main/java/org/kie/server/router/proxy/aggragate/JaxbXMLResponseAggregator.java
index 6669171fd5..5494668d3d 100644
--- a/kie-server-parent/kie-server-router/kie-server-router-proxy/src/main/java/org/kie/server/router/proxy/aggragate/JaxbXMLResponseAggregator.java
+++ b/kie-server-parent/kie-server-router/kie-server-router-proxy/src/main/java/org/kie/server/router/proxy/aggragate/JaxbXMLResponseAggregator.java
@@ -54,7 +54,6 @@ public class JaxbXMLResponseAggregator extends XMLResponseAggregator {
"node-instance",
"process-instance",
"request-info-instance",
- "solver",
"task-attachment",
"task-comment",
"task-event-instance",
diff --git a/kie-server-parent/kie-server-router/kie-server-router-proxy/src/main/java/org/kie/server/router/proxy/aggragate/XstreamXMLResponseAggregator.java b/kie-server-parent/kie-server-router/kie-server-router-proxy/src/main/java/org/kie/server/router/proxy/aggragate/XstreamXMLResponseAggregator.java
index 7c955e47ce..7654f1fcae 100644
--- a/kie-server-parent/kie-server-router/kie-server-router-proxy/src/main/java/org/kie/server/router/proxy/aggragate/XstreamXMLResponseAggregator.java
+++ b/kie-server-parent/kie-server-router/kie-server-router-proxy/src/main/java/org/kie/server/router/proxy/aggragate/XstreamXMLResponseAggregator.java
@@ -53,7 +53,6 @@ public class XstreamXMLResponseAggregator extends XMLResponseAggregator {
"nodeInstances",
"processInstances",
"requestInfoInstances",
- "solver",
"taskAttachments",
"taskComments",
"taskEvents",
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/.gitignore b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/.gitignore
deleted file mode 100644
index 222af0cf11..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-/target
-/local
-
-# Eclipse, Netbeans and IntelliJ files
-/.*
-!.gitignore
-/nbproject
-/*.ipr
-/*.iws
-/*.iml
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/pom.xml b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/pom.xml
deleted file mode 100644
index a5d7b96d57..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/pom.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
- org.kie.server
- kie-server-services
- 7.75.0-SNAPSHOT
-
- 4.0.0
-
- kie-server-services-optaplanner
-
- KIE :: Execution Server :: Services :: OptaPlanner Extension
- KIE OptaPlanner Execution Server Extension
-
-
- org.kie.server.services.optaplanner
-
-
-
-
- org.kie
- kie-api
-
-
- org.kie
- kie-internal
-
-
- org.drools
- drools-core
-
-
- org.drools
- drools-compiler
-
-
- org.drools
- drools-ecj
-
-
-
- org.kie.server
- kie-server-api
-
-
- org.kie.server
- kie-server-services-common
-
-
- org.kie.server
- kie-server-services-drools
-
-
-
- org.optaplanner
- optaplanner-core
-
-
-
- org.optaplanner
- optaplanner-workbench-models-datamodel-api
- runtime
-
-
-
- org.kie.server
- kie-server-services-prometheus
-
-
-
- org.slf4j
- slf4j-api
-
-
-
- org.apache.commons
- commons-lang3
-
-
-
-
- org.assertj
- assertj-core
- test
-
-
-
-
-
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/OptaplannerCommandServiceImpl.java b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/OptaplannerCommandServiceImpl.java
deleted file mode 100644
index f45ac7d658..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/OptaplannerCommandServiceImpl.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright 2016 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.optaplanner;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.kie.server.api.commands.CommandScript;
-import org.kie.server.api.commands.optaplanner.AddProblemFactChangeCommand;
-import org.kie.server.api.commands.optaplanner.AddProblemFactChangesCommand;
-import org.kie.server.api.commands.optaplanner.CreateSolverCommand;
-import org.kie.server.api.commands.optaplanner.DisposeSolverCommand;
-import org.kie.server.api.commands.optaplanner.GetSolverCommand;
-import org.kie.server.api.commands.optaplanner.GetSolverWithBestSolutionCommand;
-import org.kie.server.api.commands.optaplanner.GetSolversCommand;
-import org.kie.server.api.commands.optaplanner.IsEveryProblemFactChangeProcessedCommand;
-import org.kie.server.api.commands.optaplanner.SolvePlanningProblemCommand;
-import org.kie.server.api.commands.optaplanner.TerminateSolverEarlyCommand;
-import org.kie.server.api.marshalling.Marshaller;
-import org.kie.server.api.marshalling.MarshallingFormat;
-import org.kie.server.api.marshalling.ModelWrapper;
-import org.kie.server.api.model.KieServerCommand;
-import org.kie.server.api.model.ServiceResponse;
-import org.kie.server.api.model.ServiceResponsesList;
-import org.kie.server.api.model.instance.SolverInstance;
-import org.kie.server.services.api.KieContainerCommandService;
-import org.kie.server.services.api.KieServerRegistry;
-import org.kie.server.services.impl.KieContainerInstanceImpl;
-import org.kie.server.services.impl.locator.ContainerLocatorProvider;
-import org.kie.server.services.impl.marshal.MarshallerHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class OptaplannerCommandServiceImpl
- implements KieContainerCommandService {
-
- private static final Logger logger = LoggerFactory.getLogger(OptaplannerCommandServiceImpl.class);
-
- private final KieServerRegistry context;
-
- private final SolverServiceBase solverService;
-
- private final MarshallerHelper marshallerHelper;
-
- public OptaplannerCommandServiceImpl(
- KieServerRegistry context,
- SolverServiceBase solverService) {
-
- this.context = context;
- this.solverService = solverService;
- this.marshallerHelper = new MarshallerHelper(solverService.getKieServerRegistry());
- }
-
- @Override
- public ServiceResponse callContainer(String containerId,
- String payload,
- MarshallingFormat marshallingFormat,
- String classType) {
- return null;
- }
-
- @Override
- public ServiceResponsesList executeScript(CommandScript commands,
- MarshallingFormat marshallingFormat,
- String classType) {
- List> responses = new ArrayList<>();
-
- for (KieServerCommand command : commands.getCommands()) {
- try {
- ServiceResponse> response;
- logger.debug("About to execute command: {}",
- command);
- if (command instanceof CreateSolverCommand) {
- CreateSolverCommand createSolverCommand = (CreateSolverCommand) command;
- String containerId = context.getContainerId(createSolverCommand.getContainerId(),
- ContainerLocatorProvider.get().getLocator());
- SolverInstance instance = new SolverInstance();
- instance.setContainerId(containerId);
- instance.setSolverId(createSolverCommand.getSolverId());
- instance.setSolverConfigFile(createSolverCommand.getSolverConfigFile());
- response = solverService.createSolver(containerId,
- createSolverCommand.getSolverId(),
- instance);
- } else if (command instanceof GetSolversCommand) {
- GetSolversCommand getSolversCommand = (GetSolversCommand) command;
- String containerId = context.getContainerId(getSolversCommand.getContainerId(),
- ContainerLocatorProvider.get().getLocator());
- response = solverService.getSolvers(containerId);
- } else if (command instanceof GetSolverCommand) {
- GetSolverCommand getSolverCommand = (GetSolverCommand) command;
- String containerId = context.getContainerId(getSolverCommand.getContainerId(),
- ContainerLocatorProvider.get().getLocator());
- response = solverService.getSolver(containerId,
- getSolverCommand.getSolverId());
- } else if (command instanceof GetSolverWithBestSolutionCommand) {
- GetSolverWithBestSolutionCommand getSolverWithBestSolutionCommand
- = (GetSolverWithBestSolutionCommand) command;
- String containerId = context.getContainerId(getSolverWithBestSolutionCommand.getContainerId(),
- ContainerLocatorProvider.get().getLocator());
- response = solverService.getSolverWithBestSolution(containerId,
- getSolverWithBestSolutionCommand.getSolverId());
- } else if (command instanceof SolvePlanningProblemCommand) {
- SolvePlanningProblemCommand solvePlanningProblemCommand = (SolvePlanningProblemCommand) command;
- String containerId = context.getContainerId(solvePlanningProblemCommand.getContainerId(),
- ContainerLocatorProvider.get().getLocator());
- KieContainerInstanceImpl kc = context.getContainer(containerId);
- Marshaller marshaller = kc.getMarshaller(marshallingFormat);
- Object planningProblem = marshaller.unmarshall(solvePlanningProblemCommand.getPlanningProblem(),
- Object.class);
- response = solverService.solvePlanningProblem(containerId,
- solvePlanningProblemCommand.getSolverId(),
- planningProblem);
- } else if (command instanceof TerminateSolverEarlyCommand) {
- TerminateSolverEarlyCommand terminateSolverEarlyCommand = (TerminateSolverEarlyCommand) command;
- String containerId = context.getContainerId(terminateSolverEarlyCommand.getContainerId(),
- ContainerLocatorProvider.get().getLocator());
- response = solverService.terminateSolverEarly(containerId,
- terminateSolverEarlyCommand.getSolverId());
- } else if (command instanceof AddProblemFactChangeCommand) {
- AddProblemFactChangeCommand addProblemFactChangeCommand = (AddProblemFactChangeCommand) command;
- String containerId = context.getContainerId(addProblemFactChangeCommand.getContainerId(),
- ContainerLocatorProvider.get().getLocator());
- response = solverService.addProblemFactChanges(containerId,
- addProblemFactChangeCommand.getSolverId(),
- addProblemFactChangeCommand.getProblemFactChange());
- } else if (command instanceof AddProblemFactChangesCommand) {
- AddProblemFactChangesCommand addProblemFactChangesCommand = (AddProblemFactChangesCommand) command;
- String containerId = context.getContainerId(addProblemFactChangesCommand.getContainerId(),
- ContainerLocatorProvider.get().getLocator());
- response = solverService.addProblemFactChanges(containerId,
- addProblemFactChangesCommand.getSolverId(),
- addProblemFactChangesCommand.getProblemFactChanges());
- } else if (command instanceof IsEveryProblemFactChangeProcessedCommand) {
- IsEveryProblemFactChangeProcessedCommand isEveryProblemFactChangeProcessedCommand
- = (IsEveryProblemFactChangeProcessedCommand) command;
- String containerId = context
- .getContainerId(isEveryProblemFactChangeProcessedCommand.getContainerId(),
- ContainerLocatorProvider.get().getLocator());
- ServiceResponse everyProblemFactChangeProcessedResponse = solverService
- .isEveryProblemFactChangeProcessed(containerId,
- isEveryProblemFactChangeProcessedCommand.getSolverId());
- if (marshallingFormat.equals(MarshallingFormat.JAXB)) {
- Object wrappedResult = ModelWrapper.wrap(everyProblemFactChangeProcessedResponse.getResult());
- response = new ServiceResponse<>(everyProblemFactChangeProcessedResponse.getType(),
- everyProblemFactChangeProcessedResponse.getMsg(),
- wrappedResult);
- } else {
- response = everyProblemFactChangeProcessedResponse;
- }
- } else if (command instanceof DisposeSolverCommand) {
- DisposeSolverCommand disposeSolverCommand = (DisposeSolverCommand) command;
- String containerId = context.getContainerId(disposeSolverCommand.getContainerId(),
- ContainerLocatorProvider.get().getLocator());
- response = solverService.disposeSolver(containerId,
- disposeSolverCommand.getSolverId());
- } else {
- throw new IllegalStateException("Unsupported command: " + command);
- }
-
- logger.debug("Service returned response {}",
- response);
-
- // return successful result
- responses.add(response);
- } catch (Throwable e) {
- logger.error("Error while processing {} command",
- command,
- e);
- // return failure result
- responses.add(new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- e.getMessage()));
- }
- }
- logger.debug("About to return responses '{}'",
- responses);
- return new ServiceResponsesList(responses);
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/OptaplannerKieServerExtension.java b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/OptaplannerKieServerExtension.java
deleted file mode 100644
index f9de832e1c..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/OptaplannerKieServerExtension.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright 2015 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.optaplanner;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.ServiceLoader;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-import org.kie.server.api.KieServerConstants;
-import org.kie.server.api.model.Message;
-import org.kie.server.api.model.Severity;
-import org.kie.server.services.api.KieContainerInstance;
-import org.kie.server.services.api.KieServerApplicationComponentsService;
-import org.kie.server.services.api.KieServerExtension;
-import org.kie.server.services.api.KieServerRegistry;
-import org.kie.server.services.api.SupportedTransports;
-import org.kie.server.services.drools.DroolsKieServerExtension;
-import org.kie.server.services.impl.KieServerImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class OptaplannerKieServerExtension
- implements KieServerExtension {
-
- private static final Logger logger = LoggerFactory.getLogger(OptaplannerKieServerExtension.class);
-
- public static final String EXTENSION_NAME = "OptaPlanner";
-
- private static final Boolean DROOLS_DISABLED = Boolean.parseBoolean(
- System.getProperty(KieServerConstants.KIE_DROOLS_SERVER_EXT_DISABLED, "false"));
- private static final Boolean OPTAPLANNER_DISABLED = Boolean.parseBoolean(
- System.getProperty(KieServerConstants.KIE_OPTAPLANNER_SERVER_EXT_DISABLED, "false"));
-
- private KieServerRegistry registry;
- private SolverServiceBase solverServiceBase;
-
- // Optaplanner requires threads to run solvers
- // asynchronously. We can't use JEE managed threads
- // for this because they would red-flag the threads
- // that run for long periods. This first implementation
- // will use a standard java thread pool for the job.
- // If necessary, we will need to look for alternatives
- // in the future.
- private ExecutorService threadPool = null;
-
- private final List services = new ArrayList<>();
- private boolean initialized = false;
- private OptaplannerCommandServiceImpl optaplannerCommandService;
-
- @Override
- public boolean isInitialized() {
- return initialized;
- }
-
- @Override
- public boolean isActive() {
- return !OPTAPLANNER_DISABLED && !DROOLS_DISABLED;
- }
-
- @Override
- public void init(KieServerImpl kieServer, KieServerRegistry registry) {
- KieServerExtension droolsExtension = registry.getServerExtension(DroolsKieServerExtension.EXTENSION_NAME);
- if (droolsExtension == null) {
- logger.warn("No Drools extension available, quiting...");
- return;
- }
- this.registry = registry;
- // The following thread pool will have a max thread count equal to the number of cores on the machine minus 2,
- // leaving a few cores unoccupied to handle REST/JMS requests and run the OS.
- // If new jobs are submitted and all threads are busy, the default reject policy will kick in.
- int availableProcessorCount = Runtime.getRuntime().availableProcessors();
- int resolvedActiveThreadCount = Math.max(1, availableProcessorCount - 2);
- int queueSize = Integer.parseInt(System.getProperty(
- KieServerConstants.KIE_OPTAPLANNER_THREAD_POOL_QUEUE_SIZE, String.valueOf(resolvedActiveThreadCount)));
- logger.info("Creating a ThreadPoolExecutor with corePoolSize = " + resolvedActiveThreadCount + ","
- + " maximumPoolSize = " + resolvedActiveThreadCount + ", queueSize = " + queueSize);
- this.threadPool = new ThreadPoolExecutor(
- resolvedActiveThreadCount,
- resolvedActiveThreadCount,
- 10, // thread keep alive time
- TimeUnit.SECONDS,
- new ArrayBlockingQueue<>(queueSize)); // queue with a size
- this.solverServiceBase = new SolverServiceBase(registry, threadPool);
-
- this.optaplannerCommandService = new OptaplannerCommandServiceImpl(registry, solverServiceBase);
-
- this.services.add(solverServiceBase);
-
- initialized = true;
- }
-
- @Override
- public void destroy(KieServerImpl kieServer, KieServerRegistry registry) {
- if (this.threadPool != null) {
- this.threadPool.shutdownNow();
- }
- }
-
- @Override
- public void createContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) {
- }
-
- @Override
- public void updateContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) {
- // same as createContainer - no op
- }
-
- @Override
- public boolean isUpdateContainerAllowed(String id, KieContainerInstance kieContainerInstance, Map parameters) {
- return true;
- }
-
- @Override
- public void disposeContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) {
- solverServiceBase.disposeSolversForContainer(id, kieContainerInstance);
- }
-
- @Override
- public List getAppComponents(SupportedTransports type) {
- ServiceLoader appComponentsServices
- = ServiceLoader.load(KieServerApplicationComponentsService.class);
- List appComponentsList = new ArrayList<>();
- Object[] services = {solverServiceBase, registry};
- for (KieServerApplicationComponentsService appComponentsService : appComponentsServices) {
- appComponentsList.addAll(appComponentsService.getAppComponents(EXTENSION_NAME, type, services));
- }
- return appComponentsList;
- }
-
- @Override
- public T getAppComponents(Class serviceType) {
- if (serviceType.isAssignableFrom(optaplannerCommandService.getClass())) {
- return (T) optaplannerCommandService;
- }
- if (serviceType.isAssignableFrom(solverServiceBase.getClass())) {
- return (T) solverServiceBase;
- }
- return null;
- }
-
- @Override
- public String getImplementedCapability() {
- return KieServerConstants.CAPABILITY_BRP;
- }
-
- @Override
- public List getServices() {
- return services;
- }
-
- @Override
- public String getExtensionName() {
- return EXTENSION_NAME;
- }
-
- @Override
- public Integer getStartOrder() {
- return 25;
- }
-
- @Override
- public String toString() {
- return EXTENSION_NAME + " KIE Server extension";
- }
-
- @Override
- public List healthCheck(boolean report) {
- List messages = KieServerExtension.super.healthCheck(report);
-
- if (this.threadPool.isTerminated() && this.initialized) {
- messages.add(new Message(Severity.ERROR, getExtensionName() + " failed due to thread pool is terminated while the extension is still alive"));
- } else {
- if (report) {
- messages.add(new Message(Severity.INFO, getExtensionName() + " is alive"));
- }
- }
- return messages;
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/SolverInstanceContext.java b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/SolverInstanceContext.java
deleted file mode 100644
index d477f415d2..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/SolverInstanceContext.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2016 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.optaplanner;
-
-import org.kie.server.api.model.instance.SolverInstance;
-import org.optaplanner.core.api.solver.Solver;
-
-/**
- * Aggregates solver instance context information.
- */
-public class SolverInstanceContext {
-
- private SolverInstance instance;
- private Solver solver;
-
- public SolverInstanceContext() {
- }
-
- public SolverInstanceContext(SolverInstance instance) {
- this.instance = instance;
- }
-
- public SolverInstance getInstance() {
- return instance;
- }
-
- public void setInstance(SolverInstance instance) {
- this.instance = instance;
- }
-
- public Solver getSolver() {
- return solver;
- }
-
- public void setSolver(Solver solver) {
- this.solver = solver;
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/SolverServiceBase.java b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/SolverServiceBase.java
deleted file mode 100644
index 8771b70d7b..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/SolverServiceBase.java
+++ /dev/null
@@ -1,581 +0,0 @@
-/*
- * Copyright 2015 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.optaplanner;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.stream.Collectors;
-
-import org.apache.commons.lang3.StringUtils;
-import org.kie.api.runtime.KieContainer;
-import org.kie.server.api.model.KieServerConfigProviderLoader;
-import org.kie.server.api.model.ServiceResponse;
-import org.kie.server.api.model.instance.ScoreWrapper;
-import org.kie.server.api.model.instance.SolverInstance;
-import org.kie.server.api.model.instance.SolverInstanceList;
-import org.kie.server.services.api.KieContainerInstance;
-import org.kie.server.services.api.KieServerRegistry;
-import org.kie.server.services.impl.KieContainerInstanceImpl;
-import org.kie.server.services.prometheus.PrometheusKieServerExtension;
-import org.kie.server.services.prometheus.PrometheusMetricsSolverListener;
-import org.optaplanner.core.api.score.Score;
-import org.optaplanner.core.api.solver.Solver;
-import org.optaplanner.core.api.solver.SolverFactory;
-import org.optaplanner.core.config.solver.SolverConfig;
-import org.optaplanner.core.impl.solver.AbstractSolver;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.kie.server.services.optaplanner.OptaplannerKieServerExtension.EXTENSION_NAME;
-
-/**
- * OptaPlanner solver service.
- */
-public class SolverServiceBase {
-
- public static final String SCAN_EXCLUDED_PACKAGES_CONFIG_ITEM = EXTENSION_NAME + ".scanExcludedPackages";
-
- private static final Logger logger = LoggerFactory.getLogger(SolverServiceBase.class);
- private final ExecutorService executor;
-
- private final KieServerRegistry context;
- private final Map solvers = new ConcurrentHashMap<>();
- private final List scanExcludedPackages;
-
- public SolverServiceBase(KieServerRegistry context,
- ExecutorService executorService) {
- this.context = context;
- this.executor = executorService;
- this.scanExcludedPackages = loadScanExcludedPackages();
- }
-
- public ServiceResponse createSolver(String containerId,
- String solverId,
- SolverInstance instance) {
- if (instance == null || instance.getSolverConfigFile() == null) {
- logger.error("Error creating solver. Configuration file name is null: " + instance);
- return new ServiceResponse<>(
- ServiceResponse.ResponseType.FAILURE,
- "Failed to create solver for container " + containerId
- + ". Solver configuration file is null: " + instance);
- }
- instance.setContainerId(containerId);
- instance.setSolverId(solverId);
-
- try {
- KieContainerInstanceImpl ci = context.getContainer(containerId);
- if (ci == null) {
- logger.error("Error creating solver. Container does not exist: " + containerId);
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Failed to create solver. Container does not exist: " + containerId);
- }
-
- // have to synchronize on the ci or a concurrent call to dispose may create inconsistencies
- synchronized (ci) {
- if (solvers.containsKey(instance.getSolverInstanceKey())) {
- logger.error("Error creating solver. Solver '" + solverId + "' already exists for container '" + containerId + "'.");
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Failed to create solver. Solver '" + solverId
- + "' already exists for container '" + containerId + "'.");
- }
- SolverInstanceContext sic = new SolverInstanceContext(instance);
- if (instance.getStatus() == null) {
- instance.setStatus(SolverInstance.SolverStatus.NOT_SOLVING);
- }
-
- try {
- Solver solver = buildSolver(ci.getKieContainer(),
- instance.getSolverConfigFile());
-
- sic.setSolver(solver);
- registerListener(solver, solverId);
-
- updateSolverInstance(sic);
-
- solvers.put(instance.getSolverInstanceKey(),
- sic);
-
- logger.info("Solver '" + solverId + "' successfully created in container '" + containerId + "'");
- return new ServiceResponse<>(ServiceResponse.ResponseType.SUCCESS,
- "Solver '" + solverId + "' successfully created in container '" + containerId + "'",
- instance);
- } catch (Exception e) {
- logger.error("Error creating solver factory for solver " + instance,
- e);
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Error creating solver factory for solver: " + e.getMessage(),
- instance);
- }
- }
- } catch (Exception e) {
- logger.error("Error creating solver '" + solverId + "' in container '" + containerId + "'",
- e);
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Error creating solver '" + solverId + "' in container '" + containerId + "': " + e.getMessage(),
- instance);
- }
- }
-
- private Solver buildSolver(KieContainer container, String solverConfigResource) {
- SolverConfig solverConfig = SolverConfig.createFromXmlResource(solverConfigResource, container.getClassLoader());
- if (solverConfig.getScanAnnotatedClassesConfig() != null && !scanExcludedPackages.isEmpty()) {
- List scanExcludedPackagesToSet = new ArrayList<>();
- if (solverConfig.getScanAnnotatedClassesConfig().getPackageExcludeList() != null) {
- scanExcludedPackagesToSet.addAll(solverConfig.getScanAnnotatedClassesConfig().getPackageExcludeList());
- }
- scanExcludedPackagesToSet.addAll(scanExcludedPackages);
- solverConfig.getScanAnnotatedClassesConfig().setPackageExcludeList(scanExcludedPackagesToSet);
- }
- SolverFactory solverFactory = SolverFactory.createFromKieContainer(container, solverConfig);
- return newSolver(solverFactory);
- }
-
- /**
- * facilitates testing
- */
- Solver newSolver(SolverFactory solverFactory) {
- return solverFactory.buildSolver();
- }
-
- public ServiceResponse getSolvers(String containerId) {
- try {
- List sl = getSolversForContainer(containerId);
- return new ServiceResponse<>(
- ServiceResponse.ResponseType.SUCCESS,
- "Solvers list successfully retrieved from container '" + containerId + "'",
- new SolverInstanceList(sl));
- } catch (Exception e) {
- logger.error("Error retrieving solvers list from container '" + containerId + "'",
- e);
- return new ServiceResponse<>(
- ServiceResponse.ResponseType.FAILURE,
- "Error retrieving solvers list from container '" + containerId + "'" + e.getMessage(),
- null);
- }
- }
-
- public ServiceResponse getSolver(String containerId,
- String solverId) {
- try {
- SolverInstanceContext sic = solvers.get(SolverInstance.getSolverInstanceKey(containerId,
- solverId));
- if (sic != null) {
- updateSolverInstance(sic);
- return new ServiceResponse<>(ServiceResponse.ResponseType.SUCCESS,
- "Solver '" + solverId + "' state successfully retrieved from container '" + containerId + "'",
- sic.getInstance());
- } else {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' not found in container '" + containerId + "'",
- null);
- }
- } catch (Exception e) {
- logger.error("Error retrieving solver '" + solverId + "' state from container '" + containerId + "'",
- e);
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Error retrieving solver '" + solverId + "' state from container '" + containerId + "'" + e.getMessage(),
- null);
- }
- }
-
- public ServiceResponse getSolverWithBestSolution(String containerId,
- String solverId) {
- try {
- SolverInstanceContext sic = solvers.get(SolverInstance.getSolverInstanceKey(containerId,
- solverId));
- if (sic != null) {
- updateSolverInstance(sic);
- sic.getInstance().setBestSolution(sic.getSolver().getBestSolution());
- return new ServiceResponse<>(ServiceResponse.ResponseType.SUCCESS,
- "Best computed solution for '" + solverId + "' successfully retrieved from container '" + containerId + "'",
- sic.getInstance());
- } else {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' not found in container '" + containerId + "'",
- null);
- }
- } catch (Exception e) {
- logger.error("Error retrieving solver '" + solverId + "' state from container '" + containerId + "'",
- e);
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Error retrieving solver '" + solverId + "' state from container '" + containerId + "'" + e.getMessage(),
- null);
- }
- }
-
- public ServiceResponse solvePlanningProblem(String containerId,
- String solverId,
- Object planningProblem) {
- try {
- SolverInstanceContext sic = solvers.get(SolverInstance.getSolverInstanceKey(containerId,
- solverId));
- if (sic != null) {
- synchronized (sic) {
- switch (sic.getInstance().getStatus()) {
- case SOLVING: {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' on container '" + containerId + "' is already executing.");
- }
- case TERMINATING_EARLY: {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' on container '" + containerId + "' has already terminated.");
- }
- case NOT_SOLVING: {
- if (planningProblem == null) {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Planning-problem is a mandatory field when starting the solver.");
- }
- updateSolverInstance(sic);
- solvePlanningProblem(sic,
- planningProblem);
- return new ServiceResponse<>(ServiceResponse.ResponseType.SUCCESS,
- "Solver '" + solverId + "' from container '" + containerId + "' successfully started.");
- }
- default: {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' on container '" + containerId + "' is in unrecognized state '" + sic.getInstance().getStatus() + "'.");
- }
- }
- }
- } else {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' not found in container '" + containerId + "'");
- }
- } catch (Exception e) {
- logger.error("Error retrieving solver '" + solverId + "' state from container '" + containerId + "'",
- e);
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Unknown error updating solver state.");
- }
- }
-
- public ServiceResponse terminateSolverEarly(String containerId,
- String solverId) {
- try {
- SolverInstanceContext sic = solvers.get(SolverInstance.getSolverInstanceKey(containerId,
- solverId));
- if (sic != null) {
- synchronized (sic) {
- switch (sic.getInstance().getStatus()) {
- case SOLVING: {
- terminateSolverEarly(sic);
- return new ServiceResponse<>(ServiceResponse.ResponseType.SUCCESS,
- "Solver '" + solverId + "' on container '" + containerId + "' successfully terminated.");
- }
- case TERMINATING_EARLY: {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' on container '" + containerId + "' already terminated.");
- }
- case NOT_SOLVING: {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' from container '" + containerId + "' is not executing.");
- }
- default: {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' on container '" + containerId + "' is in unrecognized state '" + sic.getInstance().getStatus() + "'.");
- }
- }
- }
- } else {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' not found in container '" + containerId + "'");
- }
- } catch (Exception e) {
- logger.error("Error retrieving solver '" + solverId + "' state from container '" + containerId + "'",
- e);
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Unknown error updating solver state.");
- }
- }
-
- public ServiceResponse addProblemFactChanges(String containerId,
- String solverId,
- Object problemFactChanges) {
- try {
- SolverInstanceContext sic = solvers.get(SolverInstance.getSolverInstanceKey(containerId,
- solverId));
- if (problemFactChanges instanceof List) {
- List problemFactChangesList = (List) problemFactChanges;
- Map indexClassNameErrorMap = new HashMap<>();
- for (int i = 0; i < problemFactChangesList.size(); i++) {
- Object problemFactChange = problemFactChangesList.get(i);
-
- if (!(problemFactChange instanceof ProblemFactChange)) {
- indexClassNameErrorMap.put(i,
- problemFactChange.getClass().getName());
- }
- }
- if (!indexClassNameErrorMap.isEmpty()) {
- String errorItemsString = indexClassNameErrorMap
- .entrySet()
- .stream()
- .map(e -> "[index " + e.getKey() + ", type: " + e.getValue().getClass() + "]")
- .collect(Collectors.joining(","));
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Items (" + errorItemsString + ") of supplied 'problemFactChangeObject' parameter are not instances of " + ProblemFactChange.class.getName() + ".");
- }
- return submitProblemFactChanges(sic,
- containerId,
- solverId,
- () -> sic.getSolver().addProblemFactChanges(problemFactChangesList));
- }
- if (!(problemFactChanges instanceof ProblemFactChange)) {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Supplied 'problemFactChangeObject' parameter is not an instance of " + ProblemFactChange.class.getName()
- + ". Actual parameter type: " + problemFactChanges.getClass().getName());
- }
- return submitProblemFactChanges(sic,
- containerId,
- solverId,
- () -> sic.getSolver().addProblemFactChange((ProblemFactChange) problemFactChanges));
- } catch (Exception e) {
- logger.error("Error adding problem fact change'" + problemFactChanges + "' to solver '" + solverId + "' from container '" + containerId + "'",
- e);
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Unknown error while adding problem fact change.");
- }
- }
-
- private ServiceResponse submitProblemFactChanges(
- final SolverInstanceContext sic,
- final String containerId,
- final String solverId,
- final Runnable solverAction) {
- if (sic != null) {
- synchronized (sic) {
- switch (sic.getInstance().getStatus()) {
- case SOLVING: {
- solverAction.run();
- return new ServiceResponse<>(ServiceResponse.ResponseType.SUCCESS,
- "Problem fact changes have been successfully submitted to solver '" + solverId + "' on container '" + containerId + "'.");
- }
- case TERMINATING_EARLY: {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' on container '" + containerId + "' has already terminated.");
- }
- case NOT_SOLVING: {
- return new ServiceResponse<>(ServiceResponse.ResponseType.SUCCESS,
- "Solver '" + solverId + "' on container '" + containerId + "' is not running.");
- }
- default: {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' on container '" + containerId + "' is in unrecognized state '" + sic.getInstance().getStatus() + "'.");
- }
- }
- }
- } else {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' not found in container '" + containerId + "'");
- }
- }
-
- public ServiceResponse isEveryProblemFactChangeProcessed(final String containerId,
- final String solverId) {
- try {
- SolverInstanceContext sic = solvers.get(SolverInstance.getSolverInstanceKey(containerId,
- solverId));
- if (sic != null) {
- synchronized (sic) {
- switch (sic.getInstance().getStatus()) {
- case SOLVING: {
- boolean everyProblemFactChangeProcessed = sic.getSolver().isEveryProblemFactChangeProcessed();
- return new ServiceResponse<>(ServiceResponse.ResponseType.SUCCESS,
- "Problem fact changes have been successfully queried from solver '" + solverId + "' on container '" + containerId + "'.",
- everyProblemFactChangeProcessed);
- }
- case TERMINATING_EARLY: {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' on container '" + containerId + "' already terminated.");
- }
- case NOT_SOLVING: {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' from container '" + containerId + "' is not executing.");
- }
- default: {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' on container '" + containerId + "' is in unrecognized state '" + sic.getInstance().getStatus() + "'.");
- }
- }
- }
- } else {
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' not found in container '" + containerId + "'");
- }
- } catch (Exception e) {
- logger.error("Error retrieving solver '" + solverId + "' state from container '" + containerId + "'",
- e);
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Unknown error querying problem facts processing state.");
- }
- }
-
- public ServiceResponse disposeSolver(String containerId,
- String solverId) {
- try {
- SolverInstanceContext sic = internalDisposeSolver(containerId,
- solverId);
- if (sic != null) {
- return new ServiceResponse<>(ServiceResponse.ResponseType.SUCCESS,
- "Solver '" + solverId + "' successfully disposed from container '" + containerId + "'",
- null);
- }
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Solver '" + solverId + "' from container '" + containerId + "' not found.",
- null);
- } catch (Exception e) {
- logger.error("Error disposing solver '" + solverId + "' from container '" + containerId + "'",
- e);
- return new ServiceResponse<>(ServiceResponse.ResponseType.FAILURE,
- "Error disposing solver '" + solverId + "' from container '" + containerId + "'. Message: " + e.getMessage(),
- null);
- }
- }
-
- public KieServerRegistry getKieServerRegistry() {
- return this.context;
- }
-
- public void disposeSolversForContainer(String containerId,
- KieContainerInstance kci) {
- List sfc = getSolversForContainer(containerId);
- for (SolverInstance si : sfc) {
- internalDisposeSolver(containerId,
- si.getSolverId());
- }
- }
-
- private List getSolversForContainer(String containerId) {
- List sl = new ArrayList<>(solvers.size());
- for (SolverInstanceContext sic : solvers.values()) {
- if (containerId.equalsIgnoreCase(sic.getInstance().getContainerId())) {
- updateSolverInstance(sic);
- sl.add(sic.getInstance());
- }
- }
- return sl;
- }
-
- private SolverInstanceContext internalDisposeSolver(String containerId,
- String solverId) {
- // need to dispose resources here
- SolverInstanceContext sic = solvers.remove(SolverInstance.getSolverInstanceKey(containerId,
- solverId));
- if (sic != null) {
- synchronized (sic) {
- if (sic.getInstance().getStatus() == SolverInstance.SolverStatus.SOLVING) {
- terminateSolverEarly(sic);
- }
- }
- }
- return sic;
- }
-
- private void updateSolverInstance(SolverInstanceContext sic) {
- synchronized (sic) {
- // We keep track of the solver status ourselves, so there's no need to call buggy updateSolverStatus( sic );
- Score> bestScore = sic.getSolver().getBestScore();
-
- sic.getInstance().setScoreWrapper(new ScoreWrapper(bestScore));
- }
- }
-
- private void updateSolverStatus(SolverInstanceContext sic) {
- Solver> solver = sic.getSolver();
- if (!solver.isSolving()) {
- // TODO BUGGY because a solver might have been a scheduled to start, but not started yet
- // (especially immediately after solvePlanningProblem() call).
- sic.getInstance().setStatus(SolverInstance.SolverStatus.NOT_SOLVING);
- } else if (solver.isTerminateEarly()) {
- sic.getInstance().setStatus(SolverInstance.SolverStatus.TERMINATING_EARLY);
- } else {
- sic.getInstance().setStatus(SolverInstance.SolverStatus.SOLVING);
- }
- }
-
- private void solvePlanningProblem(final SolverInstanceContext sic,
- final Object planningSolution) {
- sic.getInstance().setBestSolution(null);
- sic.getInstance().setStatus(SolverInstance.SolverStatus.SOLVING);
- this.executor.execute(() -> {
- try {
- // If the executor's queue is full, it's possible that the solver gets canceled before it starts
- SolverInstance.SolverStatus status;
- synchronized (sic) {
- status = sic.getInstance().getStatus();
- // TODO Race condition: status turns into non-solving before solver starts
- // See https://issues.jboss.org/browse/PLANNER-540
- }
- if (status == SolverInstance.SolverStatus.SOLVING) {
- sic.getSolver().solve(planningSolution);
- }
- } catch (Exception e) {
- logger.error("Exception executing solver '" + sic.getInstance().getSolverId()
- + "' from container '" + sic.getInstance().getContainerId() + "'. Thread will terminate.",
- e);
- } finally {
- synchronized (sic) {
- sic.getInstance().setStatus(SolverInstance.SolverStatus.NOT_SOLVING);
- }
- }
- });
- }
-
- private void registerListener(Solver solver, String solverId) {
- PrometheusKieServerExtension extension = (PrometheusKieServerExtension) context.getServerExtension(PrometheusKieServerExtension.EXTENSION_NAME);
- if (extension != null) {
- ((AbstractSolver) solver).addPhaseLifecycleListener(new PrometheusMetricsSolverListener(solverId));
-
- // custom listeners; no need to check double listener registration as we call registerListener on solver create
- extension.getOptaPlannerListeners(solverId).forEach(l -> ((AbstractSolver) solver).addPhaseLifecycleListener(l));
- }
- }
-
- private void terminateSolverEarly(SolverInstanceContext sic) {
- synchronized (sic) {
- if (sic.getInstance().getStatus() == SolverInstance.SolverStatus.SOLVING) {
- sic.getInstance().setStatus(SolverInstance.SolverStatus.TERMINATING_EARLY);
- }
- }
- sic.getSolver().terminateEarly();
- }
-
- /**
- * @return The list of package names that must be excluded from scanning when OptaPlanner is scanning classes
- * marked e.g. as PlanningSolution when a SolverFactory is being built.
- *
- * KieServer modules that wants to declare system packages for being excluded can use KieServerConfigProviders and
- * return a list of KieServerConfigItems with the name SCAN_EXCLUDED_PACKAGES_CONFIG_ITEM.
- */
- private List loadScanExcludedPackages() {
- return KieServerConfigProviderLoader.getConfigItems().stream()
- .filter(Objects::nonNull)
- .filter(item -> SCAN_EXCLUDED_PACKAGES_CONFIG_ITEM.equals(item.getName()))
- .map(item -> StringUtils.trimToEmpty(item.getValue()))
- .filter(StringUtils::isNotEmpty)
- .flatMap(value -> Arrays.stream(value.split(",")))
- .map(StringUtils::trimToEmpty)
- .filter(StringUtils::isNotEmpty)
- .distinct()
- .collect(Collectors.toList());
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerExtension b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerExtension
deleted file mode 100644
index 4d2c5d5020..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerExtension
+++ /dev/null
@@ -1 +0,0 @@
-org.kie.server.services.optaplanner.OptaplannerKieServerExtension
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/java/org/kie/server/services/optaplanner/SolverServiceBaseTest.java b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/java/org/kie/server/services/optaplanner/SolverServiceBaseTest.java
deleted file mode 100644
index 4344ecbe1f..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/java/org/kie/server/services/optaplanner/SolverServiceBaseTest.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.optaplanner;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.ExecutorService;
-
-import org.drools.core.impl.InternalKieContainer;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.kie.server.api.model.ServiceResponse;
-import org.kie.server.api.model.instance.SolverInstance;
-import org.kie.server.services.api.KieServerRegistry;
-import org.kie.server.services.impl.KieContainerInstanceImpl;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.optaplanner.core.api.solver.Solver;
-import org.optaplanner.core.api.solver.SolverFactory;
-import org.optaplanner.core.config.domain.ScanAnnotatedClassesConfig;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public class SolverServiceBaseTest {
-
- private static final String CONTAINER_ID = "CONTAINER_ID";
- private static final String SOLVER_ID = "SOLVER_ID";
- private static final String SOLVER_CONFIG = "org/kie/server/services/optaplanner/SolverConfig.xml";
- private static final String SOLVER_CONFIG_WRONG = "org/kie/server/services/optaplanner/SolverConfigWrong.xml";
- private static final String SOLVER_CONFIG_GLOBAL_SCAN_SET = "org/kie/server/services/optaplanner/SolverConfigGlobalScanSet.xml";
- private static final String SOLVER_CONFIG_FILTERED_SCAN_SET = "org/kie/server/services/optaplanner/SolverConfigFilteredScanSet.xml";
-
- private static final String PRE_CONFIGURED_PACKAGE_INCLUDE = "pre.configured.package.include";
- private static final String PRE_CONFIGURED_PACKAGE_EXCLUDE = "pre.configured.package.exclude";
-
- private static final String CREATE_SOLVER_FOR_CONTAINER_ERROR = "Failed to create solver for container %s";
- private static final String CREATE_SOLVER_CONTAINER_NOT_EXISTS_ERROR = "Failed to create solver. Container does not exist: %s";
- private static final String CREATING_SOLVER_FACTORY_ERROR = "Error creating solver factory for solver: %s";
- private static final String SOLVER_ALREADY_EXISTS_ERROR = "Failed to create solver. Solver '%s' already exists for container '%s'.";
- private static final String SOLVER_CREATED_SUCCESSFULLY_MESSAGE = "Solver '%s' successfully created in container '%s'";
-
- @Mock
- private KieServerRegistry context;
-
- @Mock
- private ExecutorService executorService;
-
- @Mock
- private SolverInstance solverInstance;
-
- @Mock
- private KieContainerInstanceImpl containerInstance;
-
- @Mock
- private InternalKieContainer internalKieContainer;
-
- @Captor
- private ArgumentCaptor> solverFactory;
-
- @Mock
- private Solver solver;
-
- private SolverServiceBase serviceBase;
-
- @Before
- public void setUp() {
- solverInstance = new SolverInstance();
- solverInstance.setContainerId(CONTAINER_ID);
- solverInstance.setSolverId(SOLVER_ID);
- solverInstance.setSolverConfigFile(SOLVER_CONFIG);
-
- doReturn(internalKieContainer).when(containerInstance).getKieContainer();
- doReturn(getClass().getClassLoader()).when(internalKieContainer).getClassLoader();
- doReturn(containerInstance).when(context).getContainer(CONTAINER_ID);
-
- serviceBase = spy(new SolverServiceBase(context, executorService));
- }
-
- @Test
- public void createSolverWithInstanceNullFailure() {
- ServiceResponse response = serviceBase.createSolver(CONTAINER_ID, SOLVER_ID, null);
- assertFailure(response, String.format(CREATE_SOLVER_FOR_CONTAINER_ERROR, CONTAINER_ID));
- }
-
- @Test
- public void createSolverWithConfigFileNullFailure() {
- solverInstance.setSolverConfigFile(null);
- ServiceResponse response = serviceBase.createSolver(CONTAINER_ID, SOLVER_ID, solverInstance);
- assertFailure(response, String.format(CREATE_SOLVER_FOR_CONTAINER_ERROR, CONTAINER_ID));
- }
-
- @Test
- public void createSolverWithContainerNotExistsFailure() {
- when(context.getContainer(CONTAINER_ID)).thenReturn(null);
- ServiceResponse response = serviceBase.createSolver(CONTAINER_ID, SOLVER_ID, solverInstance);
- assertFailure(response, String.format(CREATE_SOLVER_CONTAINER_NOT_EXISTS_ERROR, CONTAINER_ID));
- }
-
- @Test
- public void createSolverWithSolverConfigurationFileWrongFailure() {
- solverInstance.setSolverConfigFile(SOLVER_CONFIG_WRONG);
- ServiceResponse response = serviceBase.createSolver(CONTAINER_ID, SOLVER_ID, solverInstance);
- assertFailure(response, String.format(CREATING_SOLVER_FACTORY_ERROR, ""));
- }
-
- @Test
- public void createSolverWithErrorCreatingSolverFailure() {
- String internalError = "An error was produced";
- doThrow(new RuntimeException(internalError))
- .when(serviceBase)
- .newSolver(any(SolverFactory.class));
-
- ServiceResponse response = serviceBase.createSolver(CONTAINER_ID, SOLVER_ID, solverInstance);
- assertBuildFactoryWasInvoked(null);
- assertFailure(response, String.format(CREATING_SOLVER_FACTORY_ERROR, internalError));
- }
-
- @Test
- public void createSolverWithSolverAlreadyExistsFailure() {
- doReturn(solver).when(serviceBase).newSolver(any(SolverFactory.class));
-
- serviceBase.createSolver(CONTAINER_ID, SOLVER_ID, solverInstance);
- assertBuildFactoryWasInvoked(null);
-
- ServiceResponse response = serviceBase.createSolver(CONTAINER_ID, SOLVER_ID, solverInstance);
- assertFailure(response, String.format(SOLVER_ALREADY_EXISTS_ERROR, SOLVER_ID, CONTAINER_ID));
- }
-
- @Test
- public void createSolverWithNoScanSetSuccessful() {
- doReturn(solver).when(serviceBase).newSolver(any(SolverFactory.class));
-
- ServiceResponse response = serviceBase.createSolver(CONTAINER_ID, SOLVER_ID, solverInstance);
- assertBuildFactoryWasInvoked(null);
- assertSuccess(response, String.format(SOLVER_CREATED_SUCCESSFULLY_MESSAGE, SOLVER_ID, CONTAINER_ID));
- }
-
- @Test
- public void createSolverWithGlobalScanSetSuccessful() {
- solverInstance.setSolverConfigFile(SOLVER_CONFIG_GLOBAL_SCAN_SET);
- doReturn(solver).when(serviceBase).newSolver(any(SolverFactory.class));
-
- ServiceResponse response = serviceBase.createSolver(CONTAINER_ID, SOLVER_ID, solverInstance);
- assertBuildFactoryWasInvoked(Arrays.asList(TestConfigProvider1.PACKAGE1,
- TestConfigProvider1.PACKAGE2,
- TestConfigProvider1.PACKAGE3,
- TestConfigProvider2.PACKAGE1));
- assertSuccess(response, String.format(SOLVER_CREATED_SUCCESSFULLY_MESSAGE, SOLVER_ID, CONTAINER_ID));
- }
-
- @Test
- public void createSolverWithFilteredScanSetSuccessful() {
- solverInstance.setSolverConfigFile(SOLVER_CONFIG_FILTERED_SCAN_SET);
- doReturn(solver).when(serviceBase).newSolver(any(SolverFactory.class));
-
- ServiceResponse response = serviceBase.createSolver(CONTAINER_ID, SOLVER_ID, solverInstance);
- assertBuildFactoryWasInvoked(Collections.singletonList(PRE_CONFIGURED_PACKAGE_INCLUDE),
- Arrays.asList(TestConfigProvider1.PACKAGE1,
- TestConfigProvider1.PACKAGE2,
- TestConfigProvider1.PACKAGE3,
- TestConfigProvider2.PACKAGE1,
- PRE_CONFIGURED_PACKAGE_EXCLUDE));
- assertSuccess(response, String.format(SOLVER_CREATED_SUCCESSFULLY_MESSAGE, SOLVER_ID, CONTAINER_ID));
- }
-
- private void assertFailure(ServiceResponse response, String messagePrefix) {
- assertThat(response.getType()).isEqualTo(ServiceResponse.ResponseType.FAILURE);
- assertThat(response.getMsg()).startsWith(messagePrefix);
- }
-
- private void assertSuccess(ServiceResponse response, String messagePrefix) {
- assertThat(response.getType()).isEqualTo(ServiceResponse.ResponseType.SUCCESS);
- assertThat(response.getMsg()).startsWith(messagePrefix);
- }
-
- private void assertBuildFactoryWasInvoked(List expectedExcludedPackages) {
- assertBuildFactoryWasInvoked(null, expectedExcludedPackages);
- }
-
- private void assertBuildFactoryWasInvoked(List expectedIncludedPackages, List expectedExcludedPackages) {
- verify(serviceBase).newSolver(solverFactory.capture());
- ScanAnnotatedClassesConfig config = solverFactory.getValue().getSolverConfig().getScanAnnotatedClassesConfig();
- if (expectedExcludedPackages != null) {
- assertThat(config).isNotNull();
- assertThat(config.getPackageExcludeList())
- .containsExactlyInAnyOrder(expectedExcludedPackages.toArray(new String[0]));
- } else {
- assertThat(config).isNull();
- }
- if (expectedIncludedPackages != null) {
- assertThat(config).isNotNull();
- assertThat(config.getPackageIncludeList())
- .containsExactlyInAnyOrder(expectedIncludedPackages.toArray(new String[0]));
- }
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/java/org/kie/server/services/optaplanner/TestConfigProvider1.java b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/java/org/kie/server/services/optaplanner/TestConfigProvider1.java
deleted file mode 100644
index 0ff8f38907..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/java/org/kie/server/services/optaplanner/TestConfigProvider1.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.optaplanner;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.kie.server.api.model.KieServerConfigItem;
-import org.kie.server.api.model.KieServerConfigProvider;
-
-/**
- * Test class for being used by the SolverServiceBaseTest.
- */
-public class TestConfigProvider1 implements KieServerConfigProvider {
-
- public static final String PACKAGE1 = "TestConfigProvider1.PACKAGE1";
- public static final String PACKAGE2 = "TestConfigProvider1.PACKAGE2";
- public static final String PACKAGE3 = "TestConfigProvider1.PACKAGE3";
-
- @Override
- public List getItems() {
- String value1 = PACKAGE1 + " , " + PACKAGE2;
- String value2 = " " + PACKAGE3 + " ";
- return Arrays.asList(new KieServerConfigItem(SolverServiceBase.SCAN_EXCLUDED_PACKAGES_CONFIG_ITEM,
- value1,
- String.class.getName()),
- new KieServerConfigItem(SolverServiceBase.SCAN_EXCLUDED_PACKAGES_CONFIG_ITEM,
- value2,
- String.class.getName()));
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/java/org/kie/server/services/optaplanner/TestConfigProvider2.java b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/java/org/kie/server/services/optaplanner/TestConfigProvider2.java
deleted file mode 100644
index baffd84956..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/java/org/kie/server/services/optaplanner/TestConfigProvider2.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.optaplanner;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.kie.server.api.model.KieServerConfigItem;
-import org.kie.server.api.model.KieServerConfigProvider;
-
-/**
- * Test class for being used by the SolverServiceBaseTest.
- */
-public class TestConfigProvider2 implements KieServerConfigProvider {
-
- public static final String PACKAGE1 = "TestConfigProvider2.PACKAGE1";
-
- @Override
- public List getItems() {
- return Collections.singletonList(new KieServerConfigItem(SolverServiceBase.SCAN_EXCLUDED_PACKAGES_CONFIG_ITEM,
- PACKAGE1,
- String.class.getName()));
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/META-INF/services/org.kie.server.api.model.KieServerConfigProvider b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/META-INF/services/org.kie.server.api.model.KieServerConfigProvider
deleted file mode 100644
index d930feea35..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/META-INF/services/org.kie.server.api.model.KieServerConfigProvider
+++ /dev/null
@@ -1,3 +0,0 @@
-# used by the SolverServiceBaseTest
-org.kie.server.services.optaplanner.TestConfigProvider1
-org.kie.server.services.optaplanner.TestConfigProvider2
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/org/kie/server/services/optaplanner/SolverConfig.xml b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/org/kie/server/services/optaplanner/SolverConfig.xml
deleted file mode 100644
index bd75b8a3d7..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/org/kie/server/services/optaplanner/SolverConfig.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/org/kie/server/services/optaplanner/SolverConfigFilteredScanSet.xml b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/org/kie/server/services/optaplanner/SolverConfigFilteredScanSet.xml
deleted file mode 100644
index 261d5a409b..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/org/kie/server/services/optaplanner/SolverConfigFilteredScanSet.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
- pre.configured.package.include
- pre.configured.package.exclude
-
-
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/org/kie/server/services/optaplanner/SolverConfigGlobalScanSet.xml b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/org/kie/server/services/optaplanner/SolverConfigGlobalScanSet.xml
deleted file mode 100644
index 7a7eabee46..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/org/kie/server/services/optaplanner/SolverConfigGlobalScanSet.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/org/kie/server/services/optaplanner/SolverConfigWrong.xml b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/org/kie/server/services/optaplanner/SolverConfigWrong.xml
deleted file mode 100644
index 29433ba121..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/test/resources/org/kie/server/services/optaplanner/SolverConfigWrong.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-prometheus/pom.xml b/kie-server-parent/kie-server-services/kie-server-services-prometheus/pom.xml
index 3815681717..3936bd8bd0 100644
--- a/kie-server-parent/kie-server-services/kie-server-services-prometheus/pom.xml
+++ b/kie-server-parent/kie-server-services/kie-server-services-prometheus/pom.xml
@@ -111,11 +111,6 @@
org.kie.serverkie-server-services-case-mgmt
-
-
- org.optaplanner
- optaplanner-core
- org.apache.commons
diff --git a/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusCustomMetricsSupport.java b/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusCustomMetricsSupport.java
index 74e6e843cf..3eb3e06b62 100644
--- a/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusCustomMetricsSupport.java
+++ b/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusCustomMetricsSupport.java
@@ -28,7 +28,6 @@
import org.kie.api.event.rule.AgendaEventListener;
import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
import org.kie.server.services.api.KieContainerInstance;
-import org.optaplanner.core.impl.phase.event.PhaseLifecycleListener;
class PrometheusCustomMetricsSupport {
@@ -36,7 +35,6 @@ class PrometheusCustomMetricsSupport {
private final Map> agendaEventListeners;
private final Map> dmnRuntimeEventListeners;
- private final Map> phaseLifecycleListeners;
private ServiceLoader loader;
@@ -45,7 +43,6 @@ class PrometheusCustomMetricsSupport {
customMetricsInstances = new HashMap<>();
agendaEventListeners = new HashMap<>();
dmnRuntimeEventListeners = new HashMap<>();
- phaseLifecycleListeners = new HashMap<>();
}
boolean hasCustomMetrics() {
@@ -103,24 +100,6 @@ void clearAgendaEventListener(KieContainerInstance kieContainerInstanceId) {
}
}
-
- List getPhaseLifecycleListener(String solverId) {
- synchronized (phaseLifecycleListeners) {
- if (!phaseLifecycleListeners.containsKey(solverId)) {
- List customListeners = new ArrayList<>();
- //customer listeners, if any
- loader.forEach(p -> {
- PhaseLifecycleListener l = p.createPhaseLifecycleListener(solverId);
- if (l != null) {
- customListeners.add(l);
- }
- });
- phaseLifecycleListeners.put(solverId, customListeners);
- }
- return phaseLifecycleListeners.get(solverId);
- }
- }
-
List getAsynchronousJobListener() {
return getListener(AsynchronousJobListener.class);
}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusKieServerExtension.java b/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusKieServerExtension.java
index fbdbf3acea..ac44525975 100644
--- a/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusKieServerExtension.java
+++ b/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusKieServerExtension.java
@@ -49,7 +49,6 @@
import org.kie.server.services.casemgmt.CaseManagementRuntimeDataServiceBase;
import org.kie.server.services.impl.KieServerImpl;
import org.kie.server.services.jbpm.JbpmKieServerExtension;
-import org.optaplanner.core.impl.phase.event.PhaseLifecycleListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -163,10 +162,6 @@ public List getDroolsListeners(String kieSessionId, KieCont
return customMetrics.getAgendaEventListener(kieSessionId, kieContainer);
}
- public List getOptaPlannerListeners(String solverId) {
- return customMetrics.getPhaseLifecycleListener(solverId);
- }
-
protected void registerDefaultDescriptor() {
DeploymentDescriptorManager.addDescriptorLocation("classpath:/META-INF/prometheus-deployment-descriptor-defaults.xml");
}
@@ -248,4 +243,4 @@ public List healthCheck(boolean report) {
}
return messages;
}
-}
\ No newline at end of file
+}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusMetrics.java b/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusMetrics.java
index 76906dfe65..7412591347 100644
--- a/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusMetrics.java
+++ b/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusMetrics.java
@@ -94,32 +94,4 @@ Histogram getDroolsEvaluationTimeHistogram() {
return droolsEvaluationTimeHistogram;
}
-
- private static final Summary optaPlannerSolverDuration = Summary.build()
- .name("solver_duration_seconds")
- .help("Time in seconds it took solver to solve the constraint problem")
- .labelNames("solver_id").register();
-
- Summary getOptaPlannerSolverDuration() {
- return optaPlannerSolverDuration;
- }
-
- private static final Summary optaPlannerSolverScoreCalculationSpeed = Summary.build()
- .name("solver_score_calculation_speed")
- .help("Number of moves per second for a particular solver solving the constraint problem")
- .labelNames("solver_id").register();
-
- Summary getOptaPlannerSolverScoreCalculationSpeed() {
- return optaPlannerSolverScoreCalculationSpeed;
- }
-
- private static final Gauge optaPlannerSolverCount = Gauge.build()
- .name("solvers_running")
- .help("Number of solvers currently running")
- .register();
-
- Gauge getOptaPlannerSolverCount() {
- return optaPlannerSolverCount;
- }
-
}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusMetricsProvider.java b/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusMetricsProvider.java
index 36e7eae4c9..dc48e0fde9 100644
--- a/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusMetricsProvider.java
+++ b/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusMetricsProvider.java
@@ -5,7 +5,6 @@
import org.kie.api.event.rule.AgendaEventListener;
import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
import org.kie.server.services.api.KieContainerInstance;
-import org.optaplanner.core.impl.phase.event.PhaseLifecycleListener;
public interface PrometheusMetricsProvider {
@@ -14,9 +13,6 @@ public interface PrometheusMetricsProvider {
AgendaEventListener createAgendaEventListener(String kieSessionId, KieContainerInstance kContainer);
- //Optaplanner
- PhaseLifecycleListener createPhaseLifecycleListener(String solverId);
-
//jBPM
AsynchronousJobListener createAsynchronousJobListener();
diff --git a/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusMetricsSolverListener.java b/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusMetricsSolverListener.java
deleted file mode 100644
index 93ec50f564..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus/PrometheusMetricsSolverListener.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * 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.kie.server.services.prometheus;
-
-import io.prometheus.client.Summary;
-import org.optaplanner.core.impl.phase.event.PhaseLifecycleListenerAdapter;
-import org.optaplanner.core.impl.solver.scope.DefaultSolverScope;
-
-public class PrometheusMetricsSolverListener extends PhaseLifecycleListenerAdapter {
-
- private final PrometheusMetrics metrics;
- private final String solverId;
- private Summary.Timer timer;
-
- public PrometheusMetricsSolverListener(String solverId) {
- this(solverId, PrometheusKieServerExtension.getMetrics());
- }
-
- public PrometheusMetricsSolverListener(String solverId, PrometheusMetrics metrics) {
- this.solverId = solverId;
- this.metrics = metrics;
- }
-
- @Override
- public void solvingStarted(DefaultSolverScope solverScope) {
- metrics.getOptaPlannerSolverCount().inc();
- timer = metrics.getOptaPlannerSolverDuration().labels(solverId).startTimer();
- }
-
- @Override
- public void solvingEnded(DefaultSolverScope solverScope) {
- metrics.getOptaPlannerSolverCount().dec();
- metrics.getOptaPlannerSolverScoreCalculationSpeed().labels(solverId).observe(getScoreCalculationSpeed(solverScope));
- timer.observeDuration();
- }
-
- private double getScoreCalculationSpeed(DefaultSolverScope solverScope) {
- long timeMillisSpent = solverScope.calculateTimeMillisSpentUpToNow();
- // Avoid divide by zero exception on a fast CPU
- return solverScope.getScoreCalculationCount() * 1000L / (timeMillisSpent == 0L ? 1L : timeMillisSpent);
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/.gitignore b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/.gitignore
deleted file mode 100644
index 91a87d3ed0..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/.gitignore
+++ /dev/null
@@ -1,20 +0,0 @@
-# everywhere
-target/
-
-# only in the root directory
-/classes
-/local
-/repository
-/repositories
-
-# Eclipse, Netbeans and IntelliJ files
-/.*
-/**/.*
-!.gitignore
-/nbproject
-*.ipr
-*.iws
-*.iml
-
-# Repository wide ignore mac DS_Store files
-.DS_Store
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/.gitignore b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/.gitignore
deleted file mode 100644
index b999bc9e33..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/.gitignore
+++ /dev/null
@@ -1,22 +0,0 @@
-# everywhere
-target/
-
-# only in the root directory
-/classes
-/local
-/repository
-/repositories
-
-# Eclipse, Netbeans and IntelliJ files
-/.*
-/**/.*
-!.gitignore
-/nbproject
-*.ipr
-*.iws
-*.iml
-
-# Repository wide ignore mac DS_Store files
-.DS_Store
-
-
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/pom.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/pom.xml
deleted file mode 100644
index c9cc38ac21..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/pom.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
- 4.0.0
-
-
- org.kie.server
- kie-server-services-task-assigning
- 7.75.0-SNAPSHOT
-
-
- kie-server-services-task-assigning-core
-
- KIE :: Execution Server :: Services :: Task Assigning :: Core
- KIE Execution Server Services Task Assigning Core
-
-
-
- org.optaplanner
- optaplanner-core
- provided
-
-
- org.optaplanner
- optaplanner-persistence-xstream
- provided
-
-
- com.thoughtworks.xstream
- xstream
- provided
-
-
-
-
- commons-io
- commons-io
- test
-
-
- org.apache.commons
- commons-lang3
- test
-
-
- org.optaplanner
- optaplanner-examples
- test
-
-
- org.assertj
- assertj-core
- test
-
-
-
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/TaskAssigningRuntimeException.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/TaskAssigningRuntimeException.java
deleted file mode 100644
index 29a04f1b7f..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/TaskAssigningRuntimeException.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core;
-
-public class TaskAssigningRuntimeException extends RuntimeException {
-
- public TaskAssigningRuntimeException(String message) {
- super(message);
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/AbstractPersistable.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/AbstractPersistable.java
deleted file mode 100644
index bd5e827457..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/AbstractPersistable.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model;
-
-import org.optaplanner.core.api.domain.lookup.PlanningId;
-
-public abstract class AbstractPersistable {
-
- protected Long id;
-
- protected AbstractPersistable() {
- }
-
- protected AbstractPersistable(long id) {
- this.id = id;
- }
-
- @PlanningId
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-}
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/DefaultLabels.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/DefaultLabels.java
deleted file mode 100644
index 430f25771b..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/DefaultLabels.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model;
-
-public enum DefaultLabels {
- SKILLS,
- AFFINITIES
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/Group.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/Group.java
deleted file mode 100644
index f21f05f134..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/Group.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model;
-
-import java.util.Objects;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-
-@XStreamAlias("TaGroup")
-public class Group extends AbstractPersistable implements OrganizationalEntity {
-
- private String entityId;
-
- public Group() {
- }
-
- public Group(long id, String entityId) {
- super(id);
- this.entityId = entityId;
- }
-
- @Override
- public String getEntityId() {
- return entityId;
- }
-
- public void setEntityId(String entityId) {
- this.entityId = entityId;
- }
-
- @Override
- public boolean isUser() {
- return false;
- }
-
- @Override
- public String toString() {
- return "Group{" +
- "id=" + id +
- ", entityId='" + entityId + '\'' +
- '}';
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (!(o instanceof Group)) {
- return false;
- }
- Group group = (Group) o;
- return Objects.equals(entityId, group.entityId);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(entityId);
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/ImmutableTask.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/ImmutableTask.java
deleted file mode 100644
index 26b1bd7951..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/ImmutableTask.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model;
-
-import java.util.Map;
-import java.util.Set;
-
-public class ImmutableTask extends Task {
-
- private ImmutableTask() {
- //required by the FieldSolutionCloner.
- }
-
- ImmutableTask(long id, long processInstanceId, String processId, String containerId, String name,
- int priority, Map inputData, boolean pinned,
- Set potentialOwners, Map> labelValues) {
- super(id, processInstanceId, processId, containerId, name, priority, inputData, pinned, potentialOwners,
- labelValues);
- }
-
- @Override
- public void setPinned(boolean pinned) {
- //this task can never be pined
- }
-
- @Override
- public void setProcessInstanceId(long processInstanceId) {
- throwImmutableException("processInstanceId");
- }
-
- @Override
- public void setProcessId(String processId) {
- throwImmutableException("processId");
- }
-
- @Override
- public void setContainerId(String containerId) {
- throwImmutableException("containerId");
- }
-
- @Override
- public void setName(String name) {
- throwImmutableException("name");
- }
-
- @Override
- public void setPriority(int priority) {
- throwImmutableException("priority");
- }
-
- @Override
- public void setInputData(Map inputData) {
- throwImmutableException("inputData");
- }
-
- @Override
- public void setPotentialOwners(Set potentialOwners) {
- throwImmutableException("potentialOwners");
- }
-
- @Override
- public void setLabelValues(String labelName, Set values) {
- throwImmutableException("labelValues");
- }
-
- private void throwImmutableException(String filedName) {
- throw new UnsupportedOperationException("Task: " + getName() + " don't accept modifications of field: " + filedName);
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/ImmutableUser.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/ImmutableUser.java
deleted file mode 100644
index bca6b6d5b2..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/ImmutableUser.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model;
-
-import java.util.Set;
-
-public class ImmutableUser extends User {
-
- private ImmutableUser() {
- //required by the FieldSolutionCloner
- }
-
- ImmutableUser(long id, String entityId, boolean enabled) {
- super(id, entityId, enabled);
- }
-
- @Override
- public void setEntityId(String entityId) {
- throwImmutableException();
- }
-
- @Override
- public void setGroups(Set groups) {
- throwImmutableException();
- }
-
- @Override
- public void setLabelValues(String labelName, Set values) {
- throwImmutableException();
- }
-
- @Override
- public void setId(Long id) {
- throwImmutableException();
- }
-
- private void throwImmutableException() {
- throw new UnsupportedOperationException("PLANNING_USER: " + getEntityId() + " object can not be modified.");
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/ModelConstants.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/ModelConstants.java
deleted file mode 100644
index 0d21ce4273..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/ModelConstants.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.function.Predicate;
-
-public class ModelConstants {
-
- private ModelConstants() {
- }
-
- /**
- * System property for configuring the PLANNING_USER entityId.
- */
- public static final String PLANNING_USER_ID_PROPERTY = "org.kie.server.services.taskassigning.core.model.planningUserId";
-
- public static final String PLANNING_USER_ID = System.getProperty(PLANNING_USER_ID_PROPERTY, "planninguser");
-
- /**
- * Planning user is defined user for avoid breaking hard constraints. When no user is found that met the task required
- * potential owners set, or the required skills set, etc, the PLANNING_USER is assigned.
- */
- public static final User PLANNING_USER = new ImmutableUser(PLANNING_USER_ID.hashCode(), PLANNING_USER_ID, true);
-
- public static final Predicate IS_PLANNING_USER = entityId -> PLANNING_USER.getEntityId().equals(entityId);
-
- /**
- * This task was introduced for dealing with situations where the solution ends up with no tasks. e.g. there is a
- * solution with tasks A and B, and a user completes both tasks in the jBPM runtime. When the completion events
- * are processed both tasks are removed from the solution with the proper problem fact changes. The solution remains
- * thus with no tasks and an exception is thrown.
- * Since the only potential owner for the dummy task is the PLANNING_USER this task won't affect the score dramatically.
- */
- public static final Task DUMMY_TASK = new ImmutableTask(-1,
- -1,
- "dummy-process",
- "dummy-container",
- "dummy-task",
- 10,
- Collections.emptyMap(),
- false,
- Collections.unmodifiableSet(new HashSet<>(Collections.singletonList(PLANNING_USER))),
- Collections.emptyMap());
-
- /**
- * This task was introduced for dealing with situations where all tasks are pinned and avoid falling into
- * https://issues.jboss.org/browse/PLANNER-241. Will be removed when issue is fixed.
- */
- public static final Task DUMMY_TASK_PLANNER_241 = new ImmutableTask(-2,
- -1,
- "dummy-process",
- "dummy-container",
- "dummy-task-planner-241",
- 10,
- Collections.emptyMap(),
- false,
- Collections.unmodifiableSet(new HashSet<>(Collections.singletonList(PLANNING_USER))),
- Collections.emptyMap());
-
- public static final Predicate IS_NOT_DUMMY = task -> !DUMMY_TASK.getId().equals(task.getId()) && !DUMMY_TASK_PLANNER_241.getId().equals(task.getId());
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/OrganizationalEntity.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/OrganizationalEntity.java
deleted file mode 100644
index 0833278a59..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/OrganizationalEntity.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model;
-
-public interface OrganizationalEntity {
-
- String getEntityId();
-
- boolean isUser();
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/Task.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/Task.java
deleted file mode 100644
index a9e757b7da..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/Task.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import org.kie.server.services.taskassigning.core.model.solver.StartAndEndTimeUpdatingVariableListener;
-import org.kie.server.services.taskassigning.core.model.solver.TaskDifficultyComparator;
-import org.optaplanner.core.api.domain.entity.PlanningEntity;
-import org.optaplanner.core.api.domain.entity.PlanningPin;
-import org.optaplanner.core.api.domain.variable.AnchorShadowVariable;
-import org.optaplanner.core.api.domain.variable.CustomShadowVariable;
-import org.optaplanner.core.api.domain.variable.PlanningVariable;
-import org.optaplanner.core.api.domain.variable.PlanningVariableGraphType;
-import org.optaplanner.core.api.domain.variable.PlanningVariableReference;
-
-/**
- * Task is the only planning entity that will be changed during the problem solving, and we have only one
- * PlanningVariable.
- *
- * In this particular problem we want to do the assignments in a way that the list of tasks
- * for a given user is ordered. (see e.g. that Higher priority tasks must be resolved first is a soft constraint)
- *
- * User1: A <- B <- C <- D
- *
- * User2: E <- F
- *
- * The initial task of each sequence points to the user that will own all the tasks in the list, so when a solution is
- * created we'll have something like this.
- *
- * User1 <- A <- B <- C <- D (In this example, User1 is the anchor)
- *
- * This explains why property "previousTaskOrUser" can be assigned with User or a Task.
- *
- * BUT the solver builds the solutions in a way that only the first item of the "chain" points to
- * a user. This is how a CHAINED configuration works. And the way the solver knows which must be the fact class
- * that must be used for setting the previousTaskOrUser property is by considering the order in the PlanningVariable
- * configuration.
- * @PlanningVariable(valueRangeProviderRefs = {"userRange", "taskRange"}, graphType = PlanningVariableGraphType.CHAINED)
- *
- * Here we basically declared that we want to build a CHAINED graph but also since the "userRange" is the first
- * valueRangeProviderRef we are declaring that the User will be used as anchor.
- * So the solver will always start by using an User as the head of the list and then it'll consider adding Tasks
- * to the linked structure.
- *
- * Additionally for the calculation of the scores, etc, given a Task of a particular solution we'll want to know quickly
- * which is the User that was assigned to this task.
- *
- * If we have the following chain
- *
- * Employee1 (the anchor) <- A <- B <- C <- D
- *
- * and we take e.g. D, then to get the assigned Employee1 the list must be iterated, but this probably not the best idea.
- *
- * Solution, add a shadow variable and let the solver populate this variable when the solution is constructed.
- * With the declaration below a shadow variable is defined for keeping a reference to the anchor. This shadow variable
- * is populated and kept consistent by the solver.
- *
- * Shadow variable:
- * Let all Tasks have a reference to the anchor of the chain, the assigned user.
- * @AnchorShadowVariable(sourceVariableName = "previousTaskOrUser")
- * private User user;
- *
- * CustomShadowVariable startTimeInMinutes:
- * Convenient shadow variable is declared for having the startTimeInMinutes of a task already calculated.
- * @CustomShadowVariable(variableListenerClass = StartAndEndTimeUpdatingVariableListener.class,
- * sources = {@PlanningVariableReference(variableName = "previousTaskOrUser")})
- * private Integer startTimeInMinutes;
- *
- * So the variableListenerClass is invoked when the source variable is changed/assigned.
- */
-@PlanningEntity(difficultyComparatorClass = TaskDifficultyComparator.class)
-@XStreamAlias("TaTask")
-public class Task extends TaskOrUser {
-
- public static final String PREVIOUS_TASK_OR_USER = "previousTaskOrUser";
- public static final String USER_RANGE = "userRange";
- public static final String TASK_RANGE = "taskRange";
- public static final String START_TIME_IN_MINUTES = "startTimeInMinutes";
- public static final String END_TIME_IN_MINUTES = "endTimeInMinutes";
-
- private long processInstanceId;
- private String processId;
- private String containerId;
- private String name;
- private int priority;
- private String status;
- private Map inputData;
-
- @PlanningPin
- private boolean pinned;
-
- private Set potentialOwners = new HashSet<>();
- private Map> labelValues = new HashMap<>();
-
- /**
- * Planning variable: changes during planning, between score calculations.
- */
- @PlanningVariable(valueRangeProviderRefs = {USER_RANGE, TASK_RANGE},
- graphType = PlanningVariableGraphType.CHAINED)
- private TaskOrUser previousTaskOrUser;
-
- /**
- * Shadow variable, let all Tasks have a reference to the anchor of the chain, the assigned user.
- */
- @AnchorShadowVariable(sourceVariableName = PREVIOUS_TASK_OR_USER)
- private User user;
-
- /**
- * When the previousTask changes we need to update the startTimeInMinutes for current task and also the
- * startTimeInMinutes for all the tasks that comes after. previousTask -> currentTask -> C -> D -> E since each
- * task can only start after his previous one has finished. As part of the update the endTimeInMinutes for the
- * modified tasks will also be updated.
- */
- @CustomShadowVariable(variableListenerClass = StartAndEndTimeUpdatingVariableListener.class,
- sources = {@PlanningVariableReference(variableName = PREVIOUS_TASK_OR_USER)})
- private Integer startTimeInMinutes;
-
- /**
- * Assume a duration of 1 minute for all tasks.
- */
- private int durationInMinutes = 1;
-
- /**
- * This declaration basically indicates that the endTimeInMinutes is actually calculated as part of the
- * startTimeInMinutes time shadow variable calculation.
- */
- @CustomShadowVariable(variableListenerRef = @PlanningVariableReference(variableName = START_TIME_IN_MINUTES))
- private Integer endTimeInMinutes;
-
- public Task() {
- }
-
- public Task(long id, String name, int priority) {
- super(id);
- this.name = name;
- this.priority = priority;
- pinned = false;
- }
-
- public Task(long id,
- long processInstanceId,
- String processId,
- String containerId,
- String name,
- int priority,
- String status,
- Map inputData) {
- super(id);
- this.processInstanceId = processInstanceId;
- this.processId = processId;
- this.containerId = containerId;
- this.name = name;
- this.priority = priority;
- this.status = status;
- this.inputData = inputData;
- }
-
- protected Task(long id,
- long processInstanceId,
- String processId,
- String containerId,
- String name,
- int priority,
- Map inputData,
- boolean pinned,
- Set potentialOwners,
- Map> labelValues) {
- super(id);
- this.processInstanceId = processInstanceId;
- this.processId = processId;
- this.containerId = containerId;
- this.name = name;
- this.priority = priority;
- this.inputData = inputData;
- this.pinned = pinned;
- this.potentialOwners = potentialOwners;
- this.labelValues = labelValues;
- }
-
- public long getProcessInstanceId() {
- return processInstanceId;
- }
-
- public void setProcessInstanceId(long processInstanceId) {
- this.processInstanceId = processInstanceId;
- }
-
- public String getProcessId() {
- return processId;
- }
-
- public void setProcessId(String processId) {
- this.processId = processId;
- }
-
- public String getContainerId() {
- return containerId;
- }
-
- public void setContainerId(String containerId) {
- this.containerId = containerId;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getPriority() {
- return priority;
- }
-
- public void setPriority(int priority) {
- this.priority = priority;
- }
-
- public String getStatus() {
- return status;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
-
- public Map getInputData() {
- return inputData;
- }
-
- public void setInputData(Map inputData) {
- this.inputData = inputData;
- }
-
- public boolean isPinned() {
- return pinned;
- }
-
- public void setPinned(boolean pinned) {
- this.pinned = pinned;
- }
-
- /**
- * @return the set of OrganizationalEntities that are enabled for executing this task.
- */
- public Set getPotentialOwners() {
- return potentialOwners;
- }
-
- public void setPotentialOwners(Set potentialOwners) {
- this.potentialOwners = potentialOwners;
- }
-
- public Map> getLabelValues() {
- return labelValues;
- }
-
- public Set getLabelValues(String labelName) {
- return labelValues.get(labelName);
- }
-
- public void setLabelValues(String labelName, Set values) {
- labelValues.put(labelName, values);
- }
-
- public TaskOrUser getPreviousTaskOrUser() {
- return previousTaskOrUser;
- }
-
- public void setPreviousTaskOrUser(TaskOrUser previousTaskOrUser) {
- this.previousTaskOrUser = previousTaskOrUser;
- }
-
- @Override
- public User getUser() {
- return user;
- }
-
- public void setUser(User user) {
- this.user = user;
- }
-
- public Integer getStartTimeInMinutes() {
- return startTimeInMinutes;
- }
-
- public void setStartTimeInMinutes(Integer startTimeInMinutes) {
- this.startTimeInMinutes = startTimeInMinutes;
- }
-
- @Override
- public Integer getEndTimeInMinutes() {
- return endTimeInMinutes;
- }
-
- public void setEndTime(Integer endTimeInMinutes) {
- this.endTimeInMinutes = endTimeInMinutes;
- }
-
- public int getDurationInMinutes() {
- return durationInMinutes;
- }
-
- public void setDurationInMinutes(int durationInMinutes) {
- this.durationInMinutes = durationInMinutes;
- }
-
- @Override
- public String toString() {
- return "Task{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", priority=" + priority +
- ", status ='" + status + '\'' +
- ", pinned=" + pinned +
- ", potentialOwners=" + potentialOwners +
- ", labelValues=" + labelValues +
- ", previousTaskOrUser=" + previousTaskOrUser +
- ", user=" + user +
- ", startTimeInMinutes=" + startTimeInMinutes +
- ", durationInMinutes=" + durationInMinutes +
- ", endTimeInMinutes=" + endTimeInMinutes +
- '}';
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/TaskAssigningSolution.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/TaskAssigningSolution.java
deleted file mode 100644
index a4237dfa74..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/TaskAssigningSolution.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model;
-
-import java.util.List;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.annotations.XStreamConverter;
-import org.optaplanner.core.api.domain.solution.PlanningEntityCollectionProperty;
-import org.optaplanner.core.api.domain.solution.PlanningScore;
-import org.optaplanner.core.api.domain.solution.PlanningSolution;
-import org.optaplanner.core.api.domain.solution.drools.ProblemFactCollectionProperty;
-import org.optaplanner.core.api.domain.valuerange.ValueRangeProvider;
-import org.optaplanner.core.api.score.buildin.bendablelong.BendableLongScore;
-import org.optaplanner.persistence.xstream.api.score.buildin.bendable.BendableScoreXStreamConverter;
-
-@PlanningSolution
-@XStreamAlias("TaTaskAssignmentSolution")
-public class TaskAssigningSolution extends AbstractPersistable {
-
- @ValueRangeProvider(id = "userRange")
- @ProblemFactCollectionProperty
- private List userList;
-
- @PlanningEntityCollectionProperty
- @ValueRangeProvider(id = "taskRange")
- private List taskList;
-
- @XStreamConverter(BendableScoreXStreamConverter.class)
- @PlanningScore(bendableHardLevelsSize = 2, bendableSoftLevelsSize = 6)
- private BendableLongScore score;
-
- public TaskAssigningSolution() {
- }
-
- public TaskAssigningSolution(long id, List userList, List taskList) {
- super(id);
- this.userList = userList;
- this.taskList = taskList;
- }
-
- public List getUserList() {
- return userList;
- }
-
- public void setUserList(List userList) {
- this.userList = userList;
- }
-
- public List getTaskList() {
- return taskList;
- }
-
- public void setTaskList(List taskList) {
- this.taskList = taskList;
- }
-
- public BendableLongScore getScore() {
- return score;
- }
-
- public void setScore(BendableLongScore score) {
- this.score = score;
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/TaskOrUser.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/TaskOrUser.java
deleted file mode 100644
index 2ca0683f0c..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/TaskOrUser.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model;
-
-import org.optaplanner.core.api.domain.entity.PlanningEntity;
-import org.optaplanner.core.api.domain.variable.InverseRelationShadowVariable;
-
-import static org.kie.server.services.taskassigning.core.model.Task.PREVIOUS_TASK_OR_USER;
-
-@PlanningEntity
-public abstract class TaskOrUser extends AbstractPersistable {
-
- /**
- * Shadow variable for being able to move forward in the chain. So finally by using the nextTask and the
- * previousUserOrTask a double linked structure is created.
- *
- *
- * User (the anchor) <-> A <-> B <-> C <-> D -> null
- *
- *
- * In this way given a TaskOrUser in a solution it's possible to iterate back and forward through the data structure.
- */
- @InverseRelationShadowVariable(sourceVariableName = PREVIOUS_TASK_OR_USER)
- protected Task nextTask;
-
- public TaskOrUser() {
- }
-
- public TaskOrUser(long id) {
- super(id);
- }
-
- public Task getNextTask() {
- return nextTask;
- }
-
- public void setNextTask(Task nextTask) {
- this.nextTask = nextTask;
- }
-
- /**
- * @return The endTimeInMinutes of a task. Can be null when the endTimeInMinutes of a just created task wasn't yet
- * calculated.
- */
- public abstract Integer getEndTimeInMinutes();
-
- /**
- * @return sometimes null, when a just created task wasn't yet assigned.
- */
- public abstract User getUser();
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/User.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/User.java
deleted file mode 100644
index 90b706524f..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/User.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-
-@XStreamAlias("TaUser")
-public class User extends TaskOrUser implements OrganizationalEntity {
-
- private String entityId;
- private boolean enabled;
- private Set groups = new HashSet<>();
- private Map> labelValues = new HashMap<>();
- private Map attributes;
-
- public User() {
- }
-
- public User(long id, String entityId) {
- super(id);
- this.entityId = entityId;
- }
-
- public User(long id, String entityId, boolean enabled) {
- super(id);
- this.entityId = entityId;
- this.enabled = enabled;
- }
-
- @Override
- public String getEntityId() {
- return entityId;
- }
-
- public void setEntityId(String entityId) {
- this.entityId = entityId;
- }
-
- public Set getGroups() {
- return groups;
- }
-
- public void setGroups(Set groups) {
- this.groups = groups;
- }
-
- public Set getLabelValues(String labelName) {
- return labelValues.get(labelName);
- }
-
- public void setLabelValues(String labelName, Set values) {
- labelValues.put(labelName, values);
- }
-
- public Map> getAllLabelValues() {
- return labelValues;
- }
-
- public void setAllLabelValues(Map> labelValues) {
- this.labelValues = labelValues;
- }
-
- public Map getAttributes() {
- return attributes;
- }
-
- public void setAttributes(Map attributes) {
- this.attributes = attributes;
- }
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-
- @Override
- public User getUser() {
- return this;
- }
-
- @Override
- public boolean isUser() {
- return true;
- }
-
- @Override
- public Integer getEndTimeInMinutes() {
- return 0;
- }
-
- @Override
- public String toString() {
- return "User{" +
- "id=" + id +
- ", enabled='" + enabled + '\'' +
- ", entityId='" + entityId + '\'' +
- ", groups=" + groups +
- ", labelValues=" + labelValues +
- ", attributes=" + attributes +
- '}';
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/PriorityHelper.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/PriorityHelper.java
deleted file mode 100644
index a2edc62e98..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/PriorityHelper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver;
-
-/**
- * Helper class for manging priority calculations for tasks coming from the jBPM runtime.
- * By convention jBPM tasks priorities goes from [0 (high),... 5 (medium),... 10 (low)]
- */
-public class PriorityHelper {
-
- private PriorityHelper() {
- }
-
- public static boolean isHighLevel(int priority) {
- return priority == 0 || priority == 1 || priority == 2;
- }
-
- public static boolean isMediumLevel(int priority) {
- return priority == 3 || priority == 4 || priority == 5 || priority == 6;
- }
-
- public static boolean isLowLevel(int priority) {
- return priority == 7 || priority == 8 || priority == 9 || priority == 10;
- }
-
- public static int calculateWeightedPenalty(int priority, int endTime) {
- assertValue(priority);
- return -(11 - priority) * endTime;
- }
-
- private static void assertValue(int priority) {
- if (priority < 0 || priority > 10) {
- throw new IllegalArgumentException(String.format("Task priority %s is out of range. " +
- "A valid priority value must be between 0 (inclusive) " +
- " and 10 (inclusive)", priority));
- }
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/StartAndEndTimeUpdatingVariableListener.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/StartAndEndTimeUpdatingVariableListener.java
deleted file mode 100644
index 15088aa6f0..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/StartAndEndTimeUpdatingVariableListener.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver;
-
-import java.util.Objects;
-
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskOrUser;
-import org.optaplanner.core.impl.domain.variable.listener.VariableListener;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.kie.server.services.taskassigning.core.model.Task.END_TIME_IN_MINUTES;
-import static org.kie.server.services.taskassigning.core.model.Task.START_TIME_IN_MINUTES;
-
-/**
- * Given a chained graph:
- *
- * keeps the startTime and endTime of the tasks in the chain updated when any of the tasks in the chain changes.
- * e.g. when sourceTask changes, the startTime and endTime of tasks {sourceTask, Task4, Task5} is recalculated
- * accordingly.
- */
-public class StartAndEndTimeUpdatingVariableListener implements VariableListener {
-
- @Override
- public void beforeEntityAdded(final ScoreDirector scoreDirector, final Task task) {
- // Do nothing
- }
-
- @Override
- public void afterEntityAdded(final ScoreDirector scoreDirector, final Task task) {
- updateStartAndEndTime(scoreDirector, task);
- }
-
- @Override
- public void beforeVariableChanged(final ScoreDirector scoreDirector, final Task task) {
- // Do nothing
- }
-
- @Override
- public void afterVariableChanged(final ScoreDirector scoreDirector, final Task task) {
- updateStartAndEndTime(scoreDirector, task);
- }
-
- @Override
- public void beforeEntityRemoved(final ScoreDirector scoreDirector, final Task task) {
- // Do nothing
- }
-
- @Override
- public void afterEntityRemoved(ScoreDirector scoreDirector, Task task) {
- // Do nothing
- }
-
- private static void updateStartAndEndTime(final ScoreDirector scoreDirector, final Task sourceTask) {
- TaskOrUser previous = sourceTask.getPreviousTaskOrUser();
- Task shadowTask = sourceTask;
- Integer previousEndTime = previous == null ? null : previous.getEndTimeInMinutes();
- Integer startTime = previousEndTime;
- Integer endTime = calculateEndTime(shadowTask, startTime);
- while (shadowTask != null && !Objects.equals(shadowTask.getStartTimeInMinutes(), startTime)) {
- scoreDirector.beforeVariableChanged(shadowTask, START_TIME_IN_MINUTES);
- shadowTask.setStartTimeInMinutes(startTime);
- scoreDirector.afterVariableChanged(shadowTask, START_TIME_IN_MINUTES);
-
- scoreDirector.beforeVariableChanged(shadowTask, END_TIME_IN_MINUTES);
- shadowTask.setEndTime(endTime);
- scoreDirector.afterVariableChanged(shadowTask, END_TIME_IN_MINUTES);
-
- previousEndTime = shadowTask.getEndTimeInMinutes();
- shadowTask = shadowTask.getNextTask();
- startTime = previousEndTime;
- endTime = calculateEndTime(shadowTask, startTime);
- }
- }
-
- private static Integer calculateEndTime(final Task shadowTask, final Integer startTime) {
- if (startTime == null || shadowTask == null) {
- return 0;
- }
- return startTime + shadowTask.getDurationInMinutes();
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/TaskDifficultyComparator.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/TaskDifficultyComparator.java
deleted file mode 100644
index 928120143b..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/TaskDifficultyComparator.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-import org.kie.server.services.taskassigning.core.model.Task;
-
-public class TaskDifficultyComparator implements Comparator,
- Serializable {
-
- private static final Comparator COMPARATOR =
- //priority goes from [0(high)... 5 (medium)... 10 (low)] so we switch factors for the comparison.
- Comparator.comparingInt((Task task) -> -task.getPriority())
- .thenComparingLong(Task::getId);
-
- @Override
- public int compare(Task a, Task b) {
- return COMPARATOR.compare(a, b);
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/TaskHelper.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/TaskHelper.java
deleted file mode 100644
index ad484c7738..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/TaskHelper.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-
-import org.kie.server.services.taskassigning.core.model.OrganizationalEntity;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskOrUser;
-import org.kie.server.services.taskassigning.core.model.User;
-
-public class TaskHelper {
-
- private TaskHelper() {
- }
-
- /**
- * @return true if the user is a potential owner for the given task. This basically means that the user can be
- * assigned to the given task, false in any other case.
- */
- public static boolean isPotentialOwner(Task task, User user) {
- //user appears directly in the list of potential owners.
- final boolean directlyAssigned = task.getPotentialOwners().stream()
- .filter(OrganizationalEntity::isUser)
- .anyMatch(entity -> Objects.equals(entity.getEntityId(), user.getEntityId()));
- if (directlyAssigned) {
- return true;
- }
-
- //the user has at least one of the enabled groups for executing the task.
- final Set acceptedGroupIds = task.getPotentialOwners().stream()
- .filter(entity -> !entity.isUser())
- .map(OrganizationalEntity::getEntityId).collect(Collectors.toSet());
- return user.getGroups().stream()
- .anyMatch(group -> acceptedGroupIds.contains(group.getEntityId()));
- }
-
- /**
- * Calculates if a given user has all the label values that are declared for the task in the label with name labelName.
- * @param task a task instance for the evaluation.
- * @param user a user instance for the evaluation.
- * @param labelName name of the label for the calculation.
- * @return true if the user.getLabelValues("labelName") set "contains" the task.getLabelValues("labelName") set,
- * false in any other case.
- */
- public static boolean hasAllLabels(Task task, User user, String labelName) {
- final Set taskLabelValues = task.getLabelValues(labelName);
- if (taskLabelValues == null || taskLabelValues.isEmpty()) {
- return true;
- }
-
- final Set userLabelValues = user.getLabelValues(labelName);
- return userLabelValues != null && userLabelValues.containsAll(taskLabelValues);
- }
-
- /**
- * Calculates the number labels in the user label value set that are contained in the task label value set for the
- * label labelName.
- * @param task a task instance for the calculation.
- * @param user a task instance for the calculation.
- * @param labelName name of the label for the calculation.
- * @return the number of elements in the intersection between the task.getLabelValues("labelName") and the
- * user.getLabelValues("labelName") sets.
- */
- public static int countMatchingLabels(Task task, User user, String labelName) {
- final Set taskLabelValues = task.getLabelValues(labelName);
- if (taskLabelValues == null || taskLabelValues.isEmpty()) {
- return 0;
- }
- final Set userLabelValues = user.getLabelValues(labelName);
- if (userLabelValues == null) {
- return 0;
- }
- return Math.toIntExact(userLabelValues.stream().filter(taskLabelValues::contains).count());
- }
-
- /**
- * Gets the list of tasks linked to a TaskOrUser.
- * @param taskOrUser a TaskOrUser instance for the evaluation.
- * @return a list with the tasks linked to the taskOrUser.
- */
- public static List extractTasks(TaskOrUser taskOrUser) {
- return extractTasks(taskOrUser, testedTask -> true);
- }
-
- /**
- * Gets the list of tasks linked to a TaskOrUser.
- * @param taskOrUser a TaskOrUser instance for the evaluation.
- * @param predicate a predicate for filtering the tasks that will be included in the result.
- * @return a list with the tasks linked to the taskOrUser that verifies the filtering predicate.
- */
- public static List extractTasks(TaskOrUser taskOrUser, Predicate predicate) {
- final List result = new ArrayList<>();
- Task nextTask = taskOrUser != null ? taskOrUser.getNextTask() : null;
- while (nextTask != null) {
- if (predicate.test(nextTask)) {
- result.add(nextTask);
- }
- nextTask = nextTask.getNextTask();
- }
- return result;
- }
-
- /**
- * Indicates if a user has pinned tasks.
- * @param user a user instance to check.
- * @return true if the user has pinned tasks false any other case.
- */
- public static boolean hasPinnedTasks(TaskOrUser user) {
- return !extractTasks(user, Task::isPinned).isEmpty();
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/condition/TaskAssigningConditions.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/condition/TaskAssigningConditions.java
deleted file mode 100644
index ec893bd798..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/condition/TaskAssigningConditions.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.kie.server.services.taskassigning.core.model.solver.condition;
-
-import org.kie.server.services.taskassigning.core.model.DefaultLabels;
-import org.kie.server.services.taskassigning.core.model.ModelConstants;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.User;
-
-import static org.kie.server.services.taskassigning.core.model.solver.TaskHelper.hasAllLabels;
-import static org.kie.server.services.taskassigning.core.model.solver.TaskHelper.isPotentialOwner;
-
-public class TaskAssigningConditions {
-
- private TaskAssigningConditions() {
- }
-
- /**
- * @param task a task instance for evaluation.
- * @param user a user instance for evaluation.
- * @return true if the given user is enabled and is a potential owner for the task or is the planning user,
- * false in any other case.
- */
- public static boolean userMeetsPotentialOwnerOrPlanningUserCondition(Task task, User user) {
- return user != null && user.isEnabled() && (ModelConstants.IS_PLANNING_USER.test(user.getEntityId()) || isPotentialOwner(task, user));
- }
-
- /**
- * @param task a task instance for evaluation.
- * @param user a user instance for evaluation.
- * @return true if the given user is enabled and has all the task defined skills if any or is the planning user,
- * false in any other case.
- */
- public static boolean userMeetsRequiredSkillsOrPlanningUserCondition(Task task, User user) {
- return user != null && user.isEnabled() && (ModelConstants.IS_PLANNING_USER.test(user.getEntityId()) || hasAllLabels(task, user, DefaultLabels.SKILLS.name()));
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/filter/TaskByGroupAndSkillsChangeMoveFilter.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/filter/TaskByGroupAndSkillsChangeMoveFilter.java
deleted file mode 100644
index 275440dac3..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/filter/TaskByGroupAndSkillsChangeMoveFilter.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.filter;
-
-import org.kie.server.services.taskassigning.core.model.DefaultLabels;
-import org.kie.server.services.taskassigning.core.model.ModelConstants;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.TaskOrUser;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.optaplanner.core.impl.heuristic.selector.common.decorator.SelectionFilter;
-import org.optaplanner.core.impl.heuristic.selector.move.generic.ChangeMove;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.kie.server.services.taskassigning.core.model.solver.TaskHelper.hasAllLabels;
-import static org.kie.server.services.taskassigning.core.model.solver.TaskHelper.isPotentialOwner;
-
-/**
- * SelectionFilter implementation for determining if a move of a TaskA to UserB can be realized. The move is accepted
- * if UserB is a potential owner for the task and has all the required skills for the task if any, or if it's the
- * planning user.
- */
-public class TaskByGroupAndSkillsChangeMoveFilter
- implements SelectionFilter> {
-
- @Override
- public boolean accept(ScoreDirector scoreDirector, ChangeMove changeMove) {
- final Task taskToMove = (Task) changeMove.getEntity();
- final TaskOrUser taskOrUser = (TaskOrUser) changeMove.getToPlanningValue();
- final User user = taskOrUser.getUser();
-
- return user != null && user.isEnabled() &&
- (ModelConstants.IS_PLANNING_USER.test(user.getEntityId()) ||
- (isPotentialOwner(taskToMove, user) && hasAllLabels(taskToMove, user, DefaultLabels.SKILLS.name())));
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AddTaskProblemFactChange.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AddTaskProblemFactChange.java
deleted file mode 100644
index c3bbd561ff..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AddTaskProblemFactChange.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import org.kie.server.services.taskassigning.core.TaskAssigningRuntimeException;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-/**
- * Adds a Task to the working solution. If a task with the given identifier already exists an exception is thrown.
- */
-public class AddTaskProblemFactChange implements ProblemFactChange {
-
- private Task task;
-
- public AddTaskProblemFactChange(Task task) {
- this.task = task;
- }
-
- public Task getTask() {
- return task;
- }
-
- @Override
- public void doChange(ScoreDirector scoreDirector) {
- TaskAssigningSolution solution = scoreDirector.getWorkingSolution();
- Task workingTask = scoreDirector.lookUpWorkingObjectOrReturnNull(task);
- if (workingTask != null) {
- throw new TaskAssigningRuntimeException(String.format("A task with the given identifier id: %s already exists", task.getId()));
- }
- scoreDirector.beforeEntityAdded(task);
- // Planning entity lists are already cloned by the SolutionCloner, no need to clone.
- solution.getTaskList().add(task);
- scoreDirector.afterEntityAdded(task);
- scoreDirector.triggerVariableListeners();
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AddUserProblemFactChange.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AddUserProblemFactChange.java
deleted file mode 100644
index adad7ecc14..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AddUserProblemFactChange.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.ArrayList;
-
-import org.kie.server.services.taskassigning.core.TaskAssigningRuntimeException;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-public class AddUserProblemFactChange implements ProblemFactChange {
-
- private User user;
-
- public AddUserProblemFactChange(User user) {
- this.user = user;
- }
-
- public User getUser() {
- return user;
- }
-
- @Override
- public void doChange(ScoreDirector scoreDirector) {
- final TaskAssigningSolution workingSolution = scoreDirector.getWorkingSolution();
- final User workingUser = scoreDirector.lookUpWorkingObjectOrReturnNull(user);
- if (workingUser != null) {
- throw new TaskAssigningRuntimeException(String.format("A user with the given identifier id: %s already exists", user.getEntityId()));
- }
- // Shallow clone the user list so only workingSolution is affected, not bestSolution
- workingSolution.setUserList(new ArrayList<>(workingSolution.getUserList()));
- // Add the problem fact itself
- scoreDirector.beforeProblemFactAdded(user);
- workingSolution.getUserList().add(user);
- scoreDirector.afterProblemFactAdded(user);
- scoreDirector.triggerVariableListeners();
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AssignTaskProblemFactChange.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AssignTaskProblemFactChange.java
deleted file mode 100644
index 686dc65d12..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AssignTaskProblemFactChange.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.ArrayList;
-
-import org.kie.server.services.taskassigning.core.TaskAssigningRuntimeException;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.TaskOrUser;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-import static org.kie.server.services.taskassigning.core.model.Task.PREVIOUS_TASK_OR_USER;
-
-/**
- * Implements the "direct" assignment of an existing Task to a User.
- * This PFC can be useful in scenarios were e.g. a system administrator manually assigns a Task to a given user from the
- * jBPM tasks list administration. While it's expected that environments that relied the tasks assigning to OptaPlanner
- * shouldn't do this "direct" assignments, we still provide this PFC for dealing with this edge case scenarios.
- * Note that this use cases might break hard constraints or introduce considerable score penalization for soft
- * constraints.
- * Additionally since the "direct" assignment comes from an "external" system it'll remain pinned.
- *
- * Both the task and user to work with are looked up by using their corresponding id's. If the task is not found it'll
- * be created and added to the working solution, while if the user is not found it'll be added to the solution
- * or an exception will be thrown depending on the addIfNotExists value.
- */
-public class AssignTaskProblemFactChange implements ProblemFactChange {
-
- private Task task;
- private User user;
- private boolean addIfNotExists = false;
-
- public AssignTaskProblemFactChange(Task task, User user) {
- this.task = task;
- this.user = user;
- }
-
- public AssignTaskProblemFactChange(Task task, User user, boolean addIfNotExists) {
- this.task = task;
- this.user = user;
- this.addIfNotExists = addIfNotExists;
- }
-
- public Task getTask() {
- return task;
- }
-
- public User getUser() {
- return user;
- }
-
- @Override
- public void doChange(ScoreDirector scoreDirector) {
- TaskAssigningSolution solution = scoreDirector.getWorkingSolution();
-
- User workingUser = scoreDirector.lookUpWorkingObjectOrReturnNull(user);
- if (workingUser == null) {
- if (!addIfNotExists) {
- throw new TaskAssigningRuntimeException(String.format("Expected user: %s was not found in current working solution", user));
- } else {
- // Shallow clone the user list so only workingSolution is affected, not bestSolution
- solution.setUserList(new ArrayList<>(solution.getUserList()));
- // Add the problem fact itself
- scoreDirector.beforeProblemFactAdded(user);
- solution.getUserList().add(user);
- scoreDirector.afterProblemFactAdded(user);
- workingUser = user;
- }
- }
-
- Task workingTask = scoreDirector.lookUpWorkingObjectOrReturnNull(task);
-
- TaskOrUser insertPosition = findInsertPosition(workingUser);
- Task insertPositionNextTask = insertPosition.getNextTask();
- boolean isNew = false;
-
- if (workingTask == null) {
- // The task will be created by this PFC.
- // ensure that the task to be added doesn't have any out-side manually assigned values for the values that
- // are calculated by OptaPlanner
- task.setPreviousTaskOrUser(null);
- task.setUser(null);
- task.setPinned(false);
- task.setNextTask(null);
- task.setStartTimeInMinutes(null);
- task.setEndTime(null);
- workingTask = task;
- isNew = true;
- }
-
- if (insertPosition == workingTask) {
- //nothing to do, the task is already pinned and belongs to user. (see findInsertPosition)
- } else if (insertPosition.getNextTask() == workingTask) {
- //the task is already in the correct position but not pinned. (see findInsertPosition)
- scoreDirector.beforeProblemPropertyChanged(workingTask);
- workingTask.setPinned(true);
- scoreDirector.afterProblemPropertyChanged(workingTask);
- scoreDirector.triggerVariableListeners();
- } else {
- //the task needs to be re-positioned, might belong to user or not.
- if (workingTask.getPreviousTaskOrUser() != null) {
- //un-link the task from his previous chain/position.
- TaskOrUser previousTaskOrUser = workingTask.getPreviousTaskOrUser();
- Task nextTask = workingTask.getNextTask();
- if (nextTask != null) {
- //re-link the chain where the workingTask belonged if any
- scoreDirector.beforeVariableChanged(nextTask, PREVIOUS_TASK_OR_USER);
- nextTask.setPreviousTaskOrUser(previousTaskOrUser);
- scoreDirector.afterVariableChanged(nextTask, PREVIOUS_TASK_OR_USER);
- }
- }
-
- if (isNew) {
- workingTask.setPreviousTaskOrUser(insertPosition);
- scoreDirector.beforeEntityAdded(workingTask);
- // Planning entity lists are already cloned by the SolutionCloner, no need to clone.
- solution.getTaskList().add(workingTask);
- scoreDirector.afterEntityAdded(workingTask);
- } else {
- scoreDirector.beforeVariableChanged(workingTask, PREVIOUS_TASK_OR_USER);
- workingTask.setPreviousTaskOrUser(insertPosition);
- scoreDirector.afterVariableChanged(workingTask, PREVIOUS_TASK_OR_USER);
- }
-
- if (insertPositionNextTask != null) {
- scoreDirector.beforeVariableChanged(insertPositionNextTask, PREVIOUS_TASK_OR_USER);
- insertPositionNextTask.setPreviousTaskOrUser(workingTask);
- scoreDirector.afterVariableChanged(insertPositionNextTask, PREVIOUS_TASK_OR_USER);
- }
-
- scoreDirector.beforeProblemPropertyChanged(workingTask);
- workingTask.setPinned(true);
- scoreDirector.afterProblemPropertyChanged(workingTask);
- scoreDirector.triggerVariableListeners();
- }
- }
-
- /**
- * Find the first available "position" where a task can be added in the tasks chain for a given user.
- *
- * For a chain like:
- *
- * U -> T1 -> T2 -> T3 -> T4 -> null
- *
- * if e.g. T3 is returned, a new task Tn will be later added in the following position.
- *
- * U -> T1 -> T2 -> T3 -> Tn -> T4 -> null
- * Given that we are using a chained structure, to pin a task Tn to a given user, we must be sure that all the
- * previous tasks in the chain are pinned to the same user. For keeping the structure consistency a task Tn is
- * inserted after the last pinned chain. In the example above we have that existing tasks T1, T2 and T3 are pinned.
- * @param user the for adding a task to.
- * @return the proper TaskOrUser object were a task can be added. This method will never return null.
- */
- private TaskOrUser findInsertPosition(User user) {
- TaskOrUser result = user;
- Task nextTask = user.getNextTask();
- while (nextTask != null && nextTask.isPinned()) {
- result = nextTask;
- nextTask = nextTask.getNextTask();
- }
- return result;
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/DisableUserProblemFactChange.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/DisableUserProblemFactChange.java
deleted file mode 100644
index 38d8cfecd0..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/DisableUserProblemFactChange.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-import static org.kie.server.services.taskassigning.core.model.solver.realtime.ProblemFactChangeUtil.releaseNonPinnedTasks;
-
-public class DisableUserProblemFactChange implements ProblemFactChange {
-
- private User user;
-
- public DisableUserProblemFactChange(User user) {
- this.user = user;
- }
-
- public User getUser() {
- return user;
- }
-
- @Override
- public void doChange(ScoreDirector scoreDirector) {
- final User workingUser = scoreDirector.lookUpWorkingObjectOrReturnNull(user);
- if (workingUser == null) {
- return;
- }
- scoreDirector.beforeProblemPropertyChanged(workingUser);
- workingUser.setEnabled(false);
- scoreDirector.afterProblemPropertyChanged(workingUser);
- releaseNonPinnedTasks(workingUser, scoreDirector);
- scoreDirector.triggerVariableListeners();
- }
-}
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/ProblemFactChangeUtil.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/ProblemFactChangeUtil.java
deleted file mode 100644
index 80f9abf92f..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/ProblemFactChangeUtil.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.List;
-
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.kie.server.services.taskassigning.core.model.Task.PREVIOUS_TASK_OR_USER;
-import static org.kie.server.services.taskassigning.core.model.solver.TaskHelper.extractTasks;
-
-public class ProblemFactChangeUtil {
-
- private ProblemFactChangeUtil() {
- }
-
- /**
- * Releases all the tasks linked to a given user.
- * @param workingUser a user instance to get the tasks from. Important! the user must belong to the solution
- * currently managed by the scoreDirector, i.e. the scoreDirector.getWorkingSolution().
- * @param scoreDirector a scoreDirector instance for executing the required beforeVariableChanged and
- * afterVariableChanged methods.
- */
- public static void releaseAllTasks(User workingUser, ScoreDirector scoreDirector) {
- releaseTasks(workingUser, true, scoreDirector);
- }
-
- /**
- * Releases all the non-pinned tasks linked to a given user.
- * @param workingUser a user instance to get the tasks from. Important! the user must belong to the solution
- * currently managed by the scoreDirector, i.e. the scoreDirector.getWorkingSolution().
- * @param scoreDirector a scoreDirector instance for executing the required beforeVariableChanged and
- * afterVariableChanged methods.
- */
- public static void releaseNonPinnedTasks(User workingUser, ScoreDirector scoreDirector) {
- releaseTasks(workingUser, false, scoreDirector);
- }
-
- /**
- * Release the tasks associated previously associated by OptaPlanner to a user.
- * note: Optimizes the generated graph e.g. User <-> T1 <-> T2 <-> T3 <-> T4 navigation and structure changing
- * by iterating in reverse order.
- * @param workingUser a user instance previously populated by OptaPlanner.
- * @param includePinnedTasks true if the pinned tasks must also be released, false if only non pinned tasks must
- * be released.
- * @param scoreDirector a scored director instance for notifying the changes.
- */
- private static void releaseTasks(User workingUser, boolean includePinnedTasks, ScoreDirector scoreDirector) {
- final List tasks = extractTasks(workingUser, testedTask -> includePinnedTasks || !testedTask.isPinned());
- Task task;
- for (int index = tasks.size() - 1; index >= 0; index--) {
- task = tasks.get(index);
- scoreDirector.beforeProblemPropertyChanged(task);
- task.setPinned(false);
- scoreDirector.afterProblemPropertyChanged(task);
- scoreDirector.beforeVariableChanged(task, PREVIOUS_TASK_OR_USER);
- task.setPreviousTaskOrUser(null);
- scoreDirector.afterVariableChanged(task, PREVIOUS_TASK_OR_USER);
- }
- }
-}
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/ReleaseTaskProblemFactChange.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/ReleaseTaskProblemFactChange.java
deleted file mode 100644
index e8593278f8..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/ReleaseTaskProblemFactChange.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.TaskOrUser;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-import static org.kie.server.services.taskassigning.core.model.Task.PREVIOUS_TASK_OR_USER;
-
-public class ReleaseTaskProblemFactChange implements ProblemFactChange {
-
- private Task task;
-
- public ReleaseTaskProblemFactChange(Task task) {
- this.task = task;
- }
-
- public Task getTask() {
- return task;
- }
-
- @Override
- public void doChange(ScoreDirector scoreDirector) {
- Task workingTask = scoreDirector.lookUpWorkingObjectOrReturnNull(task);
- if (workingTask == null || workingTask.getPreviousTaskOrUser() == null) {
- // The task could have been removed in the middle by a previous change
- // or it's simply not yet assigned.
- return;
- }
-
- //un-link the task from the chain.
- TaskOrUser previousTaskOrUser = workingTask.getPreviousTaskOrUser();
- Task nextTask = workingTask.getNextTask();
- if (nextTask != null) {
- //re-link the chain where the workingTask belonged if any
- scoreDirector.beforeVariableChanged(nextTask, PREVIOUS_TASK_OR_USER);
- nextTask.setPreviousTaskOrUser(previousTaskOrUser);
- scoreDirector.afterVariableChanged(nextTask, PREVIOUS_TASK_OR_USER);
- }
- scoreDirector.beforeVariableChanged(workingTask, PREVIOUS_TASK_OR_USER);
- workingTask.setPreviousTaskOrUser(null);
- scoreDirector.afterVariableChanged(workingTask, PREVIOUS_TASK_OR_USER);
- if (workingTask.isPinned()) {
- scoreDirector.beforeProblemPropertyChanged(workingTask);
- workingTask.setPinned(false);
- scoreDirector.afterProblemPropertyChanged(workingTask);
- }
- scoreDirector.triggerVariableListeners();
- }
-}
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/RemoveTaskProblemFactChange.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/RemoveTaskProblemFactChange.java
deleted file mode 100644
index a802323307..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/RemoveTaskProblemFactChange.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.TaskOrUser;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-import static org.kie.server.services.taskassigning.core.model.Task.PREVIOUS_TASK_OR_USER;
-
-/**
- * Implements the removal of a Task from the working solution. If a task with the given identifier not exists it does
- * no action.
- */
-public class RemoveTaskProblemFactChange implements ProblemFactChange {
-
- private Task task;
-
- public RemoveTaskProblemFactChange(Task task) {
- this.task = task;
- }
-
- public Task getTask() {
- return task;
- }
-
- @Override
- public void doChange(ScoreDirector scoreDirector) {
- TaskAssigningSolution solution = scoreDirector.getWorkingSolution();
- Task workingTask = scoreDirector.lookUpWorkingObjectOrReturnNull(task);
- if (workingTask != null) {
- TaskOrUser previousTaskOrUser = workingTask.getPreviousTaskOrUser();
- Task nextTask = workingTask.getNextTask();
- if (nextTask != null) {
- scoreDirector.beforeVariableChanged(nextTask, PREVIOUS_TASK_OR_USER);
- nextTask.setPreviousTaskOrUser(previousTaskOrUser);
- scoreDirector.afterVariableChanged(nextTask, PREVIOUS_TASK_OR_USER);
- }
- scoreDirector.beforeEntityRemoved(workingTask);
- // Planning entity lists are already cloned by the SolutionCloner, no need to clone.
- solution.getTaskList().remove(workingTask);
- scoreDirector.afterEntityRemoved(workingTask);
- scoreDirector.triggerVariableListeners();
- }
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/RemoveUserProblemFactChange.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/RemoveUserProblemFactChange.java
deleted file mode 100644
index a68c109148..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/RemoveUserProblemFactChange.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.ArrayList;
-
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-import static org.kie.server.services.taskassigning.core.model.solver.realtime.ProblemFactChangeUtil.releaseAllTasks;
-
-public class RemoveUserProblemFactChange implements ProblemFactChange {
-
- private User user;
-
- public RemoveUserProblemFactChange(User user) {
- this.user = user;
- }
-
- public User getUser() {
- return user;
- }
-
- @Override
- public void doChange(ScoreDirector scoreDirector) {
- final TaskAssigningSolution workingSolution = scoreDirector.getWorkingSolution();
- final User workingUser = scoreDirector.lookUpWorkingObjectOrReturnNull(user);
- if (workingUser == null) {
- return;
- }
- if (workingUser.isEnabled()) {
- scoreDirector.beforeProblemPropertyChanged(workingUser);
- workingUser.setEnabled(false);
- scoreDirector.afterProblemPropertyChanged(workingUser);
- }
- releaseAllTasks(workingUser, scoreDirector);
- // Shallow clone the user list so only workingSolution is affected, not bestSolution
- workingSolution.setUserList(new ArrayList<>(workingSolution.getUserList()));
- // remove the problem fact itself
- scoreDirector.beforeProblemFactRemoved(workingUser);
- workingSolution.getUserList().remove(workingUser);
- scoreDirector.afterProblemFactRemoved(workingUser);
- scoreDirector.triggerVariableListeners();
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/TaskPropertyChangeProblemFactChange.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/TaskPropertyChangeProblemFactChange.java
deleted file mode 100644
index 0a4dcc795d..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/TaskPropertyChangeProblemFactChange.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import org.kie.server.services.taskassigning.core.TaskAssigningRuntimeException;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-public class TaskPropertyChangeProblemFactChange implements ProblemFactChange {
-
- private Task task;
-
- private String status;
-
- private Integer priority;
-
- public TaskPropertyChangeProblemFactChange(Task task) {
- this.task = task;
- }
-
- public String getStatus() {
- return status;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
-
- public Integer getPriority() {
- return priority;
- }
-
- public void setPriority(Integer priority) {
- this.priority = priority;
- }
-
- public Task getTask() {
- return task;
- }
-
- @Override
- public void doChange(ScoreDirector scoreDirector) {
- Task workingTask = scoreDirector.lookUpWorkingObjectOrReturnNull(task);
- if (workingTask == null) {
- throw new TaskAssigningRuntimeException(String.format("Expected task: %s was not found in current working solution", task));
- }
- if (priority != null) {
- scoreDirector.beforeProblemPropertyChanged(workingTask);
- workingTask.setPriority(priority);
- scoreDirector.afterProblemPropertyChanged(workingTask);
- }
- if (status != null) {
- scoreDirector.beforeProblemPropertyChanged(workingTask);
- workingTask.setStatus(status);
- scoreDirector.afterProblemPropertyChanged(workingTask);
- }
- scoreDirector.triggerVariableListeners();
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/UserPropertyChangeProblemFactChange.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/UserPropertyChangeProblemFactChange.java
deleted file mode 100644
index 89663fa263..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/java/org/kie/server/services/taskassigning/core/model/solver/realtime/UserPropertyChangeProblemFactChange.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.kie.server.services.taskassigning.core.model.Group;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-import static org.kie.server.services.taskassigning.core.model.solver.realtime.ProblemFactChangeUtil.releaseNonPinnedTasks;
-
-public class UserPropertyChangeProblemFactChange implements ProblemFactChange {
-
- private User user;
-
- private boolean enabled;
-
- private Map attributes;
-
- private Map> labelValues;
-
- private Set groups;
-
- public UserPropertyChangeProblemFactChange(User user, boolean enabled, Map attributes,
- Map> labelValues, Set groups) {
- this.user = user;
- this.enabled = enabled;
- this.attributes = attributes;
- this.labelValues = labelValues;
- this.groups = groups;
- }
-
- public User getUser() {
- return user;
- }
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public Map getAttributes() {
- return attributes;
- }
-
- public Map> getLabelValues() {
- return labelValues;
- }
-
- public Set getGroups() {
- return groups;
- }
-
- @Override
- public void doChange(ScoreDirector scoreDirector) {
- final User workingUser = scoreDirector.lookUpWorkingObjectOrReturnNull(user);
- if (workingUser == null) {
- return;
- }
- scoreDirector.beforeProblemPropertyChanged(workingUser);
- workingUser.setEnabled(enabled);
- workingUser.setAllLabelValues(labelValues);
- workingUser.setAttributes(attributes);
- workingUser.setGroups(groups);
- scoreDirector.afterProblemPropertyChanged(workingUser);
- releaseNonPinnedTasks(workingUser, scoreDirector);
- scoreDirector.triggerVariableListeners();
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/resources/org/kie/server/services/taskassigning/solver/taskAssigningDefaultSolverConfig.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/resources/org/kie/server/services/taskassigning/solver/taskAssigningDefaultSolverConfig.xml
deleted file mode 100755
index 09359c5743..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/resources/org/kie/server/services/taskassigning/solver/taskAssigningDefaultSolverConfig.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
- org.kie.server.services.taskassigning.core.model.TaskAssigningSolution
- org.kie.server.services.taskassigning.core.model.TaskOrUser
- org.kie.server.services.taskassigning.core.model.Task
-
- true
-
-
- org/kie/server/services/taskassigning/solver/taskAssigningScoreRules.drl
-
-
- AUTO
-
-
-
- org.kie.server.services.taskassigning.core.model.solver.filter.TaskByGroupAndSkillsChangeMoveFilter
-
-
-
-
-
-
- PT2M
-
-
-
-
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/resources/org/kie/server/services/taskassigning/solver/taskAssigningScoreRules.drl b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/resources/org/kie/server/services/taskassigning/solver/taskAssigningScoreRules.drl
deleted file mode 100644
index 7a6d53a73d..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/main/resources/org/kie/server/services/taskassigning/solver/taskAssigningScoreRules.drl
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.solver;
-dialect "java"
-
-import org.optaplanner.core.api.score.buildin.bendablelong.BendableLongScoreHolder;
-
-import org.kie.server.services.taskassigning.core.model.DefaultLabels;
-import org.kie.server.services.taskassigning.core.model.ModelConstants;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.solver.PriorityHelper;
-import org.kie.server.services.taskassigning.core.model.solver.TaskHelper;
-import org.kie.server.services.taskassigning.core.model.solver.condition.TaskAssigningConditions;
-
-global BendableLongScoreHolder scoreHolder;
-
-// ############################################################################
-// Hard constraints
-// ############################################################################
-
-// A task can only be assigned to one of it's potential owners or to the PlanningUser
-rule "Required Potential Owner"
- when
- $task : Task(user != null, !TaskAssigningConditions.userMeetsPotentialOwnerOrPlanningUserCondition($task, user))
- then
- scoreHolder.addHardConstraintMatch(kcontext, 0, -1);
-end
-
-// A task with defined skills can only be assigned to users that has all the of them or to the PlanningUser
-rule "Required Skills"
- when
- $task : Task(user != null, !TaskAssigningConditions.userMeetsRequiredSkillsOrPlanningUserCondition($task, user))
- then
- scoreHolder.addHardConstraintMatch(kcontext, 1, -1);
-end
-
-// ############################################################################
-// Soft constraints
-// ############################################################################
-
-// First level soft constraint for penalizing the assignment of the PLANNING_USER. The PLANNING_USER is by definition
-// a potential owner for all the tasks. But we want to avoid the assigning of this user "as soon as possible".
-// The PLANNING_USER is e.g. a jBPM user with administration grants for enabling the management of Tasks that couldn't
-// be assigned to anybody. e.g. if a Task needs to be assigned to user that belongs to group HR, but no users with that
-// group exists the PLANNING_USER is assigned instead.
-// This tasks can e.g. be later manually completed by the PLANNING_USER or manually reassigned
-// to a different jBPM user by using the jBPM tasks lists administration, etc.
-rule "PlanningUser assignment"
- when
- Task(user != null, ModelConstants.IS_PLANNING_USER.test(user.getEntityId()))
- then
- // a penalization is added each time the PLANNING_USER is assigned.
- scoreHolder.addSoftConstraintMatch(kcontext, 0, -1);
-end
-
-rule "High level priority"
- when
- $task : Task(user != null, PriorityHelper.isHighLevel(priority))
- then
- scoreHolder.addSoftConstraintMatch(kcontext, 1, PriorityHelper.calculateWeightedPenalty($task.getPriority(), $task.getEndTimeInMinutes()));
-end
-
-// When a task has defined affinities consider assigning users that match the most of them as possible.
-rule "Desired Affinities"
- when
- $task : Task(user != null, user.isEnabled())
- then
- scoreHolder.addSoftConstraintMatch(kcontext, 2, TaskHelper.countMatchingLabels($task, $task.getUser(), DefaultLabels.AFFINITIES.name()));
-end
-
-rule "Minimize makespan (starting with the latest ending user first)"
- when
- Task(user != null, nextTask == null, $endTimeInMinutes : endTimeInMinutes)
- then
- // Fairness and load balancing trick (see docs): squared to assure correctness in corner cases
- scoreHolder.addSoftConstraintMatch(kcontext, 3, - ($endTimeInMinutes * $endTimeInMinutes));
-end
-
-rule "Medium level priority"
- when
- $task : Task(user != null, PriorityHelper.isMediumLevel(priority))
- then
- scoreHolder.addSoftConstraintMatch(kcontext, 4, PriorityHelper.calculateWeightedPenalty($task.getPriority(), $task.getEndTimeInMinutes()));
-end
-
-rule "Low level priority"
- when
- $task : Task(user != null, PriorityHelper.isLowLevel(priority))
- then
- scoreHolder.addSoftConstraintMatch(kcontext, 5, PriorityHelper.calculateWeightedPenalty($task.getPriority(), $task.getEndTimeInMinutes()));
-end
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/AbstractTaskAssigningCoreTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/AbstractTaskAssigningCoreTest.java
deleted file mode 100644
index 82f5b3ad36..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/AbstractTaskAssigningCoreTest.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.util.Arrays;
-import java.util.Set;
-
-import org.apache.commons.io.FileUtils;
-import org.kie.server.services.taskassigning.core.model.OrganizationalEntity;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.TaskOrUser;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.optaplanner.core.api.solver.Solver;
-import org.optaplanner.core.api.solver.SolverFactory;
-import org.optaplanner.core.config.constructionheuristic.ConstructionHeuristicPhaseConfig;
-import org.optaplanner.core.config.constructionheuristic.ConstructionHeuristicType;
-import org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig;
-import org.optaplanner.core.config.score.director.ScoreDirectorFactoryConfig;
-import org.optaplanner.core.config.solver.SolverConfig;
-import org.optaplanner.core.config.solver.termination.TerminationConfig;
-import org.optaplanner.persistence.xstream.impl.domain.solution.XStreamSolutionFileIO;
-
-public abstract class AbstractTaskAssigningCoreTest extends AbstractTaskAssigningTest {
-
- protected boolean writeTestFiles() {
- return Boolean.parseBoolean(System.getProperty("org.kie.server.services.taskassigning.test.writeFiles", "false"));
- }
-
- protected SolverConfig createBaseConfig() {
- SolverConfig config = new SolverConfig();
- config.setSolutionClass(TaskAssigningSolution.class);
- config.setEntityClassList(Arrays.asList(TaskOrUser.class, Task.class));
- config.setScoreDirectorFactoryConfig(new ScoreDirectorFactoryConfig().withScoreDrls("org/kie/server/services/taskassigning/solver/taskAssigningScoreRules.drl"));
- return config;
- }
-
- protected Solver createDaemonSolver() {
- SolverConfig config = createBaseConfig();
- config.setDaemon(true);
- SolverFactory solverFactory = SolverFactory.create(config);
- return solverFactory.buildSolver();
- }
-
- protected Solver createNonDaemonSolver(int stepCountLimit) {
- SolverConfig config = createBaseConfig();
- ConstructionHeuristicPhaseConfig constructionHeuristicPhaseConfig = new ConstructionHeuristicPhaseConfig();
- constructionHeuristicPhaseConfig.setConstructionHeuristicType(ConstructionHeuristicType.FIRST_FIT);
- LocalSearchPhaseConfig phaseConfig = new LocalSearchPhaseConfig();
- phaseConfig.setTerminationConfig(new TerminationConfig().withStepCountLimit(stepCountLimit));
- config.setPhaseConfigList(Arrays.asList(constructionHeuristicPhaseConfig, phaseConfig));
- SolverFactory solverFactory = SolverFactory.create(config);
- return solverFactory.buildSolver();
- }
-
- protected TaskAssigningSolution readTaskAssigningSolution(String resource) throws IOException {
- int index = resource.lastIndexOf("/");
- String prefix = resource;
- if (index >= 0) {
- prefix = resource.substring(index + 1);
- }
- File f = File.createTempFile(prefix, null);
- InputStream resourceAsStream = getClass().getResourceAsStream(resource);
- FileUtils.copyInputStreamToFile(resourceAsStream, f);
- XStreamSolutionFileIO solutionFileIO = new XStreamSolutionFileIO<>(TaskAssigningSolution.class);
- return solutionFileIO.read(f);
- }
-
- private static void appendln(StringBuilder builder) {
- builder.append('\n');
- }
-
- private static void appendln(StringBuilder builder, String text) {
- builder.append(text);
- appendln(builder);
- }
-
- public static void printSolution(TaskAssigningSolution solution, StringBuilder builder) {
- solution.getUserList().forEach(taskOrUser -> {
- appendln(builder, "------------------------------------------");
- appendln(builder, printUser(taskOrUser));
- appendln(builder, "------------------------------------------");
- appendln(builder);
- Task task = taskOrUser.getNextTask();
- while (task != null) {
- builder.append(" -> ");
- appendln(builder, printTask(task));
- task = task.getNextTask();
- if (task != null) {
- appendln(builder);
- }
- }
- appendln(builder);
- });
- }
-
- public static String printSolution(TaskAssigningSolution solution) {
- StringBuilder builder = new StringBuilder();
- printSolution(solution, builder);
- return builder.toString();
- }
-
- public static String printUser(User user) {
- return "User{" +
- "id=" + user.getId() +
- ", entityId='" + user.getEntityId() + '\'' +
- ", groups=" + printOrganizationalEntities(user.getGroups()) +
- '}';
- }
-
- public static String printTask(Task task) {
- StringBuilder builder = new StringBuilder();
- builder.append(task.getName() +
- ", pinned: " + task.isPinned() +
- ", priority: " + task.getPriority() +
- ", startTimeInMinutes: " + task.getStartTimeInMinutes() +
- ", durationInMinutes:" + task.getDurationInMinutes() +
- ", endTimeInMinutes: " + task.getEndTimeInMinutes() +
- ", user: " + task.getUser().getEntityId() +
- ", potentialOwners: " + printOrganizationalEntities(task.getPotentialOwners()));
- return builder.toString();
- }
-
- public static String printOrganizationalEntities(Set extends OrganizationalEntity> potentialOwners) {
- StringBuilder builder = new StringBuilder();
- builder.append("{");
- if (potentialOwners != null) {
- potentialOwners.forEach(organizationalEntity -> {
- if (builder.length() > 1) {
- builder.append(", ");
- }
- if (organizationalEntity.isUser()) {
- builder.append("user = " + organizationalEntity.getEntityId());
- } else {
- builder.append("group = " + organizationalEntity.getEntityId());
- }
- });
- }
- builder.append("}");
- return builder.toString();
- }
-
- public static void writeToTempFile(String fileName, String content) throws IOException {
- File tmpFile = File.createTempFile(fileName, null);
- Files.write(tmpFile.toPath(), content.getBytes());
- }
-}
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/AbstractTaskAssigningTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/AbstractTaskAssigningTest.java
deleted file mode 100644
index d8a6700d2c..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/AbstractTaskAssigningTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.kie.server.services.taskassigning.core;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.Assume.assumeTrue;
-
-public abstract class AbstractTaskAssigningTest {
-
- /**
- * System property for triggering the "turtle tests". This tests are part of the product but only executed when
- * this system property is set. It's up to the productization scripts to determine when this tests should be
- * executed or not. Developers can always trigger them locally if needed.
- */
- String RUN_TURTLE_TESTS = "runTurtleTests";
-
- /**
- * System property for triggering the "development only tests".
- * This tests are not intended be part of product the build tests and should not be part of the productization scripts,
- * since they are only useful for developers to test stuff locally during development (e.g. for executing random operations)
- * Don't abuse with the use this tests.
- */
- String RUN_DEVELOPMENT_ONLY_TESTS = "runDevelopmentOnlyTests";
-
- protected final Logger LOGGER = LoggerFactory.getLogger(getClass());
-
- protected void checkRunTurtleTests() {
- assumeTrue("true".equals(System.getProperty(RUN_TURTLE_TESTS)));
- }
-
- protected void checkRunDevelopmentOnlyTests() {
- assumeTrue("true".equals(System.getProperty(RUN_DEVELOPMENT_ONLY_TESTS)));
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/TestDataSet.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/TestDataSet.java
deleted file mode 100644
index 3583705a5d..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/TestDataSet.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.kie.server.services.taskassigning.core;
-
-public enum TestDataSet {
-
- SET_OF_24TASKS_8USERS_SOLUTION("/data/unsolved/24tasks-8users.xml"),
- SET_OF_50TASKS_5USERS_SOLUTION("/data/unsolved/50tasks-5users.xml"),
- SET_OF_100TASKS_5USERS_SOLUTION("/data/unsolved/100tasks-5users.xml"),
- SET_OF_500TASKS_20USERS_SOLUTION("/data/unsolved/500tasks-20users.xml");
-
- private String resource;
-
- TestDataSet(String resource) {
- this.resource = resource;
- }
-
- public String resource() {
- return resource;
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/TestUtil.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/TestUtil.java
deleted file mode 100644
index a63de0b988..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/TestUtil.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model;
-
-import java.util.List;
-import java.util.Set;
-
-public class TestUtil {
-
- private TestUtil() {
- }
-
- public static Task mockTask(long taskId, boolean pinned) {
- Task task = new Task(taskId, "Task_" + taskId, 0);
- task.setPinned(pinned);
- return task;
- }
-
- public static User mockUser(String id, List tasks) {
- User user = new User(id.hashCode(), id);
- TaskOrUser previous = user;
- for (Task taskOrUser : tasks) {
- taskOrUser.setPreviousTaskOrUser(previous);
- taskOrUser.setUser(user);
- previous.setNextTask(taskOrUser);
- previous = taskOrUser;
- }
- return user;
- }
-
- public static Task mockTask(List potentialOwners, Set skills) {
- Task task = new Task(1, "TaskName", 1);
- task.getPotentialOwners().addAll(potentialOwners);
- task.setLabelValues(DefaultLabels.SKILLS.name(), skills);
- return task;
- }
-
- public static User mockUser(String userId, boolean enabled, List groups, Set skills) {
- User user = new User(userId.hashCode(), userId, enabled);
- user.getGroups().addAll(groups);
- user.setLabelValues(DefaultLabels.SKILLS.name(), skills);
- return user;
- }
-
- public static Group mockGroup(String groupId) {
- return new Group(groupId.hashCode(), groupId);
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/PriorityHelperTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/PriorityHelperTest.java
deleted file mode 100644
index 3e8377757d..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/PriorityHelperTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver;
-
-import java.util.stream.Stream;
-
-import org.assertj.core.api.Assertions;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-public class PriorityHelperTest {
-
- @Test
- public void isHighLevel() {
- Stream.of(0, 1, 2).forEach(level -> assertTrue(PriorityHelper.isHighLevel(level)));
- }
-
- @Test
- public void isMediumLevel() {
- Stream.of(3, 4, 5, 6).forEach(level -> assertTrue(PriorityHelper.isMediumLevel(level)));
- }
-
- @Test
- public void isLowLevel() {
- Stream.of(7, 8, 9, 10).forEach(level -> assertTrue(PriorityHelper.isLowLevel(level)));
- }
-
- @Test
- public void calculateWeightedPenaltySuccessful() {
- for (int priority = 0; priority < 11; priority++) {
- calculateWeightedPenaltySuccess(priority);
- }
- }
-
- private void calculateWeightedPenaltySuccess(int priority) {
- int endTime = 1234;
- int expectedValue = -(11 - priority) * endTime;
- assertEquals(expectedValue, PriorityHelper.calculateWeightedPenalty(priority, endTime));
- }
-
- @Test
- public void calculateWeightedPenaltyFailure() {
- String expectedMessage = "Task priority %s is out of range. " +
- "A valid priority value must be between 0 (inclusive) " +
- " and 10 (inclusive)";
- Stream.of(-2, -1, 11, 12).forEach(priority -> {
- Assertions.assertThatThrownBy(() -> {
- PriorityHelper.calculateWeightedPenalty(priority, 1234);
- }).hasMessage(String.format(expectedMessage, priority));
- });
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/StartAndEndTimeUpdatingVariableListenerTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/StartAndEndTimeUpdatingVariableListenerTest.java
deleted file mode 100644
index 23576f3854..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/StartAndEndTimeUpdatingVariableListenerTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver;
-
-import java.util.stream.Stream;
-
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.kie.server.services.taskassigning.core.model.solver.StartAndEndTimeUpdatingVariableListener;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.verify;
-
-@RunWith(MockitoJUnitRunner.class)
-public class StartAndEndTimeUpdatingVariableListenerTest {
-
- @Mock
- private ScoreDirector scoreDirector;
-
- private User anchor;
-
- private StartAndEndTimeUpdatingVariableListener listener;
-
- private Task task1;
- private Task task2;
- private Task task3;
- private Task task4;
- private Task task5;
-
- @Before
- public void setUp() {
- listener = new StartAndEndTimeUpdatingVariableListener();
-
- anchor = new User(1, "User1");
- task1 = new Task(1, "Task1", 1);
- task1.setStartTimeInMinutes(anchor.getEndTimeInMinutes());
- task1.setDurationInMinutes(1);
- task1.setEndTime(task1.getStartTimeInMinutes() + task1.getDurationInMinutes());
- task1.setPreviousTaskOrUser(anchor);
-
- task2 = new Task(2, "Task2", 1);
- task2.setDurationInMinutes(2);
- task2.setPreviousTaskOrUser(task1);
- task2.setStartTimeInMinutes(task1.getEndTimeInMinutes());
- task2.setEndTime(task2.getStartTimeInMinutes() + task2.getDurationInMinutes());
- task1.setNextTask(task2);
-
- task3 = new Task(3, "Task3", 1);
- task3.setDurationInMinutes(3);
- task3.setPreviousTaskOrUser(task2);
-
- task4 = new Task(4, "Task4", 1);
- task4.setDurationInMinutes(4);
- task4.setPreviousTaskOrUser(task3);
- task3.setNextTask(task4);
-
- task5 = new Task(5, "Task5", 1);
- task5.setDurationInMinutes(5);
- task5.setPreviousTaskOrUser(task4);
- task4.setNextTask(task5);
- }
-
- @Test
- public void afterEntityAdded() {
- listener.afterEntityAdded(scoreDirector, task3);
- verifyTimes();
- }
-
- @Test
- public void afterVariableChanged() {
- listener.afterVariableChanged(scoreDirector, task3);
- verifyTimes();
- }
-
- private void verifyTimes() {
- assertEquals((long) (task1.getDurationInMinutes() + task2.getDurationInMinutes()), (long) task3.getStartTimeInMinutes());
- assertEquals((long) (task1.getDurationInMinutes() + task2.getDurationInMinutes() + task3.getDurationInMinutes()), (long) task3.getEndTimeInMinutes());
- assertEquals((long) (task1.getDurationInMinutes() + task2.getDurationInMinutes() + task3.getDurationInMinutes()), (long) task4.getStartTimeInMinutes());
- assertEquals((long) (task1.getDurationInMinutes() + task2.getDurationInMinutes() + task3.getDurationInMinutes() + task4.getDurationInMinutes()), (long) task4.getEndTimeInMinutes());
- assertEquals((long) (task1.getDurationInMinutes() + task2.getDurationInMinutes()) + task3.getDurationInMinutes() + task4.getDurationInMinutes(), (long) task5.getStartTimeInMinutes());
- assertEquals((long) (task1.getDurationInMinutes() + task2.getDurationInMinutes()) + task3.getDurationInMinutes() + task4.getDurationInMinutes() + task5.getDurationInMinutes(), (long) task5.getEndTimeInMinutes());
-
- Stream.of(task3, task4, task5).forEach(task -> {
- verify(scoreDirector).beforeVariableChanged(task, Task.START_TIME_IN_MINUTES);
- verify(scoreDirector).afterVariableChanged(task, Task.START_TIME_IN_MINUTES);
- verify(scoreDirector).beforeVariableChanged(task, Task.END_TIME_IN_MINUTES);
- verify(scoreDirector).afterVariableChanged(task, Task.END_TIME_IN_MINUTES);
- });
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/TaskDifficultyComparatorTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/TaskDifficultyComparatorTest.java
deleted file mode 100644
index 5f80d9d6c0..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/TaskDifficultyComparatorTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.kie.server.services.taskassigning.core.model.solver;
-
-import org.junit.Test;
-import org.kie.server.services.taskassigning.core.model.Task;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class TaskDifficultyComparatorTest {
-
- @Test
- public void testCompare() {
- TaskDifficultyComparator comparator = new TaskDifficultyComparator();
-
- testEquals(comparator,
- new Task(1, "name", 5),
- new Task(1, "name", 5));
-
- testLessThan(comparator,
- new Task(1, "name", 5),
- new Task(1, "name", 1));
-
- testGreaterThan(comparator,
- new Task(1, "name", 1),
- new Task(1, "name", 5));
-
- testLessThan(comparator,
- new Task(1, "name", 5),
- new Task(2, "name", 5));
-
- testGreaterThan(comparator,
- new Task(2, "name", 5),
- new Task(1, "name", 5));
- }
-
- private void testLessThan(TaskDifficultyComparator comparator, Task task1, Task task2) {
- assertThat(comparator.compare(task1, task2)).isLessThan(0);
- }
-
- private void testEquals(TaskDifficultyComparator comparator, Task task1, Task task2) {
- assertThat(comparator.compare(task1, task2)).isEqualTo(0);
- }
-
- private void testGreaterThan(TaskDifficultyComparator comparator, Task task1, Task task2) {
- assertThat(comparator.compare(task1, task2)).isGreaterThan(0);
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/TaskHelperTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/TaskHelperTest.java
deleted file mode 100644
index a8a1fb09df..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/TaskHelperTest.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.kie.server.services.taskassigning.core.model.Group;
-import org.kie.server.services.taskassigning.core.model.OrganizationalEntity;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskOrUser;
-import org.kie.server.services.taskassigning.core.model.User;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.kie.server.services.taskassigning.core.model.solver.TaskHelper.isPotentialOwner;
-
-@RunWith(Parameterized.class)
-public class TaskHelperTest {
-
- private static final String LABEL_NAME1 = "LABEL_NAME1";
- private static final String LABEL_NAME2 = "LABEL_NAME2";
- private static final String LABEL_VALUE1 = "LABEL_VALUE1";
- private static final Integer LABEL_VALUE2 = 2;
-
- private static final int SIZE = 2;
-
- private List availableUsers;
- private List availableGroups;
- private Task task;
-
- @Parameterized.Parameter
- public String taskLabelName;
-
- @Parameterized.Parameter(1)
- public Set taskLabelValues;
-
- @Parameterized.Parameter(2)
- public String userLabelName;
-
- @Parameterized.Parameter(3)
- public Set userLabelValues;
-
- @Parameterized.Parameter(4)
- public boolean hasAllLabelsResult;
-
- @Parameterized.Parameter(5)
- public int matchingLabelsResult;
-
- @Parameterized.Parameters
- public static Collection data() {
- List data = new ArrayList<>();
- data.add(new Object[]{LABEL_NAME1, new HashSet<>(Arrays.asList(LABEL_VALUE1, LABEL_VALUE2)), LABEL_NAME1, new HashSet<>(Arrays.asList(LABEL_VALUE1, LABEL_VALUE2)), true, 2});
- data.add(new Object[]{LABEL_NAME1, new HashSet<>(Collections.singletonList(LABEL_VALUE1)), LABEL_NAME1, new HashSet<>(Arrays.asList(LABEL_VALUE1, LABEL_VALUE2)), true, 1});
- data.add(new Object[]{LABEL_NAME1, Collections.emptySet(), LABEL_NAME1, new HashSet<>(Arrays.asList(LABEL_VALUE1, LABEL_VALUE2)), true, 0});
- data.add(new Object[]{LABEL_NAME1, null, LABEL_NAME1, new HashSet<>(Arrays.asList(LABEL_VALUE1, LABEL_VALUE2)), true, 0});
- data.add(new Object[]{LABEL_NAME1, null, LABEL_NAME1, Collections.emptySet(), true, 0});
- data.add(new Object[]{LABEL_NAME1, null, LABEL_NAME1, null, true, 0});
- data.add(new Object[]{LABEL_NAME1, new HashSet<>(Arrays.asList(LABEL_VALUE1, LABEL_VALUE2)), LABEL_NAME1, new HashSet<>(Collections.singletonList(LABEL_VALUE2)), false, 1});
- data.add(new Object[]{LABEL_NAME1, new HashSet<>(Arrays.asList(LABEL_VALUE1, LABEL_VALUE2)), LABEL_NAME1, new HashSet<>(), false, 0});
- data.add(new Object[]{LABEL_NAME1, new HashSet<>(Arrays.asList(LABEL_VALUE1, LABEL_VALUE2)), LABEL_NAME1, null, false, 0});
- data.add(new Object[]{LABEL_NAME1, new HashSet<>(Arrays.asList(LABEL_VALUE1, LABEL_VALUE2)), LABEL_NAME2, new HashSet<>(Arrays.asList(LABEL_VALUE1, LABEL_VALUE2)), false, 0});
- return data;
- }
-
- @Before
- public void setUp() {
- availableUsers = buildUsers(SIZE);
- availableGroups = buildGroups(SIZE);
- List potentialOwners = new ArrayList<>(availableUsers);
- potentialOwners.addAll(availableGroups);
- task = buildTask(potentialOwners);
- }
-
- @Test
- public void isPotentialOwnerDirectAssignmentTrue() {
- for (User user : availableUsers) {
- assertThat(isPotentialOwner(task, user)).isTrue();
- }
- }
-
- @Test
- public void isPotentialOwnerDirectAssignmentFalse() {
- for (User user : availableUsers) {
- task.getPotentialOwners().remove(user);
- assertThat(isPotentialOwner(task, user)).isFalse();
- }
- }
-
- @Test
- public void isPotentialOwnerInDirectAssignmentTrue() {
- for (User user : availableUsers) {
- task.getPotentialOwners().remove(user);
- for (Group group : availableGroups) {
- user.getGroups().add(group);
- assertThat(isPotentialOwner(task, user)).isTrue();
- user.getGroups().remove(group);
- }
- }
- }
-
- @Test
- public void isPotentialOwnerInDirectAssignmentFalse() {
- for (User user : availableUsers) {
- task.getPotentialOwners().remove(user);
- for (Group group : availableGroups) {
- user.getGroups().add(group);
- assertThat(isPotentialOwner(task, user)).isTrue();
- user.getGroups().remove(group);
- assertThat(isPotentialOwner(task, user)).isFalse();
- }
- }
- }
-
- @Test
- public void isPotentialOwnerOfTaskWithNoGroupsAndUserNoGroups() {
- Task task = new Task();
- User user = availableUsers.get(0);
- assertThat(isPotentialOwner(task, user)).isFalse();
- }
-
- @Test
- public void isPotentialOwnerOfTaskWithGroupsAndUserNoGroups() {
- Task task = new Task();
- task.getPotentialOwners().add(availableGroups.get(0));
- User user = availableUsers.get(0);
- assertThat(isPotentialOwner(task, user)).isFalse();
- }
-
- @Test
- public void isPotentialOwnerOfTaskWithNoGroupsAndUserWithGroups() {
- Task task = new Task();
- User user = availableUsers.get(0);
- user.getGroups().add(availableGroups.get(0));
- assertThat(isPotentialOwner(task, user)).isFalse();
- }
-
- @Test
- public void hasAllLabels() {
- Task task = mockTask(taskLabelName, taskLabelValues);
- User user = mockUser(userLabelName, userLabelValues);
- assertThat(TaskHelper.hasAllLabels(task, user, taskLabelName)).isEqualTo(hasAllLabelsResult);
- }
-
- @Test
- public void matchingLabels() {
- Task task = mockTask(taskLabelName, taskLabelValues);
- User user = mockUser(userLabelName, userLabelValues);
- assertThat(TaskHelper.countMatchingLabels(task, user, taskLabelName)).isEqualTo(matchingLabelsResult);
- }
-
- @Test
- public void extractTasks() {
- TaskOrUser taskOrUser = buildTaskOrUser();
- List result = TaskHelper.extractTasks(taskOrUser);
- assertThat(result.size()).isEqualTo(4);
- assertThat(result.get(0).getId()).isEqualTo(1);
- assertThat(result.get(1).getId()).isEqualTo(2);
- assertThat(result.get(2).getId()).isEqualTo(3);
- assertThat(result.get(3).getId()).isEqualTo(4);
- }
-
- @Test
- public void extractTasksFiltered() {
- TaskOrUser taskOrUser = buildTaskOrUser();
- List result = TaskHelper.extractTasks(taskOrUser, testedTask -> testedTask.getId() == 1 || testedTask.getId() == 4);
- assertThat(result.size()).isEqualTo(2);
- assertThat(result.get(0).getId()).isEqualTo(1);
- assertThat(result.get(1).getId()).isEqualTo(4);
- }
-
- @Test
- public void hasPinnedTasks() {
- TaskOrUser taskOrUser = buildTaskOrUser();
- assertThat(TaskHelper.hasPinnedTasks(taskOrUser)).isTrue();
- }
-
- private TaskOrUser buildTaskOrUser() {
- TaskOrUser taskOrUser = new Task();
- Task task1 = new Task(1, "Task1", 0);
- Task task2 = new Task(2, "Task2", 0);
- Task task3 = new Task(3, "Task3", 0);
- task3.setPinned(true);
- Task task4 = new Task(4, "Task4", 0);
- task2.setPinned(true);
- taskOrUser.setNextTask(task1);
- task1.setNextTask(task2);
- task2.setNextTask(task3);
- task3.setNextTask(task4);
- return taskOrUser;
- }
-
- private static Task buildTask(List potentialOwners) {
- Task task = new Task(1, "TaskName", 1);
- task.getPotentialOwners().addAll(potentialOwners);
- return task;
- }
-
- private static List buildUsers(int size) {
- List users = new ArrayList<>();
- for (int i = 0; i < size; i++) {
- users.add(new User(i, "User" + i));
- }
- return users;
- }
-
- private static List buildGroups(int size) {
- List groupList = new ArrayList<>();
- for (int i = 0; i < size; i++) {
- groupList.add(new Group(i, "Group" + i));
- }
- return groupList;
- }
-
- private static User mockUser(String labelName, Set labelValues) {
- User user = new User();
- user.setLabelValues(labelName, labelValues);
- return user;
- }
-
- private static Task mockTask(String labelName, Set labelValues) {
- Task task = new Task();
- task.setLabelValues(labelName, labelValues);
- return task;
- }
-}
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/TestSolver.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/TestSolver.java
deleted file mode 100644
index cc2039abdf..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/TestSolver.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver;
-
-import java.util.List;
-
-import org.kie.server.services.taskassigning.core.AbstractTaskAssigningCoreTest;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.junit.Test;
-import org.optaplanner.core.api.solver.Solver;
-
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_24TASKS_8USERS_SOLUTION;
-import static org.kie.server.services.taskassigning.core.model.ModelConstants.PLANNING_USER;
-import static org.kie.server.services.taskassigning.core.model.solver.TaskHelper.extractTasks;
-import static org.kie.server.services.taskassigning.core.model.solver.TaskHelper.isPotentialOwner;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-public class TestSolver extends AbstractTaskAssigningCoreTest {
-
- private static final long TEST_TIMEOUT = 20000;
-
- @Test(timeout = TEST_TIMEOUT)
- public void startSolverAndSolution24Tasks8Users() throws Exception {
- testSolverStartAndSolution(1, SET_OF_24TASKS_8USERS_SOLUTION.resource());
- }
-
- /**
- * Tests that solver for the tasks assigning problem definition can be properly started, a solution can be produced,
- * and that some minimal constrains are met by de solution.
- */
- private void testSolverStartAndSolution(int stepCountLimit, String solutionResource) throws Exception {
- Solver solver = createNonDaemonSolver(stepCountLimit);
- TaskAssigningSolution solution = readTaskAssigningSolution(solutionResource);
- solution.getUserList().add(PLANNING_USER);
- TaskAssigningSolution result = solver.solve(solution);
- if (!result.getScore().isFeasible()) {
- fail(String.format("With current problem definition and stepCountLimit of %s it's expected " +
- "that a feasible solution has been produced.", stepCountLimit));
- }
- assertConstraints(result);
- }
-
- /**
- * Given a TaskAssigningSolution asserts the following constraints.
- *
- * 1) All tasks are assigned to a user
- * 2) The assigned user for a task is a potentialOwner for the task or the PLANNING_USER
- * 3) All tasks are assigned.
- * @param solution a solution.
- */
- private void assertConstraints(TaskAssigningSolution solution) {
- int totalTasks = 0;
- for (User user : solution.getUserList()) {
- List taskList = extractTasks(user);
- totalTasks += taskList.size();
- taskList.forEach(task -> assertAssignment(user, task, solution.getUserList()));
- }
- assertEquals(solution.getTaskList().size(), totalTasks);
- }
-
- private void assertAssignment(User user, Task task, List availableUsers) {
- assertNotNull(task.getUser());
- assertEquals("Task is not assigned to expected user", user.getEntityId(), task.getUser().getEntityId());
- if (task.getPotentialOwners() == null || task.getPotentialOwners().isEmpty()) {
- assertEquals("Task without potentialOwners can only be assigned to the PLANNING_USER", PLANNING_USER.getEntityId(), user.getEntityId());
- } else if (PLANNING_USER.getEntityId().equals(user.getEntityId())) {
- availableUsers.forEach(availableUser -> {
- assertFalse(String.format("PLANNING_USER user was assigned but another potential owner was found. user: %s task: %s", user, task), isPotentialOwner(task, user));
- });
- } else {
- assertTrue(String.format("User: %s is not a potential owner for task: %s", user, task), isPotentialOwner(task, user));
- }
- }
-}
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/condition/TaskAssigningConditionsTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/condition/TaskAssigningConditionsTest.java
deleted file mode 100644
index 105104cbe0..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/condition/TaskAssigningConditionsTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.condition;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.kie.server.services.taskassigning.core.model.ModelConstants;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.User;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockGroup;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockTask;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockUser;
-
-@RunWith(Parameterized.class)
-public class TaskAssigningConditionsTest {
-
- private static final String GROUP1 = "GROUP1";
- private static final String SKILL1 = "SKILL1";
- private static final String USER1 = "USER1";
-
- @Parameterized.Parameter
- public Task task;
-
- @Parameterized.Parameter(1)
- public User user;
-
- @Parameterized.Parameter(2)
- public boolean meetsPotentialOwnerResult;
-
- @Parameterized.Parameter(3)
- public boolean meetRequiredSkillsResult;
-
- @Parameterized.Parameters
- public static Collection data() {
- List data = new ArrayList<>();
- data.add(new Object[]{mockTask(Collections.emptyList(), Collections.emptySet()), null, false, false});
-
- data.add(new Object[]{mockTask(Collections.emptyList(), Collections.emptySet()), ModelConstants.PLANNING_USER, true, true});
-
- data.add(new Object[]{
- mockTask(Collections.emptyList(), Collections.emptySet()),
- mockUser(USER1, false, Collections.emptyList(), Collections.emptySet()), false, false});
-
- data.add(new Object[]{
- mockTask(Collections.emptyList(), Collections.emptySet()),
- mockUser(USER1, true, Collections.emptyList(), Collections.emptySet()), false, true});
-
- data.add(new Object[]{
- mockTask(Collections.singletonList(mockUser(USER1, true, Collections.emptyList(), Collections.emptySet())), Collections.emptySet()),
- mockUser(USER1, false, Collections.emptyList(), Collections.emptySet()), false, false});
-
- data.add(new Object[]{
- mockTask(Collections.singletonList(mockUser(USER1, true, Collections.emptyList(), Collections.emptySet())), Collections.emptySet()),
- mockUser(USER1, true, Collections.emptyList(), Collections.emptySet()), true, true});
-
- data.add(new Object[]{
- mockTask(Collections.singletonList(mockUser(USER1, true, Collections.emptyList(), Collections.emptySet())), Collections.singleton(SKILL1)),
- mockUser(USER1, true, Collections.emptyList(), Collections.emptySet()), true, false});
-
- data.add(new Object[]{
- mockTask(Collections.singletonList(mockUser(USER1, true, Collections.emptyList(), Collections.emptySet())), Collections.singleton(SKILL1)),
- mockUser(USER1, true, Collections.emptyList(), Collections.singleton(SKILL1)), true, true});
-
- data.add(new Object[]{
- mockTask(Collections.singletonList(mockGroup(GROUP1)), Collections.emptySet()),
- mockUser(USER1, true, Collections.emptyList(), Collections.emptySet()), false, true});
-
- data.add(new Object[]{
- mockTask(Collections.singletonList(mockGroup(GROUP1)), Collections.emptySet()),
- mockUser(USER1, true, Collections.singletonList(mockGroup(GROUP1)), Collections.emptySet()), true, true});
-
- return data;
- }
-
- @Test
- public void userMeetsPotentialOwnerOrPlanningUserCondition() {
- assertThat(TaskAssigningConditions.userMeetsPotentialOwnerOrPlanningUserCondition(task, user))
- .isEqualTo(meetsPotentialOwnerResult);
- }
-
- @Test
- public void userMeetsRequiredSkillsOrPlanningUserCondition() {
- assertThat(TaskAssigningConditions.userMeetsRequiredSkillsOrPlanningUserCondition(task, user))
- .isEqualTo(meetRequiredSkillsResult);
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/filter/TaskByGroupAndSkillsChangeMoveFilterTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/filter/TaskByGroupAndSkillsChangeMoveFilterTest.java
deleted file mode 100644
index 3a25d0470a..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/filter/TaskByGroupAndSkillsChangeMoveFilterTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.filter;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.kie.server.services.taskassigning.core.model.ModelConstants;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.TaskOrUser;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.optaplanner.core.impl.heuristic.selector.move.generic.ChangeMove;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockGroup;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockTask;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockUser;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-@RunWith(Parameterized.class)
-public class TaskByGroupAndSkillsChangeMoveFilterTest {
-
- private static final String GROUP = "GROUP";
- private static final String SKILL = "SKILL";
- private static final String USER = "USER";
-
- private ScoreDirector scoreDirector;
-
- private TaskByGroupAndSkillsChangeMoveFilter filter;
-
- @Parameterized.Parameter
- public ChangeMove changeMove;
-
- @Parameterized.Parameter(1)
- public boolean moveAccepted;
-
- @Parameterized.Parameters
- public static Collection data() {
- List data = new ArrayList<>();
-
- data.add(new Object[]{mockChangeMove(mockTask(Collections.emptyList(), Collections.emptySet()), ModelConstants.PLANNING_USER), true});
-
- data.add(new Object[]{
- mockChangeMove(
- mockTask(Collections.emptyList(), Collections.emptySet()),
- mockUser(USER, false, Collections.emptyList(), Collections.emptySet())), false});
-
- data.add(new Object[]{
- mockChangeMove(
- mockTask(Collections.emptyList(), Collections.emptySet()),
- mockUser(USER, true, Collections.emptyList(), Collections.emptySet())), false});
-
- data.add(new Object[]{
- mockChangeMove(
- mockTask(Collections.singletonList(mockUser(USER, true, Collections.emptyList(), Collections.emptySet())), Collections.emptySet()),
- mockUser(USER, false, Collections.emptyList(), Collections.emptySet())), false});
-
- data.add(new Object[]{
- mockChangeMove(
- mockTask(Collections.singletonList(mockUser(USER, true, Collections.emptyList(), Collections.emptySet())), Collections.emptySet()),
- mockUser(USER, true, Collections.emptyList(), Collections.emptySet())), true});
-
- data.add(new Object[]{
- mockChangeMove(
- mockTask(Collections.singletonList(mockUser(USER, true, Collections.emptyList(), Collections.emptySet())), Collections.singleton(SKILL)),
- mockUser(USER, true, Collections.emptyList(), Collections.emptySet())), false});
-
- data.add(new Object[]{
- mockChangeMove(
- mockTask(Collections.singletonList(mockUser(USER, true, Collections.emptyList(), Collections.emptySet())), Collections.singleton(SKILL)),
- mockUser(USER, true, Collections.emptyList(), Collections.singleton(SKILL))), true});
-
- data.add(new Object[]{
- mockChangeMove(
- mockTask(Collections.singletonList(mockGroup(GROUP)), Collections.emptySet()),
- mockUser(USER, true, Collections.emptyList(), Collections.emptySet())), false});
-
- data.add(new Object[]{
- mockChangeMove(
- mockTask(Collections.singletonList(mockGroup(GROUP)), Collections.emptySet()),
- mockUser(USER, true, Collections.singletonList(mockGroup(GROUP)), Collections.emptySet())), true});
-
- return data;
- }
-
- @SuppressWarnings("unchecked")
- @Before
- public void setUp() {
- scoreDirector = mock(ScoreDirector.class);
- filter = new TaskByGroupAndSkillsChangeMoveFilter();
- }
-
- @Test
- public void accept() {
- assertThat(filter.accept(scoreDirector, changeMove)).isEqualTo(moveAccepted);
- }
-
- @SuppressWarnings("unchecked")
- private static ChangeMove mockChangeMove(Task task, User user) {
- ChangeMove changeMove = mock(ChangeMove.class);
- TaskOrUser taskOrUser = mock(TaskOrUser.class);
- when(changeMove.getToPlanningValue()).thenReturn(taskOrUser);
- when(taskOrUser.getUser()).thenReturn(user);
- when(changeMove.getEntity()).thenReturn(task);
- return changeMove;
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AbstractProblemFactChangeTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AbstractProblemFactChangeTest.java
deleted file mode 100644
index bf551c3dbc..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AbstractProblemFactChangeTest.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Function;
-
-import org.kie.server.services.taskassigning.core.AbstractTaskAssigningCoreTest;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.optaplanner.core.api.solver.Solver;
-import org.optaplanner.core.impl.solver.ProblemFactChange;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-public abstract class AbstractProblemFactChangeTest extends AbstractTaskAssigningCoreTest {
-
- final Random random = new Random();
- private static final AtomicInteger changeIds = new AtomicInteger(1);
-
- protected static int nextChangeId() {
- return changeIds.getAndIncrement();
- }
-
- protected class ProgrammedProblemFactChange> {
-
- int id;
-
- private TaskAssigningSolution solutionAfterChange;
-
- private C change;
-
- public ProgrammedProblemFactChange() {
- this.id = nextChangeId();
- }
-
- public ProgrammedProblemFactChange(C change) {
- this.change = change;
- }
-
- public TaskAssigningSolution getSolutionAfterChange() {
- return solutionAfterChange;
- }
-
- public void setSolutionAfterChange(TaskAssigningSolution solutionAfterChange) {
- this.solutionAfterChange = solutionAfterChange;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public C getChange() {
- return change;
- }
-
- public void setChange(C change) {
- this.change = change;
- }
- }
-
- protected TaskAssigningSolution executeSequentialChanges(TaskAssigningSolution solution, List extends ProgrammedProblemFactChange> changes) throws Exception {
- Solver solver = createDaemonSolver();
-
- //store the first solution that was produced by the solver for knowing how things looked like at the very
- //beginning before any change was produced.
- final TaskAssigningSolution[] initialSolution = {null};
- final AtomicInteger lastExecutedChangeId = new AtomicInteger(-1);
-
- final Semaphore programNextChange = new Semaphore(0);
- final Semaphore allChangesWereProduced = new Semaphore(0);
-
- //prepare the list of changes to program
- List programmedChanges = new ArrayList<>(changes);
- List scheduledChanges = new ArrayList<>();
-
- int totalProgrammedChanges = programmedChanges.size();
- int[] pendingChanges = {programmedChanges.size()};
-
- solver.addEventListener(event -> {
- if (initialSolution[0] == null) {
- //store the first produced solution for knowing how things looked like at the very beginning.
- initialSolution[0] = event.getNewBestSolution();
- //let the problem fact changes start being produced.
- programNextChange.release();
- } else if (event.isEveryProblemFactChangeProcessed() && !scheduledChanges.isEmpty()) {
- ProgrammedProblemFactChange programmedChange = scheduledChanges.get(scheduledChanges.size() - 1);
- if (lastExecutedChangeId.compareAndSet(programmedChange.getId(), -1)) {
- programmedChange.setSolutionAfterChange(event.getNewBestSolution());
- if (pendingChanges[0] > 0) {
- //let the Programmed changes producer produce next change
- programNextChange.release();
- } else {
- solver.terminateEarly();
- allChangesWereProduced.release();
- }
- }
- }
- });
-
- //Programmed changes producer Thread.
- CompletableFuture.runAsync(() -> {
- boolean hasMoreChanges = true;
- while (hasMoreChanges) {
- try {
- //wait until next problem fact change can be added to the solver.
- //by construction the lock is only released when no problem fact change is in progress.
- programNextChange.acquire();
- ProgrammedProblemFactChange programmedChange = programmedChanges.remove(0);
- hasMoreChanges = !programmedChanges.isEmpty();
- pendingChanges[0] = programmedChanges.size();
- scheduledChanges.add(programmedChange);
- solver.addProblemFactChange(scoreDirector -> {
- lastExecutedChangeId.set(programmedChange.getId());
- programmedChange.getChange().doChange(scoreDirector);
- });
- } catch (InterruptedException e) {
- LOGGER.error("It looks like the test Future was interrupted.", e);
- }
- }
- try {
- //wait until the solver listener has processed all the changes.
- allChangesWereProduced.acquire();
- } catch (InterruptedException e) {
- LOGGER.error("It looks like the test Future was interrupted while waiting to finish.", e);
- }
- });
-
- solver.solve(solution);
-
- assertTrue(programmedChanges.isEmpty());
- assertEquals(totalProgrammedChanges, scheduledChanges.size());
- assertEquals(0, pendingChanges[0]);
- return initialSolution[0];
- }
-
- protected void writeProblemFactChangesTestFiles(TaskAssigningSolution initialSolution,
- String solutionResource,
- String filePrefix,
- String testType,
- List programmedChanges,
- Function solutionBeforeChange,
- Function solutionAfterChange) throws Exception {
-
- String resourceName = solutionResource.substring(solutionResource.lastIndexOf("/") + 1);
- writeToTempFile(filePrefix + "." + testType + ".InitialSolution_", printSolution(initialSolution));
- for (int i = 0; i < programmedChanges.size(); i++) {
- T scheduledChange = programmedChanges.get(i);
- try {
- writeToTempFile(filePrefix + "." + testType + ".WorkingSolutionBeforeChange_" + resourceName + "_" + i + "__", solutionBeforeChange.apply(scheduledChange));
- writeToTempFile(filePrefix + "." + testType + ".SolutionAfterChange_" + resourceName + "_" + i + "__", solutionAfterChange.apply(scheduledChange));
- } catch (Exception e) {
- LOGGER.error("An error was produced during test files writing.", e);
- }
- }
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AddTaskProblemFactChangeTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AddTaskProblemFactChangeTest.java
deleted file mode 100644
index 2dc9b76455..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AddTaskProblemFactChangeTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import org.assertj.core.api.Assertions;
-import org.junit.Test;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-
-import static org.junit.Assert.assertTrue;
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_100TASKS_5USERS_SOLUTION;
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_24TASKS_8USERS_SOLUTION;
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_500TASKS_20USERS_SOLUTION;
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_50TASKS_5USERS_SOLUTION;
-import static org.kie.server.services.taskassigning.core.model.ModelConstants.PLANNING_USER;
-
-public class AddTaskProblemFactChangeTest extends AbstractProblemFactChangeTest {
-
- @Test
- public void addTaskProblemFactChange24Tasks8Users() throws Exception {
- addTaskProblemFactChange(SET_OF_24TASKS_8USERS_SOLUTION.resource(), Arrays.asList(24L, 25L, 30L, 40L));
- }
-
- @Test
- public void addTaskProblemFactChange24Tasks8UsersRandom() throws Exception {
- checkRunDevelopmentOnlyTests();
- addTaskProblemFactChangeRandomSet(SET_OF_24TASKS_8USERS_SOLUTION.resource());
- }
-
- @Test
- public void addTaskProblemFactChange50Tasks5Users() throws Exception {
- checkRunTurtleTests();
- addTaskProblemFactChange(SET_OF_50TASKS_5USERS_SOLUTION.resource(), Arrays.asList(50L, 520L, 70L, 85L, 100L));
- }
-
- @Test
- public void addTaskProblemFactChange50Tasks5UsersRandom() throws Exception {
- checkRunDevelopmentOnlyTests();
- addTaskProblemFactChangeRandomSet(SET_OF_50TASKS_5USERS_SOLUTION.resource());
- }
-
- @Test
- public void addTaskProblemFactChange100Tasks5Users() throws Exception {
- checkRunTurtleTests();
- addTaskProblemFactChange(SET_OF_100TASKS_5USERS_SOLUTION.resource(), Arrays.asList(100L, 105L, 200L, 350L));
- }
-
- @Test
- public void addTaskProblemFactChange100Tasks5UsersRandom() throws Exception {
- checkRunDevelopmentOnlyTests();
- addTaskProblemFactChangeRandomSet(SET_OF_100TASKS_5USERS_SOLUTION.resource());
- }
-
- @Test
- public void addTaskProblemFactChange500Tasks20Users() throws Exception {
- checkRunTurtleTests();
- addTaskProblemFactChange(SET_OF_500TASKS_20USERS_SOLUTION.resource(), Arrays.asList(500L, 600L, 700L));
- }
-
- @Test
- public void addTaskProblemFactChange500Tasks20UsersRandom() throws Exception {
- checkRunDevelopmentOnlyTests();
- addTaskProblemFactChangeRandomSet(SET_OF_500TASKS_20USERS_SOLUTION.resource());
- }
-
- @Test
- public void addTaskProblemFactChangeTaskAlreadyExists() throws Exception {
- TaskAssigningSolution solution = readTaskAssigningSolution(SET_OF_24TASKS_8USERS_SOLUTION.resource());
- long taskId = 20; //randomly selected task.
- Task task = new Task(taskId, null, 1);
- Assertions.assertThatThrownBy(() -> executeSequentialChanges(solution,
- Collections.singletonList(new ProgrammedProblemFactChange<>(new AddTaskProblemFactChange(task)))))
- .hasMessage(String.format("A task with the given identifier id: " + taskId + " already exists", taskId));
- }
-
- private void addTaskProblemFactChangeRandomSet(String solutionResource) throws Exception {
- TaskAssigningSolution solution = readTaskAssigningSolution(solutionResource);
- int taskCount = solution.getTaskList().size();
- int randomChanges = taskCount / 2 + random.nextInt(taskCount / 2);
- List taskIds = new ArrayList<>();
- for (int i = 0; i < randomChanges; i++) {
- taskIds.add((long) taskCount++);
- }
- addTaskProblemFactChange(solution, taskIds);
- }
-
- private void addTaskProblemFactChange(TaskAssigningSolution solution, List taskIds) throws Exception {
- solution.getUserList().add(PLANNING_USER);
- List> programmedChanges = taskIds.stream()
- .map(id -> new ProgrammedProblemFactChange<>(new AddTaskProblemFactChange(new Task(id, "NewTask_" + id, 1))))
- .collect(Collectors.toList());
-
- //each partial solution must have the change that was applied on it.
- executeSequentialChanges(solution, programmedChanges);
- programmedChanges.forEach(change -> assertAddTaskProblemFactChangeWasProduced(change.getChange(), change.getSolutionAfterChange()));
-
- //finally the last solution must have the result of all the changes.
- TaskAssigningSolution lastSolution = programmedChanges.get(programmedChanges.size() - 1).getSolutionAfterChange();
- programmedChanges.forEach(change -> assertAddTaskProblemFactChangeWasProduced(change.getChange(), lastSolution));
- }
-
- private void addTaskProblemFactChange(String solutionResource, List taskIds) throws Exception {
- addTaskProblemFactChange(readTaskAssigningSolution(solutionResource), taskIds);
- }
-
- private void assertAddTaskProblemFactChangeWasProduced(AddTaskProblemFactChange change, TaskAssigningSolution solution) {
- assertTrue(solution.getTaskList().stream().anyMatch(task -> Objects.equals(change.getTask().getId(), task.getId())));
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AddUserProblemFactChangeTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AddUserProblemFactChangeTest.java
deleted file mode 100644
index c85b8aebfd..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AddUserProblemFactChangeTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.ArrayList;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public class AddUserProblemFactChangeTest {
-
- private static final String USER_ID = "USER_ID";
-
- @Mock
- private ScoreDirector scoreDirector;
-
- private TaskAssigningSolution workingSolution;
-
- private AddUserProblemFactChange change;
-
- private User user;
-
- @Before
- public void setUp() {
- user = new User(1, USER_ID);
- workingSolution = new TaskAssigningSolution(1, new ArrayList<>(), new ArrayList<>());
- when(scoreDirector.getWorkingSolution()).thenReturn(workingSolution);
- change = new AddUserProblemFactChange(user);
- }
-
- @Test
- public void getUser() {
- assertThat(change.getUser()).isEqualTo(user);
- }
-
- @Test
- public void doChange() {
- change.doChange(scoreDirector);
- verify(scoreDirector).beforeProblemFactAdded(user);
- verify(scoreDirector).afterProblemFactAdded(user);
- verify(scoreDirector).triggerVariableListeners();
- assertThat(workingSolution.getUserList()).contains(user);
- }
-
- @Test
- public void doChangeUserAlreadyExists() {
- when(scoreDirector.lookUpWorkingObjectOrReturnNull(user)).thenReturn(user);
- assertThatThrownBy(() -> change.doChange(scoreDirector))
- .hasMessage(String.format("A user with the given identifier id: %s already exists", USER_ID));
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AssignTaskProblemFactChangeTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AssignTaskProblemFactChangeTest.java
deleted file mode 100644
index 5c1565e986..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/AssignTaskProblemFactChangeTest.java
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.function.Consumer;
-
-import org.assertj.core.api.Assertions;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.TaskOrUser;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.junit.Test;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_100TASKS_5USERS_SOLUTION;
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_24TASKS_8USERS_SOLUTION;
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_500TASKS_20USERS_SOLUTION;
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_50TASKS_5USERS_SOLUTION;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.kie.server.services.taskassigning.core.model.ModelConstants.PLANNING_USER;
-
-public class AssignTaskProblemFactChangeTest extends AbstractProblemFactChangeTest {
-
- private static final String FIXED_TEST = "Fixed";
- private static final String RANDOM_TEST = "Random";
-
- private class WorkingSolutionAwareProblemFactChange
- extends AssignTaskProblemFactChange {
-
- private Consumer solutionBeforeChangesConsumer;
-
- WorkingSolutionAwareProblemFactChange(Task task,
- User user,
- Consumer solutionBeforeChangesConsumer) {
- super(task, user);
- this.solutionBeforeChangesConsumer = solutionBeforeChangesConsumer;
- }
-
- @Override
- public void doChange(ScoreDirector scoreDirector) {
- TaskAssigningSolution solution = scoreDirector.getWorkingSolution();
- if (solutionBeforeChangesConsumer != null) {
- solutionBeforeChangesConsumer.accept(solution);
- }
- super.doChange(scoreDirector);
- }
- }
-
- private class ProgrammedAssignTaskProblemFactChange extends ProgrammedProblemFactChange {
-
- StringBuilder workingSolutionBeforeChange = new StringBuilder();
-
- ProgrammedAssignTaskProblemFactChange(Task task, User user) {
- setChange(new WorkingSolutionAwareProblemFactChange(task,
- user,
- workingSolution -> printSolution(workingSolution, workingSolutionBeforeChange)));
- }
-
- String workingSolutionBeforeChangeAsString() {
- return workingSolutionBeforeChange.toString();
- }
-
- String solutionAfterChangeAsString() {
- return printSolution(super.getSolutionAfterChange());
- }
- }
-
- @Test
- public void assignTaskProblemFactChange24Tasks8Users() throws Exception {
- assignTaskProblemFactChangeFixedChangeSet(SET_OF_24TASKS_8USERS_SOLUTION.resource());
- }
-
- @Test
- public void assignTaskProblemFactChange24Tasks8UsersRandom() throws Exception {
- checkRunDevelopmentOnlyTests();
- assignTaskProblemFactChangeRandomChangeSet(SET_OF_24TASKS_8USERS_SOLUTION.resource());
- }
-
- @Test
- public void assignTaskProblemFactChange50Tasks5Users() throws Exception {
- checkRunTurtleTests();
- assignTaskProblemFactChangeFixedChangeSet(SET_OF_50TASKS_5USERS_SOLUTION.resource());
- }
-
- @Test
- public void assignTaskProblemFactChange50Tasks5UsersRandom() throws Exception {
- checkRunDevelopmentOnlyTests();
- assignTaskProblemFactChangeRandomChangeSet(SET_OF_50TASKS_5USERS_SOLUTION.resource());
- }
-
- @Test
- public void assignTaskProblemFactChange100Tasks5Users() throws Exception {
- checkRunTurtleTests();
- assignTaskProblemFactChangeFixedChangeSet(SET_OF_100TASKS_5USERS_SOLUTION.resource());
- }
-
- @Test
- public void assignTaskProblemFactChange100Tasks5UsersRandom() throws Exception {
- checkRunDevelopmentOnlyTests();
- assignTaskProblemFactChangeRandomChangeSet(SET_OF_100TASKS_5USERS_SOLUTION.resource());
- }
-
- @Test
- public void assignTaskProblemFactChange500Tasks20Users() throws Exception {
- checkRunTurtleTests();
- assignTaskProblemFactChangeFixedChangeSet(SET_OF_500TASKS_20USERS_SOLUTION.resource());
- }
-
- @Test
- public void assignTaskProblemFactChange500Tasks20UsersRandom() throws Exception {
- checkRunDevelopmentOnlyTests();
- assignTaskProblemFactChangeRandomChangeSet(SET_OF_500TASKS_20USERS_SOLUTION.resource());
- }
-
- @Test
- public void assignTaskProblemFactChangeUserNotFound() throws Exception {
- TaskAssigningSolution solution = readTaskAssigningSolution(SET_OF_24TASKS_8USERS_SOLUTION.resource());
- Task task = solution.getTaskList().get(0);
- User user = new User(-12345, "Non Existing");
- Assertions.assertThatThrownBy(() -> executeSequentialChanges(solution, Collections.singletonList(new ProgrammedAssignTaskProblemFactChange(task, user))))
- .hasMessage(String.format("Expected user: " + user + " was not found in current working solution", user));
- }
-
- private void assignTaskProblemFactChangeFixedChangeSet(String solutionResource) throws Exception {
- TaskAssigningSolution solution = readTaskAssigningSolution(solutionResource);
- solution.getUserList().add(PLANNING_USER);
-
- //prepare the list of changes to program
- List programmedChanges = new ArrayList<>();
-
- //assign Task_0 to User_0
- Task task = solution.getTaskList().get(0);
- User user = solution.getUserList().get(0);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- //assign Task_10 to User_0
- task = solution.getTaskList().get(10);
- user = solution.getUserList().get(0);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- //assign Task_15 to User_2
- task = solution.getTaskList().get(15);
- user = solution.getUserList().get(2);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- //assign Task_13 to User_3
- task = solution.getTaskList().get(13);
- user = solution.getUserList().get(3);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- //assign Task_13 to User_4
- task = solution.getTaskList().get(13);
- user = solution.getUserList().get(4);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- //assign Task_13 to User_5
- task = solution.getTaskList().get(13);
- user = solution.getUserList().get(5);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- //assign Task_15 to User_5
- task = solution.getTaskList().get(15);
- user = solution.getUserList().get(5);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- //assign Task_16 to User_5
- task = solution.getTaskList().get(16);
- user = solution.getUserList().get(5);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- //assign Task_17 to User_5
- task = solution.getTaskList().get(17);
- user = solution.getUserList().get(5);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- //repeat assign Task_17 to User_5
- task = solution.getTaskList().get(17);
- user = solution.getUserList().get(5);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- //repeat assign Task_15 to User_5
- task = solution.getTaskList().get(15);
- user = solution.getUserList().get(5);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- long nextTaskId = solution.getTaskList().stream()
- .mapToLong(Task::getId)
- .max().orElse(-1) + 1;
-
- //assign a brand new task "NewTask_x and assign to User_0
- user = solution.getUserList().get(0);
- task = new Task(nextTaskId, "NewTask_" + nextTaskId, 1);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- //assign a brand new task "NewTask_x and assign to User_2
- nextTaskId++;
- user = solution.getUserList().get(2);
- task = new Task(nextTaskId, "NewTask_" + nextTaskId, 1);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- //assign a brand new task "NewTask_x and assign to User_5
- nextTaskId++;
- user = solution.getUserList().get(5);
- task = new Task(nextTaskId, "NewTask_" + nextTaskId, 1);
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(task, user));
-
- assignTaskProblemFactChange(solution, solutionResource, FIXED_TEST, programmedChanges);
- }
-
- private void assignTaskProblemFactChangeRandomChangeSet(String solutionResource) throws Exception {
- TaskAssigningSolution solution = readTaskAssigningSolution(solutionResource);
- solution.getUserList().add(PLANNING_USER);
-
- int taskCount = solution.getTaskList().size();
- int userCount = solution.getUserList().size();
- int randomChanges = taskCount / 2 + random.nextInt(taskCount / 2);
-
- //prepare the list of changes to program
- List programmedChanges = new ArrayList<>();
-
- Task randomTask;
- User randomUser;
- for (int i = 0; i < randomChanges; i++) {
- randomTask = solution.getTaskList().get(random.nextInt(taskCount));
- randomUser = solution.getUserList().get(random.nextInt(userCount));
- programmedChanges.add(new ProgrammedAssignTaskProblemFactChange(randomTask, randomUser));
- }
- assignTaskProblemFactChange(solution, solutionResource, RANDOM_TEST, programmedChanges);
- }
-
- private void assignTaskProblemFactChange(TaskAssigningSolution solution,
- String solutionResource,
- String testType,
- List programmedChanges) throws Exception {
- TaskAssigningSolution initialSolution = executeSequentialChanges(solution, programmedChanges);
- if (writeTestFiles()) {
- writeProblemFactChangesTestFiles(initialSolution,
- solutionResource,
- "AssignTaskProblemFactChangeTest.assignTaskProblemFactChangeTest",
- testType,
- programmedChanges,
- ProgrammedAssignTaskProblemFactChange::workingSolutionBeforeChangeAsString,
- ProgrammedAssignTaskProblemFactChange::solutionAfterChangeAsString);
- }
-
- //each partial solution must have the change that was applied on it.
- for (ProgrammedAssignTaskProblemFactChange change : programmedChanges) {
- assertAssignTaskProblemFactChangeWasProduced(change.getChange(), change.getSolutionAfterChange());
- }
-
- //finally the last solution must have the result of all the changes.
- TaskAssigningSolution lastSolution = programmedChanges.get(programmedChanges.size() - 1).getSolutionAfterChange();
- Map summarizedChanges = new HashMap<>();
- programmedChanges.forEach(change -> {
- //if task was changed multiple times record only the last change.
- summarizedChanges.put(change.getChange().getTask().getId(), change.getChange());
- });
- for (AssignTaskProblemFactChange change : summarizedChanges.values()) {
- assertAssignTaskProblemFactChangeWasProduced(change, lastSolution);
- }
- }
-
- /**
- * Given an AssignTaskProblemFactChange and a solution that was produced as the result of applying the change,
- * asserts that the assignment defined by the change is not violated (exists in) by the solution.
- * The assignment defined in the change must also be pinned in the produced solution as well as any other
- * previous assignment for the given user.
- * @param change The change that was executed for producing the solution.
- * @param solution The produced solution.
- */
- private void assertAssignTaskProblemFactChangeWasProduced(AssignTaskProblemFactChange change, TaskAssigningSolution solution) throws Exception {
- User internalUser = solution.getUserList().stream()
- .filter(user -> Objects.equals(user.getId(), change.getUser().getId()))
- .findFirst().orElseThrow(() -> new Exception("User: " + change.getUser() + " was not found in solution."));
-
- Task internalTask = solution.getTaskList().stream()
- .filter(task -> Objects.equals(task.getId(), change.getTask().getId()))
- .findFirst().orElseThrow(() -> new Exception("Task: " + change + " was not found in solution."));
- assertEquals(internalUser, internalTask.getUser());
- assertTrue(internalTask.isPinned());
- //all the previous tasks must be pinned by construction and be assigned to the user
- TaskOrUser previousTaskOrUser = internalTask.getPreviousTaskOrUser();
- while (previousTaskOrUser != null) {
- if (previousTaskOrUser instanceof Task) {
- Task previousTask = (Task) previousTaskOrUser;
- assertTrue(previousTask.isPinned());
- assertEquals(internalUser, previousTask.getUser());
- previousTaskOrUser = previousTask.getPreviousTaskOrUser();
- } else {
- assertEquals(internalUser, previousTaskOrUser);
- previousTaskOrUser = null;
- }
- }
- //all the next tasks must to the user.
- Task nextTask = internalTask.getNextTask();
- while (nextTask != null) {
- assertEquals(internalUser, nextTask.getUser());
- nextTask = nextTask.getNextTask();
- }
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/DisableUserProblemFactChangeTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/DisableUserProblemFactChangeTest.java
deleted file mode 100644
index 115c833fe6..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/DisableUserProblemFactChangeTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package org.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockTask;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockUser;
-import static org.kie.server.services.taskassigning.core.model.solver.realtime.ProblemFactChangeUtilTest.assertTaskWasNotReleased;
-import static org.kie.server.services.taskassigning.core.model.solver.realtime.ProblemFactChangeUtilTest.assertTaskWasReleased;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public class DisableUserProblemFactChangeTest {
-
- private static final String USER_ID = "USER_ID";
- private static final long TASK_ID1 = 1;
- private static final long TASK_ID2 = 2;
- private static final long TASK_ID3 = 3;
- private static final long TASK_ID4 = 4;
-
- @Mock
- private ScoreDirector scoreDirector;
-
- private TaskAssigningSolution workingSolution;
-
- private DisableUserProblemFactChange change;
-
- private User user;
-
- @Before
- public void setUp() {
- user = new User(1, USER_ID);
- workingSolution = new TaskAssigningSolution(1, new ArrayList<>(), new ArrayList<>());
- change = new DisableUserProblemFactChange(user);
- }
-
- @Test
- public void getUser() {
- assertThat(change.getUser()).isEqualTo(user);
- }
-
- @Test
- public void doChange() {
- List workingUserTasks = Arrays.asList(mockTask(TASK_ID1, true),
- mockTask(TASK_ID2, true),
- mockTask(TASK_ID3, false),
- mockTask(TASK_ID4, false));
-
- User workingUser = mockUser(USER_ID, workingUserTasks);
- workingUser.setEnabled(true);
-
- when(scoreDirector.lookUpWorkingObjectOrReturnNull(user)).thenReturn(workingUser);
- change.doChange(scoreDirector);
- verify(scoreDirector).beforeProblemPropertyChanged(workingUser);
- verify(scoreDirector).afterProblemPropertyChanged(workingUser);
- verify(scoreDirector).triggerVariableListeners();
- assertThat(workingUser.isEnabled()).isFalse();
-
- List pinnedTasks = Arrays.asList(workingUserTasks.get(0), workingUserTasks.get(1));
- for (Task pinnedTask : pinnedTasks) {
- assertThat(pinnedTask.isPinned()).isTrue();
- assertTaskWasNotReleased(pinnedTask, scoreDirector);
- }
-
- List releasedTasks = Arrays.asList(workingUserTasks.get(2), workingUserTasks.get(3));
- releasedTasks.forEach(releasedTask -> assertTaskWasReleased(releasedTask, scoreDirector));
- }
-
- @Test
- public void doChangeUserDontExists() {
- when(scoreDirector.lookUpWorkingObjectOrReturnNull(user)).thenReturn(null);
- change.doChange(scoreDirector);
- verify(scoreDirector, never()).beforeProblemPropertyChanged(any());
- verify(scoreDirector, never()).afterProblemPropertyChanged(any());
- verify(scoreDirector, never()).triggerVariableListeners();
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/ProblemFactChangeUtilTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/ProblemFactChangeUtilTest.java
deleted file mode 100644
index b3da1b4e1b..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/ProblemFactChangeUtilTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.kie.server.services.taskassigning.core.model.Task.PREVIOUS_TASK_OR_USER;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockTask;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockUser;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-
-@RunWith(MockitoJUnitRunner.class)
-public class ProblemFactChangeUtilTest {
-
- private static final String USER_ID = "USER_ID";
- private static final long TASK_ID1 = 1;
- private static final long TASK_ID2 = 2;
- private static final long TASK_ID3 = 3;
- private static final long TASK_ID4 = 4;
- private static final long TASK_ID5 = 5;
-
- @Mock
- private ScoreDirector scoreDirector;
-
- private User user;
-
- private List userTasks;
-
- @Before
- public void setUp() {
- userTasks = Arrays.asList(mockTask(TASK_ID1, true),
- mockTask(TASK_ID2, true),
- mockTask(TASK_ID3, false),
- mockTask(TASK_ID4, false),
- mockTask(TASK_ID5, false));
- user = mockUser(USER_ID, userTasks);
- }
-
- @Test
- public void releaseAllTasks() {
- ProblemFactChangeUtil.releaseAllTasks(user, scoreDirector);
- userTasks.forEach(task -> assertTaskWasReleased(task, scoreDirector));
- }
-
- @Test
- public void releaseNonPinnedTasks() {
- ProblemFactChangeUtil.releaseNonPinnedTasks(user, scoreDirector);
- userTasks.stream().filter(Task::isPinned).forEach(task -> assertTaskWasNotReleased(task, scoreDirector));
- userTasks.stream().filter(task -> !task.isPinned()).forEach(task -> assertTaskWasReleased(task, scoreDirector));
- }
-
- public static void assertTaskWasReleased(Task task, ScoreDirector scoreDirector) {
- verify(scoreDirector).beforeProblemPropertyChanged(task);
- assertThat(task.isPinned()).as("Invalid pinned status for task: %s", task.getInputData()).isFalse();
- verify(scoreDirector).afterProblemPropertyChanged(task);
- verify(scoreDirector).beforeVariableChanged(task, PREVIOUS_TASK_OR_USER);
- assertThat(task.getPreviousTaskOrUser()).as("Invalid previousTaskOrUser for task: %s", task.getId()).isNull();
- verify(scoreDirector).afterVariableChanged(task, PREVIOUS_TASK_OR_USER);
- }
-
- public static void assertTaskWasNotReleased(Task task, ScoreDirector scoreDirector) {
- verify(scoreDirector, never()).beforeProblemPropertyChanged(task);
- verify(scoreDirector, never()).afterProblemPropertyChanged(task);
- verify(scoreDirector, never()).beforeVariableChanged(task, PREVIOUS_TASK_OR_USER);
- verify(scoreDirector, never()).afterVariableChanged(task, PREVIOUS_TASK_OR_USER);
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/ReleaseTaskProblemFactChangeTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/ReleaseTaskProblemFactChangeTest.java
deleted file mode 100644
index 4d292071d5..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/ReleaseTaskProblemFactChangeTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.TaskOrUser;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.junit.Assert.assertEquals;
-import static org.kie.server.services.taskassigning.core.model.Task.PREVIOUS_TASK_OR_USER;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public class ReleaseTaskProblemFactChangeTest {
-
- private Task task;
- private TaskOrUser previousTaskOrUser;
- private Task workingTask;
- private Task nextTask;
-
- @Mock
- private ScoreDirector scoreDirector;
-
- private ReleaseTaskProblemFactChange change;
-
- @Before
- public void setUp() {
- task = new Task();
- previousTaskOrUser = spy(new Task());
- workingTask = spy(new Task());
- nextTask = spy(new Task());
- change = new ReleaseTaskProblemFactChange(task);
- }
-
- @Test
- public void doChangeNonPinnedTask() {
- workingTask.setPinned(false);
- doChange();
- verifyCommonResults();
- }
-
- @Test
- public void doChangePinnedTask() {
- workingTask.setPinned(true);
- doChange();
- verifyCommonResults();
- verify(scoreDirector).beforeProblemPropertyChanged(workingTask);
- verify(workingTask).setPinned(false);
- verify(scoreDirector).afterProblemPropertyChanged(workingTask);
- }
-
- @Test
- public void doChangeUnAssignedTask() {
- workingTask.setPreviousTaskOrUser(null);
- when(scoreDirector.lookUpWorkingObjectOrReturnNull(task)).thenReturn(workingTask);
- change.doChange(scoreDirector);
- verify(scoreDirector, never()).beforeVariableChanged(any(Task.class), anyString());
- verify(scoreDirector, never()).afterVariableChanged(any(Task.class), anyString());
- verify(scoreDirector, never()).beforeProblemPropertyChanged(any());
- verify(scoreDirector, never()).afterProblemPropertyChanged(any());
- verify(scoreDirector, never()).triggerVariableListeners();
- }
-
- @Test
- public void getTask() {
- assertEquals(task, change.getTask());
- }
-
- private void doChange() {
- workingTask.setPreviousTaskOrUser(previousTaskOrUser);
- workingTask.setNextTask(nextTask);
- nextTask.setPreviousTaskOrUser(workingTask);
-
- when(scoreDirector.lookUpWorkingObjectOrReturnNull(task)).thenReturn(workingTask);
- change.doChange(scoreDirector);
- }
-
- private void verifyCommonResults() {
- assertEquals(previousTaskOrUser, nextTask.getPreviousTaskOrUser());
- verify(scoreDirector).beforeVariableChanged(nextTask, PREVIOUS_TASK_OR_USER);
- verify(scoreDirector).afterVariableChanged(nextTask, PREVIOUS_TASK_OR_USER);
- verify(scoreDirector).triggerVariableListeners();
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/RemoveTaskProblemFactChangeTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/RemoveTaskProblemFactChangeTest.java
deleted file mode 100644
index 019ae23d0c..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/RemoveTaskProblemFactChangeTest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.junit.Test;
-
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_100TASKS_5USERS_SOLUTION;
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_24TASKS_8USERS_SOLUTION;
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_500TASKS_20USERS_SOLUTION;
-import static org.kie.server.services.taskassigning.core.TestDataSet.SET_OF_50TASKS_5USERS_SOLUTION;
-import static org.junit.Assert.assertFalse;
-
-public class RemoveTaskProblemFactChangeTest extends AbstractProblemFactChangeTest {
-
- @Test
- public void removeTaskProblemFactChange24Tasks8Users() throws Exception {
- removeTaskProblemFactChange(SET_OF_24TASKS_8USERS_SOLUTION.resource(), Arrays.asList(0L, 10L, 11L, 4L, 20L, 100L, 78L));
- }
-
- @Test
- public void removeTaskProblemFactChange24Tasks8UsersRandom() throws Exception {
- checkRunDevelopmentOnlyTests();
- removeTaskProblemFactChangeRandomSet(SET_OF_24TASKS_8USERS_SOLUTION.resource());
- }
-
- @Test
- public void removeTaskProblemFactChange50Tasks5Users() throws Exception {
- checkRunTurtleTests();
- removeTaskProblemFactChange(SET_OF_50TASKS_5USERS_SOLUTION.resource(), Arrays.asList(0L, 10L, 11L, 4L, 20L, 30L, 35L, 40L, 45L, 57L, 60L));
- }
-
- @Test
- public void removeTaskProblemFactChange50Tasks5UsersRandom() throws Exception {
- checkRunDevelopmentOnlyTests();
- removeTaskProblemFactChangeRandomSet(SET_OF_50TASKS_5USERS_SOLUTION.resource());
- }
-
- @Test
- public void removeTaskProblemFactChange100Tasks5Users() throws Exception {
- checkRunTurtleTests();
- removeTaskProblemFactChange(SET_OF_100TASKS_5USERS_SOLUTION.resource(), Arrays.asList(5L, 15L, 11L, 4L, 20L, 30L, 36L, 40L, 45L, 58L, 99L, 130L, 200L));
- }
-
- @Test
- public void removeTaskProblemFactChange100Tasks5UsersRandom() throws Exception {
- checkRunDevelopmentOnlyTests();
- removeTaskProblemFactChangeRandomSet(SET_OF_100TASKS_5USERS_SOLUTION.resource());
- }
-
- @Test
- public void removeTaskProblemFactChange500Tasks20Users() throws Exception {
- checkRunTurtleTests();
- removeTaskProblemFactChange(SET_OF_500TASKS_20USERS_SOLUTION.resource(), Arrays.asList(5L, 15L, 11L, 4L, 20L, 30L, 36L, 40L, 45L, 58L, 99L, 300L, 400L, 25L, 1000L, 1001L));
- }
-
- @Test
- public void removeTaskProblemFactChange500Tasks20UsersRandom() throws Exception {
- checkRunDevelopmentOnlyTests();
- removeTaskProblemFactChangeRandomSet(SET_OF_500TASKS_20USERS_SOLUTION.resource());
- }
-
- private void removeTaskProblemFactChange(String solutionResource, List taskIds) throws Exception {
- removeTaskProblemFactChange(readTaskAssigningSolution(solutionResource), taskIds);
- }
-
- private void removeTaskProblemFactChange(TaskAssigningSolution solution, List taskIds) throws Exception {
- List> programmedChanges = taskIds.stream()
- .map(id -> findTaskOrCreate(solution, id))
- .map(task -> new ProgrammedProblemFactChange<>(new RemoveTaskProblemFactChange(task)))
- .collect(Collectors.toList());
-
- //each partial solution must have the change that was applied on it.
- executeSequentialChanges(solution, programmedChanges);
- programmedChanges.forEach(change -> assertRemoveTaskProblemFactChangeWasProduced(change.getChange(), change.getSolutionAfterChange()));
-
- //finally the last solution must have the result of all the changes.
- TaskAssigningSolution lastSolution = programmedChanges.get(programmedChanges.size() - 1).getSolutionAfterChange();
- programmedChanges.forEach(change -> assertRemoveTaskProblemFactChangeWasProduced(change.getChange(), lastSolution));
- }
-
- private void removeTaskProblemFactChangeRandomSet(String solutionResource) throws Exception {
- TaskAssigningSolution solution = readTaskAssigningSolution(solutionResource);
- int taskCount = solution.getTaskList().size();
- int randomChanges = taskCount / 2 + random.nextInt(taskCount / 2);
- List taskIds = new ArrayList<>();
- for (int i = 0; i < randomChanges; i++) {
- taskIds.add((long) taskCount++);
- }
- removeTaskProblemFactChange(solution, taskIds);
- }
-
- /**
- * Given a RemoveTaskProblemFact change and a solution that was produced as the result of applying the change,
- * asserts that the pointed task is not present in the solution.
- * @param change The change that was executed for producing the solution.
- * @param solution The produced solution.
- */
- private void assertRemoveTaskProblemFactChangeWasProduced(RemoveTaskProblemFactChange change, TaskAssigningSolution solution) {
- assertFalse(solution.getTaskList().stream().anyMatch(task -> Objects.equals(change.getTask().getId(), task.getId())));
- }
-
- private static Task findTaskOrCreate(TaskAssigningSolution solution, long id) {
- return solution.getTaskList().stream()
- .filter(task -> Objects.equals(task.getId(), id))
- .findFirst().orElse(new Task(id, "NonExisting_" + id, 1));
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/RemoveUserProblemFactChangeTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/RemoveUserProblemFactChangeTest.java
deleted file mode 100644
index b74999049e..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/RemoveUserProblemFactChangeTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockTask;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockUser;
-import static org.kie.server.services.taskassigning.core.model.solver.realtime.ProblemFactChangeUtilTest.assertTaskWasReleased;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public class RemoveUserProblemFactChangeTest {
-
- private static final String USER_ID_1 = "USER_ID_1";
- private static final String USER_ID_2 = "USER_ID_2";
- private static final String USER_ID_3 = "USER_ID_3";
-
- private static final long TASK_ID1 = 1;
- private static final long TASK_ID2 = 2;
- private static final long TASK_ID3 = 3;
- private static final long TASK_ID4 = 4;
-
- @Mock
- private ScoreDirector scoreDirector;
-
- private TaskAssigningSolution workingSolution;
-
- private RemoveUserProblemFactChange change;
-
- private User user;
- private User user2;
- private User user3;
-
- @Before
- public void setUp() {
- user = new User(1, USER_ID_1);
- workingSolution = new TaskAssigningSolution(1, new ArrayList<>(), new ArrayList<>());
- user2 = new User(2, USER_ID_2);
- user3 = new User(3, USER_ID_3);
- workingSolution.getUserList().add(user2);
- workingSolution.getUserList().add(user3);
-
- when(scoreDirector.getWorkingSolution()).thenReturn(workingSolution);
- change = new RemoveUserProblemFactChange(user);
- }
-
- @Test
- public void getUser() {
- assertThat(change.getUser()).isEqualTo(user);
- }
-
- @Test
- public void doChange() {
- List workingUserTasks = Arrays.asList(mockTask(TASK_ID1, true),
- mockTask(TASK_ID2, true),
- mockTask(TASK_ID3, false),
- mockTask(TASK_ID4, false));
-
- User workingUser = mockUser(USER_ID_1, workingUserTasks);
- workingUser.setEnabled(true);
- workingSolution.getUserList().add(workingUser);
- int originalUsersSize = workingSolution.getUserList().size();
-
- when(scoreDirector.lookUpWorkingObjectOrReturnNull(user)).thenReturn(workingUser);
-
- change.doChange(scoreDirector);
- verify(scoreDirector).beforeProblemPropertyChanged(workingUser);
- verify(scoreDirector).afterProblemPropertyChanged(workingUser);
- verify(scoreDirector).triggerVariableListeners();
- assertThat(workingUser.isEnabled()).isFalse();
-
- workingUserTasks.forEach(task -> assertTaskWasReleased(task, scoreDirector));
-
- verify(scoreDirector).beforeProblemFactRemoved(workingUser);
- verify(scoreDirector).afterProblemFactRemoved(workingUser);
- assertThat(workingSolution.getUserList().size()).isEqualTo(originalUsersSize - 1);
- assertThat(workingSolution.getUserList()).contains(user2, user3);
- assertThat(workingSolution.getUserList()).doesNotContain(workingUser);
- }
-
- @Test
- public void doChangeUserDontExists() {
- when(scoreDirector.lookUpWorkingObjectOrReturnNull(user)).thenReturn(null);
- change.doChange(scoreDirector);
- verify(scoreDirector, never()).beforeProblemPropertyChanged(any());
- verify(scoreDirector, never()).afterProblemPropertyChanged(any());
- verify(scoreDirector, never()).beforeProblemFactRemoved(any());
- verify(scoreDirector, never()).afterProblemFactRemoved(any());
- assertThat(workingSolution.getUserList().size()).isEqualTo(2);
- assertThat(workingSolution.getUserList()).contains(user2, user3);
- verify(scoreDirector, never()).triggerVariableListeners();
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/TaskPropertyChangeProblemFactChangeTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/TaskPropertyChangeProblemFactChangeTest.java
deleted file mode 100644
index 6e9861aaeb..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/TaskPropertyChangeProblemFactChangeTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import org.assertj.core.api.Assertions;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public class TaskPropertyChangeProblemFactChangeTest {
-
- private static final Integer NEW_PRIORITY = 1;
-
- private static final String NEW_STATUS = "InProgress";
-
- @Mock
- private ScoreDirector scoreDirector;
-
- @Mock
- private Task workingTask;
-
- @Mock
- private Task task;
-
- private TaskPropertyChangeProblemFactChange change;
-
- @Before
- public void setUp() {
- when(scoreDirector.lookUpWorkingObjectOrReturnNull(task)).thenReturn(workingTask);
- change = new TaskPropertyChangeProblemFactChange(task);
- }
-
- @Test
- public void getStatus() {
- change.setStatus(NEW_STATUS);
- assertEquals(NEW_STATUS, change.getStatus());
- }
-
- @Test
- public void getPriority() {
- change.setPriority(NEW_PRIORITY);
- assertEquals(NEW_PRIORITY, change.getPriority());
- }
-
- @Test
- public void getTask() {
- assertEquals(task, change.getTask());
- }
-
- @Test
- public void doChangeOnlyPriority() {
- change.setPriority(NEW_PRIORITY);
- change.doChange(scoreDirector);
- verify(scoreDirector, times(1)).beforeProblemPropertyChanged(workingTask);
- verify(scoreDirector, times(1)).afterProblemPropertyChanged(workingTask);
- verify(workingTask).setPriority(NEW_PRIORITY);
- verify(workingTask, never()).setStatus(NEW_STATUS);
- verify(scoreDirector).triggerVariableListeners();
- }
-
- @Test
- public void doChangeOnlyStatus() {
- change.setStatus(NEW_STATUS);
- change.doChange(scoreDirector);
- verify(scoreDirector, times(1)).beforeProblemPropertyChanged(workingTask);
- verify(scoreDirector, times(1)).afterProblemPropertyChanged(workingTask);
- verify(workingTask).setStatus(NEW_STATUS);
- verify(workingTask, never()).setPriority(NEW_PRIORITY);
- verify(scoreDirector).triggerVariableListeners();
- }
-
- @Test
- public void doChangeStatusAndPriority() {
- change.setPriority(NEW_PRIORITY);
- change.setStatus(NEW_STATUS);
- change.doChange(scoreDirector);
- verify(scoreDirector, times(2)).beforeProblemPropertyChanged(workingTask);
- verify(scoreDirector, times(2)).afterProblemPropertyChanged(workingTask);
- verify(workingTask).setStatus(NEW_STATUS);
- verify(workingTask).setPriority(NEW_PRIORITY);
- verify(scoreDirector).triggerVariableListeners();
- }
-
- @Test
- public void doChangeFailure() {
- when(scoreDirector.lookUpWorkingObjectOrReturnNull(task)).thenReturn(null);
- TaskPropertyChangeProblemFactChange change = new TaskPropertyChangeProblemFactChange(task);
-
- Assertions.assertThatThrownBy(() -> change.doChange(scoreDirector))
- .hasMessageContaining("was not found in current working solution");
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/UserPropertyChangeProblemFactChangeTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/UserPropertyChangeProblemFactChangeTest.java
deleted file mode 100644
index 1014c5981f..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/model/solver/realtime/UserPropertyChangeProblemFactChangeTest.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright 2020 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.model.solver.realtime;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.kie.server.services.taskassigning.core.model.Group;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.optaplanner.core.impl.score.director.ScoreDirector;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockTask;
-import static org.kie.server.services.taskassigning.core.model.TestUtil.mockUser;
-import static org.kie.server.services.taskassigning.core.model.solver.realtime.ProblemFactChangeUtilTest.assertTaskWasNotReleased;
-import static org.kie.server.services.taskassigning.core.model.solver.realtime.ProblemFactChangeUtilTest.assertTaskWasReleased;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(MockitoJUnitRunner.class)
-public class UserPropertyChangeProblemFactChangeTest {
-
- private static final String USER_ID = "USER_ID";
- private static final long TASK_ID1 = 1;
- private static final long TASK_ID2 = 2;
- private static final long TASK_ID3 = 3;
- private static final long TASK_ID4 = 4;
-
- @Mock
- private ScoreDirector scoreDirector;
-
- private TaskAssigningSolution workingSolution;
-
- private UserPropertyChangeProblemFactChange change;
-
- private User user;
-
- private Map newAttributes;
-
- private Set newGroups;
-
- private Map> newLabelValues;
-
- private boolean newEnabled;
-
- @Before
- public void setUp() {
- newAttributes = new HashMap<>();
- newAttributes.put("attribute1", "value1");
- newGroups = new HashSet<>();
- newGroups.add(new Group(1, "test-group"));
- newLabelValues = new HashMap<>();
- newLabelValues.put("label1", new HashSet<>());
- newEnabled = false;
- user = new User(1, USER_ID);
- workingSolution = new TaskAssigningSolution(1, new ArrayList<>(), new ArrayList<>());
- change = new UserPropertyChangeProblemFactChange(user, newEnabled, newAttributes, newLabelValues, newGroups);
- }
-
- @Test
- public void getUser() {
- assertThat(change.getUser()).isEqualTo(user);
- }
-
- @Test
- public void getAttributes() {
- assertThat(change.getAttributes()).isEqualTo(newAttributes);
- }
-
- @Test
- public void getLabelValues() {
- assertThat(change.getLabelValues()).isEqualTo(newLabelValues);
- }
-
- @Test
- public void getGroups() {
- assertThat(change.getGroups()).isEqualTo(newGroups);
- }
-
- @Test
- public void isEnabled() {
- assertThat(change.isEnabled()).isEqualTo(false);
- }
-
- @Test
- public void doChange() {
- List workingUserTasks = Arrays.asList(mockTask(TASK_ID1, true),
- mockTask(TASK_ID2, true),
- mockTask(TASK_ID3, false),
- mockTask(TASK_ID4, false));
-
- User workingUser = mockUser(USER_ID, workingUserTasks);
- workingUser.setGroups(new HashSet<>());
- workingUser.setAttributes(new HashMap<>());
- workingUser.setAllLabelValues(new HashMap<>());
- workingUser.setEnabled(true);
-
- when(scoreDirector.lookUpWorkingObjectOrReturnNull(user)).thenReturn(workingUser);
- change.doChange(scoreDirector);
- verify(scoreDirector).beforeProblemPropertyChanged(workingUser);
- verify(scoreDirector).afterProblemPropertyChanged(workingUser);
- verify(scoreDirector).triggerVariableListeners();
-
- assertThat(workingUser.isEnabled()).isEqualTo(newEnabled);
- assertThat(workingUser.getGroups()).isEqualTo(newGroups);
- assertThat(workingUser.getAllLabelValues()).isEqualTo(newLabelValues);
- assertThat(workingUser.getAttributes()).isEqualTo(newAttributes);
-
- List pinnedTasks = Arrays.asList(workingUserTasks.get(0), workingUserTasks.get(1));
- for (Task pinnedTask : pinnedTasks) {
- assertThat(pinnedTask.isPinned()).isTrue();
- assertTaskWasNotReleased(pinnedTask, scoreDirector);
- }
-
- List releasedTasks = Arrays.asList(workingUserTasks.get(2), workingUserTasks.get(3));
- releasedTasks.forEach(releasedTask -> assertTaskWasReleased(releasedTask, scoreDirector));
- }
-
- @Test
- public void doChangeUserDontExists() {
- when(scoreDirector.lookUpWorkingObjectOrReturnNull(user)).thenReturn(null);
- change.doChange(scoreDirector);
- verify(scoreDirector, never()).beforeProblemPropertyChanged(any());
- verify(scoreDirector, never()).afterProblemPropertyChanged(any());
- verify(scoreDirector, never()).triggerVariableListeners();
- }
-}
diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/persistence/TaskAssigningGenerator.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/persistence/TaskAssigningGenerator.java
deleted file mode 100644
index f07f22f537..0000000000
--- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/java/org/kie/server/services/taskassigning/core/persistence/TaskAssigningGenerator.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright 2019 Red Hat, Inc. and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * 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.kie.server.services.taskassigning.core.persistence;
-
-import java.io.File;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
-
-import org.kie.server.services.taskassigning.core.model.Group;
-import org.kie.server.services.taskassigning.core.model.OrganizationalEntity;
-import org.kie.server.services.taskassigning.core.model.Task;
-import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution;
-import org.kie.server.services.taskassigning.core.model.User;
-import org.optaplanner.examples.common.app.CommonApp;
-import org.optaplanner.examples.common.app.LoggingMain;
-import org.optaplanner.examples.common.persistence.AbstractSolutionImporter;
-import org.optaplanner.examples.common.persistence.generator.StringDataGenerator;
-
-import org.optaplanner.persistence.common.api.domain.solution.SolutionFileIO;
-import org.optaplanner.persistence.xstream.impl.domain.solution.XStreamSolutionFileIO;
-
-import static org.optaplanner.examples.common.app.CommonApp.DATA_DIR_SYSTEM_PROPERTY;
-
-/**
- * Helper class for generating a set of example solution files. Was used for generating the files below and doesn't need
- * to be executed unless this files needs to be re-generated.
- *