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.jackson jackson-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.drools drools-core - - org.optaplanner - optaplanner-core - org.kie.server kie-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-api provided @@ -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-scorecard runtime - - org.optaplanner - optaplanner-workbench-models-datamodel-api - runtime - - - org.optaplanner - optaplanner-core - runtime - org.kie kie-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-executor provided - - org.optaplanner - optaplanner-core - provided - org.kie.server kie-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-scorecard runtime - - org.optaplanner - optaplanner-core - runtime - org.kie kie-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.drools drools-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 problemFactChanges; - - public AddProblemFactChangesCommand(String containerId, - String solverId, - List problemFactChanges) { - this.containerId = containerId; - this.solverId = solverId; - this.problemFactChanges = new ArrayList<>(problemFactChanges); - } - - 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 List getProblemFactChanges() { - if (problemFactChanges == null) { - return null; - } - return problemFactChanges.stream().map(p -> (ProblemFactChange) p).collect(Collectors.toList()); - } - - public void setProblemFactChanges(List problemFactChanges) { - this.problemFactChanges = new ArrayList<>(problemFactChanges); - } - - @Override - public String toString() { - return "AddProblemFactChangesCommand{" + - "containerId='" + containerId + '\'' + - ", solverId='" + solverId + '\'' + - ", problemFactChanges='" + problemFactChanges + '\'' + - '}'; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/CreateSolverCommand.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/CreateSolverCommand.java deleted file mode 100644 index 3ef6a3052b..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/CreateSolverCommand.java +++ /dev/null @@ -1,89 +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.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; - -@XmlRootElement(name = "create-solver") -@XStreamAlias("create-solver") -@XmlAccessorType(XmlAccessType.NONE) -public class CreateSolverCommand - 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(name = "solver-config-file") - @XStreamAlias("solver-config-file") - private String solverConfigFile; - - public CreateSolverCommand() { - } - - public CreateSolverCommand(String containerId, String solverId, String solverConfigFile) { - this.containerId = containerId; - this.solverId = solverId; - this.solverConfigFile = solverConfigFile; - } - - 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 String getSolverConfigFile() { - return solverConfigFile; - } - - public void setSolverConfigFile(String solverConfigFile) { - this.solverConfigFile = solverConfigFile; - } - - @Override - public String toString() { - return "CreateSolverCommand{" - + "containerId='" + containerId + '\'' - + ", solverId='" + solverId + '\'' - + ", solverConfigFile='" + solverConfigFile + '\'' - + '}'; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/DisposeSolverCommand.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/DisposeSolverCommand.java deleted file mode 100644 index f0c78b93ab..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/DisposeSolverCommand.java +++ /dev/null @@ -1,74 +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.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.XmlRootElement; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import org.kie.server.api.model.KieServerCommand; - -@XmlRootElement(name = "dispose-solver") -@XStreamAlias("dispose-solver") -@XmlAccessorType(XmlAccessType.NONE) -public class DisposeSolverCommand - 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 DisposeSolverCommand() { - } - - public DisposeSolverCommand(String containerId, String solverId) { - this.containerId = containerId; - this.solverId = solverId; - } - - 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; - } - - @Override - public String toString() { - return "DisposeSolverCommand{" - + "containerId='" + containerId + '\'' - + ", solverId='" + solverId + '\'' - + '}'; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/GetSolverCommand.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/GetSolverCommand.java deleted file mode 100644 index ffd3a8ebaa..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/GetSolverCommand.java +++ /dev/null @@ -1,75 +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.XmlRootElement; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import org.kie.server.api.model.KieServerCommand; - -@XmlRootElement(name = "get-solver") -@XStreamAlias("get-solver") -@XmlAccessorType(XmlAccessType.NONE) -public class GetSolverCommand - 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 GetSolverCommand() { - } - - public GetSolverCommand(String containerId, - String solverId) { - this.containerId = containerId; - this.solverId = solverId; - } - - 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; - } - - @Override - public String toString() { - return "GetSolverCommand{" - + "containerId='" + containerId + '\'' - + ", solverId='" + solverId + '\'' - + '}'; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/GetSolverWithBestSolutionCommand.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/GetSolverWithBestSolutionCommand.java deleted file mode 100644 index 1972331a89..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/GetSolverWithBestSolutionCommand.java +++ /dev/null @@ -1,75 +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.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.XmlRootElement; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import org.kie.server.api.model.KieServerCommand; - -@XmlRootElement(name = "get-solver-with-best-solution") -@XStreamAlias("get-solver-with-best-solution") -@XmlAccessorType(XmlAccessType.NONE) -public class GetSolverWithBestSolutionCommand - 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 GetSolverWithBestSolutionCommand() { - } - - public GetSolverWithBestSolutionCommand(String containerId, - String solverId) { - this.containerId = containerId; - this.solverId = solverId; - } - - 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; - } - - @Override - public String toString() { - return "GetSolverWithBestSolutionCommand{" + - "containerId='" + containerId + '\'' + - ", solverId='" + solverId + '\'' + - '}'; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/GetSolversCommand.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/GetSolversCommand.java deleted file mode 100644 index 7c3d373b0a..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/GetSolversCommand.java +++ /dev/null @@ -1,60 +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.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.XmlRootElement; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import org.kie.server.api.model.KieServerCommand; - -@XmlRootElement(name = "get-solvers") -@XStreamAlias("get-solvers") -@XmlAccessorType(XmlAccessType.NONE) -public class GetSolversCommand - implements KieServerCommand { - - private static final long serialVersionUID = -1803374525440238478L; - - @XmlAttribute(name = "container-id") - @XStreamAlias("container-id") - private String containerId; - - public GetSolversCommand() { - } - - public GetSolversCommand(String containerId) { - this.containerId = containerId; - } - - public String getContainerId() { - return containerId; - } - - public void setContainerId(String containerId) { - this.containerId = containerId; - } - - @Override - public String toString() { - return "GetSolversCommand{" - + "containerId='" + containerId + '\'' - + '}'; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/IsEveryProblemFactChangeProcessedCommand.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/IsEveryProblemFactChangeProcessedCommand.java deleted file mode 100644 index 7727b683bb..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/IsEveryProblemFactChangeProcessedCommand.java +++ /dev/null @@ -1,75 +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.XmlRootElement; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import org.kie.server.api.model.KieServerCommand; - -@XmlRootElement(name = "is-every-problem-fact-change-processed") -@XStreamAlias("is-every-problem-fact-change-processed") -@XmlAccessorType(XmlAccessType.NONE) -public class IsEveryProblemFactChangeProcessedCommand - 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 IsEveryProblemFactChangeProcessedCommand() { - } - - public IsEveryProblemFactChangeProcessedCommand(String containerId, - String solverId) { - this.containerId = containerId; - this.solverId = solverId; - } - - 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; - } - - @Override - public String toString() { - return "IsEveryProblemFactChangeProcessedCommand{" + - "containerId='" + containerId + '\'' + - ", solverId='" + solverId + '\'' + - '}'; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/SolvePlanningProblemCommand.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/SolvePlanningProblemCommand.java deleted file mode 100644 index 96f5ee8381..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/SolvePlanningProblemCommand.java +++ /dev/null @@ -1,91 +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; - -@XmlRootElement(name = "solve-planning-problem") -@XStreamAlias("solve-planning-problem") -@XmlAccessorType(XmlAccessType.NONE) -public class SolvePlanningProblemCommand - 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("planning-problem") - private String planningProblem; - - public SolvePlanningProblemCommand() { - } - - public SolvePlanningProblemCommand(String containerId, - String solverId, - String planningProblem) { - this.containerId = containerId; - this.solverId = solverId; - this.planningProblem = planningProblem; - } - - 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 String getPlanningProblem() { - return planningProblem; - } - - public void setPlanningProblem(String planningProblem) { - this.planningProblem = planningProblem; - } - - @Override - public String toString() { - return "SolvePlanningProblemCommand{" + - "containerId='" + containerId + '\'' + - ", solverId='" + solverId + '\'' + - ", planningProblem='" + planningProblem + '\'' + - '}'; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/TerminateSolverEarlyCommand.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/TerminateSolverEarlyCommand.java deleted file mode 100644 index 35002cd1d7..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/commands/optaplanner/TerminateSolverEarlyCommand.java +++ /dev/null @@ -1,75 +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.XmlRootElement; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import org.kie.server.api.model.KieServerCommand; - -@XmlRootElement(name = "terminate-solver-early") -@XStreamAlias("terminate-solver-early") -@XmlAccessorType(XmlAccessType.NONE) -public class TerminateSolverEarlyCommand - 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 TerminateSolverEarlyCommand() { - } - - public TerminateSolverEarlyCommand(String containerId, - String solverId) { - this.containerId = containerId; - this.solverId = solverId; - } - - 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; - } - - @Override - public String toString() { - return "TerminateSolverEarlyCommand{" + - "containerId='" + containerId + '\'' + - ", solverId='" + solverId + '\'' + - '}'; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/jaxb/JaxbMarshaller.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/jaxb/JaxbMarshaller.java index 6bb67f147a..9c018f9e84 100644 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/jaxb/JaxbMarshaller.java +++ b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/jaxb/JaxbMarshaller.java @@ -75,16 +75,6 @@ import org.kie.server.api.commands.ListContainersCommand; import org.kie.server.api.commands.UpdateReleaseIdCommand; import org.kie.server.api.commands.UpdateScannerCommand; -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.MarshallingException; import org.kie.server.api.marshalling.MarshallingFormat; @@ -179,9 +169,6 @@ import org.kie.server.api.model.instance.ProcessInstanceUserTaskWithVariablesList; import org.kie.server.api.model.instance.RequestInfoInstance; import org.kie.server.api.model.instance.RequestInfoInstanceList; -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.api.model.instance.TaskAttachment; import org.kie.server.api.model.instance.TaskAttachmentList; import org.kie.server.api.model.instance.TaskComment; @@ -198,13 +185,6 @@ import org.kie.server.api.model.instance.VariableInstanceList; import org.kie.server.api.model.instance.WorkItemInstance; import org.kie.server.api.model.instance.WorkItemInstanceList; -import org.kie.server.api.model.taskassigning.OrganizationalEntity; -import org.kie.server.api.model.taskassigning.PlanningExecutionResult; -import org.kie.server.api.model.taskassigning.PlanningItem; -import org.kie.server.api.model.taskassigning.PlanningItemList; -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.api.model.taskassigning.TaskDataList; import org.kie.server.api.model.type.JaxbByteArray; import org.kie.server.api.model.type.JaxbDate; import org.kie.server.api.model.type.JaxbList; @@ -342,23 +322,7 @@ public class JaxbMarshaller implements Marshaller { ArrayList.class, - // OptaPlanner - SolverInstance.class, - SolverInstanceList.class, Message.class, - ScoreWrapper.class, - - // Optaplanner commands - CreateSolverCommand.class, - DisposeSolverCommand.class, - GetSolverWithBestSolutionCommand.class, - GetSolversCommand.class, - GetSolverCommand.class, - SolvePlanningProblemCommand.class, - TerminateSolverEarlyCommand.class, - AddProblemFactChangeCommand.class, - AddProblemFactChangesCommand.class, - IsEveryProblemFactChangeProcessedCommand.class, // admin section MigrationReportInstance.class, @@ -419,14 +383,6 @@ public class JaxbMarshaller implements Marshaller { StringFieldOutput.class, ScoreCard.class, - //TaskAssigning - PlanningExecutionResult.class, - OrganizationalEntity.class, - PlanningItem.class, - PlanningItemList.class, - PlanningTask.class, - TaskDataList.class, - TaskData.class, SearchQueryFilterSpec.class, ProcessInstanceUserTaskWithVariablesList.class, CaseUserTaskWithVariablesList.class, diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/xstream/XStreamMarshaller.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/xstream/XStreamMarshaller.java index d66e00c3e7..0595b1f4b6 100644 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/xstream/XStreamMarshaller.java +++ b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/xstream/XStreamMarshaller.java @@ -41,16 +41,6 @@ import org.kie.server.api.commands.ListContainersCommand; import org.kie.server.api.commands.UpdateReleaseIdCommand; import org.kie.server.api.commands.UpdateScannerCommand; -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.model.KieContainerResource; @@ -74,8 +64,6 @@ import org.kie.server.api.model.dmn.DMNModelInfoList; import org.kie.server.api.model.dmn.DMNNodeStub; import org.kie.server.api.model.dmn.DMNResultKS; -import org.kie.server.api.model.instance.SolverInstance; -import org.optaplanner.persistence.xstream.api.score.AbstractScoreXStreamConverter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -185,8 +173,6 @@ protected void configureMarshaller(Set> classes, String[] classWildcards = {"org.kie.api.pmml.*", "org.kie.pmml.pmml_4_2.model.*"}; this.xstream.allowTypesByWildcard(classWildcards); - AbstractScoreXStreamConverter.registerScoreConverters(xstream); - this.xstream.processAnnotations(CommandScript.class); this.xstream.processAnnotations(CallContainerCommand.class); this.xstream.processAnnotations(CreateContainerCommand.class); @@ -211,18 +197,6 @@ protected void configureMarshaller(Set> classes, this.xstream.processAnnotations(KieContainerStatusFilter.class); this.xstream.processAnnotations(KieContainerResourceFilter.class); - this.xstream.processAnnotations(SolverInstance.class); - this.xstream.processAnnotations(CreateSolverCommand.class); - this.xstream.processAnnotations(DisposeSolverCommand.class); - this.xstream.processAnnotations(GetSolverWithBestSolutionCommand.class); - this.xstream.processAnnotations(GetSolversCommand.class); - this.xstream.processAnnotations(GetSolverCommand.class); - this.xstream.processAnnotations(SolvePlanningProblemCommand.class); - this.xstream.processAnnotations(TerminateSolverEarlyCommand.class); - this.xstream.processAnnotations(AddProblemFactChangeCommand.class); - this.xstream.processAnnotations(AddProblemFactChangesCommand.class); - this.xstream.processAnnotations(IsEveryProblemFactChangeProcessedCommand.class); - this.xstream.processAnnotations(DMNContextKS.class); this.xstream.processAnnotations(DMNResultKS.class); this.xstream.processAnnotations(DMNNodeStub.class); diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/ServiceResponse.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/ServiceResponse.java index 995b2e40a6..96e317809a 100644 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/ServiceResponse.java +++ b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/ServiceResponse.java @@ -93,8 +93,6 @@ import org.kie.server.api.model.instance.ProcessInstanceList; import org.kie.server.api.model.instance.RequestInfoInstance; import org.kie.server.api.model.instance.RequestInfoInstanceList; -import org.kie.server.api.model.instance.SolverInstance; -import org.kie.server.api.model.instance.SolverInstanceList; import org.kie.server.api.model.instance.TaskEventInstance; import org.kie.server.api.model.instance.TaskEventInstanceList; import org.kie.server.api.model.instance.TaskInstance; @@ -108,13 +106,6 @@ import org.kie.server.api.model.instance.WorkItemInstance; import org.kie.server.api.model.instance.WorkItemInstanceList; import org.kie.server.api.model.scenariosimulation.ScenarioSimulationResult; -import org.kie.server.api.model.taskassigning.OrganizationalEntity; -import org.kie.server.api.model.taskassigning.PlanningExecutionResult; -import org.kie.server.api.model.taskassigning.PlanningItem; -import org.kie.server.api.model.taskassigning.PlanningItemList; -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.api.model.taskassigning.TaskDataList; import org.kie.server.api.model.type.JaxbBoolean; import org.kie.server.api.model.type.JaxbByte; import org.kie.server.api.model.type.JaxbCharacter; @@ -203,10 +194,6 @@ public class ServiceResponse implements KieServiceResponse { @XmlElement(name = "document-instance", type = DocumentInstance.class), @XmlElement(name = "document-instance-list", type = DocumentInstanceList.class), @XmlElement(name = "count-definition", type = CountDefinition.class), - - // optaplanner entities - @XmlElement(name = "solver-instance", type = SolverInstance.class), - @XmlElement(name = "solver-instance-list", type = SolverInstanceList.class), @XmlElement(name = "execution-results", type = ExecutionResultImpl.class), @@ -258,15 +245,6 @@ public class ServiceResponse implements KieServiceResponse { // Scenario Simulation @XmlElement(name = "scenario-simulation-result", type = ScenarioSimulationResult.class), - - //TaskAssigning - @XmlElement(name = "task-assigning-task-data", type = TaskData.class), - @XmlElement(name = "task-assigning-task-data-list", type = TaskDataList.class), - @XmlElement(name = "task-assigning-planning-task", type = PlanningTask.class), - @XmlElement(name = "task-assigning-planning-item", type = PlanningItem.class), - @XmlElement(name = "task-assigning-planning-item-list", type = PlanningItemList.class), - @XmlElement(name = "task-assigning-organizational-entity", type = OrganizationalEntity.class), - @XmlElement(name = "task-assigning-planning-execution-result", type = PlanningExecutionResult.class) }) @JsonProperty private T result; diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/instance/ScoreWrapper.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/instance/ScoreWrapper.java deleted file mode 100644 index e0b2d9c48e..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/instance/ScoreWrapper.java +++ /dev/null @@ -1,79 +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.api.model.instance; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlValue; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import com.thoughtworks.xstream.annotations.XStreamConverter; -import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter; -import org.optaplanner.core.api.score.Score; -import org.optaplanner.core.impl.score.ScoreUtils; - -@XmlAccessorType(XmlAccessType.FIELD) -@XStreamConverter(value = ToAttributedValueConverter.class, strings = {"scoreString"}) -public class ScoreWrapper { - - @XmlAttribute(name = "scoreClass") - @XStreamAlias(value = "scoreClass") - private Class scoreClass; - - @XmlValue - private String scoreString; - - // Define default constructor to enable class marshalling/unmarshalling - private ScoreWrapper() { - } - - public ScoreWrapper(Score score) { - this.scoreClass = score == null ? null : score.getClass(); - this.scoreString = score == null ? null : score.toString(); - } - - public Class getScoreClass() { - return scoreClass; - } - - public String getScoreString() { - return scoreString; - } - - /** - * Returns score representation of the object. - * @return Score representation of the object. Returns null if the score has not been assigned by the solver yet. - * @throws IllegalArgumentException If scoreClass is not one of the out-of-box score implementations. - * In this case clients may implement their own way to extract the score object. - */ - public Score toScore() { - if (scoreClass == null) { - return null; - } - - return ScoreUtils.parseScore(scoreClass, scoreString); - } - - @Override - public String toString() { - return "ScoreWrapper{" - + "scoreClass='" + scoreClass + '\'' - + ", scoreString='" + scoreString + '\'' - + '}'; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/instance/SolverInstance.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/instance/SolverInstance.java deleted file mode 100644 index a9d1f2ae44..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/instance/SolverInstance.java +++ /dev/null @@ -1,135 +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.api.model.instance; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import org.drools.core.xml.jaxb.util.JaxbUnknownAdapter; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlRootElement(name = "solver-instance") -@XStreamAlias("solver-instance") -public class SolverInstance { - - public enum SolverStatus { - NOT_SOLVING, - TERMINATING_EARLY, - SOLVING - } - - @XmlElement(name = "container-id") - @XStreamAlias("container-id") - private String containerId; - - @XmlElement(name = "solver-id") - @XStreamAlias("solver-id") - private String solverId; - - @XmlElement(name = "solver-config-file") - @XStreamAlias("solver-config-file") - private String solverConfigFile; - - @XmlElement(name = "status") - @XStreamAlias("status") - private SolverStatus status; - - @XmlElement(name = "score") - @XStreamAlias("score") - private ScoreWrapper scoreWrapper; - - @XmlElement(name = "best-solution") - @XStreamAlias("best-solution") - @XmlJavaTypeAdapter(JaxbUnknownAdapter.class) - private Object bestSolution; - - public SolverInstance() { - } - - 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 String getSolverConfigFile() { - return solverConfigFile; - } - - public void setSolverConfigFile(String solverConfigFile) { - this.solverConfigFile = solverConfigFile; - } - - public SolverStatus getStatus() { - return status; - } - - public void setStatus(SolverStatus status) { - this.status = status; - } - - public ScoreWrapper getScoreWrapper() { - return scoreWrapper; - } - - public void setScoreWrapper(ScoreWrapper scoreWrapper) { - this.scoreWrapper = scoreWrapper; - } - - public Object getBestSolution() { - return bestSolution; - } - - public void setBestSolution(Object bestSolution) { - this.bestSolution = bestSolution; - } - - @Override - public String toString() { - return "SolverInstance{" - + "containerId='" + containerId + '\'' - + ", solverId='" + solverId + '\'' - + ", solverConfigFile='" + solverConfigFile + '\'' - + ", status=" + status - + ", scoreWrapper=" + scoreWrapper - + '}'; - } - - public String getSolverInstanceKey() { - return getSolverInstanceKey(this.containerId, - this.solverId); - } - - public static String getSolverInstanceKey(String containerId, - String solverId) { - return containerId + "/" + solverId; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/instance/SolverInstanceList.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/instance/SolverInstanceList.java deleted file mode 100644 index 0a4eb4fb1a..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/instance/SolverInstanceList.java +++ /dev/null @@ -1,53 +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.api.model.instance; - -import java.util.ArrayList; -import java.util.List; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import com.thoughtworks.xstream.annotations.XStreamImplicit; - -@XmlRootElement(name = "solvers") -@XStreamAlias("solvers") -@XmlAccessorType(XmlAccessType.FIELD) -public class SolverInstanceList { - - @XmlElement(name = "solver") - @XStreamImplicit(itemFieldName = "solver") - private List solvers; - - public SolverInstanceList() { - solvers = new ArrayList<>(); - } - - public SolverInstanceList(List solvers) { - this.solvers = solvers; - } - - public List getContainers() { - return solvers; - } - - public void setContainers(List solvers) { - this.solvers = solvers; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/LocalDateTimeValue.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/LocalDateTimeValue.java deleted file mode 100644 index 4366f4e4ef..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/LocalDateTimeValue.java +++ /dev/null @@ -1,68 +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.api.model.taskassigning; - -import java.time.LocalDateTime; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - -import org.kie.internal.jaxb.LocalDateTimeXmlAdapter; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlRootElement(name = "local-date-time-value") -public class LocalDateTimeValue { - - @XmlJavaTypeAdapter(LocalDateTimeXmlAdapter.class) - @XmlElement(name = "value") - private LocalDateTime value; - - public LocalDateTime getValue() { - return value; - } - - public void setValue(LocalDateTime value) { - this.value = value; - } - - public static LocalDateTimeValue from(LocalDateTime value) { - LocalDateTimeValue result = new LocalDateTimeValue(); - result.setValue(value); - return result; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof LocalDateTimeValue)) { - return false; - } - LocalDateTimeValue that = (LocalDateTimeValue) o; - return Objects.equals(value, that.value); - } - - @Override - public int hashCode() { - return Objects.hash(value); - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/OrganizationalEntity.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/OrganizationalEntity.java deleted file mode 100644 index c8b5945da0..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/OrganizationalEntity.java +++ /dev/null @@ -1,95 +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.api.model.taskassigning; - -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlRootElement(name = "task-assigning-organizational-entity") -public class OrganizationalEntity { - - @XmlElement(name = "name") - private String name; - - @XmlElement(name = "type") - private String type; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - - OrganizationalEntity entity = new OrganizationalEntity(); - - private Builder() { - } - - public Builder type(String type) { - entity.setType(type); - return this; - } - - public Builder name(String name) { - entity.setName(name); - return this; - } - - public OrganizationalEntity build() { - return entity; - } - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof OrganizationalEntity)) { - return false; - } - OrganizationalEntity that = (OrganizationalEntity) o; - return Objects.equals(name, that.name) && - Objects.equals(type, that.type); - } - - @Override - public int hashCode() { - return Objects.hash(name, type); - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningExecutionResult.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningExecutionResult.java deleted file mode 100644 index acd1c47189..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningExecutionResult.java +++ /dev/null @@ -1,100 +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.api.model.taskassigning; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlRootElement(name = "task-assigning-planning-execution-result") -public class PlanningExecutionResult { - - public enum ErrorCode { - TASK_MODIFIED_SINCE_PLAN_CALCULATION_ERROR, - UNEXPECTED_ERROR - } - - @XmlElement(name = "error") - private ErrorCode error; - - @XmlElement(name = "error-message") - private String errorMessage; - - @XmlElement(name = "container-id") - private String containerId; - - public ErrorCode getError() { - return error; - } - - public void setError(ErrorCode error) { - this.error = error; - } - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - public String getContainerId() { - return containerId; - } - - public void setContainerId(String containerId) { - this.containerId = containerId; - } - - public boolean hasError() { - return error != null; - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - - private PlanningExecutionResult result = new PlanningExecutionResult(); - - private Builder() { - } - - public Builder error(ErrorCode error) { - result.setError(error); - return this; - } - - public Builder errorMessage(String errorMessage) { - result.setErrorMessage(errorMessage); - return this; - } - - public Builder containerId(String containerId) { - result.setContainerId(containerId); - return this; - } - - public PlanningExecutionResult build() { - return result; - } - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningItem.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningItem.java deleted file mode 100644 index 8f327e148e..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningItem.java +++ /dev/null @@ -1,142 +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.api.model.taskassigning; - -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -/** - * Defines the information for executing a planning into the jBPM engine. - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlRootElement(name = "task-assigning-planning-item") -public class PlanningItem { - - @XmlElement(name = "container-id") - private String containerId; - - @XmlElement(name = "task-id") - private Long taskId; - - @XmlElement(name = "proc-inst-id") - private Long processInstanceId; - - @XmlElement(name = "planning-task") - private PlanningTask planningTask; - - public String getContainerId() { - return containerId; - } - - public void setContainerId(String containerId) { - this.containerId = containerId; - } - - public Long getTaskId() { - return taskId; - } - - public void setTaskId(Long taskId) { - this.taskId = taskId; - } - - public Long getProcessInstanceId() { - return processInstanceId; - } - - public void setProcessInstanceId(Long processInstanceId) { - this.processInstanceId = processInstanceId; - } - - public PlanningTask getPlanningTask() { - return planningTask; - } - - public void setPlanningTask(PlanningTask planningTask) { - this.planningTask = planningTask; - } - - @Override - public String toString() { - return "PlanningItem{" + - "containerId='" + containerId + '\'' + - ", taskId=" + taskId + - ", processInstanceId=" + processInstanceId + - ", planningTask=" + planningTask + - '}'; - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - - private PlanningItem item = new PlanningItem(); - - private Builder() { - } - - public PlanningItem build() { - return item; - } - - public Builder taskId(Long taskId) { - item.setTaskId(taskId); - return this; - } - - public Builder containerId(String containerId) { - item.setContainerId(containerId); - return this; - } - - public Builder processInstanceId(Long processInstanceId) { - item.setProcessInstanceId(processInstanceId); - return this; - } - - public Builder planningTask(PlanningTask planningTask) { - item.setPlanningTask(planningTask); - return this; - } - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof PlanningItem)) { - return false; - } - PlanningItem that = (PlanningItem) o; - return Objects.equals(containerId, that.containerId) && - Objects.equals(taskId, that.taskId) && - Objects.equals(processInstanceId, that.processInstanceId) && - Objects.equals(planningTask, that.planningTask); - } - - @Override - public int hashCode() { - return Objects.hash(containerId, taskId, processInstanceId, planningTask); - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningItemList.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningItemList.java deleted file mode 100644 index 753297ba92..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningItemList.java +++ /dev/null @@ -1,88 +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.api.model.taskassigning; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -import org.kie.server.api.model.ItemList; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlRootElement(name = "task-assigning-planning-item-list") -public class PlanningItemList implements ItemList { - - @XmlElement(name = "planningItems") - private PlanningItem[] planningItems; - - public PlanningItemList() { - //marshalling constructor - } - - public PlanningItemList(PlanningItem[] planningItems) { - this.planningItems = planningItems; - } - - public PlanningItemList(List planningItems) { - this.planningItems = planningItems != null ? planningItems.toArray(new PlanningItem[0]) : null; - } - - public PlanningItem[] getPlanningItems() { - return planningItems; - } - - public void setPlanningItems(PlanningItem[] planningItems) { - this.planningItems = planningItems; - } - - @Override - public List getItems() { - if (planningItems == null) { - return Collections.emptyList(); - } - return Arrays.asList(planningItems); - } - - @Override - public String toString() { - return "PlanningItemList{" + - "planningItems=" + Arrays.toString(planningItems) + - '}'; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof PlanningItemList)) { - return false; - } - PlanningItemList that = (PlanningItemList) o; - return Arrays.equals(planningItems, that.planningItems); - } - - @Override - public int hashCode() { - return Arrays.hashCode(planningItems); - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningTask.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningTask.java deleted file mode 100644 index 191a4b86dc..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningTask.java +++ /dev/null @@ -1,148 +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.api.model.taskassigning; - -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -/** - * Defines the information configured/assigned by OptaPlanner when a solution is planned into the jBPM runtime. - * This information is good enough for restoring the solution and start the solver. - */ - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlRootElement(name = "task-assigning-planning-task") -public class PlanningTask { - - @XmlElement(name = "task-id") - private Long taskId; - - @XmlElement(name = "assigned-user") - private String assignedUser; - - @XmlElement(name = "index") - private Integer index; - - @XmlElement(name = "published") - private Boolean published; - - public Long getTaskId() { - return taskId; - } - - public void setTaskId(Long taskId) { - this.taskId = taskId; - } - - public String getAssignedUser() { - return assignedUser; - } - - public void setAssignedUser(String assignedUser) { - this.assignedUser = assignedUser; - } - - public Integer getIndex() { - return index; - } - - public void setIndex(Integer index) { - this.index = index; - } - - public Boolean getPublished() { - return published; - } - - public void setPublished(Boolean published) { - this.published = published; - } - - public boolean isPublished() { - return published != null && published; - } - - @Override - public String toString() { - return "PlanningTask{" + - "taskId=" + taskId + - ", assignedUser='" + assignedUser + '\'' + - ", index=" + index + - ", published=" + published + - '}'; - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - - private PlanningTask task = new PlanningTask(); - - private Builder() { - } - - public Builder taskId(Long taskId) { - task.setTaskId(taskId); - return this; - } - - public Builder assignedUser(String assignedUser) { - task.setAssignedUser(assignedUser); - return this; - } - - public Builder index(Integer index) { - task.setIndex(index); - return this; - } - - public Builder published(Boolean published) { - task.setPublished(published); - return this; - } - - public PlanningTask build() { - return task; - } - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof PlanningTask)) { - return false; - } - PlanningTask that = (PlanningTask) o; - return Objects.equals(taskId, that.taskId) && - Objects.equals(assignedUser, that.assignedUser) && - Objects.equals(index, that.index) && - Objects.equals(published, that.published); - } - - @Override - public int hashCode() { - return Objects.hash(taskId, assignedUser, index, published); - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningTaskField.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningTaskField.java deleted file mode 100644 index 12751710ca..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/PlanningTaskField.java +++ /dev/null @@ -1,25 +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.api.model.taskassigning; - -public enum PlanningTaskField { - - PTTASKID, - ASSIGNEDUSER, - INDEX, - PUBLISHED -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/QueryParamName.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/QueryParamName.java deleted file mode 100644 index cfd2ae983f..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/QueryParamName.java +++ /dev/null @@ -1,31 +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.api.model.taskassigning; - -public class QueryParamName { - - public static final String FROM_TASK_ID = "fromTaskId"; - public static final String TO_TASK_ID = "toTaskId"; - public static final String FROM_LAST_MODIFICATION_DATE = "fromLastModificationDate"; - public static final String STATUS = "status"; - public static final String PAGE = "page"; - public static final String PAGE_SIZE = "pageSize"; - public static final String TASK_INPUT_VARIABLES_MODE = "inputVariablesMode"; - - private QueryParamName() { - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskAssigningQueries.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskAssigningQueries.java deleted file mode 100644 index 06fb52bf69..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskAssigningQueries.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.api.model.taskassigning; - -public class TaskAssigningQueries { - - private TaskAssigningQueries() { - } - - /** - * Task assigning standard query for facilitating the tasks consumption by third parties using the standard queries API. - */ - public static final String JBPM_HUMAN_TASKS_QUERY = "task-assigning-jbpmHumanTasks"; - - /** - * Task assigning standard query for facilitating the tasks consumption by third parties using the standard queries API. - * This query is sensitive to the current logged user in the KieServicesClient and to the query filtering parameters. - * Results will include the tasks that fulfills the filter criteria and for which the current logged user is a potential owner. - */ - public static final String JBPM_HUMAN_TASKS_WITH_USER_QUERY = "task-assigning-jbpmHumanTasksWithUser"; - - /** - * Task assigning standard query mapper that can be used with the JBPM_HUMAN_TASKS_QUERY and JBPM_HUMAN_TASKS_WITH_USER_QUERY - * queries for returning a List when executing the queries. - */ - public static final String TASK_DATA_QUERY_MAPPER = "TaskAssigningTaskDataQueryMapper"; - - /** - * Task assigning standard query mapper that can be used with the JBPM_HUMAN_TASKS_QUERY and JBPM_HUMAN_TASKS_WITH_USER_QUERY - * queries for returning the raw version of the TaskData when executing the queries. - */ - public static final String TASK_DATA_RAW_QUERY_MAPPER = "TaskAssigningTaskDataRawQueryMapper"; - - /** - * Standard query mapper that can be used with the JBPM_HUMAN_TASKS_QUERY and JBPM_HUMAN_TASKS_WITH_USER_QUERY - * queries for returning the full query results in the raw version. - */ - public static final String RAW_LIST_QUERY_MAPPER = "RawList"; -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskAssigningRestURI.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskAssigningRestURI.java deleted file mode 100644 index bcb8ed8950..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskAssigningRestURI.java +++ /dev/null @@ -1,27 +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.api.model.taskassigning; - -public class TaskAssigningRestURI { - - public static final String TASK_ASSIGNING_RUNTIME_URI = "taskassigning/runtime"; - public static final String TASK_ASSIGNING_EXECUTE_PLANNING_URI = "executeplanning"; - public static final String TASK_ASSIGNING_QUERIES_TASK_DATA_URI = "queries/taskdata"; - - private TaskAssigningRestURI() { - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskData.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskData.java deleted file mode 100644 index 151898850f..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskData.java +++ /dev/null @@ -1,311 +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.api.model.taskassigning; - -import java.time.LocalDateTime; -import java.util.Map; -import java.util.Objects; -import java.util.Set; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - -import org.kie.internal.jaxb.LocalDateTimeXmlAdapter; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlRootElement(name = "task-assigning-task-data") -public class TaskData { - - @XmlElement(name = "task-id") - private Long taskId; - - @XmlJavaTypeAdapter(LocalDateTimeXmlAdapter.class) - @XmlElement(name = "created-on") - private LocalDateTime createdOn; - - @XmlJavaTypeAdapter(LocalDateTimeXmlAdapter.class) - @XmlElement(name = "last-modification-date") - private LocalDateTime lastModificationDate; - - @XmlElement(name = "proc-inst-id") - private Long processInstanceId; - - @XmlElement(name = "proc-id") - private String processId; - - @XmlElement(name = "container-id") - private String containerId; - - @XmlElement(name = "status") - private String status; - - @XmlElement(name = "priority") - private Integer priority; - - @XmlElement(name = "name") - private String name; - - @XmlElement(name = "actual-owner") - private String actualOwner; - - @XmlElementWrapper(name = "task-potential-owners") - @XmlElement(name = "pot-owners") - private Set potentialOwners; - - @XmlElement(name = "task-input-data") - private Map inputData; - - @XmlElement(name = "planning-task") - private PlanningTask planningTask; - - public Long getTaskId() { - return taskId; - } - - public void setTaskId(Long taskId) { - this.taskId = taskId; - } - - public LocalDateTime getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(LocalDateTime createdOn) { - this.createdOn = createdOn; - } - - public LocalDateTime getLastModificationDate() { - return lastModificationDate; - } - - public void setLastModificationDate(LocalDateTime lastModificationDate) { - this.lastModificationDate = lastModificationDate; - } - - 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 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 String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getActualOwner() { - return actualOwner; - } - - public void setActualOwner(String actualOwner) { - this.actualOwner = actualOwner; - } - - public Set getPotentialOwners() { - return potentialOwners; - } - - public void setPotentialOwners(Set potentialOwners) { - this.potentialOwners = potentialOwners; - } - - public Map getInputData() { - return inputData; - } - - public void setInputData(Map inputData) { - this.inputData = inputData; - } - - public PlanningTask getPlanningTask() { - return planningTask; - } - - public void setPlanningTask(PlanningTask planningTask) { - this.planningTask = planningTask; - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - - private TaskData taskData = new TaskData(); - - private Builder() { - } - - public Builder taskId(Long taskId) { - taskData.setTaskId(taskId); - return this; - } - - public Builder createdOn(LocalDateTime createdOn) { - taskData.setCreatedOn(createdOn); - return this; - } - - public Builder lastModificationDate(LocalDateTime lastModificationDate) { - taskData.setLastModificationDate(lastModificationDate); - return this; - } - - public Builder processInstanceId(Long processInstanceId) { - taskData.setProcessInstanceId(processInstanceId); - return this; - } - - public Builder processId(String processId) { - taskData.setProcessId(processId); - return this; - } - - public Builder containerId(String containerId) { - taskData.setContainerId(containerId); - return this; - } - - public Builder status(String status) { - taskData.setStatus(status); - return this; - } - - public Builder priority(Integer priority) { - taskData.setPriority(priority); - return this; - } - - public Builder name(String name) { - taskData.setName(name); - return this; - } - - public Builder actualOwner(String actualOwner) { - taskData.setActualOwner(actualOwner); - return this; - } - - public Builder potentialOwners(Set potentialOwners) { - taskData.setPotentialOwners(potentialOwners); - return this; - } - - public Builder inputData(Map inputData) { - taskData.setInputData(inputData); - return this; - } - - public Builder planningTask(PlanningTask planningTask) { - taskData.setPlanningTask(planningTask); - return this; - } - - public TaskData build() { - return taskData; - } - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof TaskData)) { - return false; - } - TaskData taskData = (TaskData) o; - return Objects.equals(taskId, taskData.taskId) && - Objects.equals(createdOn, taskData.createdOn) && - Objects.equals(lastModificationDate, taskData.lastModificationDate) && - Objects.equals(processInstanceId, taskData.processInstanceId) && - Objects.equals(processId, taskData.processId) && - Objects.equals(containerId, taskData.containerId) && - Objects.equals(status, taskData.status) && - Objects.equals(priority, taskData.priority) && - Objects.equals(name, taskData.name) && - Objects.equals(actualOwner, taskData.actualOwner) && - Objects.equals(potentialOwners, taskData.potentialOwners) && - Objects.equals(inputData, taskData.inputData) && - Objects.equals(planningTask, taskData.planningTask); - } - - @Override - public int hashCode() { - return Objects.hash(taskId, createdOn, lastModificationDate, processInstanceId, processId, containerId, status, priority, name, actualOwner, potentialOwners, inputData, planningTask); - } - - @Override - public String toString() { - return "TaskData{" + - "taskId=" + taskId + - ", createdOn=" + createdOn + - ", lastModificationDate=" + lastModificationDate + - ", processInstanceId=" + processInstanceId + - ", processId='" + processId + '\'' + - ", containerId='" + containerId + '\'' + - ", status='" + status + '\'' + - ", priority=" + priority + - ", name='" + name + '\'' + - ", actualOwner='" + actualOwner + '\'' + - ", potentialOwners=" + potentialOwners + - ", inputData=" + inputData + - ", planningTask=" + planningTask + - '}'; - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskDataList.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskDataList.java deleted file mode 100644 index 62f9f98363..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskDataList.java +++ /dev/null @@ -1,103 +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.api.model.taskassigning; - -import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - -import org.kie.internal.jaxb.LocalDateTimeXmlAdapter; -import org.kie.server.api.model.ItemList; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlRootElement(name = "task-assigning-task-data-list") -public class TaskDataList implements ItemList { - - @XmlElement(name = "dataItems") - private TaskData[] dataItems; - - @XmlJavaTypeAdapter(LocalDateTimeXmlAdapter.class) - @XmlElement(name = "local-date-time") - private LocalDateTime queryTime; - - public TaskDataList() { - //marshalling constructor - } - - public TaskDataList(TaskData[] dataItems) { - this.dataItems = dataItems; - } - - public TaskDataList(List dataItems) { - this.dataItems = dataItems != null ? dataItems.toArray(new TaskData[0]) : null; - } - - public TaskData[] getDataItems() { - return dataItems; - } - - public void setDataItems(TaskData[] dataItems) { - this.dataItems = dataItems; - } - - @Override - public List getItems() { - if (dataItems == null) { - return Collections.emptyList(); - } - return Arrays.asList(dataItems); - } - - public LocalDateTime getQueryTime() { - return queryTime; - } - - public void setQueryTime(LocalDateTime queryTime) { - this.queryTime = queryTime; - } - - @Override - public String toString() { - return "TaskDataList{" + - "dataItems=" + Arrays.toString(dataItems) + - '}'; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof TaskDataList)) { - return false; - } - TaskDataList that = (TaskDataList) o; - return Arrays.equals(dataItems, that.dataItems); - } - - @Override - public int hashCode() { - return Arrays.hashCode(dataItems); - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskInputVariablesReadMode.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskInputVariablesReadMode.java deleted file mode 100644 index f3e5695701..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/TaskInputVariablesReadMode.java +++ /dev/null @@ -1,33 +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.api.model.taskassigning; - -public enum TaskInputVariablesReadMode { - /** - * Don't load the task variables. - */ - DONT_READ, - /** - * Load the task variables for all the returned tasks. - */ - READ_FOR_ALL, - /** - * Optimization, read the task variables only for the tasks that aren't in a sink status and hasn't an associated planning task. - * This option is intended for internal use. - */ - READ_FOR_ACTIVE_TASKS_WITH_NO_PLANNING_ENTITY -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/UserType.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/UserType.java deleted file mode 100644 index 05dd7db1f1..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/UserType.java +++ /dev/null @@ -1,26 +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.api.model.taskassigning; - -public class UserType { - - private UserType() { - } - - public static final String USER = "User"; - public static final String GROUP = "Group"; -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/data/LabelValueExtractor.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/data/LabelValueExtractor.java deleted file mode 100644 index f19042b7be..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/data/LabelValueExtractor.java +++ /dev/null @@ -1,49 +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.api.model.taskassigning.data; - -import java.util.Set; - -/** - * Defines the contract for being able to extract a Set of values from an Object instance of T at processing time and - * declaring to which label the extracted Set must be associated. - */ -public interface LabelValueExtractor { - - /** - * @return The source object's class from which the label value will be extracted. - */ - Class getType(); - - /** - * @return the name of the label for which the value will be extracted. - */ - String getLabelName(); - - /** - * @return the priority for the given extractor. In cases where two extractors are defined for the same labelName - * the one with the highest priority number will apply. - */ - int getPriority(); - - /** - * Extracts the set for values for the given labelName from the source object. - * @param source the object containing the values to extract. - * @return a set with the extracted values. - */ - Set extract(T source); -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/util/StatusConverter.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/util/StatusConverter.java deleted file mode 100644 index a7460ce26d..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/model/taskassigning/util/StatusConverter.java +++ /dev/null @@ -1,52 +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.api.model.taskassigning.util; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.kie.api.task.model.Status; - -public class StatusConverter { - - private StatusConverter() { - } - - public static Status convertFromString(String value) { - return Status.valueOf(value); - } - - public static String convertToString(Status value) { - return value.name(); - } - - public static List convertToStringList(Status... status) { - return convertToStringList(Arrays.stream(status)); - } - - public static List convertToStringList(List statusList) { - return convertToStringList(Optional.ofNullable(statusList).orElse(Collections.emptyList()).stream()); - } - - private static List convertToStringList(Stream stream) { - return stream.map(StatusConverter::convertToString).collect(Collectors.toList()); - } -} diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/package-info.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/package-info.java deleted file mode 100644 index 4702763481..0000000000 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/package-info.java +++ /dev/null @@ -1,59 +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. - */ - -@XmlJavaTypeAdapters({ - @XmlJavaTypeAdapter(type = BendableScore.class, value = BendableScoreJaxbXmlAdapter.class), - @XmlJavaTypeAdapter(type = BendableLongScore.class, value = BendableLongScoreJaxbXmlAdapter.class), - @XmlJavaTypeAdapter(type = HardMediumSoftScore.class, value = HardMediumSoftScoreJaxbXmlAdapter.class), - @XmlJavaTypeAdapter(type = HardMediumSoftLongScore.class, value = HardMediumSoftLongScoreJaxbXmlAdapter.class), - @XmlJavaTypeAdapter(type = HardSoftScore.class, value = HardSoftScoreJaxbXmlAdapter.class), - @XmlJavaTypeAdapter(type = HardSoftLongScore.class, value = HardSoftLongScoreJaxbXmlAdapter.class), - @XmlJavaTypeAdapter(type = HardSoftDoubleScore.class, value = HardSoftDoubleScoreJaxbXmlAdapter.class), - @XmlJavaTypeAdapter(type = HardSoftBigDecimalScore.class, value = HardSoftBigDecimalScoreJaxbXmlAdapter.class), - @XmlJavaTypeAdapter(type = SimpleScore.class, value = SimpleScoreJaxbXmlAdapter.class), - @XmlJavaTypeAdapter(type = SimpleLongScore.class, value = SimpleLongScoreJaxbXmlAdapter.class), - @XmlJavaTypeAdapter(type = SimpleDoubleScore.class, value = SimpleDoubleScoreJaxbXmlAdapter.class), - @XmlJavaTypeAdapter(type = SimpleBigDecimalScore.class, value = SimpleBigDecimalScoreJaxbXmlAdapter.class) -}) -package org.kie.server.api; - -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters; - -import org.optaplanner.core.api.score.buildin.bendable.BendableScore; -import org.optaplanner.core.api.score.buildin.bendablelong.BendableLongScore; -import org.optaplanner.core.api.score.buildin.hardmediumsoft.HardMediumSoftScore; -import org.optaplanner.core.api.score.buildin.hardmediumsoftlong.HardMediumSoftLongScore; -import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore; -import org.optaplanner.core.api.score.buildin.hardsoftbigdecimal.HardSoftBigDecimalScore; -import org.optaplanner.core.api.score.buildin.hardsoftdouble.HardSoftDoubleScore; -import org.optaplanner.core.api.score.buildin.hardsoftlong.HardSoftLongScore; -import org.optaplanner.core.api.score.buildin.simple.SimpleScore; -import org.optaplanner.core.api.score.buildin.simplebigdecimal.SimpleBigDecimalScore; -import org.optaplanner.core.api.score.buildin.simpledouble.SimpleDoubleScore; -import org.optaplanner.core.api.score.buildin.simplelong.SimpleLongScore; -import org.optaplanner.persistence.jaxb.api.score.buildin.bendable.BendableScoreJaxbXmlAdapter; -import org.optaplanner.persistence.jaxb.api.score.buildin.bendablelong.BendableLongScoreJaxbXmlAdapter; -import org.optaplanner.persistence.jaxb.api.score.buildin.hardmediumsoft.HardMediumSoftScoreJaxbXmlAdapter; -import org.optaplanner.persistence.jaxb.api.score.buildin.hardmediumsoftlong.HardMediumSoftLongScoreJaxbXmlAdapter; -import org.optaplanner.persistence.jaxb.api.score.buildin.hardsoft.HardSoftScoreJaxbXmlAdapter; -import org.optaplanner.persistence.jaxb.api.score.buildin.hardsoftbigdecimal.HardSoftBigDecimalScoreJaxbXmlAdapter; -import org.optaplanner.persistence.jaxb.api.score.buildin.hardsoftdouble.HardSoftDoubleScoreJaxbXmlAdapter; -import org.optaplanner.persistence.jaxb.api.score.buildin.hardsoftlong.HardSoftLongScoreJaxbXmlAdapter; -import org.optaplanner.persistence.jaxb.api.score.buildin.simple.SimpleScoreJaxbXmlAdapter; -import org.optaplanner.persistence.jaxb.api.score.buildin.simplebigdecimal.SimpleBigDecimalScoreJaxbXmlAdapter; -import org.optaplanner.persistence.jaxb.api.score.buildin.simpledouble.SimpleDoubleScoreJaxbXmlAdapter; -import org.optaplanner.persistence.jaxb.api.score.buildin.simplelong.SimpleLongScoreJaxbXmlAdapter; diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/rest/RestURI.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/rest/RestURI.java index 4d9d62567d..ead0076b90 100644 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/rest/RestURI.java +++ b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/rest/RestURI.java @@ -42,7 +42,6 @@ public class RestURI { public static final String JOB_CMD_NAME = "cmd"; public static final String JOB_KEY = "key"; public static final String QUERY_NAME = "queryName"; - public static final String SOLVER_ID = "solverId"; public static final String MODEL_ID = "modelId"; public static final String DECISIONSERVICE_ID = "decisionServiceId"; public static final String OPENAPI = "openapi"; @@ -233,15 +232,6 @@ public class RestURI { public static final String RUN_FILTERED_QUERY_DEF_POST_URI = "{" + QUERY_NAME + "}/filtered-data"; public static final String RUN_FILTERED_QUERY_DEF_BY_CONTAINER_POST_URI = "containers/{" + CONTAINER_ID + "}/query/{" + QUERY_NAME + "}/filtered-data"; - // optaplanner URI - public static final String SOLVER_URI = "containers/{" + CONTAINER_ID + "}/solvers"; - public static final String SOLVER_ID_URI = "{" + SOLVER_ID + "}"; - public static final String SOLVER_BEST_SOLUTION = "bestsolution"; - public static final String SOLVER_PROBLEM_FACT_CHANGES = "problemfactchanges"; - public static final String SOLVER_PROBLEM_FACTS_CHANGES_PROCESSED = SOLVER_PROBLEM_FACT_CHANGES + "/processed"; - public static final String SOLVER_STATE_RUNNING = "state/solving"; - public static final String SOLVER_STATE_TERMINATING = "state/terminating-early"; - // DMN URI public static final String DMN_URI = "containers/{" + CONTAINER_ID + "}/dmn"; public static final String DMN_MODEL_URI = "models/{" + MODEL_ID + "}"; diff --git a/kie-server-parent/kie-server-api/src/test/java/org/kie/server/api/marshalling/ScoresMarshallingTest.java b/kie-server-parent/kie-server-api/src/test/java/org/kie/server/api/marshalling/ScoresMarshallingTest.java deleted file mode 100644 index 0a45fcbdb4..0000000000 --- a/kie-server-parent/kie-server-api/src/test/java/org/kie/server/api/marshalling/ScoresMarshallingTest.java +++ /dev/null @@ -1,83 +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.api.marshalling; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.kie.server.api.model.instance.ScoreWrapper; -import org.kie.server.api.model.instance.SolverInstance; -import org.optaplanner.core.api.score.Score; -import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@RunWith(Parameterized.class) -public class ScoresMarshallingTest { - - @Parameterized.Parameters(name = "{index}: {0}") - public static Collection data() { - Collection parameterData = new ArrayList(Arrays.asList( - new Object[][]{ - {MarshallingFormat.JAXB}, - {MarshallingFormat.JSON}, - {MarshallingFormat.XSTREAM} - } - )); - - return parameterData; - } - - @Parameterized.Parameter(0) - public MarshallingFormat marshallingFormat; - - private Marshaller marshaller; - - @Before - public void setUp() { - marshaller = MarshallerFactory.getMarshaller(marshallingFormat, Thread.currentThread().getContextClassLoader()); - } - - @Test - public void testMarshallHardSoftScore() { - HardSoftScore score = HardSoftScore.valueOf(10, 20); - HardSoftScore result = marshallUnmarshallScore(score); - - assertNotNull(result); - assertEquals(10, result.getHardScore()); - assertEquals(20, result.getSoftScore()); - } - - @SuppressWarnings("unchecked") - private > S marshallUnmarshallScore(S toBeMarshalled) { - ScoreWrapper wrapper = new ScoreWrapper(toBeMarshalled); - - SolverInstance instance = new SolverInstance(); - instance.setScoreWrapper(wrapper); - - String marshalledSolver = marshaller.marshall(instance); - SolverInstance result = marshaller.unmarshall(marshalledSolver, SolverInstance.class); - - return (S) result.getScoreWrapper().toScore(); - } -} diff --git a/kie-server-parent/kie-server-api/src/test/java/org/kie/server/api/marshalling/SolutionMarshallingTest.java b/kie-server-parent/kie-server-api/src/test/java/org/kie/server/api/marshalling/SolutionMarshallingTest.java deleted file mode 100644 index d8dc0ad268..0000000000 --- a/kie-server-parent/kie-server-api/src/test/java/org/kie/server/api/marshalling/SolutionMarshallingTest.java +++ /dev/null @@ -1,94 +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.server.api.marshalling; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.OffsetDateTime; -import java.time.ZoneOffset; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.kie.server.api.marshalling.objects.DateObjectUnannotated; -import org.kie.server.api.model.instance.SolverInstance; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests (un)marshalling of {@link SolverInstance} with best solution that has fields from {@link java.time} package - * without using custom adapters/converters. - */ -@RunWith(Parameterized.class) -public class SolutionMarshallingTest { - - private static final Logger logger = LoggerFactory.getLogger(SolutionMarshallingTest.class); - - @Parameterized.Parameters(name = "{index}: {0}") - public static Collection data() { - return new ArrayList<>(Arrays.asList(new Object[][]{ - // JAXB doesn't seem to handle java.time.* without using custom adapters - /*{MarshallingFormat.JAXB},*/ - {MarshallingFormat.JSON}, - {MarshallingFormat.XSTREAM} - })); - } - - @Parameterized.Parameter - public MarshallingFormat marshallingFormat; - - @Test - public void testMarshallHardSoftScore() { - SolverInstance solverInstance = new SolverInstance(); - - DateObjectUnannotated dateObject = new DateObjectUnannotated(); - dateObject.setLocalDate(LocalDate.of(2018, 8, 18)); - dateObject.setLocalDateTime(LocalDateTime.of(2017, 7, 17, 17, 17, 17)); - dateObject.setLocalTime(LocalTime.of(12, 34, 56)); - dateObject.setOffsetDateTime(OffsetDateTime.of(2019, 2, 4, 20, 57, 11, 0, ZoneOffset.ofHours(1))); - - solverInstance.setBestSolution(dateObject); - - Marshaller marshaller = MarshallerFactory.getMarshaller( - marshallingFormat, - Thread.currentThread().getContextClassLoader() - ); - - String marshalledSolverInstance = marshaller.marshall(solverInstance); - logger.debug("Marshalled SolverInstance ({}): {}", marshallingFormat, marshalledSolverInstance); - assertThat(marshalledSolverInstance) - .as("Dates should be formatted") - .contains( - "2018-08-18", - "2017-07-17T17:17:17", - "12:34:56", - "2019-02-04T20:57:11+01"); - - SolverInstance unmarshalledSolverInstance = marshaller.unmarshall(marshalledSolverInstance, SolverInstance.class); - DateObjectUnannotated bestSolution = (DateObjectUnannotated) unmarshalledSolverInstance.getBestSolution(); - assertThat(bestSolution.getLocalDate()).isEqualTo(dateObject.getLocalDate()); - assertThat(bestSolution.getLocalDateTime()).isEqualTo(dateObject.getLocalDateTime()); - assertThat(bestSolution.getLocalTime()).isEqualTo(dateObject.getLocalTime()); - assertThat(bestSolution.getOffsetDateTime()).isEqualTo(dateObject.getOffsetDateTime()); - } -} diff --git a/kie-server-parent/kie-server-api/src/test/java/org/kie/server/api/model/taskassigning/LocalDateTimeValueTest.java b/kie-server-parent/kie-server-api/src/test/java/org/kie/server/api/model/taskassigning/LocalDateTimeValueTest.java deleted file mode 100644 index 591c4dd3c0..0000000000 --- a/kie-server-parent/kie-server-api/src/test/java/org/kie/server/api/model/taskassigning/LocalDateTimeValueTest.java +++ /dev/null @@ -1,55 +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.api.model.taskassigning; - -import java.time.LocalDateTime; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class LocalDateTimeValueTest { - - private static final LocalDateTime LOCAL_DATE_TIME = LocalDateTime.now(); - - @Test - public void getValue() { - LocalDateTimeValue value = new LocalDateTimeValue(); - value.setValue(LOCAL_DATE_TIME); - assertEquals(LOCAL_DATE_TIME, value.getValue()); - } - - @Test - public void from() { - LocalDateTimeValue value = LocalDateTimeValue.from(LOCAL_DATE_TIME); - assertEquals(LOCAL_DATE_TIME, value.getValue()); - } - - @Test - public void equals() { - LocalDateTimeValue value1 = LocalDateTimeValue.from(LOCAL_DATE_TIME); - LocalDateTimeValue value2 = LocalDateTimeValue.from(LOCAL_DATE_TIME); - assertEquals(value1, value2); - } - - @Test - public void hashCodeTest() { - LocalDateTimeValue value1 = LocalDateTimeValue.from(LOCAL_DATE_TIME); - LocalDateTimeValue value2 = LocalDateTimeValue.from(LOCAL_DATE_TIME); - assertEquals(value1.hashCode(), value2.hashCode(), 0); - } -} diff --git a/kie-server-parent/kie-server-api/src/test/java/org/kie/server/api/model/taskassigning/util/StatusConverterTest.java b/kie-server-parent/kie-server-api/src/test/java/org/kie/server/api/model/taskassigning/util/StatusConverterTest.java deleted file mode 100644 index c11d9e1aea..0000000000 --- a/kie-server-parent/kie-server-api/src/test/java/org/kie/server/api/model/taskassigning/util/StatusConverterTest.java +++ /dev/null @@ -1,56 +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.api.model.taskassigning.util; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.junit.Test; -import org.kie.api.task.model.Status; - -import static org.junit.Assert.assertEquals; - -public class StatusConverterTest { - - @Test - public void convertFromString() { - for (Status status : Status.values()) { - assertEquals(status, StatusConverter.convertFromString(status.name())); - } - } - - @Test - public void convertToString() { - for (Status status : Status.values()) { - assertEquals(status.name(), StatusConverter.convertToString(status)); - } - } - - @Test - public void convertToStringListEllipsis() { - List result = Stream.of(Status.values()).map(Status::name).collect(Collectors.toList()); - assertEquals(result, StatusConverter.convertToStringList(Status.values())); - } - - @Test - public void convertToStringList() { - List result = Stream.of(Status.values()).map(Status::name).collect(Collectors.toList()); - assertEquals(result, StatusConverter.convertToStringList(Arrays.asList(Status.values()))); - } -} diff --git a/kie-server-parent/kie-server-controller-plugin/README.md b/kie-server-parent/kie-server-controller-plugin/README.md index 88105907b1..5d97378b5f 100755 --- a/kie-server-parent/kie-server-controller-plugin/README.md +++ b/kie-server-parent/kie-server-controller-plugin/README.md @@ -140,7 +140,7 @@ In the former example we can see that: Use this goal to define a new server template. Parameter __templateId__ is mandatory. If not specified template name will be the same value of template id. -By default template capabilities are all possible capabilities: "RULE", "PROCESS", "PLANNING". +By default template capabilities are all possible capabilities: "RULE", "PROCESS". You can also define a list of templates you want to create at the same time. Goal does not require project. @@ -148,7 +148,7 @@ Goal does not require project. | ------------------ |:-----------------------------:|:---------:|:----------------------------:|:---------------:| | templateId | null | true | kie-ctrl.template-id | String | | templateName | ${templateId} | false | kie-ctrl.template-name | String | -| capabilities | "RULE", "PROCESS", "PLANNING" | false | kie-ctrl.capabilities | List | +| capabilities | "RULE", "PROCESS" | false | kie-ctrl.capabilities | List | | containers | null | false | kie-ctrl.containers | List | Container nested properties are: diff --git a/kie-server-parent/kie-server-controller-plugin/src/main/java/org/kie/server/controller/plugin/CreateTemplateMojo.java b/kie-server-parent/kie-server-controller-plugin/src/main/java/org/kie/server/controller/plugin/CreateTemplateMojo.java index b27ceea137..c36c972837 100644 --- a/kie-server-parent/kie-server-controller-plugin/src/main/java/org/kie/server/controller/plugin/CreateTemplateMojo.java +++ b/kie-server-parent/kie-server-controller-plugin/src/main/java/org/kie/server/controller/plugin/CreateTemplateMojo.java @@ -45,7 +45,7 @@ @Mojo( name = "create-template", defaultPhase = LifecyclePhase.DEPLOY, threadSafe = true, requiresProject = false) public class CreateTemplateMojo extends KieControllerMojo { - public final static String[] TEMPLATE_CAPABILITIES = { "RULE", "PROCESS", "PLANNING" }; + public final static String[] TEMPLATE_CAPABILITIES = { "RULE", "PROCESS" }; @Parameter(property = "kie-ctrl.template-id", required = true) private String templateId; @@ -54,7 +54,7 @@ public class CreateTemplateMojo extends KieControllerMojo { private String templateName; @Parameter(property = "kie-ctrl.capabilities") - @NotDuplicateValidStrings(admittedValues = { "RULE", "PROCESS", "PLANNING" }, message = "Capabilities not valid") + @NotDuplicateValidStrings(admittedValues = { "RULE", "PROCESS" }, message = "Capabilities not valid") private List capabilities; @Parameter(property = "kie-ctrl.containers") diff --git a/kie-server-parent/kie-server-controller/kie-server-controller-api/src/build/revapi-config.json b/kie-server-parent/kie-server-controller/kie-server-controller-api/src/build/revapi-config.json deleted file mode 100644 index 06d5a1a4fa..0000000000 --- a/kie-server-parent/kie-server-controller/kie-server-controller-api/src/build/revapi-config.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "filters": { - "revapi": { - "java": { - "filter": { - "_comment": "We don't want to check transitive classes, e.g. from kie-server-api, since we already check them in their own module.", - "packages": { - "regex": true, - "include": [ - "org\\.kie\\.server\\.controller\\.api.*" - ] - } - } - } - } - }, - "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-controller/kie-server-controller-api/src/main/java/org/kie/server/controller/api/model/spec/Capability.java b/kie-server-parent/kie-server-controller/kie-server-controller-api/src/main/java/org/kie/server/controller/api/model/spec/Capability.java index 521fd81d1a..565d28642d 100644 --- a/kie-server-parent/kie-server-controller/kie-server-controller-api/src/main/java/org/kie/server/controller/api/model/spec/Capability.java +++ b/kie-server-parent/kie-server-controller/kie-server-controller-api/src/main/java/org/kie/server/controller/api/model/spec/Capability.java @@ -17,5 +17,5 @@ public enum Capability { - PROCESS, RULE, PLANNING + PROCESS, RULE } diff --git a/kie-server-parent/kie-server-controller/kie-server-controller-impl/src/main/java/org/kie/server/controller/impl/KieServerControllerImpl.java b/kie-server-parent/kie-server-controller/kie-server-controller-impl/src/main/java/org/kie/server/controller/impl/KieServerControllerImpl.java index 9b8c51d896..e0a4275510 100644 --- a/kie-server-parent/kie-server-controller/kie-server-controller-impl/src/main/java/org/kie/server/controller/impl/KieServerControllerImpl.java +++ b/kie-server-parent/kie-server-controller/kie-server-controller-impl/src/main/java/org/kie/server/controller/impl/KieServerControllerImpl.java @@ -416,9 +416,6 @@ private static String getCompatibleServerTemplateCapability(final String serverI if (Objects.equals(KieServerConstants.CAPABILITY_BPM, serverInstanceCapability)) { return Capability.PROCESS.toString(); } - if (Objects.equals(KieServerConstants.CAPABILITY_BRP, serverInstanceCapability)) { - return Capability.PLANNING.toString(); - } return null; } diff --git a/kie-server-parent/kie-server-controller/kie-server-controller-impl/src/test/java/org/kie/server/controller/impl/KieServerControllerImplTest.java b/kie-server-parent/kie-server-controller/kie-server-controller-impl/src/test/java/org/kie/server/controller/impl/KieServerControllerImplTest.java index 14d96ce656..f06bd57f45 100644 --- a/kie-server-parent/kie-server-controller/kie-server-controller-impl/src/test/java/org/kie/server/controller/impl/KieServerControllerImplTest.java +++ b/kie-server-parent/kie-server-controller/kie-server-controller-impl/src/test/java/org/kie/server/controller/impl/KieServerControllerImplTest.java @@ -49,9 +49,9 @@ public void cleanup() { @Test public void testConnectWithAllCapabilities() { - storeDefaultServerTemplate(Capability.RULE, Capability.PROCESS, Capability.PLANNING); + storeDefaultServerTemplate(Capability.RULE, Capability.PROCESS); - KieServerInfo kieServerInfo = createDefaultKieServerInfo(KieServerConstants.CAPABILITY_BRM, KieServerConstants.CAPABILITY_BPM, KieServerConstants.CAPABILITY_BRP); + KieServerInfo kieServerInfo = createDefaultKieServerInfo(KieServerConstants.CAPABILITY_BRM, KieServerConstants.CAPABILITY_BPM); KieServerSetup kieServerSetup = controller.connect(kieServerInfo); assertTrue(kieServerSetup.hasNoErrors()); @@ -61,9 +61,9 @@ public void testConnectWithAllCapabilities() { @Test public void testConnectServerTemplateMissingProcessCapability() { - storeDefaultServerTemplate(Capability.RULE, Capability.PLANNING); + storeDefaultServerTemplate(Capability.RULE); - KieServerInfo kieServerInfo = createDefaultKieServerInfo(KieServerConstants.CAPABILITY_BRM, KieServerConstants.CAPABILITY_BPM, KieServerConstants.CAPABILITY_BRP); + KieServerInfo kieServerInfo = createDefaultKieServerInfo(KieServerConstants.CAPABILITY_BRM, KieServerConstants.CAPABILITY_BPM); KieServerSetup kieServerSetup = controller.connect(kieServerInfo); assertTrue(kieServerSetup.hasNoErrors()); @@ -73,15 +73,15 @@ public void testConnectServerTemplateMissingProcessCapability() { @Test public void testConnectKieServerMissingProcessCapability() { - storeDefaultServerTemplate(Capability.RULE, Capability.PROCESS, Capability.PLANNING); + storeDefaultServerTemplate(Capability.RULE, Capability.PROCESS); - KieServerInfo kieServerInfo = createDefaultKieServerInfo(KieServerConstants.CAPABILITY_BRM, KieServerConstants.CAPABILITY_BRP); + KieServerInfo kieServerInfo = createDefaultKieServerInfo(KieServerConstants.CAPABILITY_BRM); KieServerSetup kieServerSetup = controller.connect(kieServerInfo); assertFalse(kieServerSetup.hasNoErrors()); assertEquals(1, kieServerSetup.getMessages().size()); assertEquals(Severity.ERROR, kieServerSetup.getMessages().iterator().next().getSeverity()); - assertEquals("Expected capabilities were [RULE, PROCESS, PLANNING]", kieServerSetup.getMessages().iterator().next().getMessages().iterator().next()); + assertEquals("Expected capabilities were [RULE, PROCESS]", kieServerSetup.getMessages().iterator().next().getMessages().iterator().next()); assertFalse(controller.getTemplateStorage().load(DEFAULT_KIE_SERVER_ID).hasServerInstance(DEFAULT_KIE_SERVER_LOCATION)); } diff --git a/kie-server-parent/kie-server-controller/kie-server-controller-openshift/src/main/java/org/kie/server/controller/openshift/storage/ServerTemplateConverter.java b/kie-server-parent/kie-server-controller/kie-server-controller-openshift/src/main/java/org/kie/server/controller/openshift/storage/ServerTemplateConverter.java index b9b8835616..76cde070ce 100644 --- a/kie-server-parent/kie-server-controller/kie-server-controller-openshift/src/main/java/org/kie/server/controller/openshift/storage/ServerTemplateConverter.java +++ b/kie-server-parent/kie-server-controller/kie-server-controller-openshift/src/main/java/org/kie/server/controller/openshift/storage/ServerTemplateConverter.java @@ -46,7 +46,6 @@ import static org.kie.server.api.KieServerConstants.CAPABILITY_BPM; import static org.kie.server.api.KieServerConstants.KIE_DROOLS_SERVER_EXT_DISABLED; import static org.kie.server.api.KieServerConstants.KIE_JBPM_SERVER_EXT_DISABLED; -import static org.kie.server.api.KieServerConstants.KIE_OPTAPLANNER_SERVER_EXT_DISABLED; import static org.kie.server.api.KieServerConstants.KIE_SERVER_ID; import static org.kie.server.api.KieServerConstants.KIE_SERVER_LOCATION; import static org.kie.server.api.KieServerConstants.KIE_SERVER_MODE; @@ -130,9 +129,6 @@ public static ServerTemplate fromState(KieServerState state) { if (kcfg.getConfigItem(KIE_DROOLS_SERVER_EXT_DISABLED) != null) { capabilities.remove(Capability.RULE.name()); } - if (kcfg.getConfigItem(KIE_OPTAPLANNER_SERVER_EXT_DISABLED) != null) { - capabilities.remove(Capability.PLANNING.name()); - } template.setCapabilities(capabilities); //https://issues.jboss.org/projects/RHPAM/issues/RHPAM-1975 @@ -172,12 +168,6 @@ public static KieServerState toState(ServerTemplate template) { new KieServerConfigItem(KIE_DROOLS_SERVER_EXT_DISABLED, "true", String.class.getName())); break; - case PLANNING: - if (!capabilities.contains(cap.name())) - config.addConfigItem( - new KieServerConfigItem(KIE_OPTAPLANNER_SERVER_EXT_DISABLED, - "true", String.class.getName())); - break; default: break; diff --git a/kie-server-parent/kie-server-controller/kie-server-controller-openshift/src/test/java/org/kie/server/controller/openshift/storage/ServerTemplateConverterTest.java b/kie-server-parent/kie-server-controller/kie-server-controller-openshift/src/test/java/org/kie/server/controller/openshift/storage/ServerTemplateConverterTest.java index 0066c4b8f2..0da88c2081 100644 --- a/kie-server-parent/kie-server-controller/kie-server-controller-openshift/src/test/java/org/kie/server/controller/openshift/storage/ServerTemplateConverterTest.java +++ b/kie-server-parent/kie-server-controller/kie-server-controller-openshift/src/test/java/org/kie/server/controller/openshift/storage/ServerTemplateConverterTest.java @@ -297,10 +297,6 @@ private static boolean isMatching(ServerTemplate template, KieServerState state) fail("Server Template can not specify disabled capability: [" + Capability.RULE + "]."); } - if (kcfg.getConfigItem(KieServerConstants.KIE_OPTAPLANNER_SERVER_EXT_DISABLED) != null && template.getCapabilities().contains(Capability.PLANNING.name())) { - fail("Server Template can not specify disabled capability: [" + Capability.PLANNING + "]."); - } - } catch (Exception e) { e.printStackTrace(); fail(); diff --git a/kie-server-parent/kie-server-controller/kie-server-controller-rest/pom.xml b/kie-server-parent/kie-server-controller/kie-server-controller-rest/pom.xml index 32c1159a18..854093a73e 100644 --- a/kie-server-parent/kie-server-controller/kie-server-controller-rest/pom.xml +++ b/kie-server-parent/kie-server-controller/kie-server-controller-rest/pom.xml @@ -67,6 +67,10 @@ org.revapi revapi-maven-plugin + + + true + diff --git a/kie-server-parent/kie-server-controller/kie-server-controller-rest/src/build/revapi-config.json b/kie-server-parent/kie-server-controller/kie-server-controller-rest/src/build/revapi-config.json deleted file mode 100644 index c13d243abb..0000000000 --- a/kie-server-parent/kie-server-controller/kie-server-controller-rest/src/build/revapi-config.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "filters": { - "revapi": { - "java": { - "_comment": "Only classes with javax.ws.rs annotations are included since we want to check only REST API.", - "filter": { - "_comment": "We don't want to check transitive classes, e.g. from package org.kie.server.controller.api, since we already check them in their own module.", - "packages": { - "regex": false, - "include": [ - "org.kie.server.controller.rest" - ] - }, - "classes": { - "regex": false, - "exclude": [ - "org.kie.server.controller.rest.ControllerUtils" - ] - } - } - } - } - }, - "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-controller/kie-server-controller-rest/src/main/java/org/kie/server/controller/rest/RestSpecManagementServiceImpl.java b/kie-server-parent/kie-server-controller/kie-server-controller-rest/src/main/java/org/kie/server/controller/rest/RestSpecManagementServiceImpl.java index 5c2990d011..5e3ec6f4fd 100644 --- a/kie-server-parent/kie-server-controller/kie-server-controller-rest/src/main/java/org/kie/server/controller/rest/RestSpecManagementServiceImpl.java +++ b/kie-server-parent/kie-server-controller/kie-server-controller-rest/src/main/java/org/kie/server/controller/rest/RestSpecManagementServiceImpl.java @@ -56,7 +56,7 @@ public class RestSpecManagementServiceImpl { public Response saveContainerSpec(@Context HttpHeaders headers, @ApiParam(name = "serverTemplateId", value = "ID of the KIE Server template associated with the new KIE container", required = true, example = "test-kie-server") @PathParam("serverTemplateId") String serverTemplateId, @ApiParam(name = "containerId", value = "ID of the new KIE container", required = true, example = "evaluation_1.0.0-SNAPSHOT") @PathParam("containerId") String containerId, - @ApiParam(name = "body", value = "A map containing the container-name, relevant release-id (group ID, artifact ID, and version), configuration specifications (rule, process, planning), and other components of the new KIE container", + @ApiParam(name = "body", value = "A map containing the container-name, relevant release-id (group ID, artifact ID, and version), configuration specifications (rule, process), and other components of the new KIE container", required = true, examples = @Example(value = { @ExampleProperty(mediaType = JSON, value = CONTAINER_SPEC_JSON), @@ -373,7 +373,7 @@ public Response deleteServerTemplate(@Context HttpHeaders headers, public Response updateContainerConfig(@Context HttpHeaders headers, @ApiParam(name = "serverTemplateId", value = "ID of the KIE Server template associated with the KIE container", required = true, example = "test-kie-server") @PathParam("serverTemplateId") String serverTemplateId, @ApiParam(name = "containerId", value = "ID of the KIE container to be updated", required = true, example = "evaluation_1.0.0-SNAPSHOT") @PathParam("containerId") String containerSpecId, - @ApiParam(name = "capability", value = "KIE container capability to be applied (RULE, PROCESS, or PLANNING, case sensitive)", required = true, example = "PROCESS") @PathParam("capability") String capabilityStr, + @ApiParam(name = "capability", value = "KIE container capability to be applied (RULE, or PROCESS, case sensitive)", required = true, example = "PROCESS") @PathParam("capability") String capabilityStr, @ApiParam(name = "body", value = "An org.kie.server.controller.api.model.spec.Config map containing the configurations for the specified KIE container capability, such as runtimeStrategy, kbase, ksession, and mergeMode for process configuration", required = true, examples = @Example(value = { @ExampleProperty(mediaType = JSON, value = CONTAINER_CONFIG_JSON), diff --git a/kie-server-parent/kie-server-controller/kie-server-controller-rest/src/main/java/org/kie/server/controller/rest/docs/ParameterSamples.java b/kie-server-parent/kie-server-controller/kie-server-controller-rest/src/main/java/org/kie/server/controller/rest/docs/ParameterSamples.java index fd564cdde8..31ad1498d3 100644 --- a/kie-server-parent/kie-server-controller/kie-server-controller-rest/src/main/java/org/kie/server/controller/rest/docs/ParameterSamples.java +++ b/kie-server-parent/kie-server-controller/kie-server-controller-rest/src/main/java/org/kie/server/controller/rest/docs/ParameterSamples.java @@ -100,7 +100,7 @@ public class ParameterSamples { " \"server-template-id\" : \"test-kie-server\",\n" + " \"server-url\" : \"http://localhost:8080/kie-server/services/rest/server\"\n" + " } ],\n" + - " \"capabilities\" : [ \"RULE\", \"PROCESS\", \"PLANNING\" ]\n" + + " \"capabilities\" : [ \"RULE\", \"PROCESS\" ]\n" + " } ]\n" + "}"; @@ -144,7 +144,7 @@ public class ParameterSamples { " \"server-template-id\" : \"test-kie-server\",\n" + " \"server-url\" : \"http://localhost:8080/kie-server/services/rest/server\"\n" + " } ],\n" + - " \"capabilities\" : [ \"RULE\", \"PROCESS\", \"PLANNING\" ]\n" + + " \"capabilities\" : [ \"RULE\", \"PROCESS\" ]\n" + "}"; public static final String SERVER_INSTANCE_GET_JSON = "{\n" + @@ -199,8 +199,7 @@ public class ParameterSamples { " \"server-name\" : \"sample-server\",\n" + " \"capabilities\" : [\n" + " \"RULE\"," + - " \"PROCESS\"," + - " \"PLANNING\"" + + " \"PROCESS\"" + " ],\n" + " \"container-specs\" : [ ],\n" + " \"server-config\" : { }\n" + @@ -320,7 +319,6 @@ public class ParameterSamples { " \n" + " RULE\n" + " PROCESS\n" + - " PLANNING\n" + " \n" + ""; @@ -404,7 +402,6 @@ public class ParameterSamples { " \n" + " RULE\n" + " PROCESS\n" + - " PLANNING\n" + ""; public static final String CONTAINER_CONFIG_XML = "\n" + @@ -420,7 +417,6 @@ public class ParameterSamples { " \n" + " RULE\n" + " PROCESS\n" + - " PLANNING\n" + ""; public static final String CONTAINER_SPEC_GET_XML = "\n" + diff --git a/kie-server-parent/kie-server-remote/kie-server-client/pom.xml b/kie-server-parent/kie-server-remote/kie-server-client/pom.xml index 4a715db999..d615c20a8b 100644 --- a/kie-server-parent/kie-server-remote/kie-server-client/pom.xml +++ b/kie-server-parent/kie-server-remote/kie-server-client/pom.xml @@ -31,10 +31,6 @@ org.kie kie-internal - - org.optaplanner - optaplanner-core - org.drools drools-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-jbpm kie-server-rest-drools kie-server-rest-jbpm-ui - kie-server-rest-optaplanner kie-server-rest-case-mgmt kie-server-rest-dmn kie-server-rest-swagger kie-server-rest-prometheus kie-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.server kie-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: - *

- * User1 <-> Task1 <-> Task2 <-> sourceTask <-> Task4 <-> Task5 -> null - *

- * 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 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 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. - *

- * test/resources/data/unsolved/24tasks-8users.xml - * test/resources/data/unsolved/50tasks-5users.xml - * test/resources/data/unsolved/100tasks-5users.xml - * test/resources/data/unsolved/500tasks-20users.xml - */ -public class TaskAssigningGenerator extends LoggingMain { - - private static final int TASK_MAX_PRIORITY = 10; - private static final int TASK_POTENTIAL_OWNERS_USER_SIZE_MINIMUM = 0; - private static final int TASK_POTENTIAL_OWNERS_USER_SIZE_MAXIMUM = 2; - private static final int TASK_POTENTIAL_OWNERS_GROUP_SIZE_MINIMUM = 0; - private static final int TASK_POTENTIAL_OWNERS_GROUP_SIZE_MAXIMUM = 3; - - private static final int USER_GROUP_SIZE = 10; - private static final int USER_GROUP_SET_SIZE_MINIMUM = 0; - private static final int USER_GROUP_SET_MAXIMUM = 3; - - public static void main(String[] args) { - TaskAssigningGenerator generator = new TaskAssigningGenerator(); - generator.writeTaskAssigningSolution(24, 8); - generator.writeTaskAssigningSolution(50, 5); - generator.writeTaskAssigningSolution(100, 5); - generator.writeTaskAssigningSolution(500, 20); - } - - private static final StringDataGenerator groupNameGenerator = new StringDataGenerator() - .addPart(true, 0, - "HR", - "IT", - "PM", - "Sales", - "Legal", - "Marketing", - "Manager", - "Developer", - "Accounting", - "Support"); - - private static final StringDataGenerator userNameGenerator = StringDataGenerator.buildFullNames(); - - private final SolutionFileIO solutionFileIO; - private final File outputDir; - - private Random random = new Random(37); - - private TaskAssigningGenerator() { - System.setProperty(DATA_DIR_SYSTEM_PROPERTY, "kie-server-services-task-assigning-core/src/test/resources"); - solutionFileIO = new XStreamSolutionFileIO<>(TaskAssigningSolution.class); - outputDir = new File(CommonApp.determineDataDir("data"), "unsolved"); - } - - private void writeTaskAssigningSolution(int taskListSize, int userListSize) { - String fileName = determineFileName(taskListSize, userListSize); - File outputFile = new File(outputDir, fileName + ".xml"); - TaskAssigningSolution solution = createTaskAssigningSolution(fileName, taskListSize, USER_GROUP_SIZE, userListSize); - solutionFileIO.write(solution, outputFile); - logger.info("Saved: {}", outputFile); - } - - private String determineFileName(int taskListSize, int userListSize) { - return taskListSize + "tasks-" + userListSize + "users"; - } - - private TaskAssigningSolution createTaskAssigningSolution(String fileName, int taskListSize, int groupListSize, int userListSize) { - TaskAssigningSolution solution = new TaskAssigningSolution(); - solution.setId(0L); - - List groupList = createGroupList(groupListSize); - createUserList(solution, userListSize, groupList); - createTaskList(solution, taskListSize, groupList); - - BigInteger totalFacts = AbstractSolutionImporter.factorial(taskListSize + userListSize - 1); - BigInteger fixedFacts = AbstractSolutionImporter.factorial(userListSize - 1); - BigInteger possibleSolutionSize = (totalFacts == null || fixedFacts == null) ? null : totalFacts.divide(fixedFacts); - logger.info("TaskAssigningSolution {} has {} tasks, {} groups, and {} users with a search space of {}.", - fileName, - taskListSize, - groupListSize, - userListSize, - AbstractSolutionImporter.getFlooredPossibleSolutionSize(possibleSolutionSize)); - return solution; - } - - private List createGroupList(int groupListSize) { - List groupList = new ArrayList<>(groupListSize); - groupNameGenerator.predictMaximumSizeAndReset(groupListSize); - for (int i = 0; i < groupListSize; i++) { - Group group = new Group(); - group.setId((long) i); - String groupName = groupNameGenerator.generateNextValue(); - group.setEntityId(groupName); - logger.trace("Created Group with entityId: ({}).", groupName); - groupList.add(group); - } - return groupList; - } - - private void createUserList(TaskAssigningSolution solution, int userListSize, List groupList) { - List userList = new ArrayList<>(userListSize); - userNameGenerator.predictMaximumSizeAndReset(userListSize); - for (int i = 0; i < userListSize; i++) { - User user = new User(); - user.setId((long) i); - String userName = userNameGenerator.generateNextValue(); - user.setEntityId(userName); - int groupListSize = USER_GROUP_SET_SIZE_MINIMUM + random.nextInt(USER_GROUP_SET_MAXIMUM - USER_GROUP_SET_SIZE_MINIMUM); - if (groupListSize > groupList.size()) { - groupListSize = groupList.size(); - } - Set groupSet = new LinkedHashSet<>(groupListSize); - int groupListIndex = random.nextInt(groupList.size()); - for (int j = 0; j < groupListSize; j++) { - groupSet.add(groupList.get(groupListIndex)); - groupListIndex = (groupListIndex + 1) % groupList.size(); - } - user.setGroups(groupSet); - logger.trace("Created user with entityId ({}).", userName); - userList.add(user); - } - solution.setUserList(userList); - } - - private void createTaskList(TaskAssigningSolution solution, int taskListSize, List groupList) { - List userList = solution.getUserList(); - List taskList = new ArrayList<>(taskListSize); - - for (int i = 0; i < taskListSize; i++) { - Task task = new Task(); - task.setId((long) i); - task.setName("Task_" + task.getId()); - task.setPriority(random.nextInt(TASK_MAX_PRIORITY + 1)); - - Set potentialOwners = new LinkedHashSet<>(); - - int groupListIndex = random.nextInt(groupList.size()); - int groupPotentialOwnersSize = TASK_POTENTIAL_OWNERS_GROUP_SIZE_MINIMUM + random.nextInt(TASK_POTENTIAL_OWNERS_GROUP_SIZE_MAXIMUM - TASK_POTENTIAL_OWNERS_GROUP_SIZE_MINIMUM); - if (groupPotentialOwnersSize > groupList.size()) { - groupPotentialOwnersSize = groupList.size(); - } - for (int j = 0; j < groupPotentialOwnersSize; j++) { - potentialOwners.add(groupList.get(groupListIndex)); - groupListIndex = (groupListIndex + 1) % groupList.size(); - } - - int userListIndex = random.nextInt(userList.size()); - int userPotentialOwnersSize = TASK_POTENTIAL_OWNERS_USER_SIZE_MINIMUM + random.nextInt(TASK_POTENTIAL_OWNERS_USER_SIZE_MAXIMUM - TASK_POTENTIAL_OWNERS_USER_SIZE_MINIMUM); - if (userPotentialOwnersSize > userList.size()) { - userPotentialOwnersSize = userList.size(); - } - for (int j = 0; j < userPotentialOwnersSize; j++) { - potentialOwners.add(userList.get(userListIndex)); - userListIndex = (userListIndex + 1) % userList.size(); - } - - task.setPotentialOwners(potentialOwners); - taskList.add(task); - } - solution.setTaskList(taskList); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/resources/data/unsolved/100tasks-5users.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/resources/data/unsolved/100tasks-5users.xml deleted file mode 100644 index 2f8e59d925..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/resources/data/unsolved/100tasks-5users.xml +++ /dev/null @@ -1,1335 +0,0 @@ - - 0 - - - 0 - true - Amy - - - 3 - Sales - - - 4 - Legal - - - - - - 1 - true - Beth - - - - - 2 - true - Chad - - - 6 - Manager - - - 7 - Developer - - - - - - 3 - true - Dan - - - - - - - - 4 - true - Elsa - - - 0 - HR - - - 1 - IT - - - - - - - - 0 - 0 - Task_0 - 6 - false - - - - - 1 - - - 1 - 0 - Task_1 - 9 - false - - - 8 - Accounting - - - 9 - Support - - - - - 1 - - - 2 - 0 - Task_2 - 3 - false - - - - - 1 - - - 3 - 0 - Task_3 - 5 - false - - - - - - - 1 - - - 4 - 0 - Task_4 - 0 - false - - - 1 - - - 5 - 0 - Task_5 - 6 - false - - - - - - 1 - - - 6 - 0 - Task_6 - 8 - false - - - - - - 1 - - - 7 - 0 - Task_7 - 7 - false - - - - - 1 - - - 8 - 0 - Task_8 - 7 - false - - - - - 1 - - - 9 - 0 - Task_9 - 1 - false - - - - - 1 - - - 10 - 0 - Task_10 - 5 - false - - - - - - - 1 - - - 11 - 0 - Task_11 - 2 - false - - - - 2 - PM - - - - 1 - - - 12 - 0 - Task_12 - 3 - false - - - - - 1 - - - 13 - 0 - Task_13 - 5 - false - - - 1 - - - 14 - 0 - Task_14 - 4 - false - - - - - 1 - - - 15 - 0 - Task_15 - 10 - false - - - - - - 1 - - - 16 - 0 - Task_16 - 1 - false - - - 1 - - - 17 - 0 - Task_17 - 0 - false - - - - - - - 1 - - - 18 - 0 - Task_18 - 9 - false - - - - - - 1 - - - 19 - 0 - Task_19 - 2 - false - - - - - - - 1 - - - 20 - 0 - Task_20 - 1 - false - - - - - 1 - - - 21 - 0 - Task_21 - 5 - false - - - 5 - Marketing - - - - - 1 - - - 22 - 0 - Task_22 - 3 - false - - - - - 1 - - - 23 - 0 - Task_23 - 6 - false - - - - - - 1 - - - 24 - 0 - Task_24 - 5 - false - - - - - 1 - - - 25 - 0 - Task_25 - 5 - false - - - - - - 1 - - - 26 - 0 - Task_26 - 6 - false - - - - - - 1 - - - 27 - 0 - Task_27 - 8 - false - - - - - - - 1 - - - 28 - 0 - Task_28 - 3 - false - - - 1 - - - 29 - 0 - Task_29 - 9 - false - - - - - 1 - - - 30 - 0 - Task_30 - 10 - false - - - - - - - 1 - - - 31 - 0 - Task_31 - 3 - false - - - - - 1 - - - 32 - 0 - Task_32 - 10 - false - - - - - - 1 - - - 33 - 0 - Task_33 - 4 - false - - - - - - 1 - - - 34 - 0 - Task_34 - 7 - false - - - - - - 1 - - - 35 - 0 - Task_35 - 0 - false - - - - - 1 - - - 36 - 0 - Task_36 - 8 - false - - - - - 1 - - - 37 - 0 - Task_37 - 6 - false - - - - - 1 - - - 38 - 0 - Task_38 - 0 - false - - - - - 1 - - - 39 - 0 - Task_39 - 10 - false - - - 1 - - - 40 - 0 - Task_40 - 3 - false - - - - - - - 1 - - - 41 - 0 - Task_41 - 7 - false - - - 1 - - - 42 - 0 - Task_42 - 3 - false - - - - - - - 1 - - - 43 - 0 - Task_43 - 3 - false - - - - - 1 - - - 44 - 0 - Task_44 - 6 - false - - - - - 1 - - - 45 - 0 - Task_45 - 8 - false - - - - - - - 1 - - - 46 - 0 - Task_46 - 4 - false - - - 1 - - - 47 - 0 - Task_47 - 2 - false - - - - - - - 1 - - - 48 - 0 - Task_48 - 0 - false - - - - - - 1 - - - 49 - 0 - Task_49 - 6 - false - - - - - - 1 - - - 50 - 0 - Task_50 - 1 - false - - - - - - 1 - - - 51 - 0 - Task_51 - 10 - false - - - - - 1 - - - 52 - 0 - Task_52 - 2 - false - - - - - - 1 - - - 53 - 0 - Task_53 - 6 - false - - - 1 - - - 54 - 0 - Task_54 - 9 - false - - - - - - - 1 - - - 55 - 0 - Task_55 - 3 - false - - - - - - 1 - - - 56 - 0 - Task_56 - 2 - false - - - 1 - - - 57 - 0 - Task_57 - 8 - false - - - - - - 1 - - - 58 - 0 - Task_58 - 4 - false - - - - - - - 1 - - - 59 - 0 - Task_59 - 3 - false - - - - - 1 - - - 60 - 0 - Task_60 - 6 - false - - - - - 1 - - - 61 - 0 - Task_61 - 3 - false - - - - - - - 1 - - - 62 - 0 - Task_62 - 1 - false - - - - - 1 - - - 63 - 0 - Task_63 - 9 - false - - - - - 1 - - - 64 - 0 - Task_64 - 4 - false - - - 1 - - - 65 - 0 - Task_65 - 0 - false - - - - - - 1 - - - 66 - 0 - Task_66 - 4 - false - - - - - - - 1 - - - 67 - 0 - Task_67 - 4 - false - - - - - 1 - - - 68 - 0 - Task_68 - 5 - false - - - - - 1 - - - 69 - 0 - Task_69 - 4 - false - - - - - - 1 - - - 70 - 0 - Task_70 - 0 - false - - - - - - - 1 - - - 71 - 0 - Task_71 - 1 - false - - - - - - - 1 - - - 72 - 0 - Task_72 - 2 - false - - - - - - - 1 - - - 73 - 0 - Task_73 - 10 - false - - - - - - 1 - - - 74 - 0 - Task_74 - 3 - false - - - - - - 1 - - - 75 - 0 - Task_75 - 7 - false - - - 1 - - - 76 - 0 - Task_76 - 3 - false - - - - - - - 1 - - - 77 - 0 - Task_77 - 0 - false - - - - - 1 - - - 78 - 0 - Task_78 - 6 - false - - - - - 1 - - - 79 - 0 - Task_79 - 8 - false - - - - - - 1 - - - 80 - 0 - Task_80 - 8 - false - - - - - 1 - - - 81 - 0 - Task_81 - 1 - false - - - - - 1 - - - 82 - 0 - Task_82 - 9 - false - - - - - - 1 - - - 83 - 0 - Task_83 - 4 - false - - - - - - - 1 - - - 84 - 0 - Task_84 - 10 - false - - - - - 1 - - - 85 - 0 - Task_85 - 2 - false - - - - - - - 1 - - - 86 - 0 - Task_86 - 5 - false - - - - - 1 - - - 87 - 0 - Task_87 - 4 - false - - - - - - 1 - - - 88 - 0 - Task_88 - 2 - false - - - 1 - - - 89 - 0 - Task_89 - 5 - false - - - - - - - 1 - - - 90 - 0 - Task_90 - 0 - false - - - - - - 1 - - - 91 - 0 - Task_91 - 7 - false - - - - - - - 1 - - - 92 - 0 - Task_92 - 8 - false - - - - - - 1 - - - 93 - 0 - Task_93 - 2 - false - - - - - - 1 - - - 94 - 0 - Task_94 - 4 - false - - - - - 1 - - - 95 - 0 - Task_95 - 2 - false - - - - - 1 - - - 96 - 0 - Task_96 - 4 - false - - - - - - 1 - - - 97 - 0 - Task_97 - 5 - false - - - 1 - - - 98 - 0 - Task_98 - 9 - false - - - - - - - 1 - - - 99 - 0 - Task_99 - 3 - false - - - - - 1 - - - \ 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/resources/data/unsolved/24tasks-8users.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/resources/data/unsolved/24tasks-8users.xml deleted file mode 100644 index b6ea1de3f3..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/resources/data/unsolved/24tasks-8users.xml +++ /dev/null @@ -1,407 +0,0 @@ - - 0 - - - 0 - true - Amy - - - 3 - Sales - - - 4 - Legal - - - - - - 1 - true - Beth - - - - - 2 - true - Chad - - - 6 - Manager - - - 7 - Developer - - - - - - 3 - true - Dan - - - - - - - - 4 - true - Elsa - - - 0 - HR - - - 1 - IT - - - - - - 5 - true - Flo - - - - - - - - 6 - true - Gus - - - - - - - 7 - true - Hugo - - - - - - - - - 0 - 0 - Task_0 - 10 - false - - - - - 1 - - - 1 - 0 - Task_1 - 1 - false - - - 1 - - - 2 - 0 - Task_2 - 8 - false - - - - - 1 - - - 3 - 0 - Task_3 - 4 - false - - - - - 1 - - - 4 - 0 - Task_4 - 4 - false - - - - 5 - Marketing - - - - 1 - - - 5 - 0 - Task_5 - 4 - false - - - - - - 1 - - - 6 - 0 - Task_6 - 1 - false - - - - - 1 - - - 7 - 0 - Task_7 - 2 - false - - - 9 - Support - - - - 1 - - - 8 - 0 - Task_8 - 2 - false - - - - - - 1 - - - 9 - 0 - Task_9 - 6 - false - - - - - - 1 - - - 10 - 0 - Task_10 - 4 - false - - - - - - 1 - - - 11 - 0 - Task_11 - 1 - false - - - 2 - PM - - - - - 1 - - - 12 - 0 - Task_12 - 4 - false - - - 1 - - - 13 - 0 - Task_13 - 0 - false - - - - - 1 - - - 14 - 0 - Task_14 - 4 - false - - - - - - 1 - - - 15 - 0 - Task_15 - 4 - false - - - - - - 1 - - - 16 - 0 - Task_16 - 5 - false - - - - - 1 - - - 17 - 0 - Task_17 - 10 - false - - - - 8 - Accounting - - - - 1 - - - 18 - 0 - Task_18 - 5 - false - - - - - 1 - - - 19 - 0 - Task_19 - 1 - false - - - 1 - - - 20 - 0 - Task_20 - 9 - false - - - - - 1 - - - 21 - 0 - Task_21 - 10 - false - - - - - - 1 - - - 22 - 0 - Task_22 - 8 - false - - - - - - - 1 - - - 23 - 0 - Task_23 - 7 - false - - - - - - 1 - - - \ 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/resources/data/unsolved/500tasks-20users.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/resources/data/unsolved/500tasks-20users.xml deleted file mode 100644 index 8cc02f0899..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/resources/data/unsolved/500tasks-20users.xml +++ /dev/null @@ -1,6417 +0,0 @@ - - 0 - - - 0 - true - Amy Cole - - - 3 - Sales - - - 4 - Legal - - - - - - 1 - true - Beth Fox - - - - - 2 - true - Chad Green - - - 6 - Manager - - - 7 - Developer - - - - - - 3 - true - Dan Jones - - - - - - - - 4 - true - Elsa King - - - 0 - HR - - - 1 - IT - - - - - - 5 - true - Flo Li - - - - - - - - 6 - true - Gus Poe - - - - - - - 7 - true - Hugo Rye - - - - - - - 8 - true - Ivy Smith - - - - 2 - PM - - - - - - 9 - true - Jay Watt - - - - - 10 - true - Amy Fox - - - - - - - 11 - true - Beth Green - - - - - 12 - true - Chad Jones - - - - 5 - Marketing - - - - - - 13 - true - Dan King - - - - - - - - 14 - true - Elsa Li - - - - - 15 - true - Flo Poe - - - - - 16 - true - Gus Rye - - - - - 17 - true - Hugo Smith - - - - - - - - 18 - true - Ivy Watt - - - - - 19 - true - Jay Cole - - - - - - - - - - 0 - 0 - Task_0 - 8 - false - - - 9 - Support - - - - - 1 - - - 1 - 0 - Task_1 - 7 - false - - - - - 1 - - - 2 - 0 - Task_2 - 7 - false - - - - - 1 - - - 3 - 0 - Task_3 - 1 - false - - - - - 1 - - - 4 - 0 - Task_4 - 5 - false - - - - 8 - Accounting - - - - - 1 - - - 5 - 0 - Task_5 - 2 - false - - - - - - 1 - - - 6 - 0 - Task_6 - 3 - false - - - - - 1 - - - 7 - 0 - Task_7 - 5 - false - - - 1 - - - 8 - 0 - Task_8 - 4 - false - - - - - 1 - - - 9 - 0 - Task_9 - 10 - false - - - - - - 1 - - - 10 - 0 - Task_10 - 1 - false - - - 1 - - - 11 - 0 - Task_11 - 0 - false - - - - - - - 1 - - - 12 - 0 - Task_12 - 9 - false - - - - - - 1 - - - 13 - 0 - Task_13 - 2 - false - - - - - - - 1 - - - 14 - 0 - Task_14 - 1 - false - - - - - 1 - - - 15 - 0 - Task_15 - 5 - false - - - - - - 1 - - - 16 - 0 - Task_16 - 3 - false - - - - - 1 - - - 17 - 0 - Task_17 - 6 - false - - - - - - 1 - - - 18 - 0 - Task_18 - 5 - false - - - - - 1 - - - 19 - 0 - Task_19 - 5 - false - - - - - - 1 - - - 20 - 0 - Task_20 - 6 - false - - - - - - 1 - - - 21 - 0 - Task_21 - 8 - false - - - - - - - 1 - - - 22 - 0 - Task_22 - 3 - false - - - 1 - - - 23 - 0 - Task_23 - 9 - false - - - - - 1 - - - 24 - 0 - Task_24 - 10 - false - - - - - - - 1 - - - 25 - 0 - Task_25 - 3 - false - - - - - 1 - - - 26 - 0 - Task_26 - 10 - false - - - - - - 1 - - - 27 - 0 - Task_27 - 4 - false - - - - - - 1 - - - 28 - 0 - Task_28 - 7 - false - - - - - - 1 - - - 29 - 0 - Task_29 - 0 - false - - - - - 1 - - - 30 - 0 - Task_30 - 8 - false - - - - - 1 - - - 31 - 0 - Task_31 - 6 - false - - - - - 1 - - - 32 - 0 - Task_32 - 0 - false - - - - - 1 - - - 33 - 0 - Task_33 - 10 - false - - - 1 - - - 34 - 0 - Task_34 - 3 - false - - - - - - - 1 - - - 35 - 0 - Task_35 - 7 - false - - - 1 - - - 36 - 0 - Task_36 - 3 - false - - - - - - - 1 - - - 37 - 0 - Task_37 - 3 - false - - - - - 1 - - - 38 - 0 - Task_38 - 6 - false - - - - - 1 - - - 39 - 0 - Task_39 - 8 - false - - - - - - - 1 - - - 40 - 0 - Task_40 - 4 - false - - - 1 - - - 41 - 0 - Task_41 - 2 - false - - - - - - - 1 - - - 42 - 0 - Task_42 - 0 - false - - - - - - 1 - - - 43 - 0 - Task_43 - 6 - false - - - - - - 1 - - - 44 - 0 - Task_44 - 1 - false - - - - - - 1 - - - 45 - 0 - Task_45 - 10 - false - - - - - 1 - - - 46 - 0 - Task_46 - 2 - false - - - - - - 1 - - - 47 - 0 - Task_47 - 6 - false - - - 1 - - - 48 - 0 - Task_48 - 9 - false - - - - - - - 1 - - - 49 - 0 - Task_49 - 3 - false - - - - - - 1 - - - 50 - 0 - Task_50 - 2 - false - - - 1 - - - 51 - 0 - Task_51 - 8 - false - - - - - - 1 - - - 52 - 0 - Task_52 - 4 - false - - - - - - - 1 - - - 53 - 0 - Task_53 - 3 - false - - - - - 1 - - - 54 - 0 - Task_54 - 6 - false - - - - - 1 - - - 55 - 0 - Task_55 - 3 - false - - - - - - - 1 - - - 56 - 0 - Task_56 - 1 - false - - - - - 1 - - - 57 - 0 - Task_57 - 9 - false - - - - - 1 - - - 58 - 0 - Task_58 - 4 - false - - - 1 - - - 59 - 0 - Task_59 - 0 - false - - - - - - 1 - - - 60 - 0 - Task_60 - 4 - false - - - - - - - 1 - - - 61 - 0 - Task_61 - 4 - false - - - - - 1 - - - 62 - 0 - Task_62 - 5 - false - - - - - 1 - - - 63 - 0 - Task_63 - 4 - false - - - - - - 1 - - - 64 - 0 - Task_64 - 0 - false - - - - - - - 1 - - - 65 - 0 - Task_65 - 1 - false - - - - - - - 1 - - - 66 - 0 - Task_66 - 2 - false - - - - - - - 1 - - - 67 - 0 - Task_67 - 10 - false - - - - - - 1 - - - 68 - 0 - Task_68 - 3 - false - - - - - - 1 - - - 69 - 0 - Task_69 - 7 - false - - - 1 - - - 70 - 0 - Task_70 - 3 - false - - - - - - - 1 - - - 71 - 0 - Task_71 - 0 - false - - - - - 1 - - - 72 - 0 - Task_72 - 6 - false - - - - - 1 - - - 73 - 0 - Task_73 - 8 - false - - - - - - 1 - - - 74 - 0 - Task_74 - 8 - false - - - - - 1 - - - 75 - 0 - Task_75 - 1 - false - - - - - 1 - - - 76 - 0 - Task_76 - 9 - false - - - - - - 1 - - - 77 - 0 - Task_77 - 4 - false - - - - - - - 1 - - - 78 - 0 - Task_78 - 10 - false - - - - - 1 - - - 79 - 0 - Task_79 - 2 - false - - - - - - - 1 - - - 80 - 0 - Task_80 - 5 - false - - - - - 1 - - - 81 - 0 - Task_81 - 4 - false - - - - - - 1 - - - 82 - 0 - Task_82 - 2 - false - - - 1 - - - 83 - 0 - Task_83 - 5 - false - - - - - - - 1 - - - 84 - 0 - Task_84 - 0 - false - - - - - - 1 - - - 85 - 0 - Task_85 - 7 - false - - - - - - - 1 - - - 86 - 0 - Task_86 - 8 - false - - - - - - 1 - - - 87 - 0 - Task_87 - 2 - false - - - - - - 1 - - - 88 - 0 - Task_88 - 4 - false - - - - - 1 - - - 89 - 0 - Task_89 - 2 - false - - - - - 1 - - - 90 - 0 - Task_90 - 4 - false - - - - - - 1 - - - 91 - 0 - Task_91 - 5 - false - - - 1 - - - 92 - 0 - Task_92 - 9 - false - - - - - - - 1 - - - 93 - 0 - Task_93 - 3 - false - - - - - 1 - - - 94 - 0 - Task_94 - 7 - false - - - - - - - 1 - - - 95 - 0 - Task_95 - 6 - false - - - 1 - - - 96 - 0 - Task_96 - 3 - false - - - - - - 1 - - - 97 - 0 - Task_97 - 3 - false - - - - - - 1 - - - 98 - 0 - Task_98 - 8 - false - - - - - - 1 - - - 99 - 0 - Task_99 - 2 - false - - - - - - 1 - - - 100 - 0 - Task_100 - 7 - false - - - - - 1 - - - 101 - 0 - Task_101 - 2 - false - - - - - 1 - - - 102 - 0 - Task_102 - 3 - false - - - - - - 1 - - - 103 - 0 - Task_103 - 3 - false - - - - - 1 - - - 104 - 0 - Task_104 - 10 - false - - - - - 1 - - - 105 - 0 - Task_105 - 2 - false - - - - - - 1 - - - 106 - 0 - Task_106 - 4 - false - - - 1 - - - 107 - 0 - Task_107 - 3 - false - - - - - - 1 - - - 108 - 0 - Task_108 - 8 - false - - - - - - 1 - - - 109 - 0 - Task_109 - 3 - false - - - 1 - - - 110 - 0 - Task_110 - 3 - false - - - - - - 1 - - - 111 - 0 - Task_111 - 5 - false - - - - - - 1 - - - 112 - 0 - Task_112 - 5 - false - - - - - - 1 - - - 113 - 0 - Task_113 - 4 - false - - - - - 1 - - - 114 - 0 - Task_114 - 6 - false - - - 1 - - - 115 - 0 - Task_115 - 1 - false - - - - - 1 - - - 116 - 0 - Task_116 - 8 - false - - - - - - 1 - - - 117 - 0 - Task_117 - 10 - false - - - - - 1 - - - 118 - 0 - Task_118 - 7 - false - - - - - - 1 - - - 119 - 0 - Task_119 - 3 - false - - - - - 1 - - - 120 - 0 - Task_120 - 2 - false - - - - - 1 - - - 121 - 0 - Task_121 - 10 - false - - - - - - 1 - - - 122 - 0 - Task_122 - 10 - false - - - - - 1 - - - 123 - 0 - Task_123 - 1 - false - - - - - - - 1 - - - 124 - 0 - Task_124 - 1 - false - - - - - 1 - - - 125 - 0 - Task_125 - 9 - false - - - 1 - - - 126 - 0 - Task_126 - 9 - false - - - 1 - - - 127 - 0 - Task_127 - 3 - false - - - - - - 1 - - - 128 - 0 - Task_128 - 6 - false - - - - - 1 - - - 129 - 0 - Task_129 - 10 - false - - - - - - - 1 - - - 130 - 0 - Task_130 - 5 - false - - - - - - 1 - - - 131 - 0 - Task_131 - 5 - false - - - - - - - 1 - - - 132 - 0 - Task_132 - 9 - false - - - 1 - - - 133 - 0 - Task_133 - 7 - false - - - - - - 1 - - - 134 - 0 - Task_134 - 4 - false - - - - - 1 - - - 135 - 0 - Task_135 - 10 - false - - - 1 - - - 136 - 0 - Task_136 - 8 - false - - - - - 1 - - - 137 - 0 - Task_137 - 3 - false - - - - - 1 - - - 138 - 0 - Task_138 - 10 - false - - - - - 1 - - - 139 - 0 - Task_139 - 6 - false - - - - - 1 - - - 140 - 0 - Task_140 - 10 - false - - - - - - - 1 - - - 141 - 0 - Task_141 - 10 - false - - - - - - 1 - - - 142 - 0 - Task_142 - 10 - false - - - - - - 1 - - - 143 - 0 - Task_143 - 6 - false - - - - - - 1 - - - 144 - 0 - Task_144 - 10 - false - - - 1 - - - 145 - 0 - Task_145 - 8 - false - - - - - 1 - - - 146 - 0 - Task_146 - 10 - false - - - - - 1 - - - 147 - 0 - Task_147 - 0 - false - - - - - - 1 - - - 148 - 0 - Task_148 - 7 - false - - - - - 1 - - - 149 - 0 - Task_149 - 0 - false - - - 1 - - - 150 - 0 - Task_150 - 6 - false - - - - - - - 1 - - - 151 - 0 - Task_151 - 0 - false - - - - - 1 - - - 152 - 0 - Task_152 - 9 - false - - - 1 - - - 153 - 0 - Task_153 - 8 - false - - - - - 1 - - - 154 - 0 - Task_154 - 1 - false - - - - - - 1 - - - 155 - 0 - Task_155 - 4 - false - - - - - - 1 - - - 156 - 0 - Task_156 - 8 - false - - - - - - 1 - - - 157 - 0 - Task_157 - 9 - false - - - - - - 1 - - - 158 - 0 - Task_158 - 10 - false - - - - - - 1 - - - 159 - 0 - Task_159 - 1 - false - - - - - - 1 - - - 160 - 0 - Task_160 - 0 - false - - - - - 1 - - - 161 - 0 - Task_161 - 10 - false - - - - - - - 1 - - - 162 - 0 - Task_162 - 0 - false - - - - - 1 - - - 163 - 0 - Task_163 - 6 - false - - - - - - - 1 - - - 164 - 0 - Task_164 - 1 - false - - - - - 1 - - - 165 - 0 - Task_165 - 5 - false - - - - - - - 1 - - - 166 - 0 - Task_166 - 10 - false - - - - - 1 - - - 167 - 0 - Task_167 - 4 - false - - - - - 1 - - - 168 - 0 - Task_168 - 1 - false - - - - - 1 - - - 169 - 0 - Task_169 - 3 - false - - - - - 1 - - - 170 - 0 - Task_170 - 5 - false - - - - - - - 1 - - - 171 - 0 - Task_171 - 3 - false - - - - - 1 - - - 172 - 0 - Task_172 - 3 - false - - - - - 1 - - - 173 - 0 - Task_173 - 0 - false - - - - - 1 - - - 174 - 0 - Task_174 - 4 - false - - - - - 1 - - - 175 - 0 - Task_175 - 8 - false - - - - - 1 - - - 176 - 0 - Task_176 - 5 - false - - - - - 1 - - - 177 - 0 - Task_177 - 5 - false - - - - - 1 - - - 178 - 0 - Task_178 - 10 - false - - - - - - 1 - - - 179 - 0 - Task_179 - 2 - false - - - - - - - 1 - - - 180 - 0 - Task_180 - 6 - false - - - - - - 1 - - - 181 - 0 - Task_181 - 0 - false - - - - - - 1 - - - 182 - 0 - Task_182 - 7 - false - - - - - - - 1 - - - 183 - 0 - Task_183 - 1 - false - - - - - 1 - - - 184 - 0 - Task_184 - 4 - false - - - - - - 1 - - - 185 - 0 - Task_185 - 7 - false - - - - - - 1 - - - 186 - 0 - Task_186 - 1 - false - - - - - 1 - - - 187 - 0 - Task_187 - 3 - false - - - - - - 1 - - - 188 - 0 - Task_188 - 1 - false - - - - - 1 - - - 189 - 0 - Task_189 - 4 - false - - - 1 - - - 190 - 0 - Task_190 - 9 - false - - - - - - 1 - - - 191 - 0 - Task_191 - 3 - false - - - - - - 1 - - - 192 - 0 - Task_192 - 4 - false - - - - - - 1 - - - 193 - 0 - Task_193 - 2 - false - - - - - - 1 - - - 194 - 0 - Task_194 - 9 - false - - - - - 1 - - - 195 - 0 - Task_195 - 1 - false - - - 1 - - - 196 - 0 - Task_196 - 2 - false - - - - - - 1 - - - 197 - 0 - Task_197 - 9 - false - - - 1 - - - 198 - 0 - Task_198 - 8 - false - - - - - - - 1 - - - 199 - 0 - Task_199 - 7 - false - - - - - - 1 - - - 200 - 0 - Task_200 - 8 - false - - - - - - 1 - - - 201 - 0 - Task_201 - 7 - false - - - - - - - 1 - - - 202 - 0 - Task_202 - 9 - false - - - - - 1 - - - 203 - 0 - Task_203 - 7 - false - - - - - - 1 - - - 204 - 0 - Task_204 - 4 - false - - - - - - 1 - - - 205 - 0 - Task_205 - 4 - false - - - - - - 1 - - - 206 - 0 - Task_206 - 0 - false - - - - - - 1 - - - 207 - 0 - Task_207 - 8 - false - - - - - 1 - - - 208 - 0 - Task_208 - 4 - false - - - - - 1 - - - 209 - 0 - Task_209 - 5 - false - - - - - 1 - - - 210 - 0 - Task_210 - 6 - false - - - - - 1 - - - 211 - 0 - Task_211 - 8 - false - - - 1 - - - 212 - 0 - Task_212 - 2 - false - - - - - - 1 - - - 213 - 0 - Task_213 - 5 - false - - - 1 - - - 214 - 0 - Task_214 - 6 - false - - - - - - 1 - - - 215 - 0 - Task_215 - 0 - false - - - - - - 1 - - - 216 - 0 - Task_216 - 2 - false - - - - - - 1 - - - 217 - 0 - Task_217 - 9 - false - - - - - 1 - - - 218 - 0 - Task_218 - 0 - false - - - 1 - - - 219 - 0 - Task_219 - 3 - false - - - 1 - - - 220 - 0 - Task_220 - 0 - false - - - - - 1 - - - 221 - 0 - Task_221 - 6 - false - - - - - - - 1 - - - 222 - 0 - Task_222 - 0 - false - - - - - - 1 - - - 223 - 0 - Task_223 - 4 - false - - - - - - - 1 - - - 224 - 0 - Task_224 - 9 - false - - - - - 1 - - - 225 - 0 - Task_225 - 6 - false - - - - - - 1 - - - 226 - 0 - Task_226 - 7 - false - - - - - - - 1 - - - 227 - 0 - Task_227 - 7 - false - - - - - 1 - - - 228 - 0 - Task_228 - 8 - false - - - - - - 1 - - - 229 - 0 - Task_229 - 1 - false - - - - - - 1 - - - 230 - 0 - Task_230 - 4 - false - - - - - 1 - - - 231 - 0 - Task_231 - 10 - false - - - - - 1 - - - 232 - 0 - Task_232 - 1 - false - - - - - 1 - - - 233 - 0 - Task_233 - 0 - false - - - - - - 1 - - - 234 - 0 - Task_234 - 6 - false - - - - - - - 1 - - - 235 - 0 - Task_235 - 3 - false - - - - - 1 - - - 236 - 0 - Task_236 - 10 - false - - - 1 - - - 237 - 0 - Task_237 - 7 - false - - - - - 1 - - - 238 - 0 - Task_238 - 3 - false - - - - - 1 - - - 239 - 0 - Task_239 - 3 - false - - - - - - 1 - - - 240 - 0 - Task_240 - 10 - false - - - - - - 1 - - - 241 - 0 - Task_241 - 10 - false - - - - - 1 - - - 242 - 0 - Task_242 - 9 - false - - - - - 1 - - - 243 - 0 - Task_243 - 1 - false - - - - - 1 - - - 244 - 0 - Task_244 - 3 - false - - - - - - 1 - - - 245 - 0 - Task_245 - 5 - false - - - - - - 1 - - - 246 - 0 - Task_246 - 6 - false - - - 1 - - - 247 - 0 - Task_247 - 8 - false - - - 1 - - - 248 - 0 - Task_248 - 7 - false - - - - - - 1 - - - 249 - 0 - Task_249 - 5 - false - - - - - 1 - - - 250 - 0 - Task_250 - 1 - false - - - 1 - - - 251 - 0 - Task_251 - 3 - false - - - - - - 1 - - - 252 - 0 - Task_252 - 2 - false - - - - - - - 1 - - - 253 - 0 - Task_253 - 6 - false - - - - - 1 - - - 254 - 0 - Task_254 - 0 - false - - - - - - 1 - - - 255 - 0 - Task_255 - 8 - false - - - - - 1 - - - 256 - 0 - Task_256 - 8 - false - - - - - 1 - - - 257 - 0 - Task_257 - 8 - false - - - - - - 1 - - - 258 - 0 - Task_258 - 9 - false - - - 1 - - - 259 - 0 - Task_259 - 7 - false - - - - - - 1 - - - 260 - 0 - Task_260 - 9 - false - - - - - - 1 - - - 261 - 0 - Task_261 - 5 - false - - - - - 1 - - - 262 - 0 - Task_262 - 8 - false - - - - - - - 1 - - - 263 - 0 - Task_263 - 2 - false - - - - - - 1 - - - 264 - 0 - Task_264 - 6 - false - - - - - - 1 - - - 265 - 0 - Task_265 - 1 - false - - - - - - - 1 - - - 266 - 0 - Task_266 - 8 - false - - - - - - 1 - - - 267 - 0 - Task_267 - 8 - false - - - - - 1 - - - 268 - 0 - Task_268 - 7 - false - - - - - - 1 - - - 269 - 0 - Task_269 - 9 - false - - - - - - 1 - - - 270 - 0 - Task_270 - 3 - false - - - 1 - - - 271 - 0 - Task_271 - 9 - false - - - - - - - 1 - - - 272 - 0 - Task_272 - 10 - false - - - - - - 1 - - - 273 - 0 - Task_273 - 6 - false - - - - - - 1 - - - 274 - 0 - Task_274 - 8 - false - - - - - - 1 - - - 275 - 0 - Task_275 - 4 - false - - - - - - - 1 - - - 276 - 0 - Task_276 - 9 - false - - - - - 1 - - - 277 - 0 - Task_277 - 2 - false - - - 1 - - - 278 - 0 - Task_278 - 2 - false - - - - - 1 - - - 279 - 0 - Task_279 - 5 - false - - - - - - 1 - - - 280 - 0 - Task_280 - 0 - false - - - - - - - 1 - - - 281 - 0 - Task_281 - 1 - false - - - - - - 1 - - - 282 - 0 - Task_282 - 8 - false - - - - - - - 1 - - - 283 - 0 - Task_283 - 5 - false - - - - - - - 1 - - - 284 - 0 - Task_284 - 0 - false - - - - - - 1 - - - 285 - 0 - Task_285 - 9 - false - - - - - 1 - - - 286 - 0 - Task_286 - 1 - false - - - - - - - 1 - - - 287 - 0 - Task_287 - 9 - false - - - - - - 1 - - - 288 - 0 - Task_288 - 9 - false - - - - - 1 - - - 289 - 0 - Task_289 - 9 - false - - - - - - 1 - - - 290 - 0 - Task_290 - 4 - false - - - - - - - 1 - - - 291 - 0 - Task_291 - 2 - false - - - 1 - - - 292 - 0 - Task_292 - 9 - false - - - - - - 1 - - - 293 - 0 - Task_293 - 5 - false - - - - - - 1 - - - 294 - 0 - Task_294 - 6 - false - - - - - - - 1 - - - 295 - 0 - Task_295 - 6 - false - - - - - 1 - - - 296 - 0 - Task_296 - 8 - false - - - - - - 1 - - - 297 - 0 - Task_297 - 2 - false - - - - - - 1 - - - 298 - 0 - Task_298 - 1 - false - - - - - - 1 - - - 299 - 0 - Task_299 - 5 - false - - - 1 - - - 300 - 0 - Task_300 - 1 - false - - - - - 1 - - - 301 - 0 - Task_301 - 8 - false - - - - - - 1 - - - 302 - 0 - Task_302 - 4 - false - - - - - 1 - - - 303 - 0 - Task_303 - 7 - false - - - - - - 1 - - - 304 - 0 - Task_304 - 10 - false - - - - - - - 1 - - - 305 - 0 - Task_305 - 6 - false - - - - - 1 - - - 306 - 0 - Task_306 - 9 - false - - - - - 1 - - - 307 - 0 - Task_307 - 6 - false - - - - - - 1 - - - 308 - 0 - Task_308 - 0 - false - - - - - 1 - - - 309 - 0 - Task_309 - 2 - false - - - 1 - - - 310 - 0 - Task_310 - 8 - false - - - - - 1 - - - 311 - 0 - Task_311 - 2 - false - - - - - - - 1 - - - 312 - 0 - Task_312 - 9 - false - - - - - 1 - - - 313 - 0 - Task_313 - 10 - false - - - 1 - - - 314 - 0 - Task_314 - 4 - false - - - - - - - 1 - - - 315 - 0 - Task_315 - 2 - false - - - - - 1 - - - 316 - 0 - Task_316 - 4 - false - - - - - - 1 - - - 317 - 0 - Task_317 - 1 - false - - - 1 - - - 318 - 0 - Task_318 - 5 - false - - - - - 1 - - - 319 - 0 - Task_319 - 5 - false - - - - - - 1 - - - 320 - 0 - Task_320 - 0 - false - - - - - - - 1 - - - 321 - 0 - Task_321 - 0 - false - - - - - - 1 - - - 322 - 0 - Task_322 - 5 - false - - - - - 1 - - - 323 - 0 - Task_323 - 0 - false - - - - - 1 - - - 324 - 0 - Task_324 - 7 - false - - - - - - 1 - - - 325 - 0 - Task_325 - 8 - false - - - - - 1 - - - 326 - 0 - Task_326 - 0 - false - - - - - - 1 - - - 327 - 0 - Task_327 - 0 - false - - - - - 1 - - - 328 - 0 - Task_328 - 10 - false - - - - - - - 1 - - - 329 - 0 - Task_329 - 5 - false - - - - - 1 - - - 330 - 0 - Task_330 - 10 - false - - - - - - 1 - - - 331 - 0 - Task_331 - 1 - false - - - - - - 1 - - - 332 - 0 - Task_332 - 7 - false - - - - - - 1 - - - 333 - 0 - Task_333 - 9 - false - - - 1 - - - 334 - 0 - Task_334 - 3 - false - - - - - - 1 - - - 335 - 0 - Task_335 - 5 - false - - - - - - - 1 - - - 336 - 0 - Task_336 - 8 - false - - - - - - 1 - - - 337 - 0 - Task_337 - 3 - false - - - 1 - - - 338 - 0 - Task_338 - 3 - false - - - 1 - - - 339 - 0 - Task_339 - 4 - false - - - - - - 1 - - - 340 - 0 - Task_340 - 4 - false - - - - - - 1 - - - 341 - 0 - Task_341 - 3 - false - - - - - - 1 - - - 342 - 0 - Task_342 - 0 - false - - - - - - - 1 - - - 343 - 0 - Task_343 - 10 - false - - - - - - 1 - - - 344 - 0 - Task_344 - 2 - false - - - 1 - - - 345 - 0 - Task_345 - 3 - false - - - - - 1 - - - 346 - 0 - Task_346 - 6 - false - - - - - - 1 - - - 347 - 0 - Task_347 - 9 - false - - - 1 - - - 348 - 0 - Task_348 - 0 - false - - - - - 1 - - - 349 - 0 - Task_349 - 6 - false - - - - - 1 - - - 350 - 0 - Task_350 - 6 - false - - - - - - 1 - - - 351 - 0 - Task_351 - 0 - false - - - - - 1 - - - 352 - 0 - Task_352 - 0 - false - - - - - - 1 - - - 353 - 0 - Task_353 - 7 - false - - - - - - 1 - - - 354 - 0 - Task_354 - 2 - false - - - - - - 1 - - - 355 - 0 - Task_355 - 8 - false - - - 1 - - - 356 - 0 - Task_356 - 4 - false - - - - - 1 - - - 357 - 0 - Task_357 - 7 - false - - - - - - - 1 - - - 358 - 0 - Task_358 - 3 - false - - - - - - - 1 - - - 359 - 0 - Task_359 - 8 - false - - - - - - - 1 - - - 360 - 0 - Task_360 - 1 - false - - - - - 1 - - - 361 - 0 - Task_361 - 2 - false - - - - - 1 - - - 362 - 0 - Task_362 - 9 - false - - - - - - - 1 - - - 363 - 0 - Task_363 - 6 - false - - - 1 - - - 364 - 0 - Task_364 - 7 - false - - - - - 1 - - - 365 - 0 - Task_365 - 0 - false - - - - - - 1 - - - 366 - 0 - Task_366 - 5 - false - - - - - 1 - - - 367 - 0 - Task_367 - 10 - false - - - - - 1 - - - 368 - 0 - Task_368 - 4 - false - - - - - - - 1 - - - 369 - 0 - Task_369 - 5 - false - - - 1 - - - 370 - 0 - Task_370 - 7 - false - - - - - 1 - - - 371 - 0 - Task_371 - 6 - false - - - - - - 1 - - - 372 - 0 - Task_372 - 7 - false - - - 1 - - - 373 - 0 - Task_373 - 4 - false - - - - - - 1 - - - 374 - 0 - Task_374 - 5 - false - - - - - - - 1 - - - 375 - 0 - Task_375 - 5 - false - - - - - - 1 - - - 376 - 0 - Task_376 - 10 - false - - - - - 1 - - - 377 - 0 - Task_377 - 4 - false - - - - - 1 - - - 378 - 0 - Task_378 - 2 - false - - - - - - 1 - - - 379 - 0 - Task_379 - 1 - false - - - - - - 1 - - - 380 - 0 - Task_380 - 5 - false - - - - - 1 - - - 381 - 0 - Task_381 - 1 - false - - - - - - - 1 - - - 382 - 0 - Task_382 - 6 - false - - - 1 - - - 383 - 0 - Task_383 - 5 - false - - - 1 - - - 384 - 0 - Task_384 - 0 - false - - - - - - 1 - - - 385 - 0 - Task_385 - 9 - false - - - - - 1 - - - 386 - 0 - Task_386 - 5 - false - - - - - 1 - - - 387 - 0 - Task_387 - 5 - false - - - 1 - - - 388 - 0 - Task_388 - 5 - false - - - 1 - - - 389 - 0 - Task_389 - 5 - false - - - 1 - - - 390 - 0 - Task_390 - 1 - false - - - - - - 1 - - - 391 - 0 - Task_391 - 1 - false - - - - - 1 - - - 392 - 0 - Task_392 - 7 - false - - - - - - 1 - - - 393 - 0 - Task_393 - 6 - false - - - - - 1 - - - 394 - 0 - Task_394 - 4 - false - - - - - 1 - - - 395 - 0 - Task_395 - 2 - false - - - - - 1 - - - 396 - 0 - Task_396 - 4 - false - - - - - 1 - - - 397 - 0 - Task_397 - 5 - false - - - - - - 1 - - - 398 - 0 - Task_398 - 2 - false - - - - - - - 1 - - - 399 - 0 - Task_399 - 9 - false - - - - - - - 1 - - - 400 - 0 - Task_400 - 1 - false - - - - - 1 - - - 401 - 0 - Task_401 - 9 - false - - - - - - - 1 - - - 402 - 0 - Task_402 - 5 - false - - - - - - 1 - - - 403 - 0 - Task_403 - 10 - false - - - - - - 1 - - - 404 - 0 - Task_404 - 0 - false - - - - - - - 1 - - - 405 - 0 - Task_405 - 2 - false - - - - - 1 - - - 406 - 0 - Task_406 - 7 - false - - - - - - 1 - - - 407 - 0 - Task_407 - 10 - false - - - 1 - - - 408 - 0 - Task_408 - 9 - false - - - - - - - 1 - - - 409 - 0 - Task_409 - 2 - false - - - - - - - 1 - - - 410 - 0 - Task_410 - 1 - false - - - - - - 1 - - - 411 - 0 - Task_411 - 5 - false - - - - - 1 - - - 412 - 0 - Task_412 - 9 - false - - - - - - - 1 - - - 413 - 0 - Task_413 - 4 - false - - - - - 1 - - - 414 - 0 - Task_414 - 2 - false - - - - - - 1 - - - 415 - 0 - Task_415 - 0 - false - - - - - - 1 - - - 416 - 0 - Task_416 - 1 - false - - - 1 - - - 417 - 0 - Task_417 - 7 - false - - - - - 1 - - - 418 - 0 - Task_418 - 0 - false - - - - - - - 1 - - - 419 - 0 - Task_419 - 8 - false - - - 1 - - - 420 - 0 - Task_420 - 8 - false - - - - - - 1 - - - 421 - 0 - Task_421 - 6 - false - - - - - 1 - - - 422 - 0 - Task_422 - 9 - false - - - - - - 1 - - - 423 - 0 - Task_423 - 7 - false - - - - - - - 1 - - - 424 - 0 - Task_424 - 0 - false - - - - - 1 - - - 425 - 0 - Task_425 - 2 - false - - - - - 1 - - - 426 - 0 - Task_426 - 7 - false - - - 1 - - - 427 - 0 - Task_427 - 3 - false - - - - - 1 - - - 428 - 0 - Task_428 - 6 - false - - - - - 1 - - - 429 - 0 - Task_429 - 6 - false - - - - - - - 1 - - - 430 - 0 - Task_430 - 8 - false - - - - - - - 1 - - - 431 - 0 - Task_431 - 10 - false - - - - - 1 - - - 432 - 0 - Task_432 - 10 - false - - - - - - - 1 - - - 433 - 0 - Task_433 - 10 - false - - - - - 1 - - - 434 - 0 - Task_434 - 6 - false - - - - - - - 1 - - - 435 - 0 - Task_435 - 4 - false - - - - - 1 - - - 436 - 0 - Task_436 - 1 - false - - - - - - 1 - - - 437 - 0 - Task_437 - 5 - false - - - - - - 1 - - - 438 - 0 - Task_438 - 4 - false - - - - - - 1 - - - 439 - 0 - Task_439 - 1 - false - - - - - 1 - - - 440 - 0 - Task_440 - 10 - false - - - - - - 1 - - - 441 - 0 - Task_441 - 3 - false - - - - - - - 1 - - - 442 - 0 - Task_442 - 2 - false - - - - - - 1 - - - 443 - 0 - Task_443 - 6 - false - - - - - - 1 - - - 444 - 0 - Task_444 - 7 - false - - - 1 - - - 445 - 0 - Task_445 - 3 - false - - - - - - 1 - - - 446 - 0 - Task_446 - 8 - false - - - - - 1 - - - 447 - 0 - Task_447 - 7 - false - - - 1 - - - 448 - 0 - Task_448 - 1 - false - - - 1 - - - 449 - 0 - Task_449 - 3 - false - - - - - 1 - - - 450 - 0 - Task_450 - 2 - false - - - - - - 1 - - - 451 - 0 - Task_451 - 8 - false - - - - - 1 - - - 452 - 0 - Task_452 - 4 - false - - - - - 1 - - - 453 - 0 - Task_453 - 7 - false - - - - - 1 - - - 454 - 0 - Task_454 - 5 - false - - - - - - 1 - - - 455 - 0 - Task_455 - 7 - false - - - - - - 1 - - - 456 - 0 - Task_456 - 10 - false - - - - - - 1 - - - 457 - 0 - Task_457 - 5 - false - - - - - 1 - - - 458 - 0 - Task_458 - 5 - false - - - - - - - 1 - - - 459 - 0 - Task_459 - 5 - false - - - - - - 1 - - - 460 - 0 - Task_460 - 3 - false - - - - - - 1 - - - 461 - 0 - Task_461 - 5 - false - - - - - 1 - - - 462 - 0 - Task_462 - 10 - false - - - - - - - 1 - - - 463 - 0 - Task_463 - 8 - false - - - - - 1 - - - 464 - 0 - Task_464 - 4 - false - - - - - - 1 - - - 465 - 0 - Task_465 - 6 - false - - - - - - 1 - - - 466 - 0 - Task_466 - 5 - false - - - 1 - - - 467 - 0 - Task_467 - 1 - false - - - 1 - - - 468 - 0 - Task_468 - 7 - false - - - - - - - 1 - - - 469 - 0 - Task_469 - 8 - false - - - - - 1 - - - 470 - 0 - Task_470 - 6 - false - - - - - 1 - - - 471 - 0 - Task_471 - 5 - false - - - 1 - - - 472 - 0 - Task_472 - 10 - false - - - - - 1 - - - 473 - 0 - Task_473 - 0 - false - - - - - 1 - - - 474 - 0 - Task_474 - 8 - false - - - 1 - - - 475 - 0 - Task_475 - 4 - false - - - - - - 1 - - - 476 - 0 - Task_476 - 6 - false - - - - - - 1 - - - 477 - 0 - Task_477 - 4 - false - - - - - 1 - - - 478 - 0 - Task_478 - 9 - false - - - - - 1 - - - 479 - 0 - Task_479 - 9 - false - - - - - - 1 - - - 480 - 0 - Task_480 - 6 - false - - - - - - - 1 - - - 481 - 0 - Task_481 - 7 - false - - - - - 1 - - - 482 - 0 - Task_482 - 5 - false - - - 1 - - - 483 - 0 - Task_483 - 0 - false - - - - - - 1 - - - 484 - 0 - Task_484 - 8 - false - - - 1 - - - 485 - 0 - Task_485 - 10 - false - - - 1 - - - 486 - 0 - Task_486 - 2 - false - - - - - - 1 - - - 487 - 0 - Task_487 - 2 - false - - - - - - 1 - - - 488 - 0 - Task_488 - 6 - false - - - - - - - 1 - - - 489 - 0 - Task_489 - 2 - false - - - - - - 1 - - - 490 - 0 - Task_490 - 10 - false - - - - - - 1 - - - 491 - 0 - Task_491 - 1 - false - - - - - - 1 - - - 492 - 0 - Task_492 - 7 - false - - - - - - 1 - - - 493 - 0 - Task_493 - 8 - false - - - - - 1 - - - 494 - 0 - Task_494 - 4 - false - - - - - - 1 - - - 495 - 0 - Task_495 - 2 - false - - - - - - - 1 - - - 496 - 0 - Task_496 - 0 - false - - - - - 1 - - - 497 - 0 - Task_497 - 2 - false - - - - - 1 - - - 498 - 0 - Task_498 - 7 - false - - - - - - 1 - - - 499 - 0 - Task_499 - 3 - false - - - 1 - - - \ 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/resources/data/unsolved/50tasks-5users.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/resources/data/unsolved/50tasks-5users.xml deleted file mode 100644 index c4982709e3..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-core/src/test/resources/data/unsolved/50tasks-5users.xml +++ /dev/null @@ -1,706 +0,0 @@ - - 0 - - - 0 - true - Amy - - - 3 - Sales - - - 4 - Legal - - - - - - 1 - true - Beth - - - - - 2 - true - Chad - - - 6 - Manager - - - 7 - Developer - - - - - - 3 - true - Dan - - - - - - - - 4 - true - Elsa - - - 0 - HR - - - 1 - IT - - - - - - - - 0 - 0 - Task_0 - 6 - false - - - - - 1 - - - 1 - 0 - Task_1 - 9 - false - - - 8 - Accounting - - - 9 - Support - - - - - 1 - - - 2 - 0 - Task_2 - 3 - false - - - - - 1 - - - 3 - 0 - Task_3 - 5 - false - - - - - - - 1 - - - 4 - 0 - Task_4 - 0 - false - - - 1 - - - 5 - 0 - Task_5 - 6 - false - - - - - - 1 - - - 6 - 0 - Task_6 - 8 - false - - - - - - 1 - - - 7 - 0 - Task_7 - 7 - false - - - - - 1 - - - 8 - 0 - Task_8 - 7 - false - - - - - 1 - - - 9 - 0 - Task_9 - 1 - false - - - - - 1 - - - 10 - 0 - Task_10 - 5 - false - - - - - - - 1 - - - 11 - 0 - Task_11 - 2 - false - - - - 2 - PM - - - - 1 - - - 12 - 0 - Task_12 - 3 - false - - - - - 1 - - - 13 - 0 - Task_13 - 5 - false - - - 1 - - - 14 - 0 - Task_14 - 4 - false - - - - - 1 - - - 15 - 0 - Task_15 - 10 - false - - - - - - 1 - - - 16 - 0 - Task_16 - 1 - false - - - 1 - - - 17 - 0 - Task_17 - 0 - false - - - - - - - 1 - - - 18 - 0 - Task_18 - 9 - false - - - - - - 1 - - - 19 - 0 - Task_19 - 2 - false - - - - - - - 1 - - - 20 - 0 - Task_20 - 1 - false - - - - - 1 - - - 21 - 0 - Task_21 - 5 - false - - - 5 - Marketing - - - - - 1 - - - 22 - 0 - Task_22 - 3 - false - - - - - 1 - - - 23 - 0 - Task_23 - 6 - false - - - - - - 1 - - - 24 - 0 - Task_24 - 5 - false - - - - - 1 - - - 25 - 0 - Task_25 - 5 - false - - - - - - 1 - - - 26 - 0 - Task_26 - 6 - false - - - - - - 1 - - - 27 - 0 - Task_27 - 8 - false - - - - - - - 1 - - - 28 - 0 - Task_28 - 3 - false - - - 1 - - - 29 - 0 - Task_29 - 9 - false - - - - - 1 - - - 30 - 0 - Task_30 - 10 - false - - - - - - - 1 - - - 31 - 0 - Task_31 - 3 - false - - - - - 1 - - - 32 - 0 - Task_32 - 10 - false - - - - - - 1 - - - 33 - 0 - Task_33 - 4 - false - - - - - - 1 - - - 34 - 0 - Task_34 - 7 - false - - - - - - 1 - - - 35 - 0 - Task_35 - 0 - false - - - - - 1 - - - 36 - 0 - Task_36 - 8 - false - - - - - 1 - - - 37 - 0 - Task_37 - 6 - false - - - - - 1 - - - 38 - 0 - Task_38 - 0 - false - - - - - 1 - - - 39 - 0 - Task_39 - 10 - false - - - 1 - - - 40 - 0 - Task_40 - 3 - false - - - - - - - 1 - - - 41 - 0 - Task_41 - 7 - false - - - 1 - - - 42 - 0 - Task_42 - 3 - false - - - - - - - 1 - - - 43 - 0 - Task_43 - 3 - false - - - - - 1 - - - 44 - 0 - Task_44 - 6 - false - - - - - 1 - - - 45 - 0 - Task_45 - 8 - false - - - - - - - 1 - - - 46 - 0 - Task_46 - 4 - false - - - 1 - - - 47 - 0 - Task_47 - 2 - false - - - - - - - 1 - - - 48 - 0 - Task_48 - 0 - false - - - - - - 1 - - - 49 - 0 - Task_49 - 6 - false - - - - - - 1 - - - \ 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-planning/.gitignore b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/.gitignore deleted file mode 100644 index 91a87d3ed0..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/.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-planning/pom.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/pom.xml deleted file mode 100644 index a74f98280a..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/pom.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - 4.0.0 - - - org.kie.server - kie-server-services-task-assigning - 7.75.0-SNAPSHOT - - - kie-server-services-task-assigning-planning - - KIE :: Execution Server :: Services :: Task Assigning :: Planning - KIE Execution Server Services Task Assigning Planning - - - - org.slf4j - slf4j-api - - - org.kie - kie-api - - - org.drools - drools-core - - - org.kie.soup - kie-soup-commons - - - org.optaplanner - optaplanner-core - - - org.kie.server - kie-server-api - - - org.kie.server - kie-server-common - - - org.kie.server - kie-server-services-common - - - org.kie.server - kie-server-services-jbpm - provided - - - org.kie.server - kie-server-services-task-assigning-core - - - org.kie.server - kie-server-client - - - org.kie.server - kie-server-services-task-assigning-user-system-simple - - - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - 1 - false - - - - - - - diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/PlanningBuilder.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/PlanningBuilder.java deleted file mode 100644 index 8b969bfaa5..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/PlanningBuilder.java +++ /dev/null @@ -1,97 +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.planning; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.stream.Collectors; - -import org.kie.server.api.model.taskassigning.PlanningItem; -import org.kie.server.api.model.taskassigning.PlanningTask; -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 static org.kie.server.services.taskassigning.core.model.ModelConstants.IS_NOT_DUMMY; -import static org.kie.server.services.taskassigning.core.model.ModelConstants.IS_PLANNING_USER; -import static org.kie.server.services.taskassigning.core.model.solver.TaskHelper.extractTasks; - -public class PlanningBuilder { - - private TaskAssigningSolution solution; - private int publishWindowSize; - - private PlanningBuilder() { - } - - public static PlanningBuilder create() { - return new PlanningBuilder(); - } - - public PlanningBuilder withSolution(TaskAssigningSolution solution) { - this.solution = solution; - return this; - } - - public PlanningBuilder withPublishWindowSize(int publishWindowSize) { - this.publishWindowSize = publishWindowSize; - return this; - } - - public List build() { - return solution.getUserList().stream() - .map(this::buildPlanningItems) - .flatMap(Collection::stream) - .filter(item -> item.getPlanningTask().isPublished()).collect(Collectors.toList()); - } - - private List buildPlanningItems(User user) { - int index = 0; - int publishedCount = 0; - PlanningItem planningItem; - final List userTasks = extractTasks(user, IS_NOT_DUMMY); //dummy tasks has nothing to with the jBPM runtime, don't process them - final List userPlanningItems = new ArrayList<>(); - for (Task task : userTasks) { - planningItem = PlanningItem.builder() - .containerId(task.getContainerId()) - .taskId(task.getId()) - .processInstanceId(task.getProcessInstanceId()) - .planningTask(PlanningTask.builder() - .taskId(task.getId()) - .published(task.isPinned()) - .assignedUser(user.getUser().getEntityId()) - .index(index++) - .build()) - .build(); - - userPlanningItems.add(planningItem); - publishedCount += planningItem.getPlanningTask().isPublished() ? 1 : 0; - } - - Iterator userPlanningItemsIt = userPlanningItems.iterator(); - while (userPlanningItemsIt.hasNext() && (publishedCount < publishWindowSize || IS_PLANNING_USER.test(user.getEntityId()))) { - planningItem = userPlanningItemsIt.next(); - if (!planningItem.getPlanningTask().isPublished()) { - planningItem.getPlanningTask().setPublished(true); - publishedCount++; - } - } - return userPlanningItems; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/RunnableBase.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/RunnableBase.java deleted file mode 100644 index e0c132fbe3..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/RunnableBase.java +++ /dev/null @@ -1,55 +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.planning; - -import java.util.concurrent.atomic.AtomicReference; - -import static org.kie.server.services.taskassigning.planning.RunnableBase.Status.DESTROYED; -import static org.kie.server.services.taskassigning.planning.RunnableBase.Status.STOPPED; - -public abstract class RunnableBase implements Runnable { - - protected enum Status { - STARTING, - STARTED, - STOPPING, - STOPPED, - DESTROYED - } - - protected final AtomicReference status = new AtomicReference<>(STOPPED); - - public void destroy() { - status.set(DESTROYED); - } - - /** - * @return true if the destroy() method has been called. False in any other case. - */ - public boolean isDestroyed() { - return status.get() == DESTROYED; - } - - /** - * The semantic of RunnableBase class is it that can't continue "executing" as soon the destroy() method was invoked - * or the backing thread was interrupted. - * @return true if current RunnableBase can continue executing, false in any other case. - */ - protected boolean isAlive() { - return status.get() != DESTROYED && !Thread.currentThread().isInterrupted(); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolutionBuilder.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolutionBuilder.java deleted file mode 100644 index a8919208bf..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolutionBuilder.java +++ /dev/null @@ -1,174 +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.planning; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -import org.kie.api.task.model.Status; -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.api.model.taskassigning.TaskData; -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.kie.server.services.taskassigning.planning.util.IndexedElement; -import org.kie.server.services.taskassigning.planning.util.UserUtil; - -import static org.apache.commons.lang3.StringUtils.isNoneEmpty; -import static org.kie.api.task.model.Status.InProgress; -import static org.kie.api.task.model.Status.Reserved; -import static org.kie.api.task.model.Status.Suspended; -import static org.kie.server.api.model.taskassigning.util.StatusConverter.convertFromString; -import static org.kie.server.services.taskassigning.core.model.ModelConstants.DUMMY_TASK; -import static org.kie.server.services.taskassigning.core.model.ModelConstants.IS_PLANNING_USER; -import static org.kie.server.services.taskassigning.core.model.ModelConstants.PLANNING_USER; -import static org.kie.server.services.taskassigning.planning.util.IndexedElement.addInOrder; -import static org.kie.server.services.taskassigning.planning.util.TaskUtil.fromTaskData; -import static org.kie.server.services.taskassigning.planning.util.UserUtil.filterDuplicates; - -/** - * This class is intended for the restoring of a TaskAssigningSolution given a set of TaskData, a set of User and the - * corresponding PlanningTask for each task. I'ts typically used when the solver needs to be started during the - * application startup procedure. - */ -public class SolutionBuilder { - - private List taskDataList; - private List externalUsers; - private SolverHandlerContext context; - - private SolutionBuilder() { - } - - public static SolutionBuilder create() { - return new SolutionBuilder(); - } - - public SolutionBuilder withTasks(List taskDataList) { - this.taskDataList = taskDataList; - return this; - } - - public SolutionBuilder withUsers(List externalUsers) { - this.externalUsers = externalUsers; - return this; - } - - public SolutionBuilder withContext(SolverHandlerContext context) { - this.context = context; - return this; - } - - public TaskAssigningSolution build() { - final List tasks = new ArrayList<>(); - final Map>> assignedTasksByUserId = new HashMap<>(); - final Map usersById = filterDuplicates(externalUsers) - .filter(externalUser -> !IS_PLANNING_USER.test(externalUser.getId())) - .map(UserUtil::fromExternalUser) - .collect(Collectors.toMap(User::getEntityId, Function.identity())); - usersById.put(PLANNING_USER.getEntityId(), PLANNING_USER); - - taskDataList.forEach(taskData -> { - context.setTaskChangeTime(taskData.getTaskId(), taskData.getLastModificationDate()); - final Task task = fromTaskData(taskData); - final Status status = convertFromString(task.getStatus()); - switch (status) { - case Ready: - tasks.add(task); - break; - case Reserved: - case InProgress: - case Suspended: - if (isNoneEmpty(taskData.getActualOwner())) { - // If actualOwner is empty the only chance is that the task was in Ready status and changed to - // Suspended, since Reserved and InProgress tasks has always an owner in jBPM. - // Finally tasks with no actualOwner (Suspended) are skipped, since they'll be properly added to - // the solution when they change to Ready status and the proper jBPM event is raised. - tasks.add(task); - final PlanningTask planningTask = taskData.getPlanningTask(); - if (planningTask != null && taskData.getActualOwner().equals(planningTask.getAssignedUser())) { - boolean pinned = InProgress == status || Suspended == status || - planningTask.getPublished() || !usersById.containsKey(taskData.getActualOwner()); - addTaskToUser(assignedTasksByUserId, task, planningTask.getAssignedUser(), planningTask.getIndex(), pinned); - } else { - boolean pinned = (Reserved == status && !IS_PLANNING_USER.test(taskData.getActualOwner())) || - InProgress == status || Suspended == status; - addTaskToUser(assignedTasksByUserId, task, taskData.getActualOwner(), -1, pinned); - } - } - break; - default: - //no other cases exists, sonar required. - throw new IndexOutOfBoundsException("Value: " + taskData.getStatus() + " is out of range in current switch"); - } - }); - - assignedTasksByUserId.forEach((key, assignedTasks) -> { - User user = usersById.get(key); - if (user == null) { - //create the user by convention. - user = new User(key.hashCode(), key); - usersById.put(key, user); - } - final List userTasks = assignedTasks.stream().map(IndexedElement::getElement).collect(Collectors.toList()); - addTasksToUser(user, userTasks); - }); - - //Add the DUMMY_TASK to avoid running into scenarios where the solution remains with no tasks. - tasks.add(DUMMY_TASK); - final List users = new ArrayList<>(usersById.values()); - return new TaskAssigningSolution(-1, users, tasks); - } - - /** - * Link the list of tasks to the given user. The tasks comes in the expected order. - * @param user the user that will "own" the tasks in the chained graph. - * @param tasks the tasks to link. - */ - private static void addTasksToUser(User user, List tasks) { - TaskOrUser previousTask = user; - // startTime, endTime, nextTask and user are shadow variables that should be calculated by the solver at - // start time. However this is not yet implemented see: https://issues.jboss.org/browse/PLANNER-1316 so by now - // they are initialized as part of the solution restoring. - for (Task nextTask : tasks) { - previousTask.setNextTask(nextTask); - - nextTask.setStartTimeInMinutes(previousTask.getEndTimeInMinutes()); - nextTask.setEndTime(nextTask.getStartTimeInMinutes() + nextTask.getDurationInMinutes()); - nextTask.setPreviousTaskOrUser(previousTask); - nextTask.setUser(user); - - previousTask = nextTask; - } - } - - private static void addTaskToUser(Map>> tasksByUser, - Task task, - String actualOwner, - int index, - boolean pinned) { - task.setPinned(pinned); - final List> userAssignedTasks = tasksByUser.computeIfAbsent(actualOwner, key -> new ArrayList<>()); - addInOrder(userAssignedTasks, new IndexedElement<>(task, index, task.isPinned())); - } -} - diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolutionChangesBuilder.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolutionChangesBuilder.java deleted file mode 100644 index 3f0ef40349..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolutionChangesBuilder.java +++ /dev/null @@ -1,386 +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.planning; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Collectors; - -import org.kie.api.task.model.Status; -import org.kie.server.api.model.taskassigning.TaskData; -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.kie.server.services.taskassigning.core.model.solver.realtime.AddTaskProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.AddUserProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.AssignTaskProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.DisableUserProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.ReleaseTaskProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.RemoveUserProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.TaskPropertyChangeProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.UserPropertyChangeProblemFactChange; -import org.kie.server.services.taskassigning.planning.util.IndexedElement; -import org.kie.server.services.taskassigning.planning.util.UserUtil; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; -import org.optaplanner.core.impl.solver.ProblemFactChange; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.kie.server.api.model.taskassigning.util.StatusConverter.convertFromString; -import static org.kie.server.api.model.taskassigning.util.StatusConverter.convertToString; -import static org.kie.server.services.taskassigning.core.model.ModelConstants.DUMMY_TASK_PLANNER_241; -import static org.kie.server.services.taskassigning.core.model.ModelConstants.IS_NOT_DUMMY; -import static org.kie.server.services.taskassigning.core.model.ModelConstants.IS_PLANNING_USER; -import static org.kie.server.services.taskassigning.core.model.ModelConstants.PLANNING_USER; -import static org.kie.server.services.taskassigning.core.model.solver.TaskHelper.hasPinnedTasks; -import static org.kie.server.services.taskassigning.planning.TraceHelper.traceProgrammedChanges; -import static org.kie.server.services.taskassigning.planning.util.IndexedElement.addInOrder; -import static org.kie.server.services.taskassigning.planning.util.TaskUtil.fromTaskData; -import static org.kie.server.services.taskassigning.planning.util.UserUtil.filterDuplicates; -import static org.kie.server.services.taskassigning.planning.util.UserUtil.fromExternalUser; - -/** - * This class performs the calculation of the impact (i.e. the set of changes to be applied) on a solution given the - * updated information about the tasks in the jBPM runtime. - */ -public class SolutionChangesBuilder { - - private static final Logger LOGGER = LoggerFactory.getLogger(SolutionChangesBuilder.class); - - private TaskAssigningSolution solution; - - private List taskDataList; - - private List externalUserList; - - private boolean executeUsersUpdate = false; - - private UserSystemService userSystemService; - - private SolverHandlerContext context; - - private SolutionChangesBuilder() { - } - - public static SolutionChangesBuilder create() { - return new SolutionChangesBuilder(); - } - - public SolutionChangesBuilder withSolution(TaskAssigningSolution solution) { - this.solution = solution; - return this; - } - - public SolutionChangesBuilder withTasks(List taskDataList) { - this.taskDataList = taskDataList; - return this; - } - - public SolutionChangesBuilder withUsersUpdate(List externalUserList) { - this.externalUserList = externalUserList; - this.executeUsersUpdate = true; - return this; - } - - public SolutionChangesBuilder withUserSystem(UserSystemService userSystemService) { - this.userSystemService = userSystemService; - return this; - } - - public SolutionChangesBuilder withContext(SolverHandlerContext context) { - this.context = context; - return this; - } - - public List> build() { - final Map taskById = solution.getTaskList() - .stream() - .filter(IS_NOT_DUMMY) - .collect(Collectors.toMap(Task::getId, Function.identity())); - - final Map usersById = solution.getUserList() - .stream() - .collect(Collectors.toMap(User::getEntityId, Function.identity())); - - final List newTaskChanges = new ArrayList<>(); - final List releasedTasksChanges = new ArrayList<>(); - final List removedTaskChanges = new ArrayList<>(); - final Set removedTasksSet = new HashSet<>(); - final List propertyChanges = new ArrayList<>(); - final Map>> changesByUserId = new HashMap<>(); - final List newUserChanges = new ArrayList<>(); - final List> userUpdateChanges = new ArrayList<>(); - final List removableUserChanges = new ArrayList<>(); - - final List filteredTaskDataList = taskDataList.stream() - .filter(taskData -> !context.isProcessedTaskChange(taskData.getTaskId(), taskData.getLastModificationDate())) - .collect(Collectors.toList()); - - Task task; - for (TaskData taskData : filteredTaskDataList) { - task = taskById.remove(taskData.getTaskId()); - if (task == null) { - addNewTaskChanges(taskData, usersById, newTaskChanges, changesByUserId); - } else { - addTaskChanges(task, taskData, usersById, releasedTasksChanges, removedTasksSet, propertyChanges, changesByUserId); - } - } - - for (Task removedTask : removedTasksSet) { - removedTaskChanges.add(new RemoveTaskProblemFactChange(removedTask)); - } - - if (executeUsersUpdate) { - addUserChanges(usersById, newUserChanges, userUpdateChanges); - } else { - addRemovableUserChanges(changesByUserId, removableUserChanges); - } - - List> totalChanges = new ArrayList<>(); - totalChanges.addAll(newUserChanges); - totalChanges.addAll(removedTaskChanges); - totalChanges.addAll(releasedTasksChanges); - changesByUserId.values().forEach(byUserChanges -> byUserChanges.forEach(change -> totalChanges.add(change.getElement()))); - totalChanges.addAll(propertyChanges); - totalChanges.addAll(userUpdateChanges); - totalChanges.addAll(newTaskChanges); - totalChanges.addAll(removableUserChanges); - - if (LOGGER.isTraceEnabled()) { - if (!totalChanges.isEmpty()) { - traceProgrammedChanges(LOGGER, removedTaskChanges, releasedTasksChanges, changesByUserId, - propertyChanges, newTaskChanges, newUserChanges, userUpdateChanges, removableUserChanges); - } else { - LOGGER.trace("No changes has been calculated."); - } - } - - applyWorkaroundForPLANNER241(solution, totalChanges); - - if (!totalChanges.isEmpty()) { - totalChanges.add(0, scoreDirector -> context.setCurrentChangeSetId(context.nextChangeSetId())); - } - filteredTaskDataList.forEach(taskData -> context.setTaskChangeTime(taskData.getTaskId(), taskData.getLastModificationDate())); - return totalChanges; - } - - private void addNewTaskChanges(final TaskData taskData, - final Map usersById, - final List newTaskChanges, - final Map>> changesByUserId) { - Task newTask; - final Status taskDataStatus = convertFromString(taskData.getStatus()); - switch (taskDataStatus) { - case Ready: - newTask = fromTaskData(taskData); - newTaskChanges.add(new AddTaskProblemFactChange(newTask)); - break; - case Reserved: - case InProgress: - case Suspended: - - // if Reserved: - // the task was created and reserved completely outside of the planner. We add it to the - // solution. - // if InProgress: - // the task was created, reserved and started completely outside of the planner. - // We add it to the solution since this assignment might affect the workload, etc., of the plan. - // if Suspended: - // the task was created, eventually assigned and started, suspended etc. completely outside of - // the planner. - // In cases where taskData.getActualOwner() is null do nothing, the task was assigned to nobody. - // So it was necessary in Ready status prior Suspension. It'll be added to the solution if it - // comes into Ready or Reserved status in a later moment. - - if (taskData.getActualOwner() != null) { - newTask = fromTaskData(taskData); - final User user = getUser(usersById, taskData.getActualOwner()); - // assign and ensure the task is published since the task was already seen by the public audience. - AssignTaskProblemFactChange change = new AssignTaskProblemFactChange(newTask, user, true); - addChangeToUser(changesByUserId, change, user, -1, true); - } - break; - default: - // sonar required. Tasks in this cases were typically crated and moved into a sink status completely - // out of the refresh interval, so there's nothing to do with them. - break; - } - } - - private void addTaskChanges(final Task task, - final TaskData taskData, - final Map usersById, - final List releasedTasksChanges, - final Set removedTasksSet, - final List propertyChanges, - final Map>> changesByUserId) { - final Status taskDataStatus = convertFromString(taskData.getStatus()); - switch (taskDataStatus) { - case Ready: - if (!convertToString(Status.Ready).equals(task.getStatus())) { - // task was probably assigned to someone else in the past and released from the task - // list administration - releasedTasksChanges.add(new ReleaseTaskProblemFactChange(task)); - } - break; - case Reserved: - case InProgress: - case Suspended: - if (taskData.getActualOwner() == null) { - // Task was necessary in Ready status prior going into Suspension. Remove it from solution - // and let it be added again if it comes into Ready or Reserved status in a later moment. - removedTasksSet.add(task); - } else if (!taskData.getActualOwner().equals(task.getUser().getEntityId())) { - // if Reserved: - // the task was probably manually re-assigned from the task list to another user. - // We must respect this assignment. - // if InProgress: - // the task was probably re-assigned to another user from the task list prior to start. - // We must correct this assignment so it's reflected in the plan and also respect it. - // if Suspended: - // the task was assigned to someone else from the task list prior to the suspension, - // we must reflect that change in the plan. - - final User user = getUser(usersById, taskData.getActualOwner()); - - // assign and ensure the task is published since the task was already seen by the public audience. - AssignTaskProblemFactChange change = new AssignTaskProblemFactChange(task, user, true); - addChangeToUser(changesByUserId, change, user, -1, true); - } else if ((taskData.getPlanningTask() == null || taskData.getPlanningTask().getPublished()) && !task.isPinned()) { - // The task was published and not yet pinned - final User user = getUser(usersById, taskData.getActualOwner()); - AssignTaskProblemFactChange change = new AssignTaskProblemFactChange(task, user, true); - int index = taskData.getPlanningTask() != null ? taskData.getPlanningTask().getIndex() : -1; - addChangeToUser(changesByUserId, change, user, index, true); - } - break; - case Completed: - case Exited: - case Failed: - case Error: - case Obsolete: - removedTasksSet.add(task); - break; - default: - // sonar required. No other cases exist. - break; - } - - if (!removedTasksSet.contains(task) && (taskData.getPriority() != task.getPriority() || !taskData.getStatus().equals(task.getStatus()))) { - TaskPropertyChangeProblemFactChange propertyChange = new TaskPropertyChangeProblemFactChange(task); - if (taskData.getPriority() != task.getPriority()) { - propertyChange.setPriority(taskData.getPriority()); - } - if (!taskData.getStatus().equals(task.getStatus())) { - propertyChange.setStatus(taskData.getStatus()); - } - propertyChanges.add(propertyChange); - } - } - - private void addUserChanges(final Map usersById, - final List newUserChanges, - final List> updateUserChanges) { - final Set updatedUserIds = new HashSet<>(); - filterDuplicates(externalUserList) - .filter(externalUser -> !IS_PLANNING_USER.test(externalUser.getId())) - .map(UserUtil::fromExternalUser) - .forEach(user -> { - final User previousUser = usersById.get(user.getEntityId()); - updatedUserIds.add(user.getEntityId()); - if (previousUser == null) { - newUserChanges.add(new AddUserProblemFactChange(user)); - } else if (!equalsByProperties(previousUser, user)) { - updateUserChanges.add(new UserPropertyChangeProblemFactChange(previousUser, - true, - user.getAttributes(), - user.getAllLabelValues(), - user.getGroups())); - } - } - ); - - usersById.values().stream() - .filter(user -> !IS_PLANNING_USER.test(user.getEntityId())) - .filter(user -> !updatedUserIds.contains(user.getEntityId())) - .filter(User::isEnabled) - .forEach(user -> updateUserChanges.add(new DisableUserProblemFactChange(user))); - } - - private void addRemovableUserChanges(final Map>> changesByUserId, - final List removableUserChanges) { - solution.getUserList().stream() - .filter(user -> !IS_PLANNING_USER.test(user.getEntityId())) - .filter(user -> !user.isEnabled()) - .filter(user -> !changesByUserId.containsKey(user.getEntityId())) - .filter(user -> !hasPinnedTasks(user)) - .forEach(user -> removableUserChanges.add(new RemoveUserProblemFactChange(user))); - } - - private static boolean equalsByProperties(User a, User b) { - return Objects.equals(a.isEnabled(), b.isEnabled()) && - Objects.equals(a.getGroups(), b.getGroups()) && - Objects.equals(a.getAttributes(), b.getAttributes()) && - Objects.equals(a.getAllLabelValues(), b.getAllLabelValues()); - } - - private static void addChangeToUser(Map>> changesByUserId, - AssignTaskProblemFactChange change, - User user, - int index, - boolean pinned) { - final List> userChanges = changesByUserId.computeIfAbsent(user.getEntityId(), key -> new ArrayList<>()); - addInOrder(userChanges, new IndexedElement<>(change, index, pinned)); - } - - private User getUser(Map usersById, String userId) { - User user = usersById.get(userId); - if (user == null) { - LOGGER.debug("User {} was not found in current solution, it'll we looked up in the external user system .", userId); - org.kie.server.services.taskassigning.user.system.api.User externalUser = userSystemService.findUser(userId); - if (externalUser != null) { - user = fromExternalUser(externalUser); - } else { - // We add it by convention, since the task list administration supports the delegation to non-existent users. - LOGGER.debug("User {} was not found in the external user system, it looks like it's a manual" + - " assignment from the tasks administration. It'll be added to the solution" + - " to respect the assignment.", userId); - user = new User(userId.hashCode(), userId); - } - } - return user; - } - - /** - * This method adds a second dummy task for avoiding the issue produced by https://issues.jboss.org/browse/PLANNER-241 - * and will be removed as soon it's fixed. Note that workaround doesn't have a huge impact on the solution since - * the dummy task is added only once and to the planning user. - */ - private void applyWorkaroundForPLANNER241(TaskAssigningSolution solution, List> changes) { - boolean hasDummyTask241 = solution.getTaskList().stream().anyMatch(task -> DUMMY_TASK_PLANNER_241.getId().equals(task.getId())); - if (!hasDummyTask241) { - changes.add(new AssignTaskProblemFactChange(DUMMY_TASK_PLANNER_241, PLANNING_USER)); - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolutionProcessor.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolutionProcessor.java deleted file mode 100644 index 23ddeee526..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolutionProcessor.java +++ /dev/null @@ -1,188 +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.planning; - -import java.util.List; -import java.util.concurrent.Semaphore; -import java.util.function.Consumer; - -import org.kie.server.api.model.taskassigning.PlanningExecutionResult; -import org.kie.server.api.model.taskassigning.PlanningItem; -import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.kie.server.services.taskassigning.planning.RunnableBase.Status.STARTED; -import static org.kie.server.services.taskassigning.planning.RunnableBase.Status.STARTING; -import static org.kie.server.services.taskassigning.planning.RunnableBase.Status.STOPPED; -import static org.kie.server.services.taskassigning.planning.TraceHelper.tracePublishedTasks; -import static org.kie.server.services.taskassigning.planning.TraceHelper.traceSolution; -import static org.kie.soup.commons.validation.PortablePreconditions.checkCondition; -import static org.kie.soup.commons.validation.PortablePreconditions.checkNotNull; - -/** - * This class manges the processing of new a solution produced by the solver. - */ -public class SolutionProcessor extends RunnableBase { - - private static final Logger LOGGER = LoggerFactory.getLogger(SolutionProcessor.class); - - private final TaskAssigningRuntimeDelegate delegate; - private final Consumer resultConsumer; - private final String targetUserId; - private final int publishWindowSize; - - private final Semaphore solutionResource = new Semaphore(0); - - private TaskAssigningSolution solution; - - public static class Result { - - private Exception exception; - - private PlanningExecutionResult executionResult; - - private Result() { - - } - - public Result(Exception exception) { - this.exception = exception; - } - - public Result(PlanningExecutionResult executionResult) { - this.executionResult = executionResult; - } - - public boolean hasException() { - return exception != null; - } - - public Exception getException() { - return exception; - } - - public PlanningExecutionResult getExecutionResult() { - return executionResult; - } - } - - /** - * @param delegate a TaskAssigningRuntimeDelegate instance for executing methods into the jBPM runtime. - * @param resultConsumer a consumer for processing the results. - * @param targetUserId a user identifier for using as the "on behalf of" user when interacting with the jBPM runtime. - * @param publishWindowSize Integer value > 0 that indicates the number of tasks to be published. - */ - public SolutionProcessor(final TaskAssigningRuntimeDelegate delegate, - final Consumer resultConsumer, - final String targetUserId, - final int publishWindowSize) { - checkNotNull("delegate", delegate); - checkNotNull("resultConsumer", resultConsumer); - checkNotNull("targetUserId", targetUserId); - checkCondition("publishWindowSize", publishWindowSize > 0); - this.delegate = delegate; - this.resultConsumer = resultConsumer; - this.targetUserId = targetUserId; - this.publishWindowSize = publishWindowSize; - } - - /** - * @return true if a solution is being processed at this time, false in any other case. - */ - public boolean isProcessing() { - Status currentStatus = status.get(); - return STARTING == currentStatus || STARTED == currentStatus; - } - - /** - * This method is invoked from a different thread for doing the processing of a solution. - * If a solution is being processed an exception is thrown, so it's expected that any synchronization required - * between the isProcessing() and process() methods is performed by the caller. - * Since only one solution can be processed at time, the caller should typically execute in the following sequence. - * if (!solutionProcessor.isProcessing()) { - * solutionProcessor.process(solution); - * } else { - * //invoke at a later time. - * } - * A null value will throw an exception too. - * @param solution a solution to process. - */ - public void process(final TaskAssigningSolution solution) { - checkNotNull("solution", solution); - if (!status.compareAndSet(STOPPED, STARTING)) { - throw new IllegalStateException("SolutionProcessor process method can only be invoked when the status is STOPPED"); - } - this.solution = solution; - solutionResource.release(); - } - - @Override - public void destroy() { - super.destroy(); - solutionResource.release(); //un-lock in case it was waiting for a solution to process. - } - - @Override - public void run() { - while (isAlive()) { - try { - solutionResource.acquire(); - if (isAlive() && status.compareAndSet(STARTING, STARTED)) { - doProcess(solution); - } - } catch (InterruptedException e) { - super.destroy(); - Thread.currentThread().interrupt(); - LOGGER.error("Solution Processor was interrupted", e); - } - } - super.destroy(); - LOGGER.debug("Solution Processor finished"); - } - - protected void doProcess(final TaskAssigningSolution solution) { - LOGGER.debug("Starting processing of solution: {}", solution); - final List publishedTasks = buildPlanning(solution, publishWindowSize); - if (LOGGER.isTraceEnabled()) { - traceSolution(LOGGER, solution); - tracePublishedTasks(LOGGER, publishedTasks); - } - - Result result; - try { - PlanningExecutionResult executeResult = delegate.executePlanning(publishedTasks, targetUserId); - result = new Result(executeResult); - } catch (Exception e) { - LOGGER.error("An error was produced during solution processing, planning execution failed.", e); - result = new Result(e); - } - - LOGGER.debug("Solution processing finished: {}", solution); - if (isAlive()) { - resultConsumer.accept(result); - status.compareAndSet(STARTED, STOPPED); - } - } - - List buildPlanning(TaskAssigningSolution solution, int publishWindowSize) { - return PlanningBuilder.create() - .withSolution(solution) - .withPublishWindowSize(publishWindowSize) - .build(); - } -} \ 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-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolutionSynchronizer.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolutionSynchronizer.java deleted file mode 100644 index c49bca6adb..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolutionSynchronizer.java +++ /dev/null @@ -1,417 +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.planning; - -import java.time.Duration; -import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.Semaphore; -import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Consumer; - -import org.apache.commons.lang3.tuple.Pair; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.api.model.taskassigning.TaskInputVariablesReadMode; -import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution; -import org.kie.server.services.taskassigning.user.system.api.User; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; -import org.optaplanner.core.impl.solver.ProblemFactChange; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.kie.api.task.model.Status.InProgress; -import static org.kie.api.task.model.Status.Ready; -import static org.kie.api.task.model.Status.Reserved; -import static org.kie.api.task.model.Status.Suspended; -import static org.kie.server.services.taskassigning.planning.RunnableBase.Status.STARTED; -import static org.kie.server.services.taskassigning.planning.RunnableBase.Status.STOPPED; -import static org.kie.soup.commons.validation.PortablePreconditions.checkGreaterOrEqualTo; -import static org.kie.soup.commons.validation.PortablePreconditions.checkGreaterThan; -import static org.kie.soup.commons.validation.PortablePreconditions.checkNotNull; - -/** - * This class manages the periodical reading (polling strategy) of current tasks from the jBPM runtime and depending - * on the "action" INIT_SOLVER_EXECUTOR / SYNCHRONIZE_SOLUTION determines if the solver executor must be restarted with - * a fully recovered solution or instead the tasks updated information is used for calculating the required changes - * for the proper solution update. If any changes are calculated they are notified to the resultConsumer. - * This class implements proper retries in case of connection issues with the target jBPM runtime, etc. - */ -public class SolutionSynchronizer extends RunnableBase { - - enum Action { - INIT_SOLVER_EXECUTOR, - SYNCHRONIZE_SOLUTION, - } - - private static final Logger LOGGER = LoggerFactory.getLogger(SolutionSynchronizer.class); - - private final SolverExecutor solverExecutor; - private final TaskAssigningRuntimeDelegate delegate; - private final UserSystemService userSystemService; - private final Duration syncInterval; - private final Duration usersSyncInterval; - private long nextUsersSyncTime; - private Duration unchangedPeriodTimeout; - private long nextUnchangedPeriodTime; - private final SolverHandlerContext context; - private final Consumer resultConsumer; - private int solverExecutorStarts = 0; - private TaskAssigningSolution solution; - private LocalDateTime fromLastModificationDate; - private AtomicReference action = new AtomicReference<>(null); - private final Semaphore startPermit = new Semaphore(0); - - public static class Result { - - private enum ResultType { - CHANGES_FOUND, - UNCHANGED_PERIOD_TIMEOUT - } - - private List> changes; - - private ResultType type; - - private Result() { - } - - private Result(ResultType type) { - this.type = type; - } - - private Result(List> changes) { - this(ResultType.CHANGES_FOUND); - this.changes = changes; - } - - static Result forChanges(List> changes) { - return new Result(changes); - } - - static Result forUnchangedPeriodTimeout() { - return new Result(ResultType.UNCHANGED_PERIOD_TIMEOUT); - } - - public boolean hasChanges() { - return ResultType.CHANGES_FOUND == type; - } - - public List> getChanges() { - return changes; - } - } - - public SolutionSynchronizer(final SolverExecutor solverExecutor, - final TaskAssigningRuntimeDelegate delegate, - final UserSystemService userSystem, - final Duration syncInterval, - final Duration usersSyncInterval, - final SolverHandlerContext context, - final Consumer resultConsumer) { - checkNotNull("solverExecutor", solverExecutor); - checkNotNull("delegate", delegate); - checkNotNull("userSystem", userSystem); - checkNotNull("context", context); - checkNotNull("resultConsumer", resultConsumer); - checkGreaterThan("syncInterval", syncInterval, Duration.ZERO); - checkGreaterOrEqualTo("usersSyncInterval", usersSyncInterval, Duration.ZERO); - this.solverExecutor = solverExecutor; - this.delegate = delegate; - this.userSystemService = userSystem; - this.syncInterval = syncInterval; - this.usersSyncInterval = usersSyncInterval; - this.context = context; - this.resultConsumer = resultConsumer; - this.nextUsersSyncTime = calculateNextUsersSyncTime(); - } - - public void initSolverExecutor() { - if (!status.compareAndSet(STOPPED, STARTED)) { - throw new IllegalStateException("SolutionSynchronizer initSolverExecutor method can only be invoked when the status is STOPPED"); - } - action.set(Action.INIT_SOLVER_EXECUTOR); - startPermit.release(); - } - - /** - * Starts the synchronization of the solution from the indicated last modification date. - * @param solution a non null solution instance to synchronize. - * @param fromLastModificationDate filtering parameter for reading the modifications. - */ - public void synchronizeSolution(TaskAssigningSolution solution, LocalDateTime fromLastModificationDate) { - synchronizeSolution(solution, fromLastModificationDate, Duration.ofMillis(0)); - } - - /** - * Starts the synchronization of the solution from the indicated last modification date. - * @param solution a non null solution instance to synchronize. - * @param fromLastModificationDate filtering parameter for reading the modifications. - * @param unchangedPeriodTimeout a non null period of time for returning from the synchronization if no changes were - * produced during that period. A negative or zero period is ignored. - */ - public void synchronizeSolution(TaskAssigningSolution solution, LocalDateTime fromLastModificationDate, Duration unchangedPeriodTimeout) { - checkNotNull("solution", solution); - checkGreaterOrEqualTo("unchangedPeriodTimeout", unchangedPeriodTimeout, Duration.ZERO); - if (!status.compareAndSet(STOPPED, STARTED)) { - throw new IllegalStateException("SolutionSynchronizer synchronizeSolution method can only be invoked when the status is STOPPED"); - } - this.solution = solution; - this.fromLastModificationDate = fromLastModificationDate; - this.unchangedPeriodTimeout = unchangedPeriodTimeout; - this.nextUnchangedPeriodTime = calculateNextUnchangedPeriodTime(unchangedPeriodTimeout); - action.set(Action.SYNCHRONIZE_SOLUTION); - LOGGER.debug("Start synchronizeSolution fromLastModificationDate: {}", fromLastModificationDate); - startPermit.release(); - } - - /** - * Starts the synchronizing finalization, that will be produced as soon as possible. - * It's a non thread-safe method, but only first invocation has effect. - */ - @Override - public void destroy() { - super.destroy(); - startPermit.release(); //in case it's waiting for start. - } - - @Override - public void run() { - LOGGER.debug("Solution Synchronizer Started"); - Pair nextActionOrResult; - while (isAlive()) { - try { - startPermit.acquire(); - if (isAlive()) { - nextActionOrResult = executeAction(action.get()); - action.set(nextActionOrResult.getLeft()); - if (action.get() != null) { - Thread.sleep(syncInterval.toMillis()); - startPermit.release(); - } else if (isAlive() && status.compareAndSet(STARTED, STOPPED) && nextActionOrResult.getRight() != null) { - applyResult(nextActionOrResult.getRight()); - } - } - } catch (InterruptedException e) { - super.destroy(); - Thread.currentThread().interrupt(); - LOGGER.error("Solution Synchronizer was interrupted.", e); - } - } - super.destroy(); - LOGGER.debug("Solution Synchronizer finished"); - } - - Pair executeAction(Action action) { - Pair resultPair = Pair.of(null, null); - if (action == Action.INIT_SOLVER_EXECUTOR) { - resultPair = doInitSolverExecutor(); - } else if (action == Action.SYNCHRONIZE_SOLUTION) { - resultPair = doSynchronizeSolution(); - } - return resultPair; - } - - Pair doInitSolverExecutor() { - Pair nextActionOrResult = Pair.of(null, null); - try { - LOGGER.debug("Solution Synchronizer will recover the solution from the jBPM runtime for starting the solver."); - if (!solverExecutor.isStopped()) { - LOGGER.debug("Previous solver instance has not yet finished, let's wait for it to stop." + - " Next attempt will be in a period of {}.", syncInterval); - nextActionOrResult = Pair.of(Action.INIT_SOLVER_EXECUTOR, null); - } else { - final TaskAssigningSolution recoveredSolution = recoverSolution(); - if (isAlive() && !solverExecutor.isDestroyed()) { - if (!recoveredSolution.getTaskList().isEmpty()) { - solverExecutor.start(recoveredSolution); - LOGGER.debug("Solution was successfully recovered. Solver was started for #{} time.", ++solverExecutorStarts); - if (solverExecutorStarts > 1) { - LOGGER.debug("It looks like it was necessary to restart the solver. It might" + - " have been caused due to errors during the solution applying in the jBPM runtime"); - } - } else { - nextActionOrResult = Pair.of(Action.INIT_SOLVER_EXECUTOR, null); - LOGGER.debug("It looks like there are no tasks for recovering the solution at this moment." + - " Next attempt will be in a period of {}.", syncInterval); - } - } - } - } catch (Exception e) { - final String msg = String.format("An error was produced during solution recovering." + - " Next attempt will be in a period of %s, error: %s", syncInterval, e.getMessage()); - LOGGER.warn(msg); - LOGGER.debug(msg, e); - nextActionOrResult = Pair.of(Action.INIT_SOLVER_EXECUTOR, null); - } - return nextActionOrResult; - } - - Pair doSynchronizeSolution() { - Pair nextActionOrResult = Pair.of(null, null); - try { - if (solverExecutor.isStarted()) { - LOGGER.debug("Synchronizing solution status from the jBPM runtime."); - final Pair, LocalDateTime> tasksUpdateResult = loadTasksForUpdate(fromLastModificationDate); - Pair> usersUpdateResult = null; - if (isAlive() && isUsersSyncTime()) { - usersUpdateResult = loadUsersForUpdate(); - } - LOGGER.debug("Status was read successful."); - if (isAlive()) { - final List> changes = buildChanges(solution, tasksUpdateResult, usersUpdateResult); - context.setPreviousQueryTime(fromLastModificationDate); - LocalDateTime nextQueryTime = context.shiftQueryTime(trimMillis(tasksUpdateResult.getRight())); - context.setNextQueryTime(nextQueryTime); - if (!changes.isEmpty()) { - LOGGER.debug("Current solution will be updated with {} changes from last synchronization", changes.size()); - nextActionOrResult = Pair.of(null, Result.forChanges(changes)); - } else if (isUnchangedPeriodTime()) { - LOGGER.debug("There were no changes during the unchangedPeriodTimeout period of: {}, notify consumer.", unchangedPeriodTimeout); - nextActionOrResult = Pair.of(null, Result.forUnchangedPeriodTimeout()); - } else { - LOGGER.debug("There are no changes to apply from last synchronization."); - fromLastModificationDate = nextQueryTime; - nextActionOrResult = Pair.of(Action.SYNCHRONIZE_SOLUTION, null); - } - } - } - } catch (Exception e) { - final String msg = String.format("An error was produced during solution status synchronization from the jBPM runtime." + - " Next attempt will be in a period of %s, error: %s", syncInterval, e.getMessage()); - LOGGER.warn(msg); - LOGGER.debug(msg, e); - nextActionOrResult = Pair.of(Action.SYNCHRONIZE_SOLUTION, null); - } - return nextActionOrResult; - } - - protected void applyResult(Result result) { - resultConsumer.accept(result); - } - - private Pair> loadUsersForUpdate() { - try { - LOGGER.debug("Loading users information from the external UserSystemService"); - final List userList = userSystemService.findAllUsers(); - final int userListSize = userList != null ? userList.size() : 0; - LOGGER.debug("Users information was loaded successful: {} users were returned from external system, next synchronization will be in a period of {}", - userListSize, usersSyncInterval); - nextUsersSyncTime = calculateNextUsersSyncTime(); - return Pair.of(true, userList); - } catch (Exception e) { - final String msg = String.format("An error was produced during users information loading from the external UserSystem repository." + - " Tasks status will still be updated and users synchronization next attempt will be in a period of %s, error: %s", - syncInterval, e.getMessage()); - LOGGER.warn(msg); - LOGGER.debug(msg, e); - return Pair.of(false, Collections.emptyList()); - } - } - - protected boolean isUsersSyncTime() { - return usersSyncInterval.toMillis() > 0 && getSystemTime() > nextUsersSyncTime; - } - - protected long calculateNextUsersSyncTime() { - return getSystemTime() + usersSyncInterval.toMillis(); - } - - protected boolean isUnchangedPeriodTime() { - return unchangedPeriodTimeout.toMillis() > 0 && getSystemTime() > nextUnchangedPeriodTime; - } - - protected long calculateNextUnchangedPeriodTime(Duration unchangedPeriodTimeoutShift) { - return getSystemTime() + unchangedPeriodTimeoutShift.toMillis(); - } - - protected long getSystemTime() { - return System.currentTimeMillis(); - } - - protected List> buildChanges(TaskAssigningSolution solution, - Pair, LocalDateTime> tasksUpdateResult, - Pair> usersUpdateResult) { - if (usersUpdateResult != null && usersUpdateResult.getLeft()) { - return buildChanges(solution, tasksUpdateResult.getLeft(), usersUpdateResult.getRight()); - } else { - return buildChanges(solution, tasksUpdateResult.getLeft()); - } - } - - protected List> buildChanges(TaskAssigningSolution solution, - List updatedTaskDataList) { - return buildChanges(solution, updatedTaskDataList, null); - } - - protected List> buildChanges(TaskAssigningSolution solution, - List updatedTaskDataList, - List updatedUserList) { - SolutionChangesBuilder builder = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(updatedTaskDataList) - .withUserSystem(userSystemService) - .withContext(context); - if (updatedUserList != null) { - builder.withUsersUpdate(updatedUserList); - } - return builder.build(); - } - - private TaskAssigningSolution recoverSolution() { - final TaskAssigningRuntimeDelegate.FindTasksResult result = delegate.findTasks(Arrays.asList(Ready, - Reserved, - InProgress, - Suspended), - null, - TaskInputVariablesReadMode.READ_FOR_ALL); - - final LocalDateTime nextQueryTime = context.shiftQueryTime(trimMillis(result.getQueryTime())); - final LocalDateTime adjustedFirstQueryTime = context.shiftQueryTime(nextQueryTime); - context.setPreviousQueryTime(adjustedFirstQueryTime); - context.setNextQueryTime(nextQueryTime); - context.clearTaskChangeTimes(); - final List taskDataList = result.getTasks(); - LOGGER.debug("{} tasks where loaded for solution recovery, with result.queryTime: {}", taskDataList.size(), result.getQueryTime()); - final List externalUsers = userSystemService.findAllUsers(); - return buildSolution(taskDataList, externalUsers); - } - - protected TaskAssigningSolution buildSolution(List taskDataList, List externalUsers) { - return SolutionBuilder.create() - .withTasks(taskDataList) - .withUsers(externalUsers) - .withContext(context) - .build(); - } - - private Pair, LocalDateTime> loadTasksForUpdate(LocalDateTime fromLastModificationDate) { - final TaskAssigningRuntimeDelegate.FindTasksResult result = delegate.findTasks(null, - fromLastModificationDate, - TaskInputVariablesReadMode.READ_FOR_ACTIVE_TASKS_WITH_NO_PLANNING_ENTITY); - LOGGER.debug("Total modifications found: {} since fromLastModificationDate: {}, with result.queryTime: {}", - result.getTasks().size(), fromLastModificationDate, result.getQueryTime()); - return Pair.of(result.getTasks(), result.getQueryTime()); - } - - private static LocalDateTime trimMillis(LocalDateTime localDateTime) { - // trim to 0 milliseconds to avoid falling into https://issues.redhat.com/browse/JBPM-8970 (but note that - // the trimming is still good to avoid any other potential date or timestamp DBMS dependent issue) - return localDateTime != null ? localDateTime.withNano(0) : null; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverBuilder.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverBuilder.java deleted file mode 100644 index 14f5d577b8..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverBuilder.java +++ /dev/null @@ -1,112 +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.planning; - -import java.util.concurrent.ThreadFactory; - -import org.kie.server.api.model.KieContainerStatus; -import org.kie.server.services.api.KieServerRegistry; -import org.kie.server.services.impl.KieContainerInstanceImpl; -import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution; -import org.optaplanner.core.api.solver.Solver; -import org.optaplanner.core.api.solver.SolverFactory; -import org.optaplanner.core.config.solver.SolverConfig; - -import static org.apache.commons.lang3.StringUtils.isEmpty; -import static org.apache.commons.lang3.StringUtils.isNotEmpty; - -public class SolverBuilder { - - static final String CONFIGURED_THREAD_FACTORY_CLASS_NOT_FOUND_ERROR = "An error was produced during threadFactoryClass initialization, class: %s was not found."; - static final String CONFIGURED_THREAD_FACTORY_CLASS_MUST_IMPLEMENT_THREAD_FACTORY = "An error was produced during threadFactoryClass initialization, class: %s must implement: %s."; - - private SolverDef solverDef; - - private KieServerRegistry registry; - - public static class SolverBuilderException extends RuntimeException { - - public SolverBuilderException(String message) { - super(message); - } - } - - private SolverBuilder() { - } - - public static SolverBuilder create() { - return new SolverBuilder(); - } - - public SolverBuilder solverDef(SolverDef solverDef) { - this.solverDef = solverDef; - return this; - } - - public SolverBuilder registry(KieServerRegistry registry) { - this.registry = registry; - return this; - } - - public Solver build() { - if (isEmpty(solverDef.getContainerId())) { - return buildFromResource(); - } else { - return buildFromContainer(); - } - } - - @SuppressWarnings("unchecked") - private Solver buildFromResource() { - final SolverConfig solverConfig = SolverConfig.createFromXmlResource(solverDef.getSolverConfigResource()); - if (isNotEmpty(solverDef.getMoveThreadCount())) { - solverConfig.setMoveThreadCount(solverDef.getMoveThreadCount()); - if (solverDef.getMoveThreadBufferSize() >= 1) { - solverConfig.setMoveThreadBufferSize(solverConfig.getMoveThreadBufferSize()); - } - } - if (isNotEmpty(solverDef.getThreadFactoryClass())) { - Class threadFactoryClass; - try { - threadFactoryClass = Class.forName(solverDef.getThreadFactoryClass()); - } catch (ClassNotFoundException e) { - throw new SolverBuilderException(String.format(CONFIGURED_THREAD_FACTORY_CLASS_NOT_FOUND_ERROR, solverDef.getThreadFactoryClass())); - } - if (!ThreadFactory.class.isAssignableFrom(threadFactoryClass)) { - throw new SolverBuilderException(String.format(CONFIGURED_THREAD_FACTORY_CLASS_MUST_IMPLEMENT_THREAD_FACTORY, solverDef.getThreadFactoryClass(), ThreadFactory.class.getName())); - } - solverConfig.setThreadFactoryClass((Class) threadFactoryClass); - } - final SolverFactory solverFactory = SolverFactory.create(solverConfig); - return solverFactory.buildSolver(); - } - - private Solver buildFromContainer() { - final KieContainerInstanceImpl containerInstance = registry.getContainer(solverDef.getContainerId()); - if (containerInstance == null) { - throw new SolverBuilderException("Container " + solverDef.getContainerId() + " was not found un current registry." + - " No solvers can be created for this container"); - } - if (containerInstance.getStatus() != KieContainerStatus.STARTED) { - throw new SolverBuilderException("Container " + solverDef.getContainerId() + " must be in " + KieContainerStatus.STARTED + - " status for creating solvers, but current status is: " + containerInstance.getStatus()); - } - final SolverFactory solverFactory = SolverFactory.createFromKieContainerXmlResource(containerInstance.getKieContainer(), - solverDef.getSolverConfigResource()); - return solverFactory.buildSolver(); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverDef.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverDef.java deleted file mode 100644 index bcb5059c23..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverDef.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.planning; - -public class SolverDef { - - private String containerId; - private String groupId; - private String artifactId; - private String version; - private String moveThreadCount; - private int moveThreadBufferSize; - private String threadFactoryClass; - - private String solverConfigResource; - - public SolverDef(String solverConfigResource) { - this.solverConfigResource = solverConfigResource; - } - - public SolverDef(String solverConfigResource, - String moveThreadCount, - int moveThreadBufferSize, - String threadFactoryClass) { - this.solverConfigResource = solverConfigResource; - this.moveThreadCount = moveThreadCount; - this.moveThreadBufferSize = moveThreadBufferSize; - this.threadFactoryClass = threadFactoryClass; - } - - public SolverDef(String containerId, - String groupId, - String artifactId, - String version, - String solverConfigResource, - String moveThreadCount, - int moveThreadBufferSize, - String threadFactoryClass) { - this.containerId = containerId; - this.groupId = groupId; - this.artifactId = artifactId; - this.version = version; - this.solverConfigResource = solverConfigResource; - this.moveThreadCount = moveThreadCount; - this.moveThreadBufferSize = moveThreadBufferSize; - this.threadFactoryClass = threadFactoryClass; - } - - public String getContainerId() { - return containerId; - } - - public String getGroupId() { - return groupId; - } - - public String getArtifactId() { - return artifactId; - } - - public String getVersion() { - return version; - } - - public String getSolverConfigResource() { - return solverConfigResource; - } - - public String getMoveThreadCount() { - return moveThreadCount; - } - - public int getMoveThreadBufferSize() { - return moveThreadBufferSize; - } - - public String getThreadFactoryClass() { - return threadFactoryClass; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverExecutor.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverExecutor.java deleted file mode 100644 index 0db58c7407..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverExecutor.java +++ /dev/null @@ -1,188 +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.planning; - -import java.util.List; -import java.util.concurrent.Semaphore; - -import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution; -import org.kie.server.services.api.KieServerRegistry; -import org.optaplanner.core.api.solver.Solver; -import org.optaplanner.core.api.solver.event.SolverEventListener; -import org.optaplanner.core.impl.solver.ProblemFactChange; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.kie.server.services.taskassigning.planning.RunnableBase.Status.DESTROYED; -import static org.kie.server.services.taskassigning.planning.RunnableBase.Status.STARTED; -import static org.kie.server.services.taskassigning.planning.RunnableBase.Status.STARTING; -import static org.kie.server.services.taskassigning.planning.RunnableBase.Status.STOPPED; -import static org.kie.server.services.taskassigning.planning.RunnableBase.Status.STOPPING; -import static org.kie.soup.commons.validation.PortablePreconditions.checkNotNull; - -/** - * This class is intended to manage the solver life-cycle in a multi-threaded environment. - */ -public class SolverExecutor extends RunnableBase { - - private static final Logger LOGGER = LoggerFactory.getLogger(SolverExecutor.class); - - private SolverDef solverDef; - private KieServerRegistry registry; - private Solver solver; - private TaskAssigningSolution solution; - private SolverEventListener eventListener; - - private final Semaphore startPermit = new Semaphore(0); - - public SolverExecutor(final SolverDef solverDef, - final KieServerRegistry registry, - final SolverEventListener eventListener) { - checkNotNull("solverDef", solverDef); - checkNotNull("registry", registry); - checkNotNull("eventListener", eventListener); - this.solverDef = solverDef; - this.registry = registry; - this.eventListener = eventListener; - } - - /** - * This method is invoked from a different thread for starting the solver and must be invoked only one time. - * If the solver was already started an exception is thrown so callers of this method should call the isStarted() - * method to verify. This method is not thread-safe so it's expected that any synchronization required between the - * isStarted(), start() and stop() methods is performed by the callers. However it's normally not expected that multiple - * threads might try to start the same solver runner instance. - * @param solution a valid solution for starting the solver with. - */ - public void start(final TaskAssigningSolution solution) { - checkNotNull("solution", solution); - if (!status.compareAndSet(STOPPED, STARTING)) { - throw new SolverExecutorException("SolverExecutor start method can only be invoked when the status is STOPPED"); - } - this.solution = solution; - try { - this.solver = buildSolver(solverDef, registry); - } catch (Exception e) { - status.set(STOPPED); - throw new SolverExecutorException(e.getMessage(), e); - } - - solver.addEventListener(event -> { - if (isAlive() && isStarted()) { - eventListener.bestSolutionChanged(event); - } - }); - startPermit.release(); - } - - protected Solver buildSolver(SolverDef solverDef, KieServerRegistry registry) { - return SolverBuilder.create() - .solverDef(solverDef) - .registry(registry) - .build(); - } - - /** - * @return true if the solver has been started, false in any other case. - */ - public boolean isStarted() { - return status.get() == STARTED; - } - - public boolean isStopped() { - return status.get() == STOPPED; - } - - /** - * Stops the solver. - */ - public void stop() { - if (!isDestroyed()) { - Status previousStatus = status.getAndSet(STOPPING); - if (previousStatus == STARTED) { - solver.terminateEarly(); - } else { - status.set(STOPPED); - } - } - } - - /** - * This method programmes the subsequent finalization of the solver (if it was started) that will be produced as - * soon as possible by invoking the solver.terminateEarly() method. If the solver wasn't started it just finalizes - * current thread. - */ - @Override - public void destroy() { - if (status.getAndSet(DESTROYED) == STARTED) { - solver.terminateEarly(); - } else { - startPermit.release(); //un-lock in case it was waiting for a solution to start. - } - } - - /** - * Thread-safe method that adds a list of ProblemFactChanges to the current solver. - * If the solver has not been started an exception is thrown, so it's expected that callers of this method should - * call isStarted() method to verify. - * @param changes a list of problem fact changes to program in current solver. - */ - public void addProblemFactChanges(final List> changes) { - if (isStarted()) { - solver.addProblemFactChanges(changes); - } else { - throw new SolverExecutorException("SolverExecutor has not been started. Be sure it's started and not stopped or destroyed prior to executing this method"); - } - } - - @Override - public void run() { - while (isAlive()) { - try { - LOGGER.debug("SolverExecutor is waiting for a start(solution) method invocation for starting the Solver."); - startPermit.acquire(); - LOGGER.debug("SolverExecutor, the Solver will be started."); - if (isAlive() && status.compareAndSet(STARTING, STARTED)) { - solver.solve(solution); - if (isAlive()) { - status.set(STOPPED); - LOGGER.debug("Solver has been stopped. It can be restarted with the start(solution) method."); - } else { - LOGGER.debug("SolverExecutor has been destroyed. No more invocations can be done on this instance."); - } - } - } catch (InterruptedException e) { - super.destroy(); - Thread.currentThread().interrupt(); - LOGGER.error("SolverExecutor was interrupted.", e); - } - } - super.destroy(); - LOGGER.debug("SolverExecutor finished."); - } - - public static class SolverExecutorException extends RuntimeException { - - public SolverExecutorException(String message) { - super(message); - } - - public SolverExecutorException(String message, Throwable cause) { - super(message, cause); - } - } -} \ 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-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverHandler.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverHandler.java deleted file mode 100644 index e591f94342..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverHandler.java +++ /dev/null @@ -1,328 +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.planning; - -import java.time.Duration; -import java.time.LocalDateTime; -import java.util.List; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicReference; -import java.util.concurrent.locks.ReentrantLock; -import java.util.function.Consumer; -import java.util.function.Supplier; - -import org.kie.server.api.model.taskassigning.PlanningExecutionResult; -import org.kie.server.services.api.KieServerRegistry; -import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; -import org.optaplanner.core.api.solver.event.BestSolutionChangedEvent; -import org.optaplanner.core.api.solver.event.SolverEventListener; -import org.optaplanner.core.impl.solver.ProblemFactChange; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.kie.soup.commons.validation.PortablePreconditions.checkNotNull; - -/** - * This class handles all the work regarding with determining when the solver needs to be created, the handling of - * the produced solutions and the synchronization of the working solution with the changes that might be produced - * in the jBPM runtime, etc., by coordinating the actions/results produced by the SolverExecutor, the SolutionProcessor - * and the SolutionSynchronizer. - */ -public class SolverHandler { - - private static final Logger LOGGER = LoggerFactory.getLogger(SolverHandler.class); - - private static final long EXECUTOR_TERMINATION_TIMEOUT = 5; - - private final SolverDef solverDef; - private final KieServerRegistry registry; - private final TaskAssigningRuntimeDelegate delegate; - private final UserSystemService userSystemService; - private final ScheduledExecutorService executorService; - private final SolverHandlerConfig config; - - /** - * Synchronizes potential concurrent accesses by the SolverWorker, SolutionProcessor and SolutionSynchronizer. - */ - private final ReentrantLock lock = new ReentrantLock(); - private AtomicReference currentSolution = new AtomicReference<>(null); - private AtomicReference lastBestSolution = new AtomicReference<>(null); - private AtomicBoolean onBackgroundImprovedSolutionSent = new AtomicBoolean(false); - - private AtomicReference> scheduledFuture = new AtomicReference<>(null); - - private SolverExecutor solverExecutor; - private SolverHandlerContext context; - private SolutionSynchronizer solutionSynchronizer; - private SolutionProcessor solutionProcessor; - - public SolverHandler(final SolverDef solverDef, - final KieServerRegistry registry, - final TaskAssigningRuntimeDelegate delegate, - final UserSystemService userSystemService, - final ScheduledExecutorService executorService, - final SolverHandlerConfig config) { - checkNotNull("solverDef", solverDef); - checkNotNull("registry", registry); - checkNotNull("delegate", delegate); - checkNotNull("userSystemService", userSystemService); - checkNotNull("executorService", executorService); - checkNotNull("config", config); - this.solverDef = solverDef; - this.registry = registry; - this.delegate = delegate; - this.userSystemService = userSystemService; - this.executorService = executorService; - this.config = config; - this.context = new SolverHandlerContext(config.getSyncQueriesShift()); - } - - public void start() { - solverExecutor = createSolverExecutor(solverDef, registry, this::onBestSolutionChange); - solutionSynchronizer = createSolutionSynchronizer(solverExecutor, delegate, userSystemService, - config.getSyncInterval(), config.getUsersSyncInterval(), context, this::onSolutionSynchronized); - solutionProcessor = createSolutionProcessor(delegate, this::onSolutionProcessed, config.getTargetUserId(), - config.getPublishWindowSize()); - executorService.execute(solverExecutor); //is started/stopped on demand by the SolutionSynchronizer. - executorService.execute(solutionSynchronizer); - executorService.execute(solutionProcessor); - solutionSynchronizer.initSolverExecutor(); - } - - public void destroy() { - solverExecutor.destroy(); - solutionSynchronizer.destroy(); - solutionProcessor.destroy(); - - executorService.shutdown(); - try { - executorService.awaitTermination(EXECUTOR_TERMINATION_TIMEOUT, TimeUnit.SECONDS); - LOGGER.debug("ExecutorService was successfully shutted down."); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - LOGGER.debug("An exception was thrown during executionService graceful termination.", e); - executorService.shutdownNow(); - } - } - - SolverExecutor createSolverExecutor(SolverDef solverDef, - KieServerRegistry registry, - SolverEventListener listener) { - return new SolverExecutor(solverDef, registry, listener); - } - - SolutionSynchronizer createSolutionSynchronizer(SolverExecutor solverExecutor, - TaskAssigningRuntimeDelegate delegate, - UserSystemService userSystemService, - Duration syncInterval, - Duration usersSyncInterval, - SolverHandlerContext context, - Consumer resultConsumer) { - return new SolutionSynchronizer(solverExecutor, delegate, userSystemService, syncInterval, usersSyncInterval, context, resultConsumer); - } - - SolutionProcessor createSolutionProcessor(TaskAssigningRuntimeDelegate delegate, - Consumer resultConsumer, - String targetUserId, - int publishWindowSize) { - return new SolutionProcessor(delegate, resultConsumer, targetUserId, publishWindowSize); - } - - private void addProblemFactChanges(List> changes) { - checkNotNull("changes", changes); - if (!solverExecutor.isStarted()) { - LOGGER.info("SolverExecutor has not been started. Changes will be discarded {}", changes); - return; - } - if (!changes.isEmpty()) { - onBackgroundImprovedSolutionSent.set(false); - solverExecutor.addProblemFactChanges(changes); - } else { - LOGGER.info("It looks like an empty change list was provided. Nothing will be done since it has no effect on the solution."); - } - } - - /** - * Invoked when the solver produces a new solution. - * @param event event produced by the solver. - */ - private void onBestSolutionChange(BestSolutionChangedEvent event) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("onBestSolutionChange: isEveryProblemFactChangeProcessed: {}, currentChangeSetId: {}," + - " isCurrentChangeSetProcessed: {}, newBestSolution: {}", - event.isEveryProblemFactChangeProcessed(), context.getCurrentChangeSetId(), - context.isCurrentChangeSetProcessed(), event.getNewBestSolution()); - } - - TaskAssigningSolution newBestSolution = event.getNewBestSolution(); - if (event.isEveryProblemFactChangeProcessed() && newBestSolution.getScore().isSolutionInitialized()) { - lastBestSolution.set(newBestSolution); - if (hasWaitForImprovedSolutionDuration()) { - scheduleOnBestSolutionChange(newBestSolution, config.getWaitForImprovedSolutionDuration().toMillis()); - } else { - onBestSolutionChange(newBestSolution); - } - } - } - - private void scheduleOnBestSolutionChange(TaskAssigningSolution chBestSolution, long delay) { - if (scheduledFuture.get() == null && !context.isCurrentChangeSetProcessed()) { - lock.lock(); - LOGGER.debug("Schedule execute solution change with previous chBestSolution: {}", chBestSolution); - try { - Supplier solutionSupplier = () -> lastBestSolution.get(); - ScheduledFuture future = executorService.schedule(() -> executeSolutionChange(chBestSolution, solutionSupplier), - delay, - TimeUnit.MILLISECONDS); - scheduledFuture.set(future); - } finally { - lock.unlock(); - } - } - } - - private void onBestSolutionChange(TaskAssigningSolution newBestSolution) { - if (!context.isCurrentChangeSetProcessed()) { - executeSolutionChange(newBestSolution); - } - } - - private void executeSolutionChange(TaskAssigningSolution chBestSolution, Supplier solutionSupplier) { - lock.lock(); - try { - TaskAssigningSolution currentLastBestSolution = solutionSupplier.get(); - LOGGER.debug("Executing delayed solution change for currentChangeSetId: {}, lastBestSolution: {}, lastBestSolution: {}", - context.getCurrentChangeSetId(), currentLastBestSolution.getScore(), currentLastBestSolution); - - if (chBestSolution == currentLastBestSolution) { - LOGGER.debug("SAME SOLUTION: lastBestSolution is the same as the chBestSolution"); - } else { - if (chBestSolution.getScore().compareTo(currentLastBestSolution.getScore()) < 0) { - LOGGER.debug("SCORE IMPROVEMENT: lastBestSolution has a better score than the chBestSolution: " + - "currentChangeSetId: {}, chBestSolution: {}, chBestSolution: {}", - context.getCurrentChangeSetId(), chBestSolution.getScore(), chBestSolution); - } else { - LOGGER.debug("SAME SCORE: lastBestSolution is not the same as the chBestSolution BUT score has not improved" + - ", currentChangeSetId: {}, chBestSolution: {}, chBestSolution: {}", - context.getCurrentChangeSetId(), chBestSolution.getScore(), chBestSolution); - } - } - executeSolutionChange(currentLastBestSolution); - } finally { - scheduledFuture.set(null); - lock.unlock(); - } - } - - private void executeSolutionChange(TaskAssigningSolution solution) { - lock.lock(); - try { - currentSolution.set(solution); - context.setProcessedChangeSet(context.getCurrentChangeSetId()); - solutionProcessor.process(currentSolution.get()); - } finally { - lock.unlock(); - } - } - - /** - * Invoked when the last produced solution has been processed by the SolutionProcessor. - * @param result result produced by the SolutionProcessor. - */ - private void onSolutionProcessed(SolutionProcessor.Result result) { - lock.lock(); - try { - if (result.hasException() || (result.getExecutionResult().hasError() && !isRecoverableError(result.getExecutionResult().getError()))) { - LOGGER.error("An error was produced during the solution processing. The solver will be restarted with" - + " a recovered solution from the jBPM runtime.", result.hasException() ? result.getException() : result.getExecutionResult().getError()); - solverExecutor.stop(); - context.clearProcessedChangeSet(); - solutionSynchronizer.initSolverExecutor(); - currentSolution.set(null); - lastBestSolution.set(null); - onBackgroundImprovedSolutionSent.set(false); - } else { - LocalDateTime fromLastModificationDate; - if (result.getExecutionResult().hasError()) { - LOGGER.debug("A recoverable error was produced during solution processing. errorCode: {}, message: {} " + - "Solution will be properly updated on next refresh", result.getExecutionResult().getError(), result.getExecutionResult().getErrorMessage()); - fromLastModificationDate = context.getPreviousQueryTime(); - solutionSynchronizer.synchronizeSolution(currentSolution.get(), fromLastModificationDate); - } else { - fromLastModificationDate = context.getNextQueryTime(); - context.clearTaskChangeTimes(context.getPreviousQueryTime()); - if (hasImproveSolutionOnBackgroundDuration() && !onBackgroundImprovedSolutionSent.get()) { - solutionSynchronizer.synchronizeSolution(currentSolution.get(), fromLastModificationDate, config.getImproveSolutionOnBackgroundDuration()); - } else { - solutionSynchronizer.synchronizeSolution(currentSolution.get(), fromLastModificationDate); - } - } - } - } finally { - lock.unlock(); - } - } - - /** - * Invoked every time the SolutionSynchronizer gets updated information from the jBPM runtime and there are changes - * to apply, or when the configurable amount of time with no changes has elapsed. - * @param result Contains the list of changes to apply. - */ - private void onSolutionSynchronized(SolutionSynchronizer.Result result) { - lock.lock(); - try { - if (result.hasChanges()) { - addProblemFactChanges(result.getChanges()); - } else { - LOGGER.debug("Processing synchronization unchanged period timeout. Checking if there is a" + - " lastBestSolution with an improved score to send"); - TaskAssigningSolution bestSolution = lastBestSolution.get(); - onBackgroundImprovedSolutionSent.set(true); - if (bestSolution.getScore().compareTo(currentSolution.get().getScore()) > 0) { - LOGGER.debug("About to process lastBestSolution after improveSolutionOnBackgroundDuration timeout with score: {}, lastBestSolution: {}.", - bestSolution.getScore(), bestSolution); - currentSolution.set(bestSolution); - solutionProcessor.process(currentSolution.get()); - } else { - LOGGER.debug("Looks like lastBestSolution is the same as the already sent currentSolution or has the same score" + - ", nothing to do. Restarting synchronization"); - LocalDateTime fromLastModificationDate = context.getNextQueryTime(); - context.clearTaskChangeTimes(context.getPreviousQueryTime()); - solutionSynchronizer.synchronizeSolution(currentSolution.get(), fromLastModificationDate); - } - } - } finally { - lock.unlock(); - } - } - - private boolean isRecoverableError(PlanningExecutionResult.ErrorCode errorCode) { - return errorCode == PlanningExecutionResult.ErrorCode.TASK_MODIFIED_SINCE_PLAN_CALCULATION_ERROR; - } - - protected boolean hasWaitForImprovedSolutionDuration() { - return config.getWaitForImprovedSolutionDuration().toMillis() > 0; - } - - protected boolean hasImproveSolutionOnBackgroundDuration() { - return config.getImproveSolutionOnBackgroundDuration().toMillis() > 0; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverHandlerConfig.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverHandlerConfig.java deleted file mode 100644 index 2ebb859152..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverHandlerConfig.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.planning; - -import java.time.Duration; - -import static org.kie.soup.commons.validation.Preconditions.checkGreaterOrEqualTo; -import static org.kie.soup.commons.validation.Preconditions.checkGreaterThan; - -public class SolverHandlerConfig { - - private String targetUserId; - private int publishWindowSize; - private Duration syncInterval; - private Duration syncQueriesShift; - private Duration usersSyncInterval; - private Duration waitForImprovedSolutionDuration; - private Duration improveSolutionOnBackgroundDuration; - - public SolverHandlerConfig(String targetUserId, - int publishWindowSize, - Duration syncInterval, - Duration syncQueriesShift, - Duration usersSyncInterval, - Duration waitForImprovedSolutionDuration, - Duration improveSolutionOnBackgroundDuration) { - if (targetUserId == null || targetUserId.isEmpty()) { - throw new IllegalArgumentException("A non empty targetUserId is expected."); - } - checkGreaterThan("publishWindowSize", publishWindowSize, 0); - checkGreaterThan("syncInterval", syncInterval, Duration.ZERO); - checkGreaterThan("syncQueriesShift", syncQueriesShift, Duration.ZERO); - checkGreaterOrEqualTo("usersSyncInterval", usersSyncInterval, Duration.ZERO); - checkGreaterOrEqualTo("waitForImprovedSolutionDuration", waitForImprovedSolutionDuration, Duration.ZERO); - checkGreaterOrEqualTo("improveSolutionOnBackgroundDuration", improveSolutionOnBackgroundDuration, Duration.ZERO); - this.targetUserId = targetUserId; - this.publishWindowSize = publishWindowSize; - this.syncInterval = syncInterval; - this.syncQueriesShift = syncQueriesShift; - this.usersSyncInterval = usersSyncInterval; - this.waitForImprovedSolutionDuration = waitForImprovedSolutionDuration; - this.improveSolutionOnBackgroundDuration = improveSolutionOnBackgroundDuration; - } - - public String getTargetUserId() { - return targetUserId; - } - - public int getPublishWindowSize() { - return publishWindowSize; - } - - public Duration getSyncInterval() { - return syncInterval; - } - - public Duration getSyncQueriesShift() { - return syncQueriesShift; - } - - public Duration getUsersSyncInterval() { - return usersSyncInterval; - } - - public Duration getWaitForImprovedSolutionDuration() { - return waitForImprovedSolutionDuration; - } - - public Duration getImproveSolutionOnBackgroundDuration() { - return improveSolutionOnBackgroundDuration; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverHandlerContext.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverHandlerContext.java deleted file mode 100644 index 9b8f018076..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/SolverHandlerContext.java +++ /dev/null @@ -1,148 +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.planning; - -import java.time.Duration; -import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; -import java.util.HashMap; -import java.util.Map; -import java.util.stream.Collectors; - -public class SolverHandlerContext { - - private long changeSetIds; - private long currentChangeSetId; - private long lastProcessedChangeSetId = -1; - private LocalDateTime previousQueryTime; - private LocalDateTime nextQueryTime; - private Map taskChangeTimes = new HashMap<>(); - private Duration queryShift; - - public SolverHandlerContext(Duration queryShift) { - this.queryShift = queryShift; - } - - public long getCurrentChangeSetId() { - return currentChangeSetId; - } - - public void setCurrentChangeSetId(long currentChangeSetId) { - this.currentChangeSetId = currentChangeSetId; - } - - public long nextChangeSetId() { - return ++changeSetIds; - } - - public boolean isProcessedChangeSet(long changeSetId) { - return changeSetId <= lastProcessedChangeSetId; - } - - public boolean isCurrentChangeSetProcessed() { - return isProcessedChangeSet(currentChangeSetId); - } - - public void setProcessedChangeSet(long changeSetId) { - this.lastProcessedChangeSetId = changeSetId; - } - - public void clearProcessedChangeSet() { - lastProcessedChangeSetId = -1; - } - - /** - * Registers the time of the last change processed for a task. - * @param taskId identifier of the task to register. - * @param changeTime the task change time to register. - */ - public void setTaskChangeTime(long taskId, LocalDateTime changeTime) { - taskChangeTimes.put(taskId, changeTime); - } - - /** - * Indicates if a change has already been processed for a given task. - * @param taskId identifier of the task to query. - * @param changeTime the task change time to query. - * @return true if the change has already been processed, false in any other case. - */ - public boolean isProcessedTaskChange(long taskId, LocalDateTime changeTime) { - return changeTime.equals(taskChangeTimes.get(taskId)); - } - - /** - * Removes all the registered task change times that occurred strictly before a given time. - * @param untilLocalDateTime the time for filtering the changes to remove. - */ - public void clearTaskChangeTimes(LocalDateTime untilLocalDateTime) { - if (untilLocalDateTime != null) { - taskChangeTimes.entrySet().stream() - .filter(entry -> untilLocalDateTime.compareTo(entry.getValue()) > 0) - .map(Map.Entry::getKey) - .collect(Collectors.toList()) - .forEach(removableChange -> taskChangeTimes.remove(removableChange)); - } - } - - /** - * Removes all the registered task time changes. - */ - public void clearTaskChangeTimes() { - taskChangeTimes.clear(); - } - - /** - * Gets the previously executed query time. - * @return the previously executed query time - */ - public LocalDateTime getPreviousQueryTime() { - return previousQueryTime; - } - - /** - * Sets the previously executed query time. - * @param previousQueryTime the query time to set. - */ - public void setPreviousQueryTime(LocalDateTime previousQueryTime) { - this.previousQueryTime = previousQueryTime; - } - - /** - * Gets the next query time to use. - * @return the query time. - */ - public LocalDateTime getNextQueryTime() { - return nextQueryTime; - } - - /** - * Sets the next query time to use. - * @param nextQueryTime the query time to set. - */ - public void setNextQueryTime(LocalDateTime nextQueryTime) { - this.nextQueryTime = nextQueryTime; - } - - /** - * Shifts a queryTime with the context configured queryShift. - * @param queryTime a query time to shift. - * @return the shifted query time or null if a null value is provided. - */ - public LocalDateTime shiftQueryTime(LocalDateTime queryTime) { - return queryTime != null ? queryTime.minus(queryShift.toMillis(), ChronoUnit.MILLIS) : null; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningConstants.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningConstants.java deleted file mode 100644 index a3222b672f..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningConstants.java +++ /dev/null @@ -1,162 +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.planning; - -public class TaskAssigningConstants { - - private TaskAssigningConstants() { - } - - /** - * Property for configuring the rest endpoint url of the kie-server with the jBPM runtime. - */ - public static final String TASK_ASSIGNING_PROCESS_RUNTIME_URL = "org.kie.server.taskAssigning.processRuntime.url"; - - /** - * Property for configuring the user for connecting with the with the jBPM runtime. - */ - public static final String TASK_ASSIGNING_PROCESS_RUNTIME_USER = "org.kie.server.taskAssigning.processRuntime.user"; - - /** - * Property for configuring the user password for connecting with the jBPM runtime. - */ - public static final String TASK_ASSIGNING_PROCESS_RUNTIME_PWD = "org.kie.server.taskAssigning.processRuntime.pwd"; - - /** - * Property for configuring the alias of the user password for connecting with the jBPM runtime in cases where the - * kie-server key store is used. - */ - public static final String TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_ALIAS = "org.kie.server.taskAssigning.processRuntime.key.alias"; - - /** - * Property for configuring the password for getting the key stored under the alias name - * TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_ALIAS in cases where the kie-server key store is used. - */ - public static final String TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_PWD = "org.kie.server.taskAssigning.processRuntime.key.pwd"; - - /** - * Property for configuring the connection timeout when interacting with the jBPM runtime. - */ - public static final String TASK_ASSIGNING_PROCESS_RUNTIME_TIMEOUT = "org.kie.server.taskAssigning.processRuntime.timeout"; - - /** - * Property for configuring a user identifier for using as the "on behalf of" user when interacting with the jBPM runtime. - */ - public static final String TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER = "org.kie.server.taskAssigning.processRuntime.targetUser"; - - /** - * Property for configuring the size of the tasks publish window. - */ - public static final String TASK_ASSIGNING_PUBLISH_WINDOW_SIZE = "org.kie.server.taskAssigning.publishWindowSize"; - - /** - * Property for configuring the solution synchronization period. This value is "normally" a short interval in - * milliseconds. - * The formats accepted are based on the ISO-8601 duration format {@code PnDTnHnMn.nS} with days considered to - * be exactly 24 hours. - *

- * e.g. - * "PT1.500S" configures 1500 milliseconds. - * "PT0.500S" configures 500 milliseconds. - * "PT3S" configures 3000 milliseconds. - */ - public static final String TASK_ASSIGNING_SYNC_INTERVAL = "org.kie.server.taskAssigning.solutionSyncInterval"; - - /** - * Property for configuring the safety minimal query distance in milliseconds. - */ - public static final String TASK_ASSIGNING_SYNC_QUERIES_SHIFT = "org.kie.server.taskAssigning.solutionSyncQueriesShift"; - - /** - * Property for configuring the users information synchronization period. - * The formats accepted are based on the ISO-8601 duration format {@code PnDTnHnMn.nS} with days considered to - * be exactly 24 hours. - *

- * e.g. - * "PT1H30M" configures 1 hour 30 minutes. - */ - public static final String TASK_ASSIGNING_USERS_SYNC_INTERVAL = "org.kie.server.taskAssigning.usersSyncInterval"; - - /** - * Property for configuring the amount of time to execute LS phase before sending any plan to the kie-server with - * the jBPM runtime. Allows an early improvement of the solution. This value should typically be low, e.g. 500 - * milliseconds, etc. - * - * The formats accepted are based on the ISO-8601 duration format {@code PnDTnHnMn.nS} with days considered to - * be exactly 24 hours. - *

- * e.g. - * "PT0.500S" configures 500 milliseconds. - */ - public static final String TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION = "org.kie.server.taskAssigning.waitForImprovedSolutionDuration"; - - /** - * Property for configuring the amount of time to execute the LS phase in background and sending an eventually - * improved solution to the jBPM runtime after this time. - * - * The formats accepted are based on the ISO-8601 duration format {@code PnDTnHnMn.nS} with days considered to - * be exactly 24 hours. - *

- * e.g. - * "PT1.500S" configures 1500 milliseconds. - * "PT1M" configures 1 minute. - */ - public static final String TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION = "org.kie.server.taskAssigning.improveSolutionOnBackgroundDuration"; - - /** - * Property for configuring the resource with the solver configuration. - */ - public static final String TASK_ASSIGNING_SOLVER_CONFIG_RESOURCE = "org.kie.server.taskAssigning.solver.configResource"; - - /** - * Property for configuring the solver moveThreadCount. - */ - public static final String TASK_ASSIGNING_SOLVER_MOVE_THREAD_COUNT = "org.kie.server.taskAssigning.solver.moveThreadCount"; - - /** - * Property for configuring the solver moveThreadBufferSize. - */ - public static final String TASK_ASSIGNING_SOLVER_MOVE_THREAD_BUFFER_SIZE = "org.kie.server.taskAssigning.solver.moveThreadBufferSize"; - - /** - * Property for configuring the solver threadFactoryClass. - */ - public static final String TASK_ASSIGNING_SOLVER_THREAD_FACTORY_CLASS = "org.kie.server.taskAssigning.solver.threadFactoryClass"; - - public static final String TASK_ASSIGNING_SOLVER_CONTAINER_ID = "org.kie.server.taskAssigning.solver.container.id"; - - public static final String TASK_ASSIGNING_SOLVER_CONTAINER_GROUP_ID = "org.kie.server.taskAssigning.solver.container.groupId"; - - public static final String TASK_ASSIGNING_SOLVER_CONTAINER_ARTIFACT_ID = "org.kie.server.taskAssigning.solver.container.artifactId"; - - public static final String TASK_ASSIGNING_SOLVER_CONTAINER_VERSION = "org.kie.server.taskAssigning.solver.container.version"; - - public static final String TASK_ASSIGNING_USER_SYSTEM_NAME = "org.kie.server.taskAssigning.userSystem.name"; - - public static final String TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ID = "org.kie.server.taskAssigning.userSystem.container.id"; - - public static final String TASK_ASSIGNING_USER_SYSTEM_CONTAINER_GROUP_ID = "org.kie.server.taskAssigning.userSystem.container.groupId"; - - public static final String TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ARTIFACT_ID = "org.kie.server.taskAssigning.userSystem.container.artifactId"; - - public static final String TASK_ASSIGNING_USER_SYSTEM_CONTAINER_VERSION = "org.kie.server.taskAssigning.userSystem.container.version"; - - /** - * Property for configuring the pageSize for the tasks queries that are used for populating/updating the solver. - */ - public static final String TASK_ASSIGNING_RUNTIME_DELEGATE_PAGE_SIZE = "org.kie.server.taskAssigning.runtimeDelegate.pageSize"; -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerConfigProvider.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerConfigProvider.java deleted file mode 100644 index 8325563c6c..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerConfigProvider.java +++ /dev/null @@ -1,43 +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.planning; - -import java.util.Collections; -import java.util.List; - -import org.kie.server.api.model.KieServerConfigItem; -import org.kie.server.api.model.KieServerConfigProvider; -import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution; - -/** - * Configures the list of packages that must be ignored but the OptaPlanner classes scanning, SolverServiceBase - */ -public class TaskAssigningPlanningKieServerConfigProvider implements KieServerConfigProvider { - - /** - * Must be the same as SolverServiceBase.SCAN_EXCLUDED_PACKAGES_CONFIG_ITEM but we don't want dependencies on this - * module. - */ - public static final String VALUE_NAME = "OptaPlanner.scanExcludedPackages"; - - @Override - public List getItems() { - return Collections.singletonList(new KieServerConfigItem(VALUE_NAME, - TaskAssigningSolution.class.getPackage().getName(), - String.class.getName())); - } -} \ 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-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtension.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtension.java deleted file mode 100644 index 315323f2e2..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtension.java +++ /dev/null @@ -1,524 +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.planning; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; - -import org.kie.server.api.exception.KieServicesException; -import org.kie.server.api.model.KieContainerResource; -import org.kie.server.api.model.KieContainerStatus; -import org.kie.server.api.model.KieServiceResponse; -import org.kie.server.api.model.Message; -import org.kie.server.api.model.ReleaseId; -import org.kie.server.api.model.ServiceResponse; -import org.kie.server.api.model.Severity; -import org.kie.server.client.TaskAssigningRuntimeClient; -import org.kie.server.client.TaskAssigningRuntimeClientFactory; -import org.kie.server.services.api.KieContainerInstance; -import org.kie.server.services.api.KieServer; -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.impl.KieContainerInstanceImpl; -import org.kie.server.services.impl.KieServerImpl; -import org.kie.server.services.jbpm.JbpmKieServerExtension; -import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution; -import org.kie.server.services.taskassigning.planning.data.LabelValueExtractorRegistry; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; -import org.optaplanner.core.api.solver.Solver; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.apache.commons.lang3.StringUtils.isEmpty; -import static org.apache.commons.lang3.StringUtils.isNotEmpty; -import static org.kie.server.api.KieServerConstants.KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED; -import static org.kie.server.common.KeyStoreHelperUtil.loadPasswordKey; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_ALIAS; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_PWD; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_PWD; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_TIMEOUT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_URL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_USER; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONFIG_RESOURCE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_ARTIFACT_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_GROUP_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_VERSION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_MOVE_THREAD_BUFFER_SIZE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_MOVE_THREAD_COUNT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_THREAD_FACTORY_CLASS; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ARTIFACT_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_GROUP_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_VERSION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_NAME; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionHelper.readAndValidateTaskAssigningServiceConfig; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.ACTIVATE_CONTAINER_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.CONTAINER_NOT_ACCESSIBLE_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.CREATE_CONTAINER_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.EXTENSION_CONTAINER_NOT_IN_EXPECTED_STATUS_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.HEALTH_CHECK_IS_ALIVE_MESSAGE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.TASK_ASSIGNING_SERVICE_CONFIGURATION_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.PLANNER_CONTAINER_NOT_AVAILABLE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.PLANNER_SOLVER_INSTANTIATION_CHECK_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.PLANNER_SOLVER_NOT_CONFIGURED_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.REQUIRED_PARAMETERS_FOR_CONTAINER_ARE_MISSING; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.SOLVER_CONFIGURATION_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.UNDESIRED_EXTENSIONS_RUNNING_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.USER_SYSTEM_CONFIGURATION_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.USER_SYSTEM_CONTAINER_NOT_AVAILABLE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.USER_SYSTEM_NAME_NOT_CONFIGURED_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.USER_SYSTEM_SERVICE_NOT_FOUND; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.USER_SYSTEM_SERVICE_START_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.addExtensionMessagePrefix; -import static org.kie.server.services.taskassigning.planning.util.PropertyUtil.readSystemProperty; - -public class TaskAssigningPlanningKieServerExtension implements KieServerExtension { - - private static final Logger LOGGER = LoggerFactory.getLogger(TaskAssigningPlanningKieServerExtension.class); - - static final String CAPABILITY_TASK_ASSIGNING_PLANNING = "TaskAssigningPlanning"; - - static final String EXTENSION_NAME = "TaskAssigningPlanning"; - - static final int EXTENSION_START_ORDER = 1001; - - private static final String DEFAULT_SOLVER_CONFIG = "org/kie/server/services/taskassigning/solver/taskAssigningDefaultSolverConfig.xml"; - - private KieServer kieServer; - private KieServerRegistry registry; - private final List services = new ArrayList<>(); - private boolean initialized = false; - private TaskAssigningRuntimeClient runtimeClient; - private UserSystemService userSystemService; - private TaskAssigningService taskAssigningService; - private ScheduledExecutorService executorService; - private SolverDef solverDef; - private String userSystemName; - private KieContainerResource userSystemContainer = null; - private List permanentErrors = new ArrayList<>(); - - /** - * Invoked by the KieServer initialization procedure to determine if current extension has been activated in current - * installation. - * @return true if the extension is activated and must be initialized, etc. False in any other case. - */ - @Override - public boolean isActive() { - return Boolean.FALSE.toString().equals(System.getProperty(KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED, Boolean.TRUE.toString())); - } - - /** - * Invoked by the KieServer initialization procedure for performing current extension initialization. - */ - @Override - public void init(KieServerImpl kieServer, KieServerRegistry registry) { - LOGGER.debug("Initializing " + EXTENSION_NAME + " extension."); - this.kieServer = kieServer; - this.registry = registry; - - KieServerExtension jbpmExtension = registry.getServerExtension(JbpmKieServerExtension.EXTENSION_NAME); - if (jbpmExtension != null) { - String msg = String.format(UNDESIRED_EXTENSIONS_RUNNING_ERROR, JbpmKieServerExtension.EXTENSION_NAME); - LOGGER.warn(msg); - kieServer.addServerMessage(new Message(Severity.WARN, addExtensionMessagePrefix(msg))); - } - - initRuntimeClient(); - - try { - validateAndSetSolverConfiguration(); - } catch (TaskAssigningValidationException e) { - throw new KieServicesException(String.format(SOLVER_CONFIGURATION_ERROR, e.getMessage()), e); - } - - try { - validateAndSetUserSystemServiceConfiguration(); - } catch (TaskAssigningValidationException e) { - throw new KieServicesException(String.format(USER_SYSTEM_CONFIGURATION_ERROR, e.getMessage()), e); - } - - this.executorService = Executors.newScheduledThreadPool(4); - try { - this.taskAssigningService = createTaskAssigningService(readAndValidateTaskAssigningServiceConfig()); - this.services.add(taskAssigningService); - } catch (TaskAssigningValidationException e) { - throw new KieServicesException(String.format(String.format(TASK_ASSIGNING_SERVICE_CONFIGURATION_ERROR, e.getMessage()), e)); - } - - this.initialized = true; - } - - /** - * Invoked by the KieServer initialization procedure after the init(kieServer, registry) invocation to determine - * if current extension was properly initialized. - * @return true if the extension was properly initialized, false in any other case. - */ - @Override - public boolean isInitialized() { - return initialized; - } - - @Override - public void createContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { - // no-op are required for this extension. - } - - @Override - public void updateContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { - // no-op are required for this extension. - } - - @Override - public boolean isUpdateContainerAllowed(String id, KieContainerInstance kieContainerInstance, Map parameters) { - return true; - } - - @Override - public void disposeContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { - // no-op are required for this extension. - } - - @Override - public List getAppComponents(SupportedTransports type) { - return new ArrayList<>(); - } - - @Override - public T getAppComponents(Class serviceType) { - if (serviceType.isAssignableFrom(taskAssigningService.getClass())) { - return (T) taskAssigningService; - } - return null; - } - - @Override - public String getImplementedCapability() { - return CAPABILITY_TASK_ASSIGNING_PLANNING; - } - - @Override - public List getServices() { - return services; - } - - @Override - public String getExtensionName() { - return EXTENSION_NAME; - } - - @Override - public Integer getStartOrder() { - return EXTENSION_START_ORDER; - } - - @Override - public String toString() { - return EXTENSION_NAME + " KIE Server extension"; - } - - /** - * Invoked by the KieServer initialization procedure to notify that server initialization has finished and the - * KieServer is ready to operate. Controller was connected if any, and in particular all the configured containers - * on current server were properly restored. Server is ready to operate. - */ - @Override - public void serverStarted() { - if (initialized) { - if (!initSolverRuntime()) { - return; - } - - if (!initUserSystemService()) { - return; - } - //finally when everything is ok, start the task assigning service. - taskAssigningService.setExecutorService(executorService); - taskAssigningService.setDelegate(new TaskAssigningRuntimeDelegate(getRuntimeClient())); - taskAssigningService.setUserSystemService(getUserSystemService()); - taskAssigningService.start(solverDef, registry); - } - } - - @Override - public void destroy(KieServerImpl kieServer, KieServerRegistry registry) { - LOGGER.debug("Destroying " + EXTENSION_NAME + " extension."); - if (initialized) { - taskAssigningService.destroy(); - } - } - - @Override - public List healthCheck(boolean report) { - List messages = KieServerExtension.super.healthCheck(report); - if (!permanentErrors.isEmpty()) { - messages.addAll(permanentErrors); - } else if (report) { - messages.add(new Message(Severity.INFO, HEALTH_CHECK_IS_ALIVE_MESSAGE)); - } - return messages; - } - - private SolverDef getSolverDef() { - final String containerId = readSystemProperty(TASK_ASSIGNING_SOLVER_CONTAINER_ID, null, value -> value); - final String groupId = readSystemProperty(TASK_ASSIGNING_SOLVER_CONTAINER_GROUP_ID, null, value -> value); - final String artifactId = readSystemProperty(TASK_ASSIGNING_SOLVER_CONTAINER_ARTIFACT_ID, null, value -> value); - final String version = readSystemProperty(TASK_ASSIGNING_SOLVER_CONTAINER_VERSION, null, value -> value); - final String solverConfigResource = readSystemProperty(TASK_ASSIGNING_SOLVER_CONFIG_RESOURCE, DEFAULT_SOLVER_CONFIG, value -> value); - final String moveThreadCount = readSystemProperty(TASK_ASSIGNING_SOLVER_MOVE_THREAD_COUNT, null, value -> value); - final int moveThreadBufferSize = readSystemProperty(TASK_ASSIGNING_SOLVER_MOVE_THREAD_BUFFER_SIZE, -1, Integer::parseInt); - final String threadFactoryClass = readSystemProperty(TASK_ASSIGNING_SOLVER_THREAD_FACTORY_CLASS, null, value -> value); - - return new SolverDef(containerId, - groupId, - artifactId, - version, - solverConfigResource, - moveThreadCount, - moveThreadBufferSize, - threadFactoryClass); - } - - TaskAssigningService createTaskAssigningService(TaskAssigningServiceConfig serviceConfig) { - return new TaskAssigningService(serviceConfig); - } - - private UserSystemService getUserSystemService() { - return userSystemService; - } - - private TaskAssigningRuntimeClient getRuntimeClient() { - return runtimeClient; - } - - private void validateAndSetSolverConfiguration() throws TaskAssigningValidationException { - this.solverDef = getSolverDef(); - if (isEmpty(solverDef.getSolverConfigResource())) { - throw new TaskAssigningValidationException(PLANNER_SOLVER_NOT_CONFIGURED_ERROR); - } - - if (!isEmpty(solverDef.getContainerId())) { - KieContainerResource resource = new KieContainerResource(solverDef.getContainerId(), - new ReleaseId(solverDef.getGroupId(), - solverDef.getArtifactId(), - solverDef.getVersion())); - - validateContainerRequiredParams(resource); - } - } - - private boolean initSolverRuntime() { - if (!isEmpty(solverDef.getContainerId())) { - KieContainerResource resource = new KieContainerResource(solverDef.getContainerId(), - new ReleaseId(solverDef.getGroupId(), - solverDef.getArtifactId(), - solverDef.getVersion())); - KieContainerInstanceImpl container = prepareContainer(resource); - if (container == null) { - String msg = String.format(PLANNER_CONTAINER_NOT_AVAILABLE, solverDef.getContainerId()); - LOGGER.error(msg); - registerMessage(Severity.ERROR, msg); - return false; - } - registerExtractors(container); - } - - try { - //early check that solver can be properly started. - createSolver(registry, solverDef); - } catch (Exception e) { - String msg = String.format(PLANNER_SOLVER_INSTANTIATION_CHECK_ERROR, e.getMessage()); - LOGGER.error(msg, e); - registerMessage(Severity.ERROR, msg); - return false; - } - return true; - } - - Solver createSolver(KieServerRegistry registry, SolverDef solverDef) { - return SolverBuilder.create() - .registry(registry) - .solverDef(solverDef) - .build(); - } - - void registerExtractors(KieContainerInstanceImpl container) { - LabelValueExtractorRegistry.getInstance().registerExtractors(container.getKieContainer().getClassLoader()); - } - - private void validateAndSetUserSystemServiceConfiguration() throws TaskAssigningValidationException { - this.userSystemName = readSystemProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, null, value -> value); - if (isEmpty(userSystemName)) { - String msg = String.format(USER_SYSTEM_NAME_NOT_CONFIGURED_ERROR, TASK_ASSIGNING_USER_SYSTEM_NAME); - throw new TaskAssigningValidationException(msg); - } - - final String containerId = readSystemProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ID, null, value -> value); - if (!isEmpty(containerId)) { - final String groupId = readSystemProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_GROUP_ID, null, value -> value); - final String artifactId = readSystemProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ARTIFACT_ID, null, value -> value); - final String version = readSystemProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_VERSION, null, value -> value); - - this.userSystemContainer = new KieContainerResource(containerId, - new ReleaseId(groupId, - artifactId, - version)); - - validateContainerRequiredParams(userSystemContainer); - } - } - - private boolean initUserSystemService() { - ClassLoader classLoader; - if (userSystemContainer != null) { - LOGGER.debug("User system service {} will be loaded from container {} class loader", userSystemName, userSystemContainer.getContainerId()); - KieContainerInstanceImpl container = prepareContainer(userSystemContainer); - if (container == null) { - String msg = String.format(USER_SYSTEM_CONTAINER_NOT_AVAILABLE, userSystemContainer.getContainerId()); - LOGGER.error(msg); - registerMessage(Severity.ERROR, msg); - return false; - } - classLoader = container.getKieContainer().getClassLoader(); - registerExtractors(container); - } else { - LOGGER.debug("User system service {} will be loaded from application class loader", userSystemName); - classLoader = this.getClass().getClassLoader(); - } - userSystemService = lookupUserSystem(userSystemName, classLoader); - if (userSystemService == null) { - final String msg = String.format(USER_SYSTEM_SERVICE_NOT_FOUND, userSystemName); - LOGGER.error(msg); - registerMessage(Severity.ERROR, msg); - return false; - } - - try { - userSystemService.start(); - } catch (Exception e) { - final String msg = String.format(USER_SYSTEM_SERVICE_START_ERROR, userSystemName, e.getMessage()); - LOGGER.error(msg, e); - registerMessage(Severity.ERROR, msg); - return false; - } - - try { - userSystemService.test(); - LOGGER.debug("User system service {} test check was successful.", userSystemName); - } catch (Exception e) { - LOGGER.warn("User system service {} test check failed, but " + EXTENSION_NAME + " startup procedure will continue. error: ", e.getMessage()); - } - return true; - } - - UserSystemService lookupUserSystem(String userSystemName, ClassLoader classLoader) { - final Map userServices = UserSystemServiceLoader.loadServices(classLoader); - return userServices.get(userSystemName); - } - - private void initRuntimeClient() { - String url = readSystemProperty(TASK_ASSIGNING_PROCESS_RUNTIME_URL, "http://localhost:8080/kie-server/services/rest/server", value -> value); - String user = readSystemProperty(TASK_ASSIGNING_PROCESS_RUNTIME_USER, "wbadmin", value -> value); - String pwd = readSystemProperty(TASK_ASSIGNING_PROCESS_RUNTIME_PWD, null, value -> value); - String pwdAlias = readSystemProperty(TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_ALIAS, null, value -> value); - if (isNotEmpty(pwdAlias)) { - pwd = loadPasswordKey(TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_ALIAS, TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_PWD, pwd); - } - long timeout = readSystemProperty(TASK_ASSIGNING_PROCESS_RUNTIME_TIMEOUT, 90000L, Long::parseLong); - this.runtimeClient = createRuntimeClient(url, user, pwd, timeout); - } - - TaskAssigningRuntimeClient createRuntimeClient(String url, String user, String pwd, long timeout) { - return TaskAssigningRuntimeClientFactory.newRuntimeClient(url, user, pwd, timeout); - } - - private void validateContainerRequiredParams(KieContainerResource resource) throws TaskAssigningValidationException { - final String containerId = resource.getContainerId(); - final String groupId = resource.getReleaseId().getGroupId(); - final String artifactId = resource.getReleaseId().getArtifactId(); - final String version = resource.getReleaseId().getVersion(); - if (isEmpty(containerId) || isEmpty(artifactId) || isEmpty(groupId) || isEmpty(version)) { - throw new TaskAssigningValidationException(String.format(REQUIRED_PARAMETERS_FOR_CONTAINER_ARE_MISSING, containerId, groupId, artifactId, version)); - } - } - - private KieContainerInstanceImpl prepareContainer(KieContainerResource resource) { - KieContainerInstanceImpl container = registry.getContainer(resource.getContainerId()); - if (container == null) { - LOGGER.debug("Container {} is not available in current server. It'll be created now.", resource.getContainerId()); - try { - ServiceResponse response = kieServer.createContainer(resource.getContainerId(), resource); - if (response.getType() == KieServiceResponse.ResponseType.FAILURE) { - String msg = String.format(CREATE_CONTAINER_ERROR, resource.getContainerId(), response.getMsg()); - LOGGER.error(msg); - registerMessage(Severity.ERROR, msg); - return null; - } - - container = registry.getContainer(resource.getContainerId()); - - if (container == null) { - final String msg = String.format(CONTAINER_NOT_ACCESSIBLE_ERROR, resource.getContainerId()); - LOGGER.error(msg); - registerMessage(Severity.ERROR, msg); - return null; - } - } catch (Exception e) { - String msg = String.format(CREATE_CONTAINER_ERROR, resource.getContainerId(), e.getMessage()); - LOGGER.error(msg, e); - registerMessage(Severity.ERROR, msg); - return null; - } - } - - if (container.getStatus() == KieContainerStatus.DEACTIVATED) { - LOGGER.debug("Container {} is currently {}. It needs to be activated.", resource.getContainerId(), container.getStatus()); - try { - ServiceResponse response = ((KieServerImpl) kieServer).activateContainer(resource.getContainerId()); - if (response.getType() == KieServiceResponse.ResponseType.FAILURE) { - String msg = String.format(ACTIVATE_CONTAINER_ERROR, resource.getContainerId(), response.getMsg()); - LOGGER.error(msg); - registerMessage(Severity.ERROR, msg); - return null; - } - } catch (Exception e) { - String msg = String.format(ACTIVATE_CONTAINER_ERROR, resource.getContainerId(), e.getMessage()); - LOGGER.error(msg, e); - registerMessage(Severity.ERROR, msg); - return null; - } - } - - if (container.getStatus() != KieContainerStatus.STARTED) { - String msg = String.format(EXTENSION_CONTAINER_NOT_IN_EXPECTED_STATUS_ERROR, resource.getContainerId(), KieContainerStatus.STARTED, container.getStatus()); - LOGGER.error(msg); - registerMessage(Severity.ERROR, msg); - return null; - } - return container; - } - - private void registerMessage(Severity severity, String msg) { - final String prefixedMsg = addExtensionMessagePrefix(msg); - kieServer.addServerMessage(new Message(severity, prefixedMsg)); - permanentErrors.add(new Message(severity, prefixedMsg)); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtensionHelper.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtensionHelper.java deleted file mode 100644 index 748a22c3ec..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtensionHelper.java +++ /dev/null @@ -1,128 +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.planning; - -import java.time.Duration; -import java.time.format.DateTimeParseException; -import java.util.function.Predicate; - -import static java.util.Objects.isNull; -import static org.apache.commons.lang3.StringUtils.trimToNull; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PUBLISH_WINDOW_SIZE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SYNC_QUERIES_SHIFT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USERS_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.PARAMETER_MUST_HAVE_A_GREATER_OR_EQUAL_TO_ZERO_DURATION_VALUE_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.PARAMETER_MUST_HAVE_A_GREATER_THAN_ZERO_DURATION_VALUE_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.PARAMETER_MUST_HAVE_A_GREATER_THAN_ZERO_INTEGER_VALUE_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.PARAMETER_MUST_HAVE_A_NON_EMPTY_STRING_VALUE_ERROR; - -public class TaskAssigningPlanningKieServerExtensionHelper { - - static final int DEFAULT_PUBLISH_WINDOW_SIZE = 2; - static final String DEFAULT_SYNC_INTERVAL = "PT2S"; - static final String DEFAULT_SYNC_QUERIES_SHIFT = "PT10M"; - static final String DEFAULT_USERS_SYNC_INTERVAL = "PT2H"; - static final String DEFAULT_WAIT_FOR_IMPROVED_SOLUTION_DURATION = "PT0S"; - static final String DEFAULT_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION = "PT1M"; - - private static final String CAUSE = ", cause :"; - - private TaskAssigningPlanningKieServerExtensionHelper() { - } - - public static TaskAssigningServiceConfig readAndValidateTaskAssigningServiceConfig() throws TaskAssigningValidationException { - String targetUserId; - int publishWindowSize; - Duration syncInterval; - Duration syncQueriesShift; - Duration usersSyncInterval; - Duration waitForImprovedSolutionDuration; - Duration improveSolutionOnBackgroundDuration; - - targetUserId = trimToNull(System.getProperty(TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER)); - if (isNull(targetUserId)) { - throw new TaskAssigningValidationException(String.format(PARAMETER_MUST_HAVE_A_NON_EMPTY_STRING_VALUE_ERROR, - TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER)); - } - publishWindowSize = parseAndValidateGreaterThanZeroInteger(System.getProperty(TASK_ASSIGNING_PUBLISH_WINDOW_SIZE, Integer.toString(DEFAULT_PUBLISH_WINDOW_SIZE)), - String.format(PARAMETER_MUST_HAVE_A_GREATER_THAN_ZERO_INTEGER_VALUE_ERROR, - TASK_ASSIGNING_PUBLISH_WINDOW_SIZE)); - - syncInterval = parseAndValidateGreaterThanZeroDuration(System.getProperty(TASK_ASSIGNING_SYNC_INTERVAL, DEFAULT_SYNC_INTERVAL), - String.format(PARAMETER_MUST_HAVE_A_GREATER_THAN_ZERO_DURATION_VALUE_ERROR, - TASK_ASSIGNING_SYNC_INTERVAL)); - - syncQueriesShift = parseAndValidateGreaterThanZeroDuration(System.getProperty(TASK_ASSIGNING_SYNC_QUERIES_SHIFT, DEFAULT_SYNC_QUERIES_SHIFT), - String.format(PARAMETER_MUST_HAVE_A_GREATER_THAN_ZERO_DURATION_VALUE_ERROR, - TASK_ASSIGNING_SYNC_QUERIES_SHIFT)); - - usersSyncInterval = parseAndValidateGreaterOrEqualThanZeroDuration(System.getProperty(TASK_ASSIGNING_USERS_SYNC_INTERVAL, DEFAULT_USERS_SYNC_INTERVAL), - String.format(PARAMETER_MUST_HAVE_A_GREATER_OR_EQUAL_TO_ZERO_DURATION_VALUE_ERROR, - TASK_ASSIGNING_USERS_SYNC_INTERVAL)); - - waitForImprovedSolutionDuration = parseAndValidateGreaterOrEqualThanZeroDuration(System.getProperty(TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION, DEFAULT_WAIT_FOR_IMPROVED_SOLUTION_DURATION), - String.format(PARAMETER_MUST_HAVE_A_GREATER_OR_EQUAL_TO_ZERO_DURATION_VALUE_ERROR, - TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION)); - - improveSolutionOnBackgroundDuration = parseAndValidateGreaterOrEqualThanZeroDuration(System.getProperty(TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION, DEFAULT_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION), - String.format(PARAMETER_MUST_HAVE_A_GREATER_OR_EQUAL_TO_ZERO_DURATION_VALUE_ERROR, - TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION)); - - return new TaskAssigningServiceConfig(targetUserId, publishWindowSize, syncInterval, syncQueriesShift, - usersSyncInterval, waitForImprovedSolutionDuration, improveSolutionOnBackgroundDuration); - } - - private static Duration parseAndValidateGreaterThanZeroDuration(String value, String validationErrorMessage) throws TaskAssigningValidationException { - return parseAndValidateDuration(value, duration -> duration.toMillis() > 0, validationErrorMessage); - } - - private static Duration parseAndValidateGreaterOrEqualThanZeroDuration(String value, String validationErrorMessage) throws TaskAssigningValidationException { - return parseAndValidateDuration(value, duration -> duration.toMillis() >= 0, validationErrorMessage); - } - - private static Duration parseAndValidateDuration(String value, Predicate validation, String validationErrorMessage) throws TaskAssigningValidationException { - Duration result; - try { - result = Duration.parse(value); - } catch (DateTimeParseException e) { - String msg = validationErrorMessage + CAUSE + e.toString(); - throw new TaskAssigningValidationException(msg); - } - if (validation.negate().test(result)) { - throw new TaskAssigningValidationException(validationErrorMessage); - } - return result; - } - - private static int parseAndValidateGreaterThanZeroInteger(String value, String validationErrorMessage) throws TaskAssigningValidationException { - int result; - try { - result = Integer.parseInt(value); - } catch (NumberFormatException e) { - String msg = validationErrorMessage + CAUSE + e.toString(); - throw new TaskAssigningValidationException(msg); - } - if (result <= 0) { - throw new TaskAssigningValidationException(validationErrorMessage); - } - return result; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtensionMessages.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtensionMessages.java deleted file mode 100644 index be4d6f2ea0..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtensionMessages.java +++ /dev/null @@ -1,87 +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.planning; - -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtension.EXTENSION_NAME; - -public class TaskAssigningPlanningKieServerExtensionMessages { - - private TaskAssigningPlanningKieServerExtensionMessages() { - } - - static final String PLANNER_EXTENSION_MESSAGE_PREFIX = EXTENSION_NAME + ": %s"; - - static final String EXTENSION_WONT_OPERATE_PROPERLY_ERROR_PART = EXTENSION_NAME + " won't operate properly"; - - static final String CREATE_CONTAINER_ERROR = "Container creation failed for containerId: %s, error: %s"; - - static final String ACTIVATE_CONTAINER_ERROR = "Container activation failed for containerId: %s, error: %s"; - - static final String EXTENSION_CONTAINER_NOT_IN_EXPECTED_STATUS_ERROR = "Container %s must be in %s status but is currently %s." + - " " + EXTENSION_WONT_OPERATE_PROPERLY_ERROR_PART; - - static final String CONTAINER_NOT_ACCESSIBLE_ERROR = "It was not possible get access to containerId: %s" + - " " + EXTENSION_WONT_OPERATE_PROPERLY_ERROR_PART; - - static final String SOLVER_CONFIGURATION_ERROR = "Planner solver is not properly configured, error: %s"; - - static final String PLANNER_SOLVER_NOT_CONFIGURED_ERROR = "No solverConfigResource has been configured for starting the task assigning solver." + - " " + EXTENSION_WONT_OPERATE_PROPERLY_ERROR_PART; - - static final String PLANNER_SOLVER_INSTANTIATION_CHECK_ERROR = "An error was produced during solver instantiation check." + - " It was not possible to create a solver for the provided configuration, error: %s." + - " " + EXTENSION_WONT_OPERATE_PROPERLY_ERROR_PART; - - static final String PLANNER_CONTAINER_NOT_AVAILABLE = "Planner container %s is not available." + - " " + EXTENSION_WONT_OPERATE_PROPERLY_ERROR_PART; - - static final String UNDESIRED_EXTENSIONS_RUNNING_ERROR = "It's was detected that the following extensions %s" + - " are running in current server, but it's not recommended to run them on the same server instance as the " + EXTENSION_NAME + " sever."; - - static final String USER_SYSTEM_NAME_NOT_CONFIGURED_ERROR = "No user system service name has been configured." + - " " + EXTENSION_WONT_OPERATE_PROPERLY_ERROR_PART + ". Please use the property %s to configure it"; - - static final String USER_SYSTEM_CONFIGURATION_ERROR = "User system service is not properly configured, error: %s"; - - static final String TASK_ASSIGNING_SERVICE_CONFIGURATION_ERROR = "Task assigning service is not properly configured, error: %s"; - - static final String USER_SYSTEM_CONTAINER_NOT_AVAILABLE = "User system service container %s is not available." + - " " + EXTENSION_WONT_OPERATE_PROPERLY_ERROR_PART; - - static final String USER_SYSTEM_SERVICE_NOT_FOUND = "User system service %s was not found." + - " " + EXTENSION_WONT_OPERATE_PROPERLY_ERROR_PART; - - static final String USER_SYSTEM_SERVICE_START_ERROR = "User system service %s initialization failed, error: %s." + - " " + EXTENSION_WONT_OPERATE_PROPERLY_ERROR_PART; - - static final String REQUIRED_PARAMETERS_FOR_CONTAINER_ARE_MISSING = "Required parameters for container configuration are missing." + - " containerId: %s, groupId: %s, artifactId: %s, version: %s"; - - static final String HEALTH_CHECK_IS_ALIVE_MESSAGE = EXTENSION_NAME + " is alive"; - - static final String PARAMETER_MUST_HAVE_A_NON_EMPTY_STRING_VALUE_ERROR = "Parameter %s must have a non empty string value"; - - static final String PARAMETER_MUST_HAVE_A_GREATER_THAN_ZERO_INTEGER_VALUE_ERROR = "Parameter %s must be configured with a greater than zero integer value"; - - static final String PARAMETER_MUST_HAVE_A_GREATER_THAN_ZERO_DURATION_VALUE_ERROR = "Parameter %s must be configured with a greater than zero time duration"; - - static final String PARAMETER_MUST_HAVE_A_GREATER_OR_EQUAL_TO_ZERO_DURATION_VALUE_ERROR = "Parameter %s must be configured with a greater or equal to zero time duration"; - - static String addExtensionMessagePrefix(String msg) { - return String.format(PLANNER_EXTENSION_MESSAGE_PREFIX, msg); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningRuntimeDelegate.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningRuntimeDelegate.java deleted file mode 100644 index 9097b94cce..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningRuntimeDelegate.java +++ /dev/null @@ -1,72 +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.planning; - -import java.time.LocalDateTime; -import java.util.List; - -import org.kie.api.task.model.Status; -import org.kie.server.api.model.taskassigning.PlanningExecutionResult; -import org.kie.server.api.model.taskassigning.PlanningItem; -import org.kie.server.api.model.taskassigning.PlanningItemList; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.api.model.taskassigning.TaskInputVariablesReadMode; -import org.kie.server.client.TaskAssigningRuntimeClient; -import org.kie.server.client.util.TaskDataReader; -import org.kie.server.services.taskassigning.planning.util.PropertyUtil; - -import static org.kie.server.api.model.taskassigning.util.StatusConverter.convertToStringList; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_RUNTIME_DELEGATE_PAGE_SIZE; - -public class TaskAssigningRuntimeDelegate { - - private final TaskAssigningRuntimeClient runtimeClient; - private static final int PAGE_SIZE = PropertyUtil.readSystemProperty(TASK_ASSIGNING_RUNTIME_DELEGATE_PAGE_SIZE, 3000, Integer::parseInt); - - static class FindTasksResult { - - private LocalDateTime queryTime; - private List tasks; - - public LocalDateTime getQueryTime() { - return queryTime; - } - - public List getTasks() { - return tasks; - } - - public FindTasksResult(LocalDateTime queryTime, List tasks) { - this.queryTime = queryTime; - this.tasks = tasks; - } - } - - public TaskAssigningRuntimeDelegate(final TaskAssigningRuntimeClient runtimeClient) { - this.runtimeClient = runtimeClient; - } - - public FindTasksResult findTasks(List status, LocalDateTime fromLastModificationDate, TaskInputVariablesReadMode inputVariablesReadMode) { - TaskDataReader.Result result = TaskDataReader.from(runtimeClient).readTasks(0, convertToStringList(status), - fromLastModificationDate, PAGE_SIZE, inputVariablesReadMode); - return new FindTasksResult(result.getQueryTime(), result.getTasks()); - } - - public PlanningExecutionResult executePlanning(List planningItems, String userId) { - return runtimeClient.executePlanning(new PlanningItemList(planningItems), userId); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningService.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningService.java deleted file mode 100644 index d077d2c73f..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningService.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.planning; - -import java.util.concurrent.ScheduledExecutorService; - -import org.kie.server.services.api.KieServerRegistry; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; - -import static org.kie.soup.commons.validation.PortablePreconditions.checkNotNull; - -public class TaskAssigningService { - - private TaskAssigningRuntimeDelegate delegate; - private UserSystemService userSystemService; - private ScheduledExecutorService executorService; - - private SolverHandler solverHandler; - private SolverHandlerConfig solverHandlerConfig; - - public TaskAssigningService(TaskAssigningServiceConfig config) { - checkNotNull("config", config); - this.solverHandlerConfig = config.getSolverHandlerConfig(); - } - - public void setDelegate(TaskAssigningRuntimeDelegate delegate) { - this.delegate = delegate; - } - - public void setUserSystemService(UserSystemService userSystemService) { - this.userSystemService = userSystemService; - } - - public void setExecutorService(ScheduledExecutorService executorService) { - this.executorService = executorService; - } - - public void start(SolverDef solverDef, KieServerRegistry registry) { - solverHandler = createSolverHandler(solverDef, registry, delegate, userSystemService, executorService, solverHandlerConfig); - solverHandler.start(); - } - - public void destroy() { - if (solverHandler != null) { - solverHandler.destroy(); - } - } - - SolverHandler createSolverHandler(SolverDef solverDef, KieServerRegistry registry, - TaskAssigningRuntimeDelegate delegate, UserSystemService userSystemService, - ScheduledExecutorService executorService, SolverHandlerConfig solverHandlerConfig) { - return new SolverHandler(solverDef, registry, delegate, userSystemService, executorService, solverHandlerConfig); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningServiceConfig.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningServiceConfig.java deleted file mode 100644 index c091c5e2c6..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningServiceConfig.java +++ /dev/null @@ -1,44 +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.planning; - -import java.time.Duration; - -public class TaskAssigningServiceConfig { - - private SolverHandlerConfig solverHandlerConfig; - - public TaskAssigningServiceConfig(String targetUserId, - int publishWindowSize, - Duration syncInterval, - Duration syncQueriesShift, - Duration usersSyncInterval, - Duration waitForImprovedSolutionDuration, - Duration improveSolutionOnBackgroundDuration) { - solverHandlerConfig = new SolverHandlerConfig(targetUserId, - publishWindowSize, - syncInterval, - syncQueriesShift, - usersSyncInterval, - waitForImprovedSolutionDuration, - improveSolutionOnBackgroundDuration); - } - - public SolverHandlerConfig getSolverHandlerConfig() { - return solverHandlerConfig; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningValidationException.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningValidationException.java deleted file mode 100644 index a53a283976..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TaskAssigningValidationException.java +++ /dev/null @@ -1,24 +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.planning; - -public class TaskAssigningValidationException extends Exception { - - public TaskAssigningValidationException(String message) { - super(message); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TraceHelper.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TraceHelper.java deleted file mode 100644 index e432daa5ba..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/TraceHelper.java +++ /dev/null @@ -1,151 +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.planning; - -import java.util.List; -import java.util.Map; - -import org.kie.server.api.model.taskassigning.PlanningItem; -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.kie.server.services.taskassigning.core.model.solver.realtime.AddTaskProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.AddUserProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.AssignTaskProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.DisableUserProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.ReleaseTaskProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.RemoveUserProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.TaskPropertyChangeProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.UserPropertyChangeProblemFactChange; -import org.kie.server.services.taskassigning.planning.util.IndexedElement; -import org.optaplanner.core.impl.solver.ProblemFactChange; -import org.slf4j.Logger; - -public class TraceHelper { - - private static final String NEW_LINE = System.lineSeparator(); - private static final String TASK_WITH_NAME_FORMAT = " -> ({}, {})"; - - private TraceHelper() { - } - - static void traceProgrammedChanges(Logger logger, List removedTasksChanges, - List releasedTasksChanges, - Map>> changesByUserId, - List propertyChanges, - List newTaskChanges, - List newUserChanges, - List> userChanges, - List removedUsersChanges) { - - logger.trace("{}*** Removed tasks ***", NEW_LINE); - logger.trace("Total tasks removed from solution is {}", removedTasksChanges.size()); - removedTasksChanges.forEach(change -> logger.trace(TASK_WITH_NAME_FORMAT, change.getTask().getId(), change.getTask().getName())); - logger.trace("*** End of removed tasks ***"); - - logger.trace("{}*** Released tasks ***", NEW_LINE); - logger.trace("Total tasks released from solution is {}", releasedTasksChanges.size()); - releasedTasksChanges.forEach(change -> logger.trace(TASK_WITH_NAME_FORMAT, change.getTask().getId(), change.getTask().getName())); - logger.trace("*** End of released tasks ***"); - - logger.trace("{}*** Changes per user ***", NEW_LINE); - logger.trace("Total users with programmed changes is {}", changesByUserId.size()); - changesByUserId.forEach((key, perUserChanges) -> { - if (perUserChanges != null) { - perUserChanges.forEach(change -> { - logger.trace("{} AssignTaskToUserChanges for user: {}", NEW_LINE, key); - logger.trace("{} -> taskId: {}, pinned: {}, index: {}, status: {}", - NEW_LINE, - change.getElement().getTask().getId(), - change.isPinned(), - change.getIndex(), - change.getElement().getTask().getStatus()); - logger.trace(" End of AssignTaskToUserChanges for user: {}", key); - }); - } - }); - logger.trace("*** End of changes per user ***"); - - logger.trace("{}*** Property changes ***", NEW_LINE); - logger.trace("Total tasks with property changes is {}", propertyChanges.size()); - propertyChanges.forEach(change -> { - String changeDesc = ""; - if (change.getPriority() != null) { - changeDesc = " setPriority = " + change.getPriority(); - } - if (change.getStatus() != null) { - changeDesc = " setStatus = " + change.getStatus(); - } - logger.trace(TASK_WITH_NAME_FORMAT + " {}", change.getTask().getId(), change.getTask().getName(), changeDesc); - }); - logger.trace("*** End of property changes ***"); - - logger.trace("{}*** New tasks ***", NEW_LINE); - logger.trace("Total new tasks added to solution is {}", newTaskChanges.size()); - newTaskChanges.forEach(change -> logger.trace(TASK_WITH_NAME_FORMAT, change.getTask().getId(), change.getTask().getName())); - logger.trace("*** End of new tasks ***"); - - logger.trace("{}*** New users ***", NEW_LINE); - logger.trace("Total new users added to solution is {}", newUserChanges.size()); - newUserChanges.forEach(change -> logger.trace(" -> {}", change.getUser())); - logger.trace("*** End of new users ***"); - - logger.trace("{}*** User changes ***", NEW_LINE); - logger.trace("Total users with changes is {}", userChanges.size()); - userChanges.stream() - .filter(change -> change instanceof DisableUserProblemFactChange) - .forEach(change -> logger.trace(" -> disabled {}", ((DisableUserProblemFactChange) change).getUser())); - userChanges.stream() - .filter(change -> change instanceof UserPropertyChangeProblemFactChange) - .forEach(change -> logger.trace(" -> modified {}", ((UserPropertyChangeProblemFactChange) change).getUser())); - logger.trace("*** End of user changes ***"); - - logger.trace("{}*** Removed users ***", NEW_LINE); - logger.trace("Total users removed from solution is {}", removedUsersChanges.size()); - removedUsersChanges.forEach(change -> logger.trace(" -> removed {}", change.getUser())); - logger.trace("*** End of removed users ***"); - } - - static void traceSolution(Logger logger, TaskAssigningSolution solution) { - logger.trace("{}*** Start of solution trace, with users = {} and tasks = {} ***", NEW_LINE, solution.getUserList().size(), solution.getTaskList().size()); - for (User user : solution.getUserList()) { - Task nextTask = user.getNextTask(); - while (nextTask != null) { - logger.trace("{} -> {}, pinned: {}, priority: {}, status: {}", - user.getEntityId(), - nextTask.getId(), - nextTask.isPinned(), - nextTask.getPriority(), - nextTask.getStatus()); - - nextTask = nextTask.getNextTask(); - } - } - logger.trace("*** End of solution trace ***"); - } - - static void tracePublishedTasks(Logger logger, List publishedTasks) { - logger.trace("{}*** Start of published tasks trace with {} published tasks ***", NEW_LINE, publishedTasks.size()); - publishedTasks.forEach(item -> logger.trace("{} -> {}, index: {}, published: {}", - item.getPlanningTask().getAssignedUser(), - item.getTaskId(), - item.getPlanningTask().getIndex(), - item.getPlanningTask().isPublished())); - logger.trace("*** End of published trace ***"); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/UserSystemServiceLoader.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/UserSystemServiceLoader.java deleted file mode 100644 index 838cbb1247..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/UserSystemServiceLoader.java +++ /dev/null @@ -1,47 +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.planning; - -import java.util.HashMap; -import java.util.Map; -import java.util.ServiceLoader; - -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class UserSystemServiceLoader { - - private static final Logger LOGGER = LoggerFactory.getLogger(UserSystemServiceLoader.class); - - private UserSystemServiceLoader() { - } - - public static Map loadServices(ClassLoader cl) { - final Map result = new HashMap<>(); - final ServiceLoader availableServices = ServiceLoader.load(UserSystemService.class, cl); - for (UserSystemService service : availableServices) { - Object existed = result.putIfAbsent(service.getName(), service); - if (existed == null) { - LOGGER.debug("UserSystemService {} was added to the result", service.getName()); - } else { - LOGGER.warn("UserSystemService {} was already added to the result, this another instance will be discarded.", service); - } - } - return result; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/AbstractAttributeMapValueLabelValueExtractor.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/AbstractAttributeMapValueLabelValueExtractor.java deleted file mode 100644 index 8676f62a09..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/AbstractAttributeMapValueLabelValueExtractor.java +++ /dev/null @@ -1,44 +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.planning.data; - -import java.util.Map; -import java.util.Set; - -public abstract class AbstractAttributeMapValueLabelValueExtractor, T> extends AbstractLabelValueExtractor { - - private String attributeName; - - protected AbstractAttributeMapValueLabelValueExtractor(String attributeName, Class type, String labelName, int priority) { - super(type, labelName, priority); - this.attributeName = attributeName; - } - - protected abstract M getAttributes(T source); - - public String getAttributeName() { - return attributeName; - } - - protected abstract Set extractFromAttribute(Object attributeValue); - - @Override - public Set extract(T source) { - M attributes = getAttributes(source); - return extractFromAttribute(attributes != null ? attributes.get(getAttributeName()) : null); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/AbstractLabelValueExtractor.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/AbstractLabelValueExtractor.java deleted file mode 100644 index 865773a8ba..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/AbstractLabelValueExtractor.java +++ /dev/null @@ -1,47 +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.planning.data; - -import org.kie.server.api.model.taskassigning.data.LabelValueExtractor; - -public abstract class AbstractLabelValueExtractor implements LabelValueExtractor { - - private final Class type; - private final String labelName; - private final int priority; - - protected AbstractLabelValueExtractor(final Class type, final String labelName, final int priority) { - this.type = type; - this.labelName = labelName; - this.priority = priority; - } - - @Override - public Class getType() { - return type; - } - - @Override - public String getLabelName() { - return labelName; - } - - @Override - public int getPriority() { - return priority; - } -} \ 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-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/AbstractStringListValueAttributeMapValueExtractor.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/AbstractStringListValueAttributeMapValueExtractor.java deleted file mode 100644 index be49ae2e76..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/AbstractStringListValueAttributeMapValueExtractor.java +++ /dev/null @@ -1,51 +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.planning.data; - -import java.util.Collections; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.apache.commons.lang3.StringUtils; - -public abstract class AbstractStringListValueAttributeMapValueExtractor, T> - extends AbstractAttributeMapValueLabelValueExtractor { - - public static final String COMMA_SEPARATOR = ","; - - protected final String separator; - - protected AbstractStringListValueAttributeMapValueExtractor(String attributeName, String separator, Class type, String labelName, int priority) { - super(attributeName, type, labelName, priority); - this.separator = separator; - } - - @Override - protected Set extractFromAttribute(Object attributeValue) { - if (attributeValue == null) { - return Collections.emptySet(); - } else { - final String[] valueSplit = attributeValue.toString().split(separator); - return Stream.of(valueSplit) - .map(StringUtils::trim) - .filter(StringUtils::isNotEmpty) - .collect(Collectors.toSet()); - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/DefaultTaskDataAffinitiesValueExtractor.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/DefaultTaskDataAffinitiesValueExtractor.java deleted file mode 100644 index a9dacc7c78..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/DefaultTaskDataAffinitiesValueExtractor.java +++ /dev/null @@ -1,43 +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.planning.data; - -import java.util.Map; - -import org.kie.server.api.model.taskassigning.TaskData; - -import static org.kie.server.services.taskassigning.core.model.DefaultLabels.AFFINITIES; - -public class DefaultTaskDataAffinitiesValueExtractor extends AbstractStringListValueAttributeMapValueExtractor, TaskData> { - - static final String TASK_AFFINITIES_ATTRIBUTE = "affinities"; - - /** - * Property for configuring the name of the task input parameter from where the affinities will be extracted. - */ - public static final String TASK_AFFINITIES_ATTRIBUTE_PROPERTY_NAME = DefaultTaskDataAffinitiesValueExtractor.class.getName() + "." + TASK_AFFINITIES_ATTRIBUTE; - - public DefaultTaskDataAffinitiesValueExtractor() { - super(System.getProperty(TASK_AFFINITIES_ATTRIBUTE_PROPERTY_NAME, TASK_AFFINITIES_ATTRIBUTE), - COMMA_SEPARATOR, TaskData.class, AFFINITIES.name(), 1); - } - - @Override - protected Map getAttributes(TaskData source) { - return source.getInputData(); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/DefaultTaskDataSkillsValueExtractor.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/DefaultTaskDataSkillsValueExtractor.java deleted file mode 100644 index 6beac04151..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/DefaultTaskDataSkillsValueExtractor.java +++ /dev/null @@ -1,43 +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.planning.data; - -import java.util.Map; - -import org.kie.server.api.model.taskassigning.TaskData; - -import static org.kie.server.services.taskassigning.core.model.DefaultLabels.SKILLS; - -public class DefaultTaskDataSkillsValueExtractor extends AbstractStringListValueAttributeMapValueExtractor, TaskData> { - - static final String TASK_SKILLS_ATTRIBUTE = "skills"; - - /** - * Property for configuring the name of the task input parameter from where the skills will be extracted. - */ - public static final String TASK_SKILLS_ATTRIBUTE_PROPERTY_NAME = DefaultTaskDataSkillsValueExtractor.class.getName() + "." + TASK_SKILLS_ATTRIBUTE; - - public DefaultTaskDataSkillsValueExtractor() { - super(System.getProperty(TASK_SKILLS_ATTRIBUTE_PROPERTY_NAME, TASK_SKILLS_ATTRIBUTE), - COMMA_SEPARATOR, TaskData.class, SKILLS.name(), 1); - } - - @Override - protected Map getAttributes(TaskData source) { - return source.getInputData(); - } -} \ 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-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/DefaultUserAffinitiesValueExtractor.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/DefaultUserAffinitiesValueExtractor.java deleted file mode 100644 index a6e94f875b..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/DefaultUserAffinitiesValueExtractor.java +++ /dev/null @@ -1,43 +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.planning.data; - -import java.util.Map; - -import org.kie.server.services.taskassigning.user.system.api.User; - -import static org.kie.server.services.taskassigning.core.model.DefaultLabels.AFFINITIES; - -public class DefaultUserAffinitiesValueExtractor extends AbstractStringListValueAttributeMapValueExtractor, User> { - - static final String USER_AFFINITIES_ATTRIBUTE = "affinities"; - - /** - * Property for configuring the name of the external user attribute from where the affinities will be extracted. - */ - public static final String USER_AFFINITIES_ATTRIBUTE_PROPERTY_NAME = DefaultUserAffinitiesValueExtractor.class.getName() + "." + USER_AFFINITIES_ATTRIBUTE; - - public DefaultUserAffinitiesValueExtractor() { - super(System.getProperty(USER_AFFINITIES_ATTRIBUTE_PROPERTY_NAME, USER_AFFINITIES_ATTRIBUTE), - COMMA_SEPARATOR, User.class, AFFINITIES.name(), 1); - } - - @Override - protected Map getAttributes(User source) { - return source.getAttributes(); - } -} \ 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-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/DefaultUserSkillsValueExtractor.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/DefaultUserSkillsValueExtractor.java deleted file mode 100644 index bdedebd4f0..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/DefaultUserSkillsValueExtractor.java +++ /dev/null @@ -1,43 +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.planning.data; - -import java.util.Map; - -import org.kie.server.services.taskassigning.user.system.api.User; - -import static org.kie.server.services.taskassigning.core.model.DefaultLabels.SKILLS; - -public class DefaultUserSkillsValueExtractor extends AbstractStringListValueAttributeMapValueExtractor, User> { - - static final String USER_SKILLS_ATTRIBUTE = "skills"; - - /** - * Property for configuring the name of the external user attribute from where the skills will be extracted. - */ - public static final String USER_SKILLS_ATTRIBUTE_PROPERTY_NAME = DefaultUserSkillsValueExtractor.class.getName() + "." + USER_SKILLS_ATTRIBUTE; - - public DefaultUserSkillsValueExtractor() { - super(System.getProperty(USER_SKILLS_ATTRIBUTE_PROPERTY_NAME, USER_SKILLS_ATTRIBUTE), - COMMA_SEPARATOR, User.class, SKILLS.name(), 1); - } - - @Override - protected Map getAttributes(User source) { - return source.getAttributes(); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/LabelValueExtractorRegistry.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/LabelValueExtractorRegistry.java deleted file mode 100644 index ea312df03d..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/data/LabelValueExtractorRegistry.java +++ /dev/null @@ -1,82 +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.planning.data; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Optional; -import java.util.ServiceLoader; -import java.util.Set; -import java.util.function.BiConsumer; - -import org.kie.server.api.model.taskassigning.data.LabelValueExtractor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class LabelValueExtractorRegistry { - - private static final Logger LOGGER = LoggerFactory.getLogger(LabelValueExtractorRegistry.class); - - private static final LabelValueExtractorRegistry INSTANCE = new LabelValueExtractorRegistry(); - - private Map, Set>> extractorsBySourceType = new HashMap<>(); - - private LabelValueExtractorRegistry() { - registerExtractors(getClass().getClassLoader()); - } - - public static LabelValueExtractorRegistry getInstance() { - return INSTANCE; - } - - public synchronized void registerExtractors(ClassLoader classLoader) { - final ServiceLoader availableExtractors = ServiceLoader.load(LabelValueExtractor.class, classLoader); - for (LabelValueExtractor extractor : availableExtractors) { - final Set> typeExtractors = extractorsBySourceType.computeIfAbsent(extractor.getType(), key -> new HashSet<>()); - final LabelValueExtractor previousExtractor = typeExtractors.stream() - .filter(previous -> previous.getLabelName().equals(extractor.getLabelName())) - .findFirst().orElse(null); - if (previousExtractor != null) { - if (previousExtractor.getPriority() < extractor.getPriority()) { - LOGGER.info("LabelValueExtractor with [previousType: {}, previousLabelName:{}, previousPriority: {}], will be replaced with -> [type:{}, labelName:{}, priority: {}]", - previousExtractor.getType(), previousExtractor.getLabelName(), previousExtractor.getPriority(), - extractor.getType(), extractor.getLabelName(), extractor.getPriority()); - typeExtractors.remove(previousExtractor); - typeExtractors.add(extractor); - } - } else { - typeExtractors.add(extractor); - } - } - } - - @SuppressWarnings("unchecked") - public Optional>> getLabelValueExtractors(Class sourceType) { - return (Optional>>) Optional.ofNullable((T) extractorsBySourceType.get(sourceType)); - } - - public void applyLabelValueExtractors(Class sourceType, T source, BiConsumer> extractedValuesConsumer) { - final Optional>> extractorsSet = getLabelValueExtractors(sourceType); - extractorsSet.ifPresent(extractors -> extractors.forEach(valueExtractor -> { - final Set values = valueExtractor.extract(source); - if (values != null) { - extractedValuesConsumer.accept(valueExtractor.getLabelName(), values); - } - })); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/util/IndexedElement.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/util/IndexedElement.java deleted file mode 100644 index 38ee3255c0..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/util/IndexedElement.java +++ /dev/null @@ -1,71 +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.planning.util; - -import java.util.Iterator; -import java.util.List; - -/** - * Facilitates the ordering of elements given an index but also the faculty of being pinned. - * Pinned elements goes always before non-pinned elements and ordered by index. - * Non-pinned elements goes always after the pinned elements and ordered by index. - */ -public class IndexedElement { - - private T element; - private int index; - private boolean pinned; - - public IndexedElement(T element, int index, boolean pinned) { - this.element = element; - this.index = index; - this.pinned = pinned; - } - - public T getElement() { - return element; - } - - public int getIndex() { - return index; - } - - public boolean isPinned() { - return pinned; - } - - public static void addInOrder(List> indexedElements, IndexedElement element) { - boolean pinned = element.isPinned(); - int index = element.getIndex(); - int insertIndex = 0; - IndexedElement currentElement; - final Iterator> it = indexedElements.iterator(); - boolean found = false; - while (!found && it.hasNext()) { - currentElement = it.next(); - if (pinned && currentElement.isPinned()) { - found = (index >= 0) && (currentElement.getIndex() < 0 || index < currentElement.getIndex()); - } else if (pinned && !currentElement.isPinned()) { - found = true; - } else if (!pinned && !currentElement.isPinned()) { - found = (index >= 0) && (currentElement.getIndex() < 0 || index < currentElement.getIndex()); - } - insertIndex = !found ? insertIndex + 1 : insertIndex; - } - indexedElements.add(insertIndex, element); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/util/PropertyUtil.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/util/PropertyUtil.java deleted file mode 100644 index 7a73c96655..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/util/PropertyUtil.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.planning.util; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class PropertyUtil { - - private static final Logger LOGGER = LoggerFactory.getLogger(PropertyUtil.class); - - public interface PropertyParser { - - T parse(String value) throws E; - } - - private PropertyUtil() { - } - - public static T readSystemProperty(String propertyName, - T defaultValue, - PropertyParser parser) { - String strValue = null; - try { - strValue = System.getProperty(propertyName); - if (strValue == null) { - LOGGER.debug("Property: {} was not configured. Default value will be used instead: {}", propertyName, - defaultValue); - return defaultValue; - } - return parser.parse(strValue); - } catch (Exception e) { - LOGGER.error("An error was produced while parsing " + propertyName + " value from string: " + strValue + - ", default value: " + defaultValue + " will be used instead.", e); - return defaultValue; - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/util/TaskUtil.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/util/TaskUtil.java deleted file mode 100644 index 1576e38302..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/util/TaskUtil.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.services.taskassigning.planning.util; - -import org.kie.server.api.model.taskassigning.TaskData; -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.User; -import org.kie.server.services.taskassigning.planning.data.LabelValueExtractorRegistry; - -import static org.kie.server.services.taskassigning.planning.util.UserUtil.isUser; - -public class TaskUtil { - - private TaskUtil() { - } - - public static Task fromTaskData(TaskData taskData) { - final Task task = new Task(taskData.getTaskId(), - taskData.getProcessInstanceId(), - taskData.getProcessId(), - taskData.getContainerId(), - taskData.getName(), - taskData.getPriority(), - taskData.getStatus(), - taskData.getInputData()); - if (taskData.getPotentialOwners() != null) { - taskData.getPotentialOwners().forEach(potentialOwner -> { - if (isUser(potentialOwner.getType())) { - task.getPotentialOwners().add(new User(potentialOwner.getName().hashCode(), potentialOwner.getName())); - } else { - task.getPotentialOwners().add(new Group(potentialOwner.getName().hashCode(), potentialOwner.getName())); - } - }); - } - LabelValueExtractorRegistry.getInstance().applyLabelValueExtractors(TaskData.class, taskData, task::setLabelValues); - return task; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/util/UserUtil.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/util/UserUtil.java deleted file mode 100644 index bba3f57c4b..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/java/org/kie/server/services/taskassigning/planning/util/UserUtil.java +++ /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.kie.server.services.taskassigning.planning.util; - -import java.util.Collection; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; -import java.util.stream.Stream; - -import org.kie.server.api.model.taskassigning.UserType; -import org.kie.server.services.taskassigning.core.model.Group; -import org.kie.server.services.taskassigning.core.model.User; -import org.kie.server.services.taskassigning.planning.data.LabelValueExtractorRegistry; - -public class UserUtil { - - private UserUtil() { - } - - public static User fromExternalUser(org.kie.server.services.taskassigning.user.system.api.User externalUser) { - final User user = new User(externalUser.getId().hashCode(), externalUser.getId(), true); - final Set groups = new HashSet<>(); - user.setGroups(groups); - if (externalUser.getGroups() != null) { - externalUser.getGroups().forEach(externalGroup -> groups.add(new Group(externalGroup.getId().hashCode(), externalGroup.getId()))); - } - user.setAttributes(externalUser.getAttributes()); - LabelValueExtractorRegistry.getInstance() - .applyLabelValueExtractors(org.kie.server.services.taskassigning.user.system.api.User.class, - externalUser, user::setLabelValues); - return user; - } - - public static boolean isUser(String userType) { - return UserType.USER.equals(userType); - } - - /** - * Given a Collection of external users, normally returned by the UserSystemService, produces the filtering of the - * elements with the following criteria: - * 1) Null elements are removed from the result. - * 2) Duplicate users are removed from the result. Since the external users implementation is unknown and the identifier - * of a user is the "id", two users are considered to be the same if they have the same "id". Meaning that if two users - * with the same "id" are encountered only one instance will be included in the result, typically the first instance - * found. - * @param externalUsers a collection with the external users to filter. - * @return a Stream with the filtered users. - */ - public static Stream filterDuplicates(Collection externalUsers) { - if (externalUsers == null) { - return Stream.empty(); - } else { - final Set included = new HashSet<>(); - return externalUsers.stream() - .filter(Objects::nonNull) - .filter(externalUser -> { - if (!included.contains(externalUser.getId())) { - included.add(externalUser.getId()); - return true; - } - return false; - }); - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/resources/META-INF/services/org.kie.server.api.model.KieServerConfigProvider b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/resources/META-INF/services/org.kie.server.api.model.KieServerConfigProvider deleted file mode 100644 index e6438748a3..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/resources/META-INF/services/org.kie.server.api.model.KieServerConfigProvider +++ /dev/null @@ -1 +0,0 @@ -org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerConfigProvider \ 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-planning/src/main/resources/META-INF/services/org.kie.server.api.model.taskassigning.data.LabelValueExtractor b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/resources/META-INF/services/org.kie.server.api.model.taskassigning.data.LabelValueExtractor deleted file mode 100644 index 10db4c121a..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/resources/META-INF/services/org.kie.server.api.model.taskassigning.data.LabelValueExtractor +++ /dev/null @@ -1,4 +0,0 @@ -org.kie.server.services.taskassigning.planning.data.DefaultTaskDataAffinitiesValueExtractor -org.kie.server.services.taskassigning.planning.data.DefaultTaskDataSkillsValueExtractor -org.kie.server.services.taskassigning.planning.data.DefaultUserAffinitiesValueExtractor -org.kie.server.services.taskassigning.planning.data.DefaultUserSkillsValueExtractor \ 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-planning/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerExtension b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerExtension deleted file mode 100644 index a32796c8e1..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerExtension +++ /dev/null @@ -1 +0,0 @@ -org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtension \ 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-planning/src/test/java/org/kie/server/services/taskassigning/planning/PlanningBuilderTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/PlanningBuilderTest.java deleted file mode 100644 index 9835133dca..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/PlanningBuilderTest.java +++ /dev/null @@ -1,196 +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.planning; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.kie.server.api.model.taskassigning.PlanningItem; -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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; -import static org.kie.server.services.taskassigning.core.model.ModelConstants.PLANNING_USER_ID; -import static org.kie.server.services.taskassigning.core.model.solver.TaskHelper.extractTasks; -import static org.kie.server.services.taskassigning.planning.TestUtil.initializeUser; -import static org.kie.server.services.taskassigning.planning.TestUtil.mockUser; - -@RunWith(Parameterized.class) -public class PlanningBuilderTest { - - private static final int USER1_TOTAL_TASKS = 5; - private static final int USER1_PINNED_TASKS = 3; - - private static final int USER2_TOTAL_TASKS = 5; - private static final int USER2_PINNED_TASKS = 2; - - private static final int USER3_TOTAL_TASKS = 5; - private static final int USER3_PINNED_TASKS = 1; - - private static final int USER4_TOTAL_TASKS = 10; - private static final int USER4_PINNED_TASKS = 0; - - private static final int USER5_TOTAL_TASKS = 10; - private static final int USER5_PINNED_TASKS = 0; - - private static final int USER6_TOTAL_TASKS = 0; - private static final int USER6_PINNED_TASKS = 0; - - private static final int PLANNING_USER_TASKS = 6; - - private long ids = 0; - - @Parameterized.Parameter - public int publishWindowSize; - - @Parameterized.Parameters(name = "publishForWindowSize({0})") - public static Object[] data() { - return new Object[]{0, 1, 2, 3, 4, 5, 6}; - } - - @Test - public void build() { - List user1Tasks = mockTasks(USER1_TOTAL_TASKS, USER1_PINNED_TASKS, "container1", 1L); - User user1 = mockUser(1, user1Tasks); - - List user2Tasks = mockTasks(USER2_TOTAL_TASKS, USER2_PINNED_TASKS, "container2", 2L); - User user2 = mockUser(2, user2Tasks); - - List user3Tasks = mockTasks(USER3_TOTAL_TASKS, USER3_PINNED_TASKS, "container3", 3L); - User user3 = mockUser(3, user3Tasks); - - List user4Tasks = mockTasks(USER4_TOTAL_TASKS, USER4_PINNED_TASKS, "container4", 4L); - User user4 = mockUser(4, user4Tasks); - - List user5Tasks = mockTasks(USER5_TOTAL_TASKS, USER5_PINNED_TASKS, "container5", 5L); - User user5 = mockUser(5, user5Tasks); - - List user6Tasks = mockTasks(USER6_TOTAL_TASKS, USER6_PINNED_TASKS, "container6", 6L); - User user6 = mockUser(6, user6Tasks); - - List planningUserTasks = mockTasks(PLANNING_USER_TASKS, 0, "container7", 7L); - User planningUser = initializeUser(new User(-1, PLANNING_USER_ID), planningUserTasks); - - List totalTasks = new ArrayList<>(); - totalTasks.addAll(user1Tasks); - totalTasks.addAll(user2Tasks); - totalTasks.addAll(user3Tasks); - totalTasks.addAll(user4Tasks); - totalTasks.addAll(user5Tasks); - totalTasks.addAll(user6Tasks); - totalTasks.addAll(planningUserTasks); - - List totalUsers = Arrays.asList(user1, user2, user3, user4, user5, user6, planningUser); - - TaskAssigningSolution solution = new TaskAssigningSolution(1, totalUsers, totalTasks); - - List planningItems = PlanningBuilder.create() - .withPublishWindowSize(publishWindowSize) - .withSolution(solution) - .build(); - - assertPlanningItems(user1, publishWindowSize, planningItems); - assertPlanningItems(user2, publishWindowSize, planningItems); - assertPlanningItems(user3, publishWindowSize, planningItems); - assertPlanningItems(user4, publishWindowSize, planningItems); - assertPlanningItems(user5, publishWindowSize, planningItems); - assertPlanningItems(user6, publishWindowSize, planningItems); - assertPlanningUserPlanningItems(planningUser, publishWindowSize, planningItems); - } - - private void assertPlanningItems(User user, int publishWindowSize, List planningItems) { - List nonPinnedTasks = extractTasks(user, task -> !task.isPinned()); - List pinnedTasks = extractTasks(user, Task::isPinned); - - List userPlanningItems = planningItems.stream() - .filter(item -> user.getEntityId().equals(item.getPlanningTask().getAssignedUser())) - .collect(Collectors.toList()); - - // 1) all the tasks that where pinned must necessary be present. - assertTasksArePlanned(pinnedTasks, userPlanningItems); - - // 2) if the publishWindowsSize is greater that the pinnedTasks it must be completed with non pinned tasks. - int publishWindowSizeFreeRoom = publishWindowSize - pinnedTasks.size(); - List additionalTasks = new ArrayList<>(); - for (int i = 0; publishWindowSizeFreeRoom > 0 && i < nonPinnedTasks.size(); i++) { - publishWindowSizeFreeRoom--; - additionalTasks.add(nonPinnedTasks.get(i)); - } - assertTasksArePlanned(additionalTasks, userPlanningItems); - - // 3) finally the total planningItems for the user must be exactly pinnedTasks.size() + additionalTasks.size(); - assertEquals("The total planningItems for user: " + user.getId() + " is not the expected value", - userPlanningItems.size(), pinnedTasks.size() + additionalTasks.size()); - } - - private void assertPlanningUserPlanningItems(User user, int publishWindowSize, List planningItems) { - List userPlanningItems = planningItems.stream() - .filter(item -> user.getEntityId().equals(item.getPlanningTask().getAssignedUser())) - .collect(Collectors.toList()); - List tasks = extractTasks(user, (task) -> true); - // all the tasks assigned to the planning user are published no matter the publishWidowSize. - assertTasksArePlanned(tasks, userPlanningItems); - - assertEquals("The total planningItems for user: " + user.getId() + " is not the expected value", - userPlanningItems.size(), tasks.size()); - } - - private void assertTasksArePlanned(List tasks, List planningItems) { - for (Task task : tasks) { - PlanningItem peerItem = planningItems.stream() - .filter(item -> item.getTaskId().equals(task.getId())) - .findFirst().orElse(null); - if (peerItem == null) { - fail("Task: " + task.getId() + " for user: " + task.getUser().getId() + " must be part of the generated planning"); - } - assertEquals("PlanningItem containerId for task: " + task.getId() + " and user: " + task.getUser().getId() + " don't have the expected value.", - task.getContainerId(), peerItem.getContainerId()); - assertEquals("PlanningItem processInstanceId for task: " + task.getId() + " and user: " + task.getUser().getId() + " don't have the expected value.", - task.getProcessInstanceId(), task.getProcessInstanceId()); - assertEquals("PlanningItem assignedUser for task: " + task.getId() + " and user: " + task.getUser().getId() + " don't have the expected value.", - task.getUser().getEntityId(), peerItem.getPlanningTask().getAssignedUser()); - } - } - - private List mockTasks(int totalTasks, int totalPinnedTasks, String containerId, long processInstanceId) { - List tasks = new ArrayList<>(); - int pinnedTasks = 0; - for (int i = 0; i < totalTasks; i++) { - tasks.add(mockTask(nextId(), pinnedTasks++ < totalPinnedTasks, containerId, processInstanceId)); - } - return tasks; - } - - private Task mockTask(long taskId, boolean pinned, String containerId, long processInstanceId) { - Task result = new Task(taskId, "Task_" + taskId, 0); - result.setContainerId(containerId); - result.setProcessInstanceId(processInstanceId); - result.setPinned(pinned); - return result; - } - - private long nextId() { - return ids++; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/RunnableBaseTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/RunnableBaseTest.java deleted file mode 100644 index a6604b0f2d..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/RunnableBaseTest.java +++ /dev/null @@ -1,58 +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.planning; - -import java.util.concurrent.CompletableFuture; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.junit.Assert.assertTrue; - -@RunWith(MockitoJUnitRunner.Silent.class) -public abstract class RunnableBaseTest { - - protected final Logger LOGGER = LoggerFactory.getLogger(getClass()); - - protected static final long TEST_TIMEOUT = 5000; - - protected T runnableBase; - - @Before - public void setUp() { - runnableBase = createRunnableBase(); - } - - protected abstract T createRunnableBase(); - - protected CompletableFuture startRunnableBase() { - return CompletableFuture.runAsync(runnableBase); - } - - @Test(timeout = TEST_TIMEOUT) - public void destroy() throws Exception { - CompletableFuture future = startRunnableBase(); - assertTrue(runnableBase.isAlive()); - runnableBase.destroy(); - future.get(); - assertTrue(runnableBase.isDestroyed()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolutionBuilderTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolutionBuilderTest.java deleted file mode 100644 index a63180dca1..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolutionBuilderTest.java +++ /dev/null @@ -1,439 +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.planning; - -import java.time.Duration; -import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; -import org.kie.api.task.model.Status; -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.api.model.taskassigning.TaskData; -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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - -import static org.junit.Assert.assertTrue; -import static org.kie.api.task.model.Status.InProgress; -import static org.kie.api.task.model.Status.Ready; -import static org.kie.api.task.model.Status.Reserved; -import static org.kie.api.task.model.Status.Suspended; -import static org.kie.server.api.model.taskassigning.util.StatusConverter.convertToString; -import static org.kie.server.services.taskassigning.core.model.ModelConstants.DUMMY_TASK; -import static org.kie.server.services.taskassigning.core.model.ModelConstants.PLANNING_USER_ID; -import static org.kie.server.services.taskassigning.core.model.solver.TaskHelper.extractTasks; -import static org.kie.server.services.taskassigning.planning.TestUtil.assertContains; -import static org.kie.server.services.taskassigning.planning.TestUtil.mockExternalUser; - -public class SolutionBuilderTest { - - // enabled user - private static final String USER1 = "USER1"; - // disabled user - private static final String USER2 = "USER2"; - // enabled user - private static final String USER3 = "USER3"; - // user not present in the external users - private static final String USER_NOT_PRESENT = "USER_NOT_PRESENT"; - - private SolverHandlerContext context; - - @Before - public void setUp() { - context = new SolverHandlerContext(Duration.ofMillis(2000)); - } - - @Test - public void buildAndCheckUsersWhereAdded() { - List externalUsers = buildExternalUsers(); - TaskAssigningSolution solution = SolutionBuilder.create() - .withTasks(Collections.emptyList()) - .withUsers(externalUsers) - .withContext(context) - .build(); - - assertContains(USER1, 1, solution.getUserList()); - assertContains(USER2, 1, solution.getUserList()); - assertContains(USER3, 1, solution.getUserList()); - assertContains(PLANNING_USER_ID, solution.getUserList()); //is always added. - assertEquals(4, solution.getUserList().size(), 0); - } - - @Test - public void buildAndCheckDummyTaskWasAdded() { - TaskAssigningSolution solution = SolutionBuilder.create() - .withTasks(Collections.emptyList()) - .withUsers(Collections.emptyList()) - .withContext(context) - .build(); - assertEquals(1, solution.getTaskList().size()); - assertEquals(DUMMY_TASK, solution.getTaskList().get(0)); - } - - @Test - public void buildAndCheckReadyTaskWasProcessedCorrect() { - List externalUsers = buildExternalUsers(); - TaskData taskData = mockTaskData(1L, Ready); - TaskAssigningSolution solution = SolutionBuilder.create() - .withTasks(Collections.singletonList(taskData)) - .withUsers(externalUsers) - .withContext(context) - .build(); - assertEquals(2, solution.getTaskList().size()); - assertContainsNotAssignedTask(taskData, solution); - } - - @Test - public void buildAndCheckReservedTaskWithNoPlanningTaskWasProcessedCorrect() { - buildAndCheckTaskWithNoPlanningTaskWasProcessedCorrect(mockTaskData(1L, Reserved, USER1), true); - } - - @Test - public void buildAndCheckInProgressTaskWithNoPlanningTaskWasProcessedCorrect() { - buildAndCheckTaskWithNoPlanningTaskWasProcessedCorrect(mockTaskData(1L, InProgress, USER1), true); - } - - @Test - public void buildAndCheckSuspendedTaskWithNoPlanningTaskWasProcessedCorrect() { - buildAndCheckTaskWithNoPlanningTaskWasProcessedCorrect(mockTaskData(1L, Suspended, USER1), true); - } - - @Test - public void buildAndCheckTaskForNotPresentUserWithNoPlanningTaskWasProcessedCorrect() { - buildAndCheckTaskWithNoPlanningTaskWasProcessedCorrect(mockTaskData(1L, Reserved, USER_NOT_PRESENT), true); - } - - @Test - public void buildAndCheckReservedTaskWithUnChangedPlanningTaskPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(true) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, Reserved, planningTask.getAssignedUser()); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, planningTask.getAssignedUser(), true); - } - - @Test - public void buildAndCheckReservedTaskWithUnChangedPlanningTaskNotPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(false) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, Reserved, planningTask.getAssignedUser()); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, planningTask.getAssignedUser(), false); - } - - @Test - public void buildAndCheckInProgressTaskWithUnChangedPlanningTaskNotPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(false) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, InProgress, planningTask.getAssignedUser()); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, planningTask.getAssignedUser(), true); - } - - @Test - public void buildAndCheckInProgressTaskWithUnChangedPlanningTaskPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(true) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, InProgress, planningTask.getAssignedUser()); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, planningTask.getAssignedUser(), true); - } - - @Test - public void buildAndCheckSuspendedTaskWithUnChangedPlanningTaskNotPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(false) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, Suspended, planningTask.getAssignedUser()); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, planningTask.getAssignedUser(), true); - } - - @Test - public void buildAndCheckSuspendedTaskWithUnChangedPlanningTaskPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(true) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, Suspended, planningTask.getAssignedUser()); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, planningTask.getAssignedUser(), true); - } - - @Test - public void buildAndCheckReservedTaskWithModifiedPlanningTaskPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(true) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, Reserved, USER2); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, taskData.getActualOwner(), true); - } - - @Test - public void buildAndCheckReservedTaskWithModifiedPlanningTaskNotPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(false) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, Reserved, USER2); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, taskData.getActualOwner(), true); - } - - @Test - public void buildAndCheckReservedForPlanningUserTaskWithModifiedPlanningTaskPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(true) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, Reserved, PLANNING_USER_ID); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, taskData.getActualOwner(), false); - } - - @Test - public void buildAndCheckReservedForPlanningUserTaskWithModifiedPlanningTaskNotPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(false) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, Reserved, PLANNING_USER_ID); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, taskData.getActualOwner(), false); - } - - @Test - public void buildAndCheckInProgressTaskWithModifiedPlanningTaskPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(true) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, InProgress, USER2); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, taskData.getActualOwner(), true); - } - - @Test - public void buildAndCheckInProgressTaskWithModifiedPlanningTaskNotPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(false) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, InProgress, USER2); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, taskData.getActualOwner(), true); - } - - @Test - public void buildAndCheckSuspendedTaskWithModifiedPlanningTaskPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(true) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, Suspended, USER2); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, taskData.getActualOwner(), true); - } - - @Test - public void buildAndCheckSuspendedTaskWithModifiedPlanningTaskNotPublishedWasProcessedCorrect() { - PlanningTask planningTask = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(false) - .index(1) - .build(); - TaskData taskData = mockTaskData(1L, Suspended, USER2); - buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(taskData, planningTask, taskData.getActualOwner(), true); - } - - @Test - public void buildAnExample() { - PlanningTask planningTask1 = PlanningTask.builder() - .taskId(1L) - .assignedUser(USER1) - .published(false) - .index(1) - .build(); - TaskData taskData1 = mockTaskData(1L, Reserved, USER1); - taskData1.setPlanningTask(planningTask1); - - PlanningTask planningTask2 = PlanningTask.builder() - .taskId(2L) - .assignedUser(USER1) - .published(true) - .index(2) - .build(); - TaskData taskData2 = mockTaskData(2L, Suspended, USER1); - taskData2.setPlanningTask(planningTask2); - - PlanningTask planningTask3 = PlanningTask.builder() - .taskId(3L) - .assignedUser(USER1) - .published(true) - .index(3) - .build(); - TaskData taskData3 = mockTaskData(3L, InProgress, USER1); - taskData3.setPlanningTask(planningTask3); - - PlanningTask planningTask4 = PlanningTask.builder() - .taskId(4L) - .assignedUser(USER2) - .published(false) - .index(4) - .build(); - TaskData taskData4 = mockTaskData(4L, InProgress, USER1); - taskData4.setPlanningTask(planningTask4); - - List externalUsers = buildExternalUsers(); - List taskDataList = Arrays.asList(taskData4, taskData1, taskData3, taskData2); - TaskAssigningSolution solution = SolutionBuilder.create() - .withTasks(taskDataList) - .withUsers(externalUsers) - .withContext(context) - .build(); - - assertEquals(5, solution.getTaskList().size()); - User user1 = solution.getUserList().stream() - .filter(user -> user.getEntityId().equals(USER1)) - .findFirst().orElse(null); - assertNotNull(user1); - List user1Tasks = extractTasks(user1, (task) -> true); - assertEquals(4L, user1Tasks.size(), 0); - - assertExpectedTaskAtPosition(taskData2.getTaskId(), 0, true, user1Tasks); - assertExpectedTaskAtPosition(taskData3.getTaskId(), 1, true, user1Tasks); - assertExpectedTaskAtPosition(taskData4.getTaskId(), 2, true, user1Tasks); - assertExpectedTaskAtPosition(taskData1.getTaskId(), 3, false, user1Tasks); - taskDataList.forEach(taskData -> assertTaskChangeWasProcessed(taskData.getTaskId(), taskData.getLastModificationDate())); - } - - private void assertExpectedTaskAtPosition(long taskId, int position, boolean pinned, List tasks) { - assertEquals("Task: " + taskId + " is expected at position 0", taskId, tasks.get(position).getId(), 0); - assertEquals("Task: " + taskId + " with pinned = " + pinned + " is expected at position 0", pinned, tasks.get(position).isPinned()); - } - - private void buildAndCheckTaskWithNoPlanningTaskWasProcessedCorrect(TaskData taskData, boolean pinned) { - List externalUsers = buildExternalUsers(); - TaskAssigningSolution solution = SolutionBuilder.create() - .withTasks(Collections.singletonList(taskData)) - .withUsers(externalUsers) - .withContext(context) - .build(); - assertEquals(2, solution.getTaskList().size()); - assertContainsAssignedTask(taskData, taskData.getActualOwner(), pinned, solution); - assertTaskChangeWasProcessed(taskData.getTaskId(), taskData.getLastModificationDate()); - } - - private void buildAndCheckTaskWithPlanningTaskWasProcessedCorrect(TaskData taskData, PlanningTask planningTask, String owner, boolean pinned) { - taskData.setPlanningTask(planningTask); - List externalUsers = buildExternalUsers(); - TaskAssigningSolution solution = SolutionBuilder.create() - .withTasks(Collections.singletonList(taskData)) - .withUsers(externalUsers) - .withContext(context) - .build(); - assertEquals(2, solution.getTaskList().size()); - assertContainsAssignedTask(taskData, owner, pinned, solution); - assertTaskChangeWasProcessed(taskData.getTaskId(), taskData.getLastModificationDate()); - } - - private List buildExternalUsers() { - org.kie.server.services.taskassigning.user.system.api.User externalUser1 = - mockExternalUser(USER1, Collections.emptySet()); - org.kie.server.services.taskassigning.user.system.api.User externalUser2 = - mockExternalUser(USER2, Collections.emptySet()); - org.kie.server.services.taskassigning.user.system.api.User externalUser3 = - mockExternalUser(USER3, Collections.emptySet()); - return Arrays.asList(externalUser1, externalUser2, externalUser3, externalUser2, - externalUser3, externalUser1, externalUser1, externalUser3, externalUser3, externalUser2); - } - - private TaskData mockTaskData(Long taskId, Status status) { - return mockTaskData(taskId, status, null); - } - - private TaskData mockTaskData(Long taskId, Status status, String actualOwner) { - TaskData taskData = new TaskData(); - taskData.setTaskId(taskId); - taskData.setActualOwner(actualOwner); - taskData.setStatus(convertToString(status)); - taskData.setPriority(0); - taskData.setProcessInstanceId(1L); - taskData.setLastModificationDate(LocalDateTime.now()); - return taskData; - } - - private void assertContainsNotAssignedTask(TaskData taskData, TaskAssigningSolution solution) { - Task task = solution.getTaskList().stream() - .filter(t -> taskData.getTaskId().equals(t.getId())) - .findFirst().orElse(null); - assertNotNull("Task: " + taskData.getTaskId() + " must be present in the solution.", task); - assertNull("Task: " + taskData.getTaskId() + " must not be assigned to any user", task.getUser()); - assertTaskChangeWasProcessed(taskData.getTaskId(), taskData.getLastModificationDate()); - } - - private void assertContainsAssignedTask(TaskData taskData, String userId, boolean pinned, TaskAssigningSolution solution) { - Task task = solution.getTaskList().stream() - .filter(t -> taskData.getTaskId().equals(t.getId())) - .findFirst().orElse(null); - User user = solution.getUserList().stream() - .filter(u -> userId.equals(u.getEntityId())) - .findFirst().orElse(null); - assertNotNull("Task: " + taskData.getTaskId() + " must be present in the solution.", task); - assertNotNull("Task: " + taskData.getTaskId() + " must assigned to user: " + userId + " but user is not be present in the solution.", user); - assertNotNull("Task: " + taskData.getTaskId() + " must be assigned to user: " + userId + " but has no assigned user.", task.getUser()); - assertEquals("Task: " + taskData.getTaskId() + " must be assigned to user: " + userId, userId, task.getUser().getEntityId()); - assertEquals("Task: " + taskData.getTaskId() + " must have pinned = " + pinned, pinned, task.isPinned()); - } - - private void assertTaskChangeWasProcessed(long taskId, LocalDateTime changeTime) { - assertTrue("change: " + changeTime + " must have been processed for task: " + taskId, context.isProcessedTaskChange(taskId, changeTime)); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolutionChangesBuilderTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolutionChangesBuilderTest.java deleted file mode 100644 index 6cd45a1412..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolutionChangesBuilderTest.java +++ /dev/null @@ -1,909 +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.planning; - -import java.time.Duration; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.commons.lang3.tuple.Pair; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.kie.api.task.model.Status; -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.services.taskassigning.core.model.DefaultLabels; -import org.kie.server.services.taskassigning.core.model.Group; -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.User; -import org.kie.server.services.taskassigning.core.model.solver.realtime.AddTaskProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.AddUserProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.AssignTaskProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.DisableUserProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.ReleaseTaskProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.RemoveTaskProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.RemoveUserProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.TaskPropertyChangeProblemFactChange; -import org.kie.server.services.taskassigning.core.model.solver.realtime.UserPropertyChangeProblemFactChange; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; -import org.optaplanner.core.impl.score.director.ScoreDirector; -import org.optaplanner.core.impl.solver.ProblemFactChange; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.kie.api.task.model.Status.Completed; -import static org.kie.api.task.model.Status.Exited; -import static org.kie.api.task.model.Status.Failed; -import static org.kie.api.task.model.Status.InProgress; -import static org.kie.api.task.model.Status.Obsolete; -import static org.kie.api.task.model.Status.Ready; -import static org.kie.api.task.model.Status.Reserved; -import static org.kie.api.task.model.Status.Suspended; -import static org.kie.server.api.model.taskassigning.util.StatusConverter.convertToString; -import static org.kie.server.services.taskassigning.planning.util.TaskUtil.fromTaskData; -import static org.kie.server.services.taskassigning.planning.util.UserUtil.fromExternalUser; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class SolutionChangesBuilderTest { - - private static final long TASK_ID = 0L; - private static final long PROCESS_INSTANCE_ID = 1L; - private static final String PROCESS_ID = "PROCESS_ID"; - private static final String CONTAINER_ID = "CONTAINER_ID"; - private static final String NAME = "NAME"; - private static final int PRIORITY = 2; - private static final Map INPUT_DATA = new HashMap<>(); - - private static final String ACTUAL_OWNER_ENTITY_ID = "ACTUAL_OWNER_ENTITY_ID"; - - private static final String USER_ENTITY_ID = "USER_ENTITY_ID"; - - private static final String USER1_ID = "USER1_ID"; - private static final String USER2_ID = "USER2_ID"; - private static final String USER3_ID = "USER3_ID"; - - private static final String GROUP1_ID = "GROUP1_ID"; - private static final String GROUP2_ID = "GROUP2_ID"; - - private static final String ATTRIBUTE1_ID = "ATTRIBUTE1_ID"; - private static final String ATTRIBUTE1_VALUE = "ATTRIBUTE1_VALUE"; - private static final String ATTRIBUTE2_ID = "ATTRIBUTE2_ID"; - private static final String ATTRIBUTE2_VALUE = "ATTRIBUTE2_VALUE"; - private static final String SKILL1 = "SKILL1"; - private static final String AFFINITY1 = "AFFINITY1"; - private static final String SKILLS_ATTRIBUTE_NAME = "skills"; - private static final String AFFINITIES_ATTRIBUTE_NAME = "affinities"; - - @Mock - private UserSystemService userSystemService; - - @Mock - private ScoreDirector scoreDirector; - - private SolverHandlerContext context; - - @Before - public void setUp() { - context = new SolverHandlerContext(Duration.parse("PT2H")); - } - - @Test - public void addNewReadyTaskChange() { - TaskData taskData = mockTaskData(TASK_ID, NAME, Ready, null); - List taskDataList = mockTaskDataList(taskData); - TaskAssigningSolution solution = mockSolution(Collections.emptyList(), Collections.emptyList()); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(taskDataList) - .withUserSystem(userSystemService) - .withContext(context) - .build(); - - AddTaskProblemFactChange expected = new AddTaskProblemFactChange(fromTaskData(taskData)); - assertChangeIsTheChangeSetId(result, 0); - assertChange(result, 1, expected); - assertTaskChangeRegistered(taskData.getTaskId(), taskData.getLastModificationDate()); - } - - @Test - public void addNewReservedTaskChangeWithActualOwnerInSolution() { - addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwnerInSolution(Reserved); - } - - @Test - public void addNewInProgressTaskChangeWithActualOwnerInSolution() { - addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwnerInSolution(InProgress); - } - - @Test - public void addNewSuspendedTaskChangeWithActualOwnerInSolution() { - addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwnerInSolution(Suspended); - } - - @Test - public void addNewReservedTaskChangeWithActualOwnerInExternalSystem() { - addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwnerInExternalSystem(Reserved); - } - - @Test - public void addNewInProgressTaskChangeWithActualOwnerInExternalSystem() { - addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwnerInExternalSystem(InProgress); - } - - @Test - public void addNewSuspendedTaskChangeWithActualOwnerInExternalSystem() { - addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwnerInExternalSystem(Suspended); - } - - @Test - public void addNewReservedTaskChangeWithActualOwnerMissing() { - addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwnerMissing(Reserved); - } - - @Test - public void addNewInProgressTaskChangeWithActualOwnerMissing() { - addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwnerInExternalSystem(InProgress); - } - - @Test - public void addNewSuspendedTaskChangeWithActualOwnerMissing() { - addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwnerInExternalSystem(Suspended); - } - - @Test - public void addReleasedTaskChange() { - TaskData taskData = mockTaskData(TASK_ID, NAME, Ready, USER_ENTITY_ID); - Task task = fromTaskData(taskData); - task.setStatus(convertToString(Reserved)); - TaskAssigningSolution solution = mockSolution(Collections.singletonList(task), Collections.emptyList()); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(mockTaskDataList(taskData)) - .withUserSystem(userSystemService) - .withContext(context) - .build(); - - assertChangeIsTheChangeSetId(result, 0); - assertChange(result, 1, new ReleaseTaskProblemFactChange(task)); - assertTaskChangeRegistered(taskData.getTaskId(), taskData.getLastModificationDate()); - } - - @Test - public void addRemoveReservedTaskChangeWhenActualOwnerNotPresent() { - addRemoveReservedOrInProgressOrSuspendedTaskChangeWhenActualOwnerNotPresent(Reserved); - } - - @Test - public void addRemoveInProgressTaskChangeWhenActualOwnerNotPresent() { - addRemoveReservedOrInProgressOrSuspendedTaskChangeWhenActualOwnerNotPresent(InProgress); - } - - @Test - public void addRemoveSuspendedTaskChangeWhenActualOwnerNotPresent() { - addRemoveReservedOrInProgressOrSuspendedTaskChangeWhenActualOwnerNotPresent(Suspended); - } - - @Test - public void addReassignReservedTaskChangeWhenItWasManuallyReassignedWithActualOwnerInSolution() { - addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerInSolution(Reserved); - } - - @Test - public void addReassignInProgressTaskChangeWhenItWasManuallyReassignedWithActualOwnerInSolution() { - addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerInSolution(InProgress); - } - - @Test - public void addReassignSuspendedTaskChangeWhenItWasManuallyReassignedWithActualOwnerInSolution() { - addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerInSolution(Suspended); - } - - @Test - public void addReassignReservedTaskWhenItWasManuallyReassignedWithActualOwnerInExternalSystem() { - addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerInExternalSystem(Reserved); - } - - @Test - public void addReassignInProgressTaskWhenItWasManuallyReassignedWithActualOwnerInExternalSystem() { - addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerInExternalSystem(InProgress); - } - - @Test - public void addReassignSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerInExternalSystem() { - addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerInExternalSystem(Suspended); - } - - @Test - public void addReassignReservedTaskWhenItWasManuallyReassignedWithActualOwnerMissing() { - addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerMissing(Reserved); - } - - @Test - public void addReassignInProgressTaskWhenItWasManuallyReassignedWithActualOwnerMissing() { - addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerMissing(InProgress); - } - - @Test - public void addReassignSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerMissing() { - addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerMissing(Suspended); - } - - @Test - public void addPinReservedTaskWhenPublishedAndNotYetPinnedWithActualOwnerInSolution() { - addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinned(Reserved, true); - } - - @Test - public void addPinInProgressTaskWhenPublishedAndNotYetPinnedWithActualOwnerInSolution() { - addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinned(InProgress, true); - } - - @Test - public void addPinSuspendedTaskWhenPublishedAndNotYetPinnedWithActualOwnerInSolution() { - addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinned(Suspended, true); - } - - @Test - public void addPinReservedTaskWhenPublishedAndNotYetPinnedWithActualOwnerInExternalSystem() { - addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinnedWithActualOwnerInExternalSystem(Reserved); - } - - @Test - public void addPinInProgressTaskWhenPublishedAndNotYetPinnedWithActualOwnerInExternalSystem() { - addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinnedWithActualOwnerInExternalSystem(InProgress); - } - - @Test - public void addPinSuspendedTaskWhenPublishedAndNotYetPinnedWithActualOwnerInExternalSystem() { - addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinnedWithActualOwnerInExternalSystem(Suspended); - } - - @Test - public void addPinReservedTaskWhenPublishedAndNotYetPinnedWithActualOwnerMissing() { - addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinnedWithActualOwnerMissing(Reserved); - } - - @Test - public void addPinInProgressTaskWhenPublishedAndNotYetPinnedWithActualOwnerMissing() { - addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinnedWithActualOwnerMissing(InProgress); - } - - @Test - public void addPinSuspendedTaskWhenPublishedAndNotYetPinnedWithActualOwnerMissing() { - addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinnedWithActualOwnerMissing(Suspended); - } - - @Test - public void addStatusAndPriorityPropertyChange() { - TaskData taskData = mockTaskData(TASK_ID, NAME, Reserved, ACTUAL_OWNER_ENTITY_ID); - User actualOwner = mockUser(ACTUAL_OWNER_ENTITY_ID); - Task task = fromTaskData(taskData); - task.setUser(actualOwner); - task.setPinned(true); - task.setStatus(convertToString(InProgress)); - task.setPriority(taskData.getPriority() + 1); - - TaskAssigningSolution solution = mockSolution(Collections.singletonList(task), Collections.singletonList(actualOwner)); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(mockTaskDataList(taskData)) - .withUserSystem(userSystemService) - .withContext(context) - .build(); - - TaskPropertyChangeProblemFactChange change = new TaskPropertyChangeProblemFactChange(task); - change.setStatus(taskData.getStatus()); - change.setPriority(taskData.getPriority()); - - assertChangeIsTheChangeSetId(result, 0); - assertChange(result, 1, new TaskPropertyChangeProblemFactChange(task)); - assertTaskChangeRegistered(taskData.getTaskId(), taskData.getLastModificationDate()); - } - - @Test - public void addRemoveTaskThatChangedToCompleted() { - addRemoveTaskInSinkStatus(Completed); - } - - @Test - public void addRemoveTaskThatChangedToExited() { - addRemoveTaskInSinkStatus(Exited); - } - - @Test - public void addRemoveTaskThatChangedToFailed() { - addRemoveTaskInSinkStatus(Failed); - } - - @Test - public void addRemoveTaskThatChangedToError() { - addRemoveTaskInSinkStatus(Status.Error); - } - - @Test - public void addRemoveTaskThatChangedToObsolete() { - addRemoveTaskInSinkStatus(Obsolete); - } - - @Test - public void discardDuplicatedChanges() { - TaskData taskData1 = mockTaskData(1, NAME, Ready, null); - TaskData taskData2 = mockTaskData(2, NAME, InProgress, null); - TaskData taskData3 = mockTaskData(3, NAME, Completed, null); - TaskData taskData4 = mockTaskData(4, NAME, Suspended, null); - Task task1 = mockTask(taskData1.getTaskId()); - Task task2 = mockTask(taskData2.getTaskId()); - Task task3 = mockTask(taskData3.getTaskId()); - Task task4 = mockTask(taskData4.getTaskId()); - - List taskDataList = mockTaskDataList(taskData1, taskData2, taskData3, taskData4); - TaskAssigningSolution solution = mockSolution(Arrays.asList(task1, task2, task3, task4), Collections.emptyList()); - - taskDataList.forEach(taskData -> context.setTaskChangeTime(taskData.getTaskId(), taskData.getLastModificationDate())); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(taskDataList) - .withUserSystem(userSystemService) - .withContext(context) - .build(); - - assertEquals(2, result.size()); - assertChangeIsTheChangeSetId(result, 0); - assertChangeIsTheDummyTaskAssigned(result, ModelConstants.DUMMY_TASK_PLANNER_241, 1); - } - - @Test - public void addNewUserChange() { - List userList = mockUserList(mockUser(USER1_ID), mockUser(USER2_ID)); - org.kie.server.services.taskassigning.user.system.api.User newExternalUser = mockExternalUser(USER3_ID); - org.kie.server.services.taskassigning.user.system.api.User newExternalUserRepeated1 = mockExternalUser(USER3_ID); - org.kie.server.services.taskassigning.user.system.api.User newExternalUserRepeated2 = mockExternalUser(USER3_ID); - List externalUserList = mockExternalUserList(newExternalUser, - newExternalUserRepeated1, - newExternalUserRepeated2); - TaskAssigningSolution solution = mockSolution(Collections.emptyList(), userList); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(Collections.emptyList()) - .withUserSystem(userSystemService) - .withUsersUpdate(externalUserList) - .withContext(context) - .build(); - - AddUserProblemFactChange expected = new AddUserProblemFactChange(fromExternalUser(newExternalUser)); - assertChangeIsTheChangeSetId(result, 0); - assertOneChange(result, 1, expected); - } - - @Test - public void addUserPropertyChangeWhenNoChanges() { - Pair userPair = buildUsersForEqualityCase(); - addUserPropertyChange(userPair.getLeft(), userPair.getRight(), false); - } - - @Test - public void addUserPropertyChangeWhenEnabledChanged() { - Pair userPair = buildUsersForEqualityCase(); - userPair.getLeft().setEnabled(false); - addUserPropertyChange(userPair.getLeft(), userPair.getRight(), true); - } - - @Test - public void addUserPropertyChangeWhenGroupsChanged() { - Pair userPair = buildUsersForEqualityCase(); - userPair.getRight().getGroups().add(mockExternalGroup(GROUP2_ID)); - addUserPropertyChange(userPair.getLeft(), userPair.getRight(), true); - } - - @Test - public void addUserPropertyChangeWhenAttributesChanged() { - Pair userPair = buildUsersForEqualityCase(); - userPair.getRight().getAttributes().put(ATTRIBUTE2_ID, ATTRIBUTE2_VALUE); - addUserPropertyChange(userPair.getLeft(), userPair.getRight(), true); - } - - @Test - public void addUserPropertyChangeWhenLabelsChanged() { - Pair userPair = buildUsersForEqualityCase(); - userPair.getLeft().getAttributes().put(AFFINITIES_ATTRIBUTE_NAME, AFFINITY1); - userPair.getRight().getAttributes().put(AFFINITIES_ATTRIBUTE_NAME, AFFINITY1); - addUserPropertyChange(userPair.getLeft(), userPair.getRight(), true); - } - - @Test - public void addDisableUserProblemFactChange() { - List userList = mockUserList(mockUser(USER1_ID)); - List externalUserList = Collections.emptyList(); - TaskAssigningSolution solution = mockSolution(Collections.emptyList(), userList); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(Collections.emptyList()) - .withUserSystem(userSystemService) - .withUsersUpdate(externalUserList) - .withContext(context) - .build(); - - DisableUserProblemFactChange expected = new DisableUserProblemFactChange(userList.get(0)); - assertChangeIsTheChangeSetId(result, 0); - assertChange(result, 1, expected); - } - - @Test - public void addRemoveUserWhenHasNoTasksChange() { - List userList = mockUserList(mockUser(USER1_ID)); - userList.get(0).setEnabled(false); - TaskAssigningSolution solution = mockSolution(Collections.emptyList(), userList); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(Collections.emptyList()) - .withUserSystem(userSystemService) - .withContext(context) - .build(); - - RemoveUserProblemFactChange expected = new RemoveUserProblemFactChange(userList.get(0)); - assertChangeIsTheChangeSetId(result, 0); - assertChange(result, 1, expected); - } - - @Test - public void addRemoveUserWhenHasNonPinnedTasksChange() { - User user = mockUser(USER1_ID); - user.setEnabled(false); - Task nonPinnedTask = mockTask(TASK_ID); - nonPinnedTask.setPinned(false); - nonPinnedTask.setPreviousTaskOrUser(user); - user.setNextTask(nonPinnedTask); - - List userList = mockUserList(user); - TaskAssigningSolution solution = mockSolution(Collections.singletonList(nonPinnedTask), userList); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(Collections.emptyList()) - .withUserSystem(userSystemService) - .withContext(context) - .build(); - - RemoveUserProblemFactChange expected = new RemoveUserProblemFactChange(userList.get(0)); - assertChangeIsTheChangeSetId(result, 0); - assertChange(result, 1, expected); - } - - @Test - public void addRemoveUserWhenHasPinnedTasks() { - User user = mockUser(USER1_ID); - user.setEnabled(false); - Task pinnedTask = mockTask(TASK_ID); - pinnedTask.setPinned(true); - pinnedTask.setPreviousTaskOrUser(user); - user.setNextTask(pinnedTask); - - List userList = mockUserList(user); - TaskAssigningSolution solution = mockSolution(Collections.singletonList(pinnedTask), userList); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(Collections.emptyList()) - .withUserSystem(userSystemService) - .withContext(context) - .build(); - - assertChangeIsTheChangeSetId(result, 0); - assertNoChange(result, RemoveUserProblemFactChange.class); - } - - private Pair buildUsersForEqualityCase() { - Map> labelValues = new HashMap<>(); - labelValues.put(DefaultLabels.SKILLS.name(), Collections.singleton(SKILL1)); - labelValues.put(DefaultLabels.AFFINITIES.name(), Collections.emptySet()); - Map attributes = new HashMap<>(); - attributes.put(SKILLS_ATTRIBUTE_NAME, SKILL1); - attributes.put(ATTRIBUTE1_ID, ATTRIBUTE1_VALUE); - User user1 = mockUser(USER1_ID, - true, - Collections.singleton(new Group(GROUP1_ID.hashCode(), GROUP1_ID)), - attributes, - labelValues); - - Map externalUserAttributes = new HashMap<>(); - externalUserAttributes.put(ATTRIBUTE1_ID, ATTRIBUTE1_VALUE); - externalUserAttributes.put(SKILLS_ATTRIBUTE_NAME, SKILL1); - Set externalUserGroups = new HashSet<>(); - externalUserGroups.add(mockExternalGroup(GROUP1_ID)); - org.kie.server.services.taskassigning.user.system.api.User externalUser = mockExternalUser(USER1_ID, - externalUserGroups, - externalUserAttributes); - return Pair.of(user1, externalUser); - } - - private void addUserPropertyChange(User currentUser, org.kie.server.services.taskassigning.user.system.api.User externalUser, boolean shouldHaveChanged) { - List userList = mockUserList(currentUser, mockUser("anotherUser"), mockUser("anotherUser1")); - org.kie.server.services.taskassigning.user.system.api.User externalUserRepeated1 = mockExternalUser(externalUser.getId()); - org.kie.server.services.taskassigning.user.system.api.User newExternalUserRepeated2 = mockExternalUser(externalUser.getId()); - List externalUserList = mockExternalUserList(externalUser, - externalUserRepeated1, - newExternalUserRepeated2); - TaskAssigningSolution solution = mockSolution(Collections.emptyList(), userList); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(Collections.emptyList()) - .withUserSystem(userSystemService) - .withUsersUpdate(externalUserList) - .withContext(context) - .build(); - - User fromExternalUser = fromExternalUser(externalUser); - UserPropertyChangeProblemFactChange expected = new UserPropertyChangeProblemFactChange(currentUser, - fromExternalUser.isEnabled(), - fromExternalUser.getAttributes(), - fromExternalUser.getAllLabelValues(), - fromExternalUser.getGroups()); - if (shouldHaveChanged) { - assertChangeIsTheChangeSetId(result, 0); - assertOneChange(result, 1, expected); - UserPropertyChangeProblemFactChange createdChange = (UserPropertyChangeProblemFactChange) result.get(1); - assertEquals(expected.getUser().getEntityId(), createdChange.getUser().getEntityId()); - assertEquals(expected.isEnabled(), createdChange.isEnabled()); - assertEquals(expected.getAttributes(), createdChange.getAttributes()); - assertEquals(expected.getGroups(), createdChange.getGroups()); - assertEquals(expected.getLabelValues(), createdChange.getLabelValues()); - } else { - assertNoChange(result, UserPropertyChangeProblemFactChange.class); - } - } - - private void addRemoveTaskInSinkStatus(Status sinkStatus) { - TaskData taskData = mockTaskData(TASK_ID, NAME, sinkStatus, ACTUAL_OWNER_ENTITY_ID); - User actualOwner = mockUser(ACTUAL_OWNER_ENTITY_ID); - Task task = fromTaskData(taskData); - task.setUser(actualOwner); - task.setStatus(convertToString(Reserved)); - - TaskAssigningSolution solution = mockSolution(Collections.singletonList(task), Collections.singletonList(actualOwner)); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(mockTaskDataList(taskData)) - .withUserSystem(userSystemService) - .withContext(context) - .build(); - - RemoveTaskProblemFactChange change = new RemoveTaskProblemFactChange(task); - assertChangeIsTheChangeSetId(result, 0); - assertChange(result, 1, change); - assertTaskChangeRegistered(taskData.getTaskId(), taskData.getLastModificationDate()); - } - - private void addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwnerInSolution(Status status) { - TaskData taskData = mockTaskData(TASK_ID, NAME, status, USER_ENTITY_ID); - TaskAssigningSolution solution = mockSolution(Collections.emptyList(), Collections.singletonList(mockUser(USER_ENTITY_ID))); - addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwner(solution, taskData); - } - - private void addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwnerInExternalSystem(Status status) { - TaskData taskData = mockTaskData(TASK_ID, NAME, status, USER_ENTITY_ID); - org.kie.server.services.taskassigning.user.system.api.User externalUser = mockExternalUser(USER_ENTITY_ID); - when(userSystemService.findUser(USER_ENTITY_ID)).thenReturn(externalUser); - TaskAssigningSolution solution = mockSolution(Collections.emptyList(), Collections.emptyList()); - addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwner(solution, taskData); - verify(userSystemService).findUser(USER_ENTITY_ID); - } - - private void addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwnerMissing(Status status) { - TaskData taskData = mockTaskData(TASK_ID, NAME, status, USER_ENTITY_ID); - TaskAssigningSolution solution = mockSolution(Collections.emptyList(), Collections.emptyList()); - addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwner(solution, taskData); - verify(userSystemService).findUser(USER_ENTITY_ID); - } - - private void addNewReservedOrInProgressOrSuspendedTaskChangeWithActualOwner(TaskAssigningSolution solution, TaskData taskData) { - List taskDataList = mockTaskDataList(taskData); - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(taskDataList) - .withUserSystem(userSystemService) - .withContext(context) - .build(); - - AssignTaskProblemFactChange expected = new AssignTaskProblemFactChange(fromTaskData(taskData), mockUser(USER_ENTITY_ID), true); - assertChangeIsTheChangeSetId(result, 0); - assertChange(result, 1, expected); - assertTaskChangeRegistered(taskData.getTaskId(), taskData.getLastModificationDate()); - } - - private void addRemoveReservedOrInProgressOrSuspendedTaskChangeWhenActualOwnerNotPresent(Status status) { - TaskData taskData = mockTaskData(TASK_ID, NAME, status, null); - Task task = fromTaskData(taskData); - - TaskAssigningSolution solution = mockSolution(Collections.singletonList(task), Collections.emptyList()); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(mockTaskDataList(taskData)) - .withUserSystem(userSystemService) - .withContext(context) - .build(); - - assertChangeIsTheChangeSetId(result, 0); - assertChange(result, 1, new RemoveTaskProblemFactChange(task)); - assertTaskChangeRegistered(taskData.getTaskId(), taskData.getLastModificationDate()); - } - - private void addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerInSolution(Status status) { - addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassigned(status, true); - } - - private void addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassigned(Status status, boolean addActualOwnerToSolution) { - TaskData taskData = mockTaskData(TASK_ID, NAME, status, ACTUAL_OWNER_ENTITY_ID); - Task task = fromTaskData(taskData); - User user = mockUser(USER_ENTITY_ID); - task.setUser(user); - - List userList = new ArrayList<>(); - userList.add(user); - if (addActualOwnerToSolution) { - User actualOwner = mockUser(ACTUAL_OWNER_ENTITY_ID); - userList.add(actualOwner); - } - - TaskAssigningSolution solution = mockSolution(Collections.singletonList(task), userList); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(mockTaskDataList(taskData)) - .withUserSystem(userSystemService) - .withContext(context) - .build(); - - assertChangeIsTheChangeSetId(result, 0); - assertChange(result, 1, new AssignTaskProblemFactChange(task, mockUser(ACTUAL_OWNER_ENTITY_ID), true)); - assertTaskChangeRegistered(taskData.getTaskId(), taskData.getLastModificationDate()); - } - - private void addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerInExternalSystem(Status status) { - org.kie.server.services.taskassigning.user.system.api.User externalUser = mockExternalUser(ACTUAL_OWNER_ENTITY_ID); - when(userSystemService.findUser(ACTUAL_OWNER_ENTITY_ID)).thenReturn(externalUser); - addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassigned(status, false); - verify(userSystemService).findUser(ACTUAL_OWNER_ENTITY_ID); - } - - private void addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassignedWithActualOwnerMissing(Status status) { - when(userSystemService.findUser(ACTUAL_OWNER_ENTITY_ID)).thenReturn(null); - addReassignReservedOrInProgressOrSuspendedTaskWhenItWasManuallyReassigned(status, false); - verify(userSystemService).findUser(ACTUAL_OWNER_ENTITY_ID); - } - - private void addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinned(Status status, boolean addActualOwnerToSolution) { - TaskData taskData = mockTaskData(TASK_ID, NAME, status, ACTUAL_OWNER_ENTITY_ID); - PlanningTask planningTask = mockPlanningTask(taskData.getTaskId(), true); - planningTask.setIndex(0); - taskData.setPlanningTask(planningTask); - - Task task = fromTaskData(taskData); - task.setPinned(false); - User actualOwner = mockUser(ACTUAL_OWNER_ENTITY_ID); - task.setUser(actualOwner); - - List userList = new ArrayList<>(); - if (addActualOwnerToSolution) { - userList.add(actualOwner); - } - - TaskAssigningSolution solution = mockSolution(Collections.singletonList(task), userList); - - List> result = SolutionChangesBuilder.create() - .withSolution(solution) - .withTasks(mockTaskDataList(taskData)) - .withUserSystem(userSystemService) - .withContext(context) - .build(); - - assertChangeIsTheChangeSetId(result, 0); - assertChange(result, 1, new AssignTaskProblemFactChange(task, mockUser(ACTUAL_OWNER_ENTITY_ID), true)); - assertTaskChangeRegistered(taskData.getTaskId(), taskData.getLastModificationDate()); - } - - private void addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinnedWithActualOwnerInExternalSystem(Status status) { - org.kie.server.services.taskassigning.user.system.api.User externalUser = mockExternalUser(ACTUAL_OWNER_ENTITY_ID); - when(userSystemService.findUser(ACTUAL_OWNER_ENTITY_ID)).thenReturn(externalUser); - addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinned(status, false); - verify(userSystemService).findUser(ACTUAL_OWNER_ENTITY_ID); - } - - private void addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinnedWithActualOwnerMissing(Status status) { - when(userSystemService.findUser(ACTUAL_OWNER_ENTITY_ID)).thenReturn(null); - addPinReservedOrInProgressOrSuspendedTaskWhenPublishedAndNotYetPinned(status, false); - verify(userSystemService).findUser(ACTUAL_OWNER_ENTITY_ID); - } - - private void assertChange(List> result, int index, AddTaskProblemFactChange expected) { - AddTaskProblemFactChange change = (AddTaskProblemFactChange) result.get(index); - assertTaskEquals(expected.getTask(), change.getTask()); - } - - private void assertChange(List> result, int index, AssignTaskProblemFactChange expected) { - AssignTaskProblemFactChange change = (AssignTaskProblemFactChange) result.get(index); - assertTaskEquals(expected.getTask(), change.getTask()); - assertUserEquals(expected.getUser(), change.getUser()); - } - - private void assertChange(List> result, int index, ReleaseTaskProblemFactChange expected) { - ReleaseTaskProblemFactChange change = (ReleaseTaskProblemFactChange) result.get(index); - assertTaskEquals(expected.getTask(), change.getTask()); - } - - private void assertChange(List> result, int index, RemoveTaskProblemFactChange expected) { - RemoveTaskProblemFactChange change = (RemoveTaskProblemFactChange) result.get(index); - assertTaskEquals(expected.getTask(), change.getTask()); - } - - private void assertChange(List> result, int index, DisableUserProblemFactChange expected) { - DisableUserProblemFactChange change = (DisableUserProblemFactChange) result.get(index); - assertUserEquals(expected.getUser(), change.getUser()); - } - - private void assertChange(List> result, int index, RemoveUserProblemFactChange expected) { - RemoveUserProblemFactChange change = (RemoveUserProblemFactChange) result.get(index); - assertUserEquals(expected.getUser(), change.getUser()); - } - - private void assertOneChange(List> result, int index, AddUserProblemFactChange expected) { - AddUserProblemFactChange change = (AddUserProblemFactChange) result.get(index); - assertUserEquals(expected.getUser(), change.getUser()); - assertEquals(1, result.stream().filter(calculated -> calculated instanceof AddUserProblemFactChange).count()); - } - - private void assertOneChange(List> result, int index, UserPropertyChangeProblemFactChange expected) { - UserPropertyChangeProblemFactChange change = (UserPropertyChangeProblemFactChange) result.get(index); - assertUserEquals(expected.getUser(), change.getUser()); - assertEquals(1, result.stream().filter(calculated -> calculated instanceof UserPropertyChangeProblemFactChange).count()); - } - - private void assertNoChange(List> result, Class notExpected) { - assertFalse(result.stream().anyMatch(change -> notExpected.equals(change.getClass()))); - } - - private void assertChangeIsTheChangeSetId(List> result, int index) { - long currentChangeSetId = context.getCurrentChangeSetId(); - result.get(index).doChange(scoreDirector); - assertEquals(currentChangeSetId + 1, context.getCurrentChangeSetId(), index); - } - - private void assertChangeIsTheDummyTaskAssigned(List> result, Task dummyTask, int index) { - assertTrue(result.get(index) instanceof AssignTaskProblemFactChange); - AssignTaskProblemFactChange change = (AssignTaskProblemFactChange) result.get(index); - assertEquals(dummyTask, change.getTask()); - } - - private void assertChange(List> result, int index, TaskPropertyChangeProblemFactChange expected) { - TaskPropertyChangeProblemFactChange change = (TaskPropertyChangeProblemFactChange) result.get(index); - assertTaskEquals(expected.getTask(), change.getTask()); - if (expected.getStatus() != null) { - assertEquals(expected.getStatus(), change.getStatus()); - } - if (expected.getPriority() != null) { - assertEquals(expected.getPriority(), change.getPriority(), 0); - } - } - - private void assertTaskChangeRegistered(long taskId, LocalDateTime lastModificationDate) { - context.isProcessedTaskChange(taskId, lastModificationDate); - } - - private TaskData mockTaskData(long taskId, String name, Status status, String actualOwner) { - return TaskData.builder() - .taskId(taskId) - .processInstanceId(PROCESS_INSTANCE_ID) - .processId(PROCESS_ID) - .containerId(CONTAINER_ID) - .name(name) - .priority(PRIORITY) - .status(convertToString(status)) - .actualOwner(actualOwner) - .lastModificationDate(LocalDateTime.now()) - .inputData(INPUT_DATA) - .build(); - } - - private PlanningTask mockPlanningTask(long taskId, boolean published) { - return PlanningTask.builder().taskId(taskId).published(published).build(); - } - - private void assertTaskEquals(Task t1, Task t2) { - assertEquals(t1.getId(), t2.getId(), 0); - } - - private void assertUserEquals(User user1, User user2) { - assertEquals(user1.getEntityId(), user2.getEntityId()); - assertEquals(user1.getId(), user2.getId(), 0); - } - - private User mockUser(String entityId) { - return new User(entityId.hashCode(), entityId, true); - } - - private User mockUser(String entityId, boolean enabled, Set groups, Map attributes, Map> labelValues) { - User result = new User(entityId.hashCode(), entityId, enabled); - result.setGroups(groups); - result.setAttributes(attributes); - result.setAllLabelValues(labelValues); - return result; - } - - private org.kie.server.services.taskassigning.user.system.api.User mockExternalUser(String entityId) { - org.kie.server.services.taskassigning.user.system.api.User externalUser = mock(org.kie.server.services.taskassigning.user.system.api.User.class); - when(externalUser.getId()).thenReturn(entityId); - return externalUser; - } - - private org.kie.server.services.taskassigning.user.system.api.User mockExternalUser(String entityId, Set groups, Map attributes) { - org.kie.server.services.taskassigning.user.system.api.User externalUser = mockExternalUser(entityId); - when(externalUser.getGroups()).thenReturn(groups); - when(externalUser.getAttributes()).thenReturn(attributes); - return externalUser; - } - - private org.kie.server.services.taskassigning.user.system.api.Group mockExternalGroup(String groupId) { - org.kie.server.services.taskassigning.user.system.api.Group externalGroup = mock(org.kie.server.services.taskassigning.user.system.api.Group.class); - when(externalGroup.getId()).thenReturn(groupId); - return externalGroup; - } - - private TaskAssigningSolution mockSolution(List task, List users) { - return new TaskAssigningSolution(1L, users, task); - } - - private List mockTaskDataList(TaskData... tasks) { - return Arrays.asList(tasks); - } - - private List mockUserList(User... users) { - return Arrays.asList(users); - } - - private List mockExternalUserList(org.kie.server.services.taskassigning.user.system.api.User... users) { - return Arrays.asList(users); - } - - private Task mockTask(long taskId) { - return new Task(taskId, "Task_" + taskId, 0); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolutionProcessorTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolutionProcessorTest.java deleted file mode 100644 index f10f629c10..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolutionProcessorTest.java +++ /dev/null @@ -1,129 +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.planning; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CountDownLatch; - -import org.assertj.core.api.Assertions; -import org.junit.Test; -import org.kie.server.api.model.taskassigning.PlanningExecutionResult; -import org.kie.server.api.model.taskassigning.PlanningItem; -import org.kie.server.client.TaskAssigningRuntimeClient; -import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution; -import org.mockito.Mock; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; - -public class SolutionProcessorTest extends RunnableBaseTest { - - private static final String TARGET_USER_ID = "TARGET_USER_ID"; - private static final int PUBLISH_WINDOW_SIZE = 2; - - private TaskAssigningRuntimeDelegate delegate; - - @Mock - private TaskAssigningRuntimeClient runtimeClient; - - @Mock - private PlanningExecutionResult result; - - private SolutionProcessor.Result capturedResult; - - @Mock - private List generatedPlan; - - private CountDownLatch processingFinished = new CountDownLatch(1); - - @Override - protected SolutionProcessor createRunnableBase() { - delegate = spy(new TaskAssigningRuntimeDelegate(runtimeClient)); - SolutionProcessor processor = spy(new SolutionProcessor(delegate, - result -> { - SolutionProcessorTest.this.capturedResult = result; - // emulate the processing finalization. - processingFinished.countDown(); - }, - TARGET_USER_ID, PUBLISH_WINDOW_SIZE)); - doReturn(generatedPlan).when(processor).buildPlanning(any(), anyInt()); - return processor; - } - - @Test(timeout = TEST_TIMEOUT) - public void process() throws Exception { - CompletableFuture future = startRunnableBase(); - - doReturn(result).when(delegate).executePlanning(generatedPlan, TARGET_USER_ID); - - TaskAssigningSolution solution = new TaskAssigningSolution(-1, new ArrayList<>(), new ArrayList<>()); - runnableBase.process(solution); - - // wait until the processing has finished - processingFinished.await(); - - verify(delegate).executePlanning(generatedPlan, TARGET_USER_ID); - assertEquals(result, capturedResult.getExecutionResult()); - - runnableBase.destroy(); - future.get(); - assertTrue(runnableBase.isDestroyed()); - } - - @Test - public void isProcessing() { - TaskAssigningSolution solution = new TaskAssigningSolution(-1, new ArrayList<>(), new ArrayList<>()); - runnableBase.process(solution); - assertTrue(runnableBase.isProcessing()); - } - - @Test - public void processWithInvalidStatusFailure() { - TaskAssigningSolution solution = new TaskAssigningSolution(-1, new ArrayList<>(), new ArrayList<>()); - runnableBase.process(solution); - Assertions.assertThatThrownBy(() -> runnableBase.process(solution)) - .hasMessage("SolutionProcessor process method can only be invoked when the status is STOPPED"); - } - - @Test(timeout = TEST_TIMEOUT) - public void processWithDelegateError() throws Exception { - CompletableFuture future = startRunnableBase(); - - TaskAssigningSolution solution = new TaskAssigningSolution(-1, new ArrayList<>(), new ArrayList<>()); - - RuntimeException generatedError = new RuntimeException("Emulate a service invocation error."); - doThrow(generatedError).when(delegate).executePlanning(generatedPlan, TARGET_USER_ID); - - runnableBase.process(solution); - - // wait until the processing has finished - processingFinished.await(); - - assertEquals(generatedError, capturedResult.getException()); - runnableBase.destroy(); - future.get(); - assertTrue(runnableBase.isDestroyed()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolutionSynchronizerTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolutionSynchronizerTest.java deleted file mode 100644 index 33418eb76b..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolutionSynchronizerTest.java +++ /dev/null @@ -1,518 +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.planning; - -import java.time.Duration; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CountDownLatch; -import java.util.function.Consumer; -import java.util.function.Supplier; - -import org.apache.commons.lang3.tuple.Pair; -import org.junit.Test; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.services.taskassigning.core.model.Task; -import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution; -import org.kie.server.services.taskassigning.user.system.api.User; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; -import org.optaplanner.core.impl.solver.ProblemFactChange; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.anyList; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -public class SolutionSynchronizerTest extends RunnableBaseTest { - - private static final Duration SYNCH_INTERVAL = Duration.ofMillis(2); - private static final Duration USERS_SYNCH_INTERVAL = Duration.ofMillis(4000); - private static final Duration QUERY_SHIFT = Duration.parse("PT2S"); - private static final long SYSTEM_TIME = 0; - - @Mock - private SolverExecutor solverExecutor; - - @Mock - private TaskAssigningRuntimeDelegate delegate; - - @Mock - private UserSystemService userSystemService; - - @Mock - private Consumer resultConsumer; - - @Captor - private ArgumentCaptor solutionCaptor; - - @Captor - private ArgumentCaptor resultCaptor; - - @Mock - private TaskAssigningSolution generatedSolution; - - @Mock - private TaskAssigningSolution emptySolution; - - @Mock - private List> generatedChanges; - - @Mock - private List> emptyChanges; - - private boolean usersSyncTime; - - private boolean unchangedPeriodTime; - - private CountDownLatch queryExecutionsCountDown; - - private CountDownLatch applyResultCountDown; - - private SolverHandlerContext context; - - @Override - protected SolutionSynchronizer createRunnableBase() { - context = new SolverHandlerContext(QUERY_SHIFT); - applyResultCountDown = new CountDownLatch(1); - return new SolutionSynchronizerMock(solverExecutor, delegate, userSystemService, - SYNCH_INTERVAL, USERS_SYNCH_INTERVAL, context, resultConsumer); - } - - @Test(timeout = TEST_TIMEOUT) - @SuppressWarnings("unchecked") - public void initSolverExecutor() throws Exception { - CompletableFuture future = startRunnableBase(); - LocalDateTime firstQueryTime = LocalDateTime.now(); - - List userList = mockUserList(); - List results = mockTasksQueryExecutions(firstQueryTime); - LocalDateTime firstSuccessfulQueryTime = results.get(results.size() - 1).getQueryTime(); - queryExecutionsCountDown = new CountDownLatch(results.size()); - prepareQueryExecutionsWithOutEmptyStatus(results); - - when(emptySolution.getTaskList()).thenReturn(Collections.emptyList()); - when(generatedSolution.getTaskList()).thenReturn(Collections.singletonList(new Task())); - when(solverExecutor.isStopped()).thenReturn(true); - when(userSystemService.findAllUsers()).thenReturn(userList); - - runnableBase.initSolverExecutor(); - - // wait for the query executions to happen - queryExecutionsCountDown.await(); - - verify(delegate, times(results.size())).findTasks(anyList(), eq(null), anyObject()); - verify(solverExecutor).start(solutionCaptor.capture()); - assertEquals(generatedSolution, solutionCaptor.getValue()); - LocalDateTime nextQueryTime = context.shiftQueryTime(firstSuccessfulQueryTime.withNano(0)); - LocalDateTime previousQueryTime = context.shiftQueryTime(nextQueryTime); - assertEquals(previousQueryTime, context.getPreviousQueryTime()); - assertEquals(nextQueryTime, context.getNextQueryTime()); - - runnableBase.destroy(); - future.get(); - assertTrue(runnableBase.isDestroyed()); - } - - @Test(timeout = TEST_TIMEOUT) - public void synchronizeSolution() throws Exception { - CompletableFuture future = startRunnableBase(); - LocalDateTime startTime = LocalDateTime.now().withNano(0); - List tasksQueryResults = mockTasksQueryExecutions(startTime); - int executionsCount = tasksQueryResults.size(); - - usersSyncTime = false; - executeSynchronizeSolution(future, startTime, tasksQueryResults, Collections.emptyList(), executionsCount); - - // all tasks query executions were produced. - verityTasksQueryExecutions(startTime, tasksQueryResults); - // no users query executions were produced. - verify(userSystemService, never()).findAllUsers(); - verify(resultConsumer).accept(resultCaptor.capture()); - assertTrue(resultCaptor.getValue().hasChanges()); - assertEquals(generatedChanges, resultCaptor.getValue().getChanges()); - } - - @Test(timeout = TEST_TIMEOUT) - public void synchronizeSolutionIncludingUsersSyncWithoutUserChanges() throws Exception { - CompletableFuture future = startRunnableBase(); - LocalDateTime startTime = LocalDateTime.now().withNano(0); - List tasksQueryResults = mockTasksQueryExecutions(startTime); - List> userQueryResults = mockEmptyQueryExecutions(tasksQueryResults.size(), Collections::emptyList); - int executionsCount = tasksQueryResults.size(); - - usersSyncTime = true; - executeSynchronizeSolution(future, startTime, tasksQueryResults, userQueryResults, executionsCount); - - // all tasks query executions were produced. - verityTasksQueryExecutions(startTime, tasksQueryResults); - // user executions were produced executionsCount-2 times since the tasks queries fails two times. - verify(userSystemService, times(executionsCount - 2)).findAllUsers(); - - assertTrue(resultCaptor.getValue().hasChanges()); - verify(resultConsumer).accept(resultCaptor.capture()); - assertEquals(generatedChanges, resultCaptor.getValue().getChanges()); - } - - @Test(timeout = TEST_TIMEOUT) - @SuppressWarnings("unchecked") - public void synchronizeSolutionIncludingUsersSyncWithUserChanges() throws Exception { - CompletableFuture future = startRunnableBase(); - LocalDateTime startTime = LocalDateTime.now().withNano(0); - List tasksQueryResults = mockTasksQueryExecutions(startTime); - List> userQueryResults = mockUsersQueryExecutions(); - int executionsCount = userQueryResults.size(); - - usersSyncTime = true; - executeSynchronizeSolution(future, startTime, tasksQueryResults, userQueryResults, executionsCount); - - // all user executions was executed, results were produced in last execution. - verify(userSystemService, times(userQueryResults.size())).findAllUsers(); - - /* - Three task query executions were produced. - initial setup queryTimes -> [startTime] - execution0: - execute query with lastModification = startTime - execution was ok, but result0 has no results. - nextQueryTime0 = context.shiftQueryTime(startTime) - execution1: - execute query with lastModification = nextQueryTime0 - execution is ok, but result1 has no values. - nextQueryTime1 = context.shiftQueryTime(result1.getQueryTime()) - execution2: - execute query with lastModification = nextQueryTime1 - execution is ok, but result2 has no values. - nextQueryTime2 = context.shiftQueryTime(result2.getQueryTime()) - */ - - verify(delegate, times(1)).findTasks(eq(null), eq(startTime), anyObject()); - verify(delegate, times(1)).findTasks(eq(null), eq(context.shiftQueryTime(tasksQueryResults.get(0).getQueryTime())), anyObject()); - verify(delegate, times(1)).findTasks(eq(null), eq(context.shiftQueryTime(tasksQueryResults.get(1).getQueryTime())), anyObject()); - - assertEquals(context.shiftQueryTime(tasksQueryResults.get(2).getQueryTime()), context.getNextQueryTime()); - - assertTrue(resultCaptor.getValue().hasChanges()); - verify(resultConsumer).accept(resultCaptor.capture()); - assertEquals(generatedChanges, resultCaptor.getValue().getChanges()); - } - - @Test(timeout = TEST_TIMEOUT) - public void synchronizeSolutionWithNoChangesTimeout() throws Exception { - CompletableFuture future = startRunnableBase(); - LocalDateTime startTime = LocalDateTime.now().withNano(0); - List tasksQueryResults = mockNoChangesTasksQueryExecutions(startTime); - int executionsCount = tasksQueryResults.size(); - - unchangedPeriodTime = true; - executeSynchronizeSolutionWithNoChangesTimeout(future, startTime, Duration.ofMillis(100), tasksQueryResults, executionsCount); - - verify(resultConsumer).accept(resultCaptor.capture()); - assertFalse(resultCaptor.getValue().hasChanges()); - assertNull(resultCaptor.getValue().getChanges()); - } - - @Test - public void calculateNextUsersSyncTime() { - long expectedValue = SYSTEM_TIME + 4000; - calculateNextUsersSyncTime(USERS_SYNCH_INTERVAL, SYSTEM_TIME, expectedValue); - } - - @Test - public void calculateNextUnchangedPeriodTime() { - long expectedValue = SYSTEM_TIME + 5000; - calculateNextUnchangedPeriodTime(Duration.ofMillis(5000), SYSTEM_TIME, expectedValue); - } - - private void calculateNextUsersSyncTime(Duration duration, long systemTime, long expectedValue) { - runnableBase = spy(new SolutionSynchronizer(solverExecutor, delegate, userSystemService, - SYNCH_INTERVAL, duration, context, resultConsumer)); - doReturn(systemTime).when(runnableBase).getSystemTime(); - long nextUsersSyncTime = runnableBase.calculateNextUsersSyncTime(); - assertEquals(expectedValue, nextUsersSyncTime); - } - - private void calculateNextUnchangedPeriodTime(Duration duration, long systemTime, long expectedValue) { - runnableBase = spy(new SolutionSynchronizer(solverExecutor, delegate, userSystemService, - SYNCH_INTERVAL, duration, context, resultConsumer)); - doReturn(systemTime).when(runnableBase).getSystemTime(); - long nextUnchangedPeriodTime = runnableBase.calculateNextUnchangedPeriodTime(duration); - assertEquals(expectedValue, nextUnchangedPeriodTime); - } - - private void executeSynchronizeSolution(CompletableFuture future, LocalDateTime startTime, - List tasksQueryResults, - List> userQueryResults, - int executionsCount) throws Exception { - - TaskAssigningSolution solution = new TaskAssigningSolution(1, new ArrayList<>(), new ArrayList<>()); - queryExecutionsCountDown = new CountDownLatch(executionsCount); - prepareQueryExecutions(tasksQueryResults); - prepareUserQueryExecutions(userQueryResults); - - when(generatedChanges.isEmpty()).thenReturn(false); - when(emptyChanges.isEmpty()).thenReturn(true); - when(solverExecutor.isStarted()).thenReturn(true); - runnableBase.synchronizeSolution(solution, startTime); - - // wait for the query executions to happen - queryExecutionsCountDown.await(); - applyResultCountDown.await(); - - verify(resultConsumer).accept(resultCaptor.capture()); - assertEquals(generatedChanges, resultCaptor.getValue().getChanges()); - runnableBase.destroy(); - future.get(); - assertTrue(runnableBase.isDestroyed()); - } - - private void executeSynchronizeSolutionWithNoChangesTimeout(CompletableFuture future, LocalDateTime startTime, - Duration unchangedPeriodTimeout, - List tasksQueryResults, - int executionsCount) throws Exception { - - TaskAssigningSolution solution = new TaskAssigningSolution(1, new ArrayList<>(), new ArrayList<>()); - queryExecutionsCountDown = new CountDownLatch(executionsCount); - prepareQueryExecutions(tasksQueryResults); - - when(generatedChanges.isEmpty()).thenReturn(false); - when(emptyChanges.isEmpty()).thenReturn(true); - when(solverExecutor.isStarted()).thenReturn(true); - runnableBase.synchronizeSolution(solution, startTime, unchangedPeriodTimeout); - - // wait for the query executions to happen - queryExecutionsCountDown.await(); - applyResultCountDown.await(); - - verify(resultConsumer).accept(resultCaptor.capture()); - runnableBase.destroy(); - future.get(); - assertTrue(runnableBase.isDestroyed()); - } - - /** - * Mock the results of the findTasksQuery and emulate errors in the middle by producing null. - * Last execution produces values. - * execution 0, no results - * execution 1, no results - * execution 2, no results - * execution 3, null -> an error is produced - * execution 4, null -> an error is produced - * execution 5, null -> no results - * execution 6, finally results are produced. - */ - private List mockTasksQueryExecutions(LocalDateTime startTime) { - List taskDataList = mockTaskDataList(); - TaskAssigningRuntimeDelegate.FindTasksResult result0 = mockFindTaskResult(startTime.plusMinutes(1), new ArrayList<>()); - TaskAssigningRuntimeDelegate.FindTasksResult result1 = mockFindTaskResult(startTime.plusMinutes(2), new ArrayList<>()); - TaskAssigningRuntimeDelegate.FindTasksResult result2 = mockFindTaskResult(startTime.plusMinutes(3), new ArrayList<>()); - TaskAssigningRuntimeDelegate.FindTasksResult resultFailure3 = null; - TaskAssigningRuntimeDelegate.FindTasksResult resultFailure4 = null; - TaskAssigningRuntimeDelegate.FindTasksResult result5 = mockFindTaskResult(startTime.plusMinutes(4), new ArrayList<>()); - TaskAssigningRuntimeDelegate.FindTasksResult result6 = mockFindTaskResult(startTime.plusMinutes(5), taskDataList); - return Arrays.asList(result0, result1, result2, resultFailure3, resultFailure4, result5, result6); - } - - private List mockNoChangesTasksQueryExecutions(LocalDateTime startTime) { - return Collections.singletonList(mockFindTaskResult(startTime.plusMinutes(1), new ArrayList<>())); - } - - /** - * Verify that the synchronization sequence defined in mockTasksQueryExecutions was executed. - */ - @SuppressWarnings("unchecked") - private void verityTasksQueryExecutions(LocalDateTime startTime, List results) { - /* - initial setup queryTimes -> [startTime] - execution0: - execute query with lastModification = startTime - execution was ok, but result0 has no results. - nextQueryTime0 = context.shiftQueryTime(result0.getQueryTime()) - execution1: - execute query with lastModification = nextQueryTime0 - execution is ok, but result1 has no values. - nextQueryTime1 = context.shiftQueryTime(result1.getQueryTime()) - execution2: - execute query with lastModification = nextQueryTime1 - execution is ok, but result2 has no values. - nextQueryTime2 = context.shiftQueryTime(result2.getQueryTime()) - execution3: - execute query with lastModification = nextQueryTime2 - execution fails. - a retry is produced. - execution4: - execute query with lastModification = nextQueryTime2 - execution fails. - a retry is produced. - execution5: - execute query with lastModification = nextQueryTime2 - execution is ok, but result5 has no values - nextQueryTime5 = context.shift(result5.getQueryTime()) - execution6: - execute query with lastModification = nextQueryTime5 - execution is ok, and result6 has values! - nextQueryTime6 = context.shiftQueryTime(result6.getQueryTime()) - End of loop since results are produced. - */ - - verify(delegate, times(1)).findTasks(eq(null), eq(startTime), anyObject()); - verify(delegate, times(1)).findTasks(eq(null), eq(context.shiftQueryTime(results.get(0).getQueryTime())), anyObject()); - verify(delegate, times(1)).findTasks(eq(null), eq(context.shiftQueryTime(results.get(1).getQueryTime())), anyObject()); - verify(delegate, times(3)).findTasks(eq(null), eq(context.shiftQueryTime(results.get(2).getQueryTime())), anyObject()); - verify(delegate, times(results.size())).findTasks(eq(null), anyObject(), anyObject()); - } - - /** - * Mock the results of the findAllUsers method execution and emulate errors in the middle by producing null. - * Last execution produces values. - * execution 0, null - * execution 1, no results - * execution 2, results are produced. - */ - private List> mockUsersQueryExecutions() { - User user = mock(User.class); - List result0Failure = null; - List result1 = Collections.emptyList(); - List result2 = Collections.singletonList(user); - return Arrays.asList(result0Failure, result1, result2); - } - - private List mockEmptyQueryExecutions(int size, Supplier emptyResultSupplier) { - List result = new ArrayList<>(size); - for (int i = 0; i < size; i++) { - result.add(emptyResultSupplier.get()); - } - return result; - } - - @SuppressWarnings("unchecked") - private void prepareQueryExecutions(List results) { - doAnswer(createExecutions(results)).when(delegate).findTasks(eq(null), anyObject(), anyObject()); - } - - @SuppressWarnings("unchecked") - private void prepareQueryExecutionsWithOutEmptyStatus(List results) { - doAnswer(createExecutions(results)).when(delegate).findTasks(anyList(), anyObject(), anyObject()); - } - - private void prepareUserQueryExecutions(List> results) { - doAnswer(createExecutions(results)).when(userSystemService).findAllUsers(); - } - - private Answer createExecutions(List results) { - return new Answer() { - private int invocations = 0; - - public Object answer(InvocationOnMock invocation) { - T result = results.get(invocations++); - if (result == null) { - throw new RuntimeException("Emulate a connection error. The synchronizer must retry."); - } - return result; - } - }; - } - - private List mockTaskDataList() { - return Collections.singletonList(new TaskData()); - } - - private List mockUserList() { - return new ArrayList<>(); - } - - private TaskAssigningRuntimeDelegate.FindTasksResult mockFindTaskResult(LocalDateTime queryTime, List taskDataList) { - return new TaskAssigningRuntimeDelegate.FindTasksResult(queryTime, taskDataList); - } - - private class SolutionSynchronizerMock extends SolutionSynchronizer { - - private SolutionSynchronizerMock(SolverExecutor solverExecutor, - TaskAssigningRuntimeDelegate delegate, - UserSystemService userSystem, - Duration syncInterval, - Duration usersSyncInterval, - SolverHandlerContext context, - Consumer resultConsumer) { - super(solverExecutor, delegate, userSystem, syncInterval, usersSyncInterval, context, resultConsumer); - } - - @Override - protected List> buildChanges(TaskAssigningSolution solution, List updatedTaskDataList) { - return updatedTaskDataList.isEmpty() ? emptyChanges : generatedChanges; - } - - @Override - protected List> buildChanges(TaskAssigningSolution solution, List updatedTaskDataList, List updatedUserList) { - return updatedTaskDataList.isEmpty() && updatedUserList.isEmpty() ? emptyChanges : generatedChanges; - } - - @Override - protected TaskAssigningSolution buildSolution(List taskDataList, List externalUsers) { - return taskDataList.isEmpty() ? emptySolution : generatedSolution; - } - - @Override - protected boolean isUsersSyncTime() { - return usersSyncTime; - } - - @Override - protected boolean isUnchangedPeriodTime() { - return unchangedPeriodTime; - } - - @Override - Pair doInitSolverExecutor() { - Pair result = super.doInitSolverExecutor(); - queryExecutionsCountDown.countDown(); - return result; - } - - @Override - Pair doSynchronizeSolution() { - Pair result = super.doSynchronizeSolution(); - queryExecutionsCountDown.countDown(); - return result; - } - - @Override - protected void applyResult(Result result) { - super.applyResult(result); - applyResultCountDown.countDown(); - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverBuilderTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverBuilderTest.java deleted file mode 100644 index e75218e077..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverBuilderTest.java +++ /dev/null @@ -1,151 +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.planning; - -import java.util.concurrent.ThreadFactory; - -import org.assertj.core.api.Assertions; -import org.drools.core.impl.InternalKieContainer; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.kie.api.KieServices; -import org.kie.server.api.model.KieContainerStatus; -import org.kie.server.services.api.KieServerRegistry; -import org.kie.server.services.impl.KieContainerInstanceImpl; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; -import org.optaplanner.core.api.solver.Solver; -import org.optaplanner.core.impl.solver.thread.DefaultSolverThreadFactory; - -import static org.junit.Assert.assertNotNull; -import static org.kie.server.services.taskassigning.planning.SolverBuilder.CONFIGURED_THREAD_FACTORY_CLASS_MUST_IMPLEMENT_THREAD_FACTORY; -import static org.kie.server.services.taskassigning.planning.SolverBuilder.CONFIGURED_THREAD_FACTORY_CLASS_NOT_FOUND_ERROR; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class SolverBuilderTest { - - private static final String SOLVER_SIMPLE_CONFIG_RESOURCE = "org/kie/server/services/taskassigning/planning/test/model/SolverBuilderTestSimpleConfig.xml"; - - private static final String SOLVER_CONTAINER_CONFIG_RESOURCE = "org/kie/server/services/taskassigning/planning/test/model/SolverBuilderTestContainerConfig.xml"; - - private static final String CONTAINER_ID = "CONTAINER_ID"; - - private static final String NOT_EXISTING_SOLVER_CONFIG_RESOURCE = "NotExistingResource.xml"; - - private static final String NOT_EXISTING_CLASS = "MyNonExistingClass"; - - private static final String AUTO = "AUTO"; - - @Mock - private KieServerRegistry registry; - - @Mock - private KieContainerInstanceImpl container; - - @Test - public void buildFromResourceSuccessful() { - SolverDef solverDef = new SolverDef(SOLVER_SIMPLE_CONFIG_RESOURCE); - Solver solver = SolverBuilder.create() - .solverDef(solverDef) - .registry(registry) - .build(); - assertNotNull(solver); - } - - @Test - public void buildFromResourceWithCustomThreadParamsSuccessful() { - SolverDef solverDef = new SolverDef(SOLVER_SIMPLE_CONFIG_RESOURCE, AUTO, 10, DefaultSolverThreadFactory.class.getName()); - Solver solver = SolverBuilder.create() - .solverDef(solverDef) - .registry(registry) - .build(); - assertNotNull(solver); - } - - @Test - public void buildFromResourceWithThreadFactoryNotFoundError() { - SolverDef solverDef = new SolverDef(SOLVER_SIMPLE_CONFIG_RESOURCE, AUTO, 10, NOT_EXISTING_CLASS); - Assertions.assertThatThrownBy(() -> - SolverBuilder.create() - .solverDef(solverDef) - .registry(registry) - .build()) - .hasMessageContaining(String.format(CONFIGURED_THREAD_FACTORY_CLASS_NOT_FOUND_ERROR, NOT_EXISTING_CLASS)); - } - - @Test - public void buildFromResourceWithThreadFactoryWrongError() { - SolverDef solverDef = new SolverDef(SOLVER_SIMPLE_CONFIG_RESOURCE, AUTO, 10, String.class.getName()); - Assertions.assertThatThrownBy(() -> - SolverBuilder.create() - .solverDef(solverDef) - .registry(registry) - .build()) - .hasMessageContaining(String.format(CONFIGURED_THREAD_FACTORY_CLASS_MUST_IMPLEMENT_THREAD_FACTORY, String.class.getName(), ThreadFactory.class.getName())); - } - - @Test - public void buildFromResourceWithError() { - SolverDef solverDef = new SolverDef(NOT_EXISTING_SOLVER_CONFIG_RESOURCE); - Assertions.assertThatThrownBy(() -> - SolverBuilder.create() - .solverDef(solverDef) - .registry(registry) - .build()) - .hasMessageContaining("The solverConfigResource (" + NOT_EXISTING_SOLVER_CONFIG_RESOURCE + ") does not exist as a classpath resource in the classLoader"); - } - - @Test - public void buildFromContainerSuccessful() { - when(registry.getContainer(CONTAINER_ID)).thenReturn(container); - InternalKieContainer kieContainer = (InternalKieContainer) KieServices.Factory.get().getKieClasspathContainer(getClass().getClassLoader()); - when(container.getKieContainer()).thenReturn(kieContainer); - when(container.getStatus()).thenReturn(KieContainerStatus.STARTED); - - SolverDef solverDef = new SolverDef(CONTAINER_ID, null, null, null, SOLVER_CONTAINER_CONFIG_RESOURCE, null, -1, null); - Solver solver = SolverBuilder.create() - .solverDef(solverDef) - .registry(registry) - .build(); - assertNotNull(solver); - } - - @Test - public void buildFromContainerWithContainerNotFoundInRegistryError() { - SolverDef solverDef = new SolverDef(CONTAINER_ID, null, null, null, SOLVER_CONTAINER_CONFIG_RESOURCE, null, -1, null); - Assertions.assertThatThrownBy(() -> - SolverBuilder.create() - .solverDef(solverDef) - .registry(registry) - .build()).hasMessageContaining("Container " + CONTAINER_ID + " was not found un current registry." + - " No solvers can be created for this container"); - } - - @Test - public void buildFromContainerWithContainerNotStartedError() { - when(registry.getContainer(CONTAINER_ID)).thenReturn(container); - when(container.getStatus()).thenReturn(KieContainerStatus.STOPPED); - SolverDef solverDef = new SolverDef(CONTAINER_ID, null, null, null, SOLVER_CONTAINER_CONFIG_RESOURCE, null, -1, null); - Assertions.assertThatThrownBy(() -> - SolverBuilder.create() - .solverDef(solverDef) - .registry(registry) - .build()).hasMessageContaining("Container " + CONTAINER_ID + " must be in " + KieContainerStatus.STARTED + - " status for creating solvers, but current status is: " + container.getStatus()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverExecutorTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverExecutorTest.java deleted file mode 100644 index da6e0e077a..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverExecutorTest.java +++ /dev/null @@ -1,289 +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.planning; - -import java.util.Collections; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Semaphore; - -import org.assertj.core.api.Assertions; -import org.junit.After; -import org.junit.Test; -import org.kie.server.services.api.KieServerRegistry; -import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.optaplanner.core.api.score.Score; -import org.optaplanner.core.api.solver.Solver; -import org.optaplanner.core.api.solver.event.BestSolutionChangedEvent; -import org.optaplanner.core.api.solver.event.SolverEventListener; -import org.optaplanner.core.impl.score.director.ScoreDirectorFactory; -import org.optaplanner.core.impl.solver.ProblemFactChange; - -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; - -public class SolverExecutorTest extends RunnableBaseTest { - - @Mock - private SolverDef solverDef; - - @Mock - private KieServerRegistry registry; - - private Solver solver; - - @Mock - private TaskAssigningSolution solution; - - @Mock - private SolverEventListener eventListener; - - @Captor - private ArgumentCaptor> eventListenerCaptor; - - @Mock - private BestSolutionChangedEvent event; - - private CountDownLatch startFinished = new CountDownLatch(1); - - @Override - protected SolverExecutor createRunnableBase() { - solver = spy(new SolverMock()); - return spy(new SolverExecutorMock(solverDef, registry, eventListener)); - } - - @Test(timeout = TEST_TIMEOUT) - public void start() throws Exception { - CompletableFuture future = startRunnableBase(); - runnableBase.start(solution); - - // wait for the start initialization to finish - startFinished.await(); - - assertTrue(runnableBase.isStarted()); - - verify(solver).addEventListener(eventListenerCaptor.capture()); - eventListenerCaptor.getValue().bestSolutionChanged(event); - verify(eventListener).bestSolutionChanged(event); - - runnableBase.destroy(); - future.get(); - assertTrue(runnableBase.isDestroyed()); - } - - @Test - public void startWithFailure() { - runnableBase.start(solution); - Assertions.assertThatThrownBy(() -> runnableBase.start(solution)) - .hasMessage("SolverExecutor start method can only be invoked when the status is STOPPED"); - } - - @Test - public void startWithBuildFailure() { - RuntimeException error = new RuntimeException("An error was produced...!"); - doThrow(error).when(runnableBase).buildSolver(solverDef, registry); - Assertions.assertThatThrownBy(() -> runnableBase.start(solution)) - .hasMessage(error.getMessage()); - - assertTrue(runnableBase.isStopped()); - } - - @Test(timeout = TEST_TIMEOUT) - public void stopWithSolverStarted() throws Exception { - CompletableFuture future = startRunnableBase(); - runnableBase.start(solution); - // wait for the start initialization to finish - startFinished.await(); - - assertTrue(runnableBase.isStarted()); - - verify(solver).addEventListener(eventListenerCaptor.capture()); - eventListenerCaptor.getValue().bestSolutionChanged(event); - verify(eventListener).bestSolutionChanged(event); - - runnableBase.stop(); - - runnableBase.destroy(); - future.get(); - assertTrue(runnableBase.isDestroyed()); - verify(solver).terminateEarly(); - } - - @Test - public void stopWithSolverNotStarted() { - runnableBase.stop(); - runnableBase.destroy(); - assertTrue(runnableBase.isDestroyed()); - verify(solver, never()).terminateEarly(); - } - - @Test(timeout = TEST_TIMEOUT) - public void addProblemFactChanges() throws Exception { - CompletableFuture future = startRunnableBase(); - runnableBase.start(solution); - - // wait for the start initialization to finish - startFinished.await(); - - List> changes = Collections.emptyList(); - runnableBase.addProblemFactChanges(changes); - verify(solver).addProblemFactChanges(changes); - - runnableBase.destroy(); - future.get(); - assertTrue(runnableBase.isDestroyed()); - } - - @Test - public void addProblemFactChangesWithFailure() { - List> changes = Collections.emptyList(); - Assertions.assertThatThrownBy(() -> runnableBase.addProblemFactChanges(changes)) - .hasMessage("SolverExecutor has not been started. Be sure it's started and not stopped or destroyed prior to executing this method"); - } - - @After - public void cleanUp() { - disposeSolver(); - } - - private void disposeSolver() { - //ensure the emulated solver dies in cases where we the solver termination wasn't explicitly executed as part of test. - ((SolverMock) solver).dispose(); - } - - private class SolverExecutorMock extends SolverExecutor { - - public SolverExecutorMock(SolverDef solverDef, - KieServerRegistry registry, - SolverEventListener eventListener) { - super(solverDef, registry, eventListener); - } - - @Override - protected Solver buildSolver(SolverDef solverDef, KieServerRegistry registry) { - return solver; - } - } - - private class SolverMock implements Solver { - - private final Semaphore finishSolverWork = new Semaphore(0); - private CompletableFuture action; - - public void dispose() { - finishSolverWork.release(); - } - - @Override - public TaskAssigningSolution solve(TaskAssigningSolution problem) { - startFinished.countDown(); - action = CompletableFuture.runAsync(() -> { - try { - // emulate a solver working in demon mode. - finishSolverWork.acquire(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - LOGGER.debug(e.getMessage()); - } - }); - try { - action.get(); - } catch (ExecutionException e) { - LOGGER.debug(e.getMessage()); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - LOGGER.debug(e.getMessage()); - } - return null; - } - - @Override - public boolean terminateEarly() { - // emulate solver termination. - finishSolverWork.release(); - return true; - } - - @Override - public TaskAssigningSolution getBestSolution() { - return null; - } - - @Override - public Score getBestScore() { - return null; - } - - @Override - public String explainBestScore() { - return null; - } - - @Override - public long getTimeMillisSpent() { - return 0; - } - - @Override - public boolean isSolving() { - return false; - } - - @Override - public boolean isTerminateEarly() { - return false; - } - - @Override - public boolean addProblemFactChange(ProblemFactChange problemFactChange) { - return false; - } - - @Override - public boolean addProblemFactChanges(List> problemFactChanges) { - return false; - } - - @Override - public boolean isEveryProblemFactChangeProcessed() { - return false; - } - - @Override - public void addEventListener(SolverEventListener eventListener) { - - } - - @Override - public void removeEventListener(SolverEventListener eventListener) { - - } - - @Override - public ScoreDirectorFactory getScoreDirectorFactory() { - return null; - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverHandlerConfigTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverHandlerConfigTest.java deleted file mode 100644 index c0bc37ccb8..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverHandlerConfigTest.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.planning; - -import java.time.Duration; - -import org.junit.Before; -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -public class SolverHandlerConfigTest { - - public static final String TARGET_USER = "TARGET_USER"; - public static final int PUBLISH_WINDOW_SIZE = 3; - public static final Duration SYNC_INTERVAL = Duration.parse("PT3S"); - public static final Duration SYNC_QUERIES_SHIFT = Duration.parse("PT11M"); - public static final Duration USERS_SYNC_INTERVAL = Duration.parse("PT3H"); - public static final Duration WAIT_FOR_IMPROVED_SOLUTION_DURATION = Duration.parse("PT1S"); - public static final Duration IMPROVE_SOLUTION_ON_BACKGROUND_DURATION = Duration.parse("PT1M"); - - protected SolverHandlerConfig config; - - @Before - public void setUp() { - config = new SolverHandlerConfig(TARGET_USER, - PUBLISH_WINDOW_SIZE, - SYNC_INTERVAL, - SYNC_QUERIES_SHIFT, - USERS_SYNC_INTERVAL, - WAIT_FOR_IMPROVED_SOLUTION_DURATION, - IMPROVE_SOLUTION_ON_BACKGROUND_DURATION); - } - - @Test - public void getTargetUserId() { - assertThat(config.getTargetUserId()).isEqualTo(TARGET_USER); - } - - @Test - public void getPublishWindowSize() { - assertThat(config.getPublishWindowSize()).isEqualTo(PUBLISH_WINDOW_SIZE); - } - - @Test - public void getSyncInterval() { - assertThat(config.getSyncInterval()).isEqualTo(SYNC_INTERVAL); - } - - @Test - public void getSyncQueriesShift() { - assertThat(config.getSyncQueriesShift()).isEqualTo(SYNC_QUERIES_SHIFT); - } - - @Test - public void getUsersSyncInterval() { - assertThat(config.getUsersSyncInterval()).isEqualTo(USERS_SYNC_INTERVAL); - } - - @Test - public void getWaitForImprovedSolutionDuration() { - assertThat(config.getWaitForImprovedSolutionDuration()).isEqualTo(WAIT_FOR_IMPROVED_SOLUTION_DURATION); - } - - @Test - public void getImproveSolutionOnBackgroundDuration() { - assertThat(config.getImproveSolutionOnBackgroundDuration()).isEqualTo(IMPROVE_SOLUTION_ON_BACKGROUND_DURATION); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverHandlerContextTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverHandlerContextTest.java deleted file mode 100644 index 307fd70ee3..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverHandlerContextTest.java +++ /dev/null @@ -1,161 +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.planning; - -import java.time.Duration; -import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; -import java.util.Arrays; -import java.util.List; - -import org.apache.commons.lang3.tuple.Pair; -import org.junit.Before; -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -public class SolverHandlerContextTest { - - 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 Duration QUERY_SHIFT = Duration.parse("PT2S"); - - private SolverHandlerContext context; - - @Before - public void setUp() { - context = new SolverHandlerContext(QUERY_SHIFT); - } - - @Test - public void currentChangeSetId() { - context.setCurrentChangeSetId(2); - assertThat(context.getCurrentChangeSetId()).isEqualTo(2); - } - - @Test - public void nextChangeSetId() { - for (int i = 1; i < 10; i++) { - assertThat(context.nextChangeSetId()).isEqualTo(i); - } - } - - @Test - public void isProcessedChangeSet() { - context.setProcessedChangeSet(5); - for (int i = 0; i <= 5; i++) { - assertThat(context.isProcessedChangeSet(i)).isTrue(); - } - } - - @Test - public void isCurrentChangeSetProcessed() { - context.setCurrentChangeSetId(5); - assertThat(context.isCurrentChangeSetProcessed()).isFalse(); - context.setProcessedChangeSet(5); - assertThat(context.isCurrentChangeSetProcessed()).isTrue(); - } - - @Test - public void clearProcessedChangeSet() { - context.setProcessedChangeSet(5); - assertThat(context.isProcessedChangeSet(5)).isTrue(); - context.clearProcessedChangeSet(); - assertThat(context.isProcessedChangeSet(5)).isFalse(); - } - - @Test - public void getPreviousQueryTime() { - LocalDateTime queryTime = LocalDateTime.now(); - context.setPreviousQueryTime(queryTime); - assertThat(context.getPreviousQueryTime()).isEqualTo(queryTime); - } - - @Test - public void getNextQueryTime() { - LocalDateTime queryTime = LocalDateTime.now(); - context.setNextQueryTime(queryTime); - assertThat(context.getNextQueryTime()).isEqualTo(queryTime); - } - - @Test - public void setTaskChangeTime() { - LocalDateTime taskChangeTime = LocalDateTime.now(); - context.setTaskChangeTime(TASK_ID1, taskChangeTime); - assertThat(context.isProcessedTaskChange(TASK_ID1, taskChangeTime)).isTrue(); - } - - @Test - public void isProcessedTaskChangeWithOtherChange() { - LocalDateTime otherChangeTime = LocalDateTime.now(); - LocalDateTime taskChangeTime = otherChangeTime.plusMinutes(1); - context.setTaskChangeTime(TASK_ID1, otherChangeTime); - assertThat(context.isProcessedTaskChange(TASK_ID1, taskChangeTime)).isFalse(); - } - - @Test - public void isProcessedTaskChangeWithNoChange() { - LocalDateTime taskChangeTime = LocalDateTime.now(); - assertThat(context.isProcessedTaskChange(TASK_ID1, taskChangeTime)).isFalse(); - } - - @Test - public void clearTaskChangeTimes() { - List> taskChanges = Arrays.asList(Pair.of(TASK_ID1, LocalDateTime.now()), - Pair.of(TASK_ID2, LocalDateTime.now()), - Pair.of(TASK_ID3, LocalDateTime.now()), - Pair.of(TASK_ID4, LocalDateTime.now())); - taskChanges.forEach(taskChange -> context.setTaskChangeTime(taskChange.getLeft(), taskChange.getRight())); - taskChanges.forEach(taskChange -> assertThat(context.isProcessedTaskChange(taskChange.getLeft(), taskChange.getRight())).isTrue()); - context.clearTaskChangeTimes(); - taskChanges.forEach(taskChange -> assertThat(context.isProcessedTaskChange(taskChange.getLeft(), taskChange.getRight())).isFalse()); - } - - @Test - public void clearTaskChangeTimesWithFilter() { - LocalDateTime changeTime = LocalDateTime.now(); - List> taskChanges = Arrays.asList(Pair.of(TASK_ID1, changeTime.plusMinutes(1)), - Pair.of(TASK_ID2, changeTime.plusMinutes(2)), - Pair.of(TASK_ID3, changeTime.plusMinutes(3)), - Pair.of(TASK_ID4, changeTime.plusMinutes(4))); - taskChanges.forEach(taskChange -> context.setTaskChangeTime(taskChange.getLeft(), taskChange.getRight())); - taskChanges.forEach(taskChange -> assertThat(context.isProcessedTaskChange(taskChange.getLeft(), taskChange.getRight())).isTrue()); - - int filterIndex = 2; - context.clearTaskChangeTimes(taskChanges.get(filterIndex).getRight()); - for (int i = 0; i < filterIndex - 1; i++) { - assertThat(context.isProcessedTaskChange(taskChanges.get(i).getLeft(), taskChanges.get(i).getRight())).isFalse(); - } - for (int i = filterIndex; i < taskChanges.size(); i++) { - assertThat(context.isProcessedTaskChange(taskChanges.get(i).getLeft(), taskChanges.get(i).getRight())).isTrue(); - } - } - - @Test - public void shiftQueryTime() { - LocalDateTime queryTime = LocalDateTime.now(); - LocalDateTime result = context.shiftQueryTime(queryTime); - assertThat(result).isEqualTo(queryTime.minus(QUERY_SHIFT.toMillis(), ChronoUnit.MILLIS)); - } - - @Test - public void shiftQueryTimeNull() { - assertThat(context.shiftQueryTime(null)).isNull(); - } -} \ 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-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverHandlerTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverHandlerTest.java deleted file mode 100644 index 4ef9200cda..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/SolverHandlerTest.java +++ /dev/null @@ -1,476 +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.planning; - -import java.time.Duration; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.kie.server.api.model.taskassigning.PlanningExecutionResult; -import org.kie.server.services.api.KieServerRegistry; -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.realtime.TaskPropertyChangeProblemFactChange; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; -import org.optaplanner.core.api.score.buildin.bendablelong.BendableLongScore; -import org.optaplanner.core.api.solver.event.BestSolutionChangedEvent; -import org.optaplanner.core.api.solver.event.SolverEventListener; -import org.optaplanner.core.impl.solver.ProblemFactChange; - -import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.IMPROVE_SOLUTION_ON_BACKGROUND_DURATION; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.PUBLISH_WINDOW_SIZE; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.SYNC_QUERIES_SHIFT; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.TARGET_USER; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.USERS_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.WAIT_FOR_IMPROVED_SOLUTION_DURATION; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -@RunWith(MockitoJUnitRunner.class) -public class SolverHandlerTest { - - @Mock - private SolverDef solverDef; - - @Mock - private KieServerRegistry registry; - - @Mock - private TaskAssigningRuntimeDelegate delegate; - - @Mock - private UserSystemService userSystemService; - - @Mock - private ScheduledExecutorService executorService; - - private SolverHandler handler; - - private SolverHandlerConfig handlerConfig; - - @Mock - private SolverExecutor solverExecutor; - - @Mock - private SolutionSynchronizer solutionSynchronizer; - - @Mock - private SolutionProcessor solutionProcessor; - - @Captor - private ArgumentCaptor> listenerCaptor; - - @Captor - private ArgumentCaptor> synchronizerConsumerCaptor; - - @Captor - private ArgumentCaptor> processorConsumerCaptor; - - @Captor - private ArgumentCaptor contextCaptor; - - @Captor - private ArgumentCaptor runnableCaptor; - - @Captor - private ArgumentCaptor improveSolutionOnBackgroundDurationCaptor; - - @Mock - private ScheduledFuture future; - - private LocalDateTime previousQueryTime; - - private LocalDateTime nextQueryTime; - - @Before - public void setUp() { - handlerConfig = spy(new SolverHandlerConfig(TARGET_USER, PUBLISH_WINDOW_SIZE, SYNC_INTERVAL, - SYNC_QUERIES_SHIFT, USERS_SYNC_INTERVAL, - WAIT_FOR_IMPROVED_SOLUTION_DURATION, - IMPROVE_SOLUTION_ON_BACKGROUND_DURATION)); - previousQueryTime = LocalDateTime.now(); - nextQueryTime = previousQueryTime.plusMinutes(2); - this.handler = spy(new SolverHandler(solverDef, registry, delegate, userSystemService, executorService, handlerConfig)); - doReturn(solverExecutor).when(handler).createSolverExecutor(eq(solverDef), eq(registry), any()); - doReturn(solutionSynchronizer).when(handler).createSolutionSynchronizer(eq(solverExecutor), eq(delegate), eq(userSystemService), any(), any(), any(), any()); - doReturn(solutionProcessor).when(handler).createSolutionProcessor(eq(delegate), any(), eq(TARGET_USER), anyInt()); - } - - @Test - public void hasWaitForImprovedSolutionDuration() { - assertThat(handler.hasWaitForImprovedSolutionDuration()).isTrue(); - } - - @Test - public void hasImproveSolutionOnBackgroundDuration() { - assertThat(handler.hasImproveSolutionOnBackgroundDuration()).isTrue(); - } - - @Test - public void start() { - prepareStart(); - verify(executorService).execute(solverExecutor); - verify(executorService).execute(solutionSynchronizer); - verify(executorService).execute(solutionProcessor); - verify(solutionSynchronizer).initSolverExecutor(); - } - - @Test - public void destroy() throws Exception { - prepareStart(); - handler.destroy(); - verifyDestroyCommonActions(); - } - - @Test(timeout = 5000) - public void destroyWithTerminationError() throws Exception { - // ensure this code is executed on a separate thread since a Thread.currentThread().interrupt(); is produced - // in this use case when we emulate the executorService.awaitTermination throwing an Exception, otherwise - // the interruption is caused on the JUnit execution thread "very bad thing". - ExecutorService executor = Executors.newSingleThreadExecutor(); - executor.submit(() -> { - try { - prepareStart(); - doThrow(new InterruptedException("Test Generated Error")).when(executorService.awaitTermination(anyInt(), any())); - handler.destroy(); - - verifyDestroyCommonActions(); - verify(executorService).shutdownNow(); - } catch (Exception e) { - //will never happen, see verifyDestroyCommonActions executorService is a mock.. - } - }).get(); - executor.shutdown(); - } - - @Test - public void onBestSolutionChangeWithWaitForImprovedSolutionDuration() { - BestSolutionChangedEvent event = mockEvent(true, true); - prepareOnBestSolutionChangeWithWaitForImprovedSolutionDuration(WAIT_FOR_IMPROVED_SOLUTION_DURATION); - listenerCaptor.getValue().bestSolutionChanged(event); - verify(executorService).schedule(runnableCaptor.capture(), eq(WAIT_FOR_IMPROVED_SOLUTION_DURATION.toMillis()), eq(TimeUnit.MILLISECONDS)); - runnableCaptor.getValue().run(); - verify(solutionProcessor).process(event.getNewBestSolution()); - } - - @Test - public void onBestSolutionChangeWithWaitForImprovedSolutionDurationTaskAlreadyScheduled() { - BestSolutionChangedEvent event1 = mockEvent(true, true); - BestSolutionChangedEvent event2 = mockEvent(true, true); - BestSolutionChangedEvent event3 = mockEvent(true, true); - - prepareOnBestSolutionChangeWithWaitForImprovedSolutionDuration(WAIT_FOR_IMPROVED_SOLUTION_DURATION); - listenerCaptor.getValue().bestSolutionChanged(event1); - listenerCaptor.getValue().bestSolutionChanged(event2); - listenerCaptor.getValue().bestSolutionChanged(event3); - verify(executorService).schedule(runnableCaptor.capture(), eq(WAIT_FOR_IMPROVED_SOLUTION_DURATION.toMillis()), eq(TimeUnit.MILLISECONDS)); - runnableCaptor.getValue().run(); - verify(solutionProcessor).process(event3.getNewBestSolution()); - } - - @Test - public void onBestSolutionChangeWithWaitForImprovedSolutionDurationWhenChangeSetAlreadyProcessed() { - BestSolutionChangedEvent event = mockEvent(true, true); - prepareOnBestSolutionChangeWithWaitForImprovedSolutionDuration(WAIT_FOR_IMPROVED_SOLUTION_DURATION); - SolverHandlerContext context = contextCaptor.getValue(); - context.setProcessedChangeSet(context.getCurrentChangeSetId()); - listenerCaptor.getValue().bestSolutionChanged(event); - verify(executorService, never()).schedule(any(Runnable.class), anyLong(), any(TimeUnit.class)); - } - - private void prepareOnBestSolutionChangeWithWaitForImprovedSolutionDuration(Duration waitForImprovedSolutionDuration) { - prepareStart(); - SolverHandlerContext context = contextCaptor.getValue(); - long changeSet = context.nextChangeSetId(); - context.setCurrentChangeSetId(changeSet); - doReturn(waitForImprovedSolutionDuration).when(handlerConfig).getWaitForImprovedSolutionDuration(); - long durationMillis = waitForImprovedSolutionDuration.toMillis(); - doReturn(future).when(executorService).schedule(any(Runnable.class), eq(durationMillis), eq(TimeUnit.MILLISECONDS)); - } - - @Test - public void onBestSolutionChangeWhenAllChangesNotProcessed() { - onBestSolutionChangeEventNotProcessed(mockEvent(false, true)); - } - - @Test - public void onBestSolutionChangeWhenSolutionNotInitialized() { - onBestSolutionChangeEventNotProcessed(mockEvent(true, false)); - } - - @Test - public void onBestSolutionChangeWithWaitForImprovedSolutionDurationZero() { - doReturn(Duration.ZERO).when(handlerConfig).getWaitForImprovedSolutionDuration(); - - BestSolutionChangedEvent event = mockEvent(true, true); - prepareStart(); - - SolverHandlerContext context = contextCaptor.getValue(); - long changeSet = context.nextChangeSetId(); - context.setCurrentChangeSetId(changeSet); - listenerCaptor.getValue().bestSolutionChanged(event); - verify(solutionProcessor).process(event.getNewBestSolution()); - verify(executorService, never()).schedule(any(Runnable.class), anyLong(), any(TimeUnit.class)); - assertTrue(context.isProcessedChangeSet(changeSet)); - } - - @Test - public void onBestSolutionChangeWhenChangeSetAlreadyProcessed() { - prepareStart(); - BestSolutionChangedEvent event = mockEvent(true, true); - - SolverHandlerContext context = contextCaptor.getValue(); - long changeSet = context.nextChangeSetId(); - context.setCurrentChangeSetId(changeSet); - context.setProcessedChangeSet(changeSet); - - listenerCaptor.getValue().bestSolutionChanged(event); - verify(solutionProcessor, never()).process(any()); - } - - @Test - public void onSolutionProcessedWithImproveSolutionOnBackgroundDurationZero() { - SolutionProcessor.Result result = new SolutionProcessor.Result(PlanningExecutionResult.builder().build()); - doReturn(Duration.ZERO).when(handlerConfig).getImproveSolutionOnBackgroundDuration(); - onSolutionProcessedSuccessful(result, false, false); - } - - @Test - public void onSolutionProcessedWithImproveSolutionOnBackgroundDuration() { - SolutionProcessor.Result result = new SolutionProcessor.Result(PlanningExecutionResult.builder().build()); - doReturn(Duration.ofMillis(1234)).when(handlerConfig).getImproveSolutionOnBackgroundDuration(); - onSolutionProcessedSuccessful(result, false, true); - } - - @Test - public void onSolutionProcessedWithRecoverableError() { - SolutionProcessor.Result result = new SolutionProcessor.Result(PlanningExecutionResult.builder() - .error(PlanningExecutionResult.ErrorCode.TASK_MODIFIED_SINCE_PLAN_CALCULATION_ERROR) - .build()); - onSolutionProcessedSuccessful(result, true, false); - } - - @Test - public void onSolutionProcessedWithException() { - SolutionProcessor.Result result = new SolutionProcessor.Result(new Exception("Emulate an un-managed exception")); - onSolutionProcessedWithError(result); - } - - @Test - public void onSolutionProcessedWithUnRecoverableError() { - SolutionProcessor.Result result = new SolutionProcessor.Result(PlanningExecutionResult.builder() - .error(PlanningExecutionResult.ErrorCode.UNEXPECTED_ERROR) - .build()); - onSolutionProcessedWithError(result); - } - - @Test - public void onSolutionSynchronizedWithChanges() { - prepareStart(); - List> changes = new ArrayList<>(); - changes.add(new TaskPropertyChangeProblemFactChange(new Task())); - - SolutionSynchronizer.Result result = SolutionSynchronizer.Result.forChanges(changes); - - doReturn(true).when(solverExecutor).isStarted(); - - synchronizerConsumerCaptor.getValue().accept(result); - verify(solverExecutor).addProblemFactChanges(changes); - verify(solutionProcessor, never()).process(any(TaskAssigningSolution.class)); - verify(solutionSynchronizer, never()).synchronizeSolution(any(TaskAssigningSolution.class), any(LocalDateTime.class)); - } - - @Test - public void onSolutionSynchronizedWithUnchangedPeriodTimeoutAndSameBestSolution() { - TaskAssigningSolution initialSolution = prepareStartAndASolutionProduced(); - BestSolutionChangedEvent event = mockEvent(true, true); - doReturn(initialSolution).when(event).getNewBestSolution(); - listenerCaptor.getValue().bestSolutionChanged(event); - - SolutionSynchronizer.Result result = SolutionSynchronizer.Result.forUnchangedPeriodTimeout(); - synchronizerConsumerCaptor.getValue().accept(result); - - verify(solverExecutor, never()).addProblemFactChanges(any(List.class)); - verify(solutionSynchronizer).synchronizeSolution(eq(initialSolution), eq(nextQueryTime)); - } - - @Test - public void onSolutionSynchronizedWithUnchangedPeriodTimeoutAndSameScoreBestSolution() { - TaskAssigningSolution initialSolution = prepareStartAndASolutionProduced(); - BestSolutionChangedEvent event = mockEvent(true, true); - BendableLongScore initialSolutionScore = initialSolution.getScore(); - TaskAssigningSolution nextBestSolution = event.getNewBestSolution(); - doReturn(initialSolutionScore).when(nextBestSolution).getScore(); - listenerCaptor.getValue().bestSolutionChanged(event); - - SolutionSynchronizer.Result result = SolutionSynchronizer.Result.forUnchangedPeriodTimeout(); - synchronizerConsumerCaptor.getValue().accept(result); - - verify(solverExecutor, never()).addProblemFactChanges(any(List.class)); - verify(solutionSynchronizer).synchronizeSolution(eq(initialSolution), eq(nextQueryTime)); - } - - @Test - public void onSolutionSynchronizedWithUnchangedPeriodTimeoutAndDifferentScoreBestSolution() { - TaskAssigningSolution initialSolution = prepareStartAndASolutionProduced(); - BestSolutionChangedEvent event = mockEvent(true, true); - TaskAssigningSolution nextBestSolution = event.getNewBestSolution(); - BendableLongScore initialSolutionScore = initialSolution.getScore(); - BendableLongScore modifiedScore = initialSolutionScore.multiply(123); - doReturn(modifiedScore).when(nextBestSolution).getScore(); - listenerCaptor.getValue().bestSolutionChanged(event); - - SolutionSynchronizer.Result result = SolutionSynchronizer.Result.forUnchangedPeriodTimeout(); - synchronizerConsumerCaptor.getValue().accept(result); - - verify(solverExecutor, never()).addProblemFactChanges(any(List.class)); - verify(solutionProcessor).process(nextBestSolution); - verify(solutionSynchronizer, never()).synchronizeSolution(any(TaskAssigningSolution.class), any(LocalDateTime.class)); - } - - @Test - public void onUpdateSolutionSolverNotStarted() { - prepareStart(); - List> changes = new ArrayList<>(); - changes.add(new TaskPropertyChangeProblemFactChange(new Task())); - - SolutionSynchronizer.Result result = SolutionSynchronizer.Result.forChanges(changes); - - doReturn(false).when(solverExecutor).isStarted(); - - synchronizerConsumerCaptor.getValue().accept(result); - verify(solverExecutor, never()).addProblemFactChanges(changes); - } - - @Test - public void onUpdateSolutionWithEmptyChanges() { - prepareStart(); - List> changes = new ArrayList<>(); - - SolutionSynchronizer.Result result = SolutionSynchronizer.Result.forChanges(changes); - - doReturn(true).when(solverExecutor).isStarted(); - - synchronizerConsumerCaptor.getValue().accept(result); - verify(solverExecutor, never()).addProblemFactChanges(changes); - } - - @SuppressWarnings("unchecked") - private BestSolutionChangedEvent mockEvent(boolean allChangesProcessed, boolean solutionInitialized) { - BestSolutionChangedEvent event = mock(BestSolutionChangedEvent.class); - doReturn(allChangesProcessed).when(event).isEveryProblemFactChangeProcessed(); - TaskAssigningSolution solution = mock(TaskAssigningSolution.class); - BendableLongScore score = BendableLongScore.zero(1, 1).withInitScore(solutionInitialized ? 1 : -1); - doReturn(score).when(solution).getScore(); - doReturn(solution).when(event).getNewBestSolution(); - return event; - } - - private void onBestSolutionChangeEventNotProcessed(BestSolutionChangedEvent event) { - prepareStart(); - SolverHandlerContext context = contextCaptor.getValue(); - long changeSet = context.nextChangeSetId(); - listenerCaptor.getValue().bestSolutionChanged(event); - verify(executorService, never()).schedule(any(Runnable.class), anyLong(), any(TimeUnit.class)); - verify(solutionProcessor, never()).process(any()); - assertFalse(context.isProcessedChangeSet(changeSet)); - } - - private void onSolutionProcessedSuccessful(SolutionProcessor.Result result, boolean withRecoverableError, boolean withImproveSolutionOnBackgroundDuration) { - TaskAssigningSolution solution = prepareStartAndASolutionProduced(); - processorConsumerCaptor.getValue().accept(result); - SolverHandlerContext context = contextCaptor.getValue(); - assertEquals(nextQueryTime, context.getNextQueryTime()); - if (withRecoverableError) { - verify(solutionSynchronizer).synchronizeSolution(eq(solution), eq(previousQueryTime)); - } else if (withImproveSolutionOnBackgroundDuration) { - verify(solutionSynchronizer).synchronizeSolution(eq(solution), eq(nextQueryTime), improveSolutionOnBackgroundDurationCaptor.capture()); - assertThat(handlerConfig.getImproveSolutionOnBackgroundDuration()).isEqualTo(improveSolutionOnBackgroundDurationCaptor.getValue()); - } else { - verify(solutionSynchronizer).synchronizeSolution(eq(solution), eq(nextQueryTime)); - } - } - - private void onSolutionProcessedWithError(SolutionProcessor.Result result) { - prepareStartAndASolutionProduced(); - processorConsumerCaptor.getValue().accept(result); - verify(solverExecutor).stop(); - verify(solutionSynchronizer, times(2)).initSolverExecutor(); - - assertFalse(contextCaptor.getValue().isProcessedChangeSet(0)); - } - - private void prepareStart() { - handler.start(); - verify(handler).createSolverExecutor(eq(solverDef), eq(registry), listenerCaptor.capture()); - - verify(handler).createSolutionSynchronizer(eq(solverExecutor), eq(delegate), eq(userSystemService), - eq(SYNC_INTERVAL), eq(USERS_SYNC_INTERVAL), contextCaptor.capture(), - synchronizerConsumerCaptor.capture()); - - verify(handler).createSolutionProcessor(eq(delegate), processorConsumerCaptor.capture(), eq(TARGET_USER), eq(PUBLISH_WINDOW_SIZE)); - } - - private TaskAssigningSolution prepareStartAndASolutionProduced() { - prepareStart(); - doReturn(false).when(handler).hasWaitForImprovedSolutionDuration(); - BestSolutionChangedEvent event = mockEvent(true, true); - SolverHandlerContext context = contextCaptor.getValue(); - long changeSet = context.nextChangeSetId(); - context.setCurrentChangeSetId(changeSet); - context.setPreviousQueryTime(previousQueryTime); - context.setNextQueryTime(nextQueryTime); - listenerCaptor.getValue().bestSolutionChanged(event); - return event.getNewBestSolution(); - } - - private void verifyDestroyCommonActions() throws Exception { - verify(solverExecutor).destroy(); - verify(solutionSynchronizer).destroy(); - verify(solutionProcessor).destroy(); - verify(executorService).shutdown(); - verify(executorService).awaitTermination(5, TimeUnit.SECONDS); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerConfigProviderTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerConfigProviderTest.java deleted file mode 100644 index 2ff5c47312..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerConfigProviderTest.java +++ /dev/null @@ -1,51 +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.planning; - -import java.util.List; -import java.util.stream.Collectors; - -import org.junit.Test; -import org.kie.server.api.model.KieServerConfigProviderLoader; -import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution; - -import static org.assertj.core.api.Assertions.assertThat; - -public class TaskAssigningPlanningKieServerConfigProviderTest { - - @Test - public void expectedValues() { - assertProviderValues(new TaskAssigningPlanningKieServerConfigProvider()); - } - - @Test - public void isLoaded() { - List providers = KieServerConfigProviderLoader.getConfigProviders().stream() - .filter(provider -> provider instanceof TaskAssigningPlanningKieServerConfigProvider) - .map(provider -> (TaskAssigningPlanningKieServerConfigProvider) provider) - .collect(Collectors.toList()); - assertThat(providers.size()).isEqualTo(1); - assertProviderValues(providers.get(0)); - } - - private void assertProviderValues(TaskAssigningPlanningKieServerConfigProvider configProvider) { - assertThat(configProvider.getItems().size()).isEqualTo(1); - assertThat(configProvider.getItems().get(0).getName()).isEqualTo(TaskAssigningPlanningKieServerConfigProvider.VALUE_NAME); - assertThat(configProvider.getItems().get(0).getValue()).isEqualTo(TaskAssigningSolution.class.getPackage().getName()); - assertThat(configProvider.getItems().get(0).getType()).isEqualTo(String.class.getName()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtensionHelperTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtensionHelperTest.java deleted file mode 100644 index f11f052df7..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtensionHelperTest.java +++ /dev/null @@ -1,151 +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.planning; - -import java.time.Duration; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import org.junit.After; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameter; - -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.IMPROVE_SOLUTION_ON_BACKGROUND_DURATION; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.PUBLISH_WINDOW_SIZE; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.SYNC_QUERIES_SHIFT; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.TARGET_USER; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.USERS_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.WAIT_FOR_IMPROVED_SOLUTION_DURATION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PUBLISH_WINDOW_SIZE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SYNC_QUERIES_SHIFT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USERS_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionHelper.DEFAULT_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionHelper.DEFAULT_PUBLISH_WINDOW_SIZE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionHelper.DEFAULT_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionHelper.DEFAULT_SYNC_QUERIES_SHIFT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionHelper.DEFAULT_USERS_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionHelper.DEFAULT_WAIT_FOR_IMPROVED_SOLUTION_DURATION; - -@RunWith(Parameterized.class) -public class TaskAssigningPlanningKieServerExtensionHelperTest { - - private static final Duration NEGATIVE_DURATION = Duration.parse("PT-2S"); - private static final String NON_PARSEABLE = "NON_PARSEABLE"; - - @Parameter - public String parameterName; - - @Parameter(1) - public String parameterFailingValue; - - @Parameterized.Parameters(name = "parameterName = {0}, parameterFailingValue = {1}") - public static Collection produceFailingCases() { - List data = new ArrayList<>(); - data.add(new Object[]{TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER, null}); - data.add(new Object[]{TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER, " "}); - data.add(new Object[]{TASK_ASSIGNING_PUBLISH_WINDOW_SIZE, "-1"}); - data.add(new Object[]{TASK_ASSIGNING_PUBLISH_WINDOW_SIZE, "0"}); - data.add(new Object[]{TASK_ASSIGNING_PUBLISH_WINDOW_SIZE, NON_PARSEABLE}); - data.add(new Object[]{TASK_ASSIGNING_SYNC_INTERVAL, Duration.ZERO.toString()}); - data.add(new Object[]{TASK_ASSIGNING_SYNC_INTERVAL, NEGATIVE_DURATION.toString()}); - data.add(new Object[]{TASK_ASSIGNING_SYNC_INTERVAL, NON_PARSEABLE}); - data.add(new Object[]{TASK_ASSIGNING_SYNC_QUERIES_SHIFT, Duration.ZERO.toString()}); - data.add(new Object[]{TASK_ASSIGNING_SYNC_QUERIES_SHIFT, NEGATIVE_DURATION.toString()}); - data.add(new Object[]{TASK_ASSIGNING_USERS_SYNC_INTERVAL, NEGATIVE_DURATION.toString()}); - data.add(new Object[]{TASK_ASSIGNING_USERS_SYNC_INTERVAL, NON_PARSEABLE}); - data.add(new Object[]{TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION, NEGATIVE_DURATION.toString()}); - data.add(new Object[]{TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION, NON_PARSEABLE}); - data.add(new Object[]{TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION, NEGATIVE_DURATION.toString()}); - data.add(new Object[]{TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION, NON_PARSEABLE}); - return data; - } - - @Test - public void readAndValidateTaskAssigningServiceConfigFull() throws TaskAssigningValidationException { - prepareTaskAssigningServiceProperties(); - TaskAssigningServiceConfig serviceConfig = TaskAssigningPlanningKieServerExtensionHelper.readAndValidateTaskAssigningServiceConfig(); - SolverHandlerConfig handlerConfig = serviceConfig.getSolverHandlerConfig(); - assertThat(handlerConfig.getTargetUserId()).isEqualTo(TARGET_USER); - assertThat(handlerConfig.getPublishWindowSize()).isEqualTo(PUBLISH_WINDOW_SIZE); - assertThat(handlerConfig.getSyncInterval()).isEqualTo(SYNC_INTERVAL); - assertThat(handlerConfig.getSyncQueriesShift()).isEqualTo(SYNC_QUERIES_SHIFT); - assertThat(handlerConfig.getUsersSyncInterval()).isEqualTo(USERS_SYNC_INTERVAL); - assertThat(handlerConfig.getWaitForImprovedSolutionDuration()).isEqualTo(WAIT_FOR_IMPROVED_SOLUTION_DURATION); - assertThat(handlerConfig.getImproveSolutionOnBackgroundDuration()).isEqualTo(IMPROVE_SOLUTION_ON_BACKGROUND_DURATION); - } - - @Test - public void readAndValidateTaskAssigningServiceConfigDefaults() throws TaskAssigningValidationException { - System.setProperty(TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER, TARGET_USER); - TaskAssigningServiceConfig serviceConfig = TaskAssigningPlanningKieServerExtensionHelper.readAndValidateTaskAssigningServiceConfig(); - SolverHandlerConfig handlerConfig = serviceConfig.getSolverHandlerConfig(); - assertThat(handlerConfig.getTargetUserId()).isEqualTo(TARGET_USER); - assertThat(handlerConfig.getPublishWindowSize()).isEqualTo(DEFAULT_PUBLISH_WINDOW_SIZE); - assertThat(handlerConfig.getSyncInterval()).isEqualTo(Duration.parse(DEFAULT_SYNC_INTERVAL)); - assertThat(handlerConfig.getSyncQueriesShift()).isEqualTo(Duration.parse(DEFAULT_SYNC_QUERIES_SHIFT)); - assertThat(handlerConfig.getUsersSyncInterval()).isEqualTo(Duration.parse(DEFAULT_USERS_SYNC_INTERVAL)); - assertThat(handlerConfig.getWaitForImprovedSolutionDuration()).isEqualTo(Duration.parse(DEFAULT_WAIT_FOR_IMPROVED_SOLUTION_DURATION)); - assertThat(handlerConfig.getImproveSolutionOnBackgroundDuration()).isEqualTo(Duration.parse(DEFAULT_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION)); - } - - @Test - public void readAndValidateTaskAssigningServiceConfigFailures() { - prepareTaskAssigningServiceProperties(); - if (parameterFailingValue != null) { - System.setProperty(parameterName, parameterFailingValue); - } else { - System.clearProperty(parameterName); - } - assertThatThrownBy(TaskAssigningPlanningKieServerExtensionHelper::readAndValidateTaskAssigningServiceConfig) - .hasMessageStartingWith("Parameter %s", parameterName); - } - - @After - public void cleanUp() { - clearTaskAssigningServiceProperties(); - } - - public static void prepareTaskAssigningServiceProperties() { - System.setProperty(TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER, TARGET_USER); - System.setProperty(TASK_ASSIGNING_PUBLISH_WINDOW_SIZE, Integer.toString(PUBLISH_WINDOW_SIZE)); - System.setProperty(TASK_ASSIGNING_SYNC_INTERVAL, SYNC_INTERVAL.toString()); - System.setProperty(TASK_ASSIGNING_SYNC_QUERIES_SHIFT, SYNC_QUERIES_SHIFT.toString()); - System.setProperty(TASK_ASSIGNING_USERS_SYNC_INTERVAL, USERS_SYNC_INTERVAL.toString()); - System.setProperty(TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION, WAIT_FOR_IMPROVED_SOLUTION_DURATION.toString()); - System.setProperty(TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION, IMPROVE_SOLUTION_ON_BACKGROUND_DURATION.toString()); - } - - public static void clearTaskAssigningServiceProperties() { - System.clearProperty(TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER); - System.clearProperty(TASK_ASSIGNING_PUBLISH_WINDOW_SIZE); - System.clearProperty(TASK_ASSIGNING_SYNC_INTERVAL); - System.clearProperty(TASK_ASSIGNING_SYNC_QUERIES_SHIFT); - System.clearProperty(TASK_ASSIGNING_USERS_SYNC_INTERVAL); - System.clearProperty(TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION); - System.clearProperty(TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION); - } -} \ 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-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtensionTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtensionTest.java deleted file mode 100644 index 8d5fb8cf1d..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningPlanningKieServerExtensionTest.java +++ /dev/null @@ -1,713 +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.planning; - -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.drools.core.impl.InternalKieContainer; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.kie.server.api.model.KieContainerResource; -import org.kie.server.api.model.KieContainerStatus; -import org.kie.server.api.model.KieServiceResponse; -import org.kie.server.api.model.Message; -import org.kie.server.api.model.ServiceResponse; -import org.kie.server.api.model.Severity; -import org.kie.server.services.api.KieServerRegistry; -import org.kie.server.services.impl.KieContainerInstanceImpl; -import org.kie.server.services.impl.KieServerImpl; -import org.kie.server.services.jbpm.JbpmKieServerExtension; -import org.kie.server.services.taskassigning.core.model.TaskAssigningSolution; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.runners.MockitoJUnitRunner; -import org.mockito.stubbing.Answer; -import org.optaplanner.core.api.solver.Solver; - -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; -import static org.drools.core.util.KeyStoreConstants.PROP_PWD_KS_PWD; -import static org.drools.core.util.KeyStoreConstants.PROP_PWD_KS_URL; -import static org.junit.Assert.fail; -import static org.kie.server.api.KieServerConstants.KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_ALIAS; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_PWD; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_PWD; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_TIMEOUT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_URL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_USER; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PUBLISH_WINDOW_SIZE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_ARTIFACT_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_GROUP_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_VERSION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_MOVE_THREAD_BUFFER_SIZE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_MOVE_THREAD_COUNT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_THREAD_FACTORY_CLASS; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ARTIFACT_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_GROUP_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_VERSION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_NAME; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtension.CAPABILITY_TASK_ASSIGNING_PLANNING; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtension.EXTENSION_NAME; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtension.EXTENSION_START_ORDER; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionHelperTest.clearTaskAssigningServiceProperties; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.ACTIVATE_CONTAINER_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.CREATE_CONTAINER_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.HEALTH_CHECK_IS_ALIVE_MESSAGE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.PARAMETER_MUST_HAVE_A_GREATER_THAN_ZERO_INTEGER_VALUE_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.PLANNER_CONTAINER_NOT_AVAILABLE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.PLANNER_SOLVER_INSTANTIATION_CHECK_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.REQUIRED_PARAMETERS_FOR_CONTAINER_ARE_MISSING; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.SOLVER_CONFIGURATION_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.TASK_ASSIGNING_SERVICE_CONFIGURATION_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.UNDESIRED_EXTENSIONS_RUNNING_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.USER_SYSTEM_CONFIGURATION_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.USER_SYSTEM_CONTAINER_NOT_AVAILABLE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.USER_SYSTEM_NAME_NOT_CONFIGURED_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.USER_SYSTEM_SERVICE_NOT_FOUND; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.USER_SYSTEM_SERVICE_START_ERROR; -import static org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtensionMessages.addExtensionMessagePrefix; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyBoolean; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class TaskAssigningPlanningKieServerExtensionTest { - - private static final String RUNTIME_URL = "http://testserver:8080/kie-server/services/rest/server"; - private static final String RUNTIME_USER = "RUNTIME_USER"; - private static final String RUNTIME_PWD = "RUNTIME_PWD"; - private static final String RUNTIME_TIMEOUT = "1234"; - - private static final String KEY_STORE_RESOURCE = "taskAssigningKeystore.jceks"; - /** - * was generated with the KeyStoreUtil class. - */ - private static final String KEY_STORE_RESOURCE_IBM = "taskAssigningKeystoreIBM.jceks"; - - private static final String KEY_STORE_PASSWORD = "jBPMKeyStorePassword"; - private static final String RUNTIME_ALIAS = "jBPMAlias"; - private static final String RUNTIME_ALIAS_PWD = "jBPMKeyPassword"; - private static final String RUNTIME_ALIAS_STORED_PWD = "kieserver1!"; - - private static final String SOLVER_MOVE_THREAD_COUNT = "AUTO"; - private static final int SOLVER_MOVE_THREAD_BUFFER_SIZE = 2; - private static final String SOLVER_THREAD_FACTORY_CLASS = "SOLVER_THREAD_FACTORY_CLASS"; - - private static final String SOLVER_CONTAINER_ID = "SOLVER_CONTAINER_ID"; - private static final String SOLVER_CONTAINER_GROUP_ID = "SOLVER_CONTAINER_GROUP_ID"; - private static final String SOLVER_CONTAINER_ARTIFACT_ID = "SOLVER_CONTAINER_ARTIFACT_ID"; - private static final String SOLVER_CONTAINER_VERSION = "SOLVER_CONTAINER_VERSION"; - - private static final String USER_SYSTEM_NAME = "USER_SYSTEM_NAME"; - private static final String USER_SYSTEM_CONTAINER_ID = "USER_SYSTEM_CONTAINER_ID"; - private static final String USER_SYSTEM_CONTAINER_GROUP_ID = "USER_SYSTEM_CONTAINER_GROUP_ID"; - private static final String USER_SYSTEM_CONTAINER_ARTIFACT_ID = "USER_SYSTEM_CONTAINER_ARTIFACT_ID"; - private static final String USER_SYSTEM_CONTAINER_VERSION = "USER_SYSTEM_CONTAINER_VERSION"; - - private static final String ERROR_MESSAGE = "ERROR_MESSAGE"; - - @Mock - private KieServerImpl kieServer; - - @Mock - private KieServerRegistry registry; - - private TaskAssigningPlanningKieServerExtension extension; - - @Captor - private ArgumentCaptor messageCaptor; - - @Mock - private UserSystemService userSystemService; - - @Mock - private Solver solver; - - @Captor - private ArgumentCaptor solverDefCaptor; - - @Mock - private KieContainerInstanceImpl solverContainer; - - @Mock - private InternalKieContainer internalSolverKieContainer; - - private ClassLoader internalSolverKieContainerClassLoader; - - @Mock - private KieContainerInstanceImpl userSystemContainer; - - @Mock - private InternalKieContainer internalUserSystemKieContainer; - - private ClassLoader internalUserSystemKieContainerClassLoader; - - @Mock - private ServiceResponse containerResponse; - - @Mock - private TaskAssigningService taskAssigningService; - - @Captor - private ArgumentCaptor taskAssigningServiceConfigCaptor; - - @Before - public void setUp() { - internalUserSystemKieContainerClassLoader = getClass().getClassLoader(); - internalSolverKieContainerClassLoader = getClass().getClassLoader(); - extension = spy(new TaskAssigningPlanningKieServerExtension()); - prepareTaskAssigningServiceProperties(); - doReturn(taskAssigningService).when(extension).createTaskAssigningService(any()); - } - - @After - public void cleanUp() { - System.clearProperty(KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED); - - System.clearProperty(TASK_ASSIGNING_PROCESS_RUNTIME_URL); - System.clearProperty(TASK_ASSIGNING_PROCESS_RUNTIME_USER); - System.clearProperty(TASK_ASSIGNING_PROCESS_RUNTIME_PWD); - System.clearProperty(TASK_ASSIGNING_PROCESS_RUNTIME_TIMEOUT); - - clearTaskAssigningServiceProperties(); - - System.clearProperty(TASK_ASSIGNING_SOLVER_MOVE_THREAD_COUNT); - System.clearProperty(TASK_ASSIGNING_SOLVER_MOVE_THREAD_BUFFER_SIZE); - System.clearProperty(TASK_ASSIGNING_SOLVER_THREAD_FACTORY_CLASS); - - System.clearProperty(TASK_ASSIGNING_SOLVER_CONTAINER_ID); - System.clearProperty(TASK_ASSIGNING_SOLVER_CONTAINER_GROUP_ID); - System.clearProperty(TASK_ASSIGNING_SOLVER_CONTAINER_ARTIFACT_ID); - System.clearProperty(TASK_ASSIGNING_SOLVER_CONTAINER_VERSION); - System.clearProperty(TASK_ASSIGNING_USER_SYSTEM_NAME); - - System.clearProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ID); - System.clearProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_GROUP_ID); - System.clearProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ARTIFACT_ID); - System.clearProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_VERSION); - } - - @Test - public void isActiveDefaultValue() { - assertThat(extension.isActive()).isFalse(); - } - - @Test - public void isActiveTrue() { - enableExtension(); - assertThat(extension.isActive()).isTrue(); - } - - @Test - public void isActiveFalse() { - disableExtension(); - assertThat(extension.isActive()).isFalse(); - } - - @Test - public void initWithJbpmExtensionEnabled() { - JbpmKieServerExtension jbpmExtension = mock(JbpmKieServerExtension.class); - when(registry.getServerExtension(JbpmKieServerExtension.EXTENSION_NAME)).thenReturn(jbpmExtension); - enableExtension(); - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - extension.init(kieServer, registry); - assertKieServerMessageWasAdded(Severity.WARN, - addExtensionMessagePrefix(String.format(UNDESIRED_EXTENSIONS_RUNNING_ERROR, JbpmKieServerExtension.EXTENSION_NAME)), - 1, - 0, - false); - } - - @Test - public void initRuntimeClient() { - prepareInitRuntimeClient(); - enableExtension(); - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - extension.init(kieServer, registry); - verify(extension).createRuntimeClient(RUNTIME_URL, RUNTIME_USER, RUNTIME_PWD, Long.parseLong(RUNTIME_TIMEOUT)); - } - - @Test - public void initRuntimeClientWithKeyStore() throws URISyntaxException { - initRuntimeClientWithKeyStore(RUNTIME_ALIAS, RUNTIME_ALIAS_PWD, RUNTIME_ALIAS_STORED_PWD); - } - - @Test - public void initRuntimeClientWithKeyStoreMissingAlias() throws URISyntaxException { - initRuntimeClientWithKeyStore("whateverAlias", RUNTIME_ALIAS_PWD, RUNTIME_PWD); - } - - @Test - public void initRuntimeClientWithKeyStoreWrongAliasPwd() throws URISyntaxException { - initRuntimeClientWithKeyStore(RUNTIME_ALIAS, "whateverPassword", RUNTIME_PWD); - } - - private void initRuntimeClientWithKeyStore(String alias, String aliasPwd, String expectedPwd) throws URISyntaxException { - prepareInitRuntimeClient(); - String currentKeyStore = getCurrentKeyStore(); - URL keyStoreResourceURL = getClass().getClassLoader().getResource(currentKeyStore); - if (keyStoreResourceURL == null) { - fail(currentKeyStore + " was not found"); - } else { - System.setProperty(PROP_PWD_KS_URL, keyStoreResourceURL.toURI().toString()); - System.setProperty(PROP_PWD_KS_PWD, KEY_STORE_PASSWORD); - System.setProperty(TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_ALIAS, alias); - System.setProperty(TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_PWD, aliasPwd); - enableExtension(); - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - extension.init(kieServer, registry); - verify(extension).createRuntimeClient(RUNTIME_URL, RUNTIME_USER, expectedPwd, Long.parseLong(RUNTIME_TIMEOUT)); - } - } - - @Test - public void initWithSolverContainerConfigurationError() { - System.setProperty(TASK_ASSIGNING_SOLVER_CONTAINER_ID, SOLVER_CONTAINER_ID); - enableExtension(); - String error = String.format(SOLVER_CONFIGURATION_ERROR, String.format(REQUIRED_PARAMETERS_FOR_CONTAINER_ARE_MISSING, SOLVER_CONTAINER_ID, null, null, null)); - assertThatThrownBy(() -> extension.init(kieServer, registry)).hasMessage(error); - assertThat(extension.isInitialized()).isFalse(); - } - - @Test - public void initWithSolverContainer() { - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - prepareSolverContainerProperties(); - enableExtension(); - extension.init(kieServer, registry); - assertThat(extension.isInitialized()).isTrue(); - } - - @Test - public void initWithUserSystemMissingError() { - enableExtension(); - String error = String.format(USER_SYSTEM_CONFIGURATION_ERROR, String.format(USER_SYSTEM_NAME_NOT_CONFIGURED_ERROR, TASK_ASSIGNING_USER_SYSTEM_NAME)); - assertThatThrownBy(() -> extension.init(kieServer, registry)).hasMessage(error); - assertThat(extension.isInitialized()).isFalse(); - } - - @Test - public void initWithUserSystemContainerError() { - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ID, USER_SYSTEM_CONTAINER_ID); - enableExtension(); - String error = String.format(USER_SYSTEM_CONFIGURATION_ERROR, String.format(REQUIRED_PARAMETERS_FOR_CONTAINER_ARE_MISSING, USER_SYSTEM_CONTAINER_ID, null, null, null)); - assertThatThrownBy(() -> extension.init(kieServer, registry)).hasMessage(error); - assertThat(extension.isInitialized()).isFalse(); - } - - @Test - public void initWithUserContainer() { - prepareUserContainerProperties(); - enableExtension(); - extension.init(kieServer, registry); - assertThat(extension.isInitialized()).isTrue(); - } - - @Test - public void initWithTaskAssigningServiceConfigErrors() { - System.setProperty(TASK_ASSIGNING_PUBLISH_WINDOW_SIZE, "make failure"); - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - enableExtension(); - String error = String.format(TASK_ASSIGNING_SERVICE_CONFIGURATION_ERROR, String.format(PARAMETER_MUST_HAVE_A_GREATER_THAN_ZERO_INTEGER_VALUE_ERROR, - TASK_ASSIGNING_PUBLISH_WINDOW_SIZE)); - assertThatThrownBy(() -> extension.init(kieServer, registry)).hasMessageStartingWith(error); - assertThat(extension.isInitialized()).isFalse(); - } - - @Test - public void getExtensionName() { - assertThat(extension.getExtensionName()).isEqualTo(EXTENSION_NAME); - } - - @Test - public void getServices() { - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - enableExtension(); - extension.init(kieServer, registry); - List services = extension.getServices(); - assertThat(services.size()).isEqualTo(1); - assertThat(services.get(0)).isInstanceOf(TaskAssigningService.class); - } - - @Test - public void getImplementedCapability() { - assertThat(extension.getImplementedCapability()).isEqualTo(CAPABILITY_TASK_ASSIGNING_PLANNING); - } - - @Test - public void getAppComponents() { - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - enableExtension(); - extension.init(kieServer, registry); - assertThat(extension.getAppComponents(TaskAssigningService.class)).isNotNull(); - } - - @Test - public void getStartOrder() { - assertThat(extension.getStartOrder()).isEqualTo(EXTENSION_START_ORDER); - } - - @Test - public void toStringTest() { - String expectedValue = EXTENSION_NAME + " KIE Server extension"; - assertThat(extension).hasToString(expectedValue); - } - - @Test - public void serverStartedSuccessful() { - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - System.setProperty(TASK_ASSIGNING_SOLVER_MOVE_THREAD_COUNT, SOLVER_MOVE_THREAD_COUNT); - System.setProperty(TASK_ASSIGNING_SOLVER_MOVE_THREAD_BUFFER_SIZE, Integer.toString(SOLVER_MOVE_THREAD_BUFFER_SIZE)); - System.setProperty(TASK_ASSIGNING_SOLVER_THREAD_FACTORY_CLASS, SOLVER_THREAD_FACTORY_CLASS); - - enableExtension(); - doReturn(userSystemService).when(extension).lookupUserSystem(eq(USER_SYSTEM_NAME), any()); - doReturn(solver).when(extension).createSolver(eq(registry), any()); - - initAndStartServerSuccessful(); - verify(extension).createSolver(eq(registry), solverDefCaptor.capture()); - assertThat(solverDefCaptor.getValue().getMoveThreadCount()).isEqualTo(SOLVER_MOVE_THREAD_COUNT); - assertThat(solverDefCaptor.getValue().getMoveThreadBufferSize()).isEqualTo(SOLVER_MOVE_THREAD_BUFFER_SIZE); - assertThat(solverDefCaptor.getValue().getThreadFactoryClass()).isEqualTo(SOLVER_THREAD_FACTORY_CLASS); - } - - @Test - public void serverStartedWithCreateSolverError() { - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - enableExtension(); - doThrow(new RuntimeException(ERROR_MESSAGE)).when(extension).createSolver(eq(registry), any()); - extension.init(kieServer, registry); - extension.serverStarted(); - assertKieServerMessageWasAdded(Severity.ERROR, addExtensionMessagePrefix(String.format(PLANNER_SOLVER_INSTANTIATION_CHECK_ERROR, ERROR_MESSAGE)), 1, 0, true); - } - - @Test - public void serverStartedWithSolverContainerExistingAndStartedSuccessful() { - prepareServerStartWithSolverContainerConfig(); - doReturn(solver).when(extension).createSolver(eq(registry), any()); - when(registry.getContainer(SOLVER_CONTAINER_ID)).thenReturn(solverContainer); - when(solverContainer.getStatus()).thenReturn(KieContainerStatus.STARTED); - - initAndStartServerSuccessful(); - verify(extension).registerExtractors(solverContainer); - } - - @Test - public void serverStartedWithSolverContainerExistingButNeedsActivationSuccessful() { - prepareServerStartWithSolverContainerConfig(); - doReturn(solver).when(extension).createSolver(eq(registry), any()); - prepareExistingContainerButNeedsActivationSuccessful(SOLVER_CONTAINER_ID, solverContainer); - - initAndStartServerSuccessful(); - verify(extension).registerExtractors(solverContainer); - } - - @Test - public void serverStartedWithSolverContainerExistingButNeedsActivationFailed() { - prepareServerStartWithSolverContainerConfig(); - prepareExistingContainerButNeedsActivationFailed(SOLVER_CONTAINER_ID, solverContainer); - extension.init(kieServer, registry); - extension.serverStarted(); - assertKieServerMessageWasAdded(Severity.ERROR, addExtensionMessagePrefix(String.format(ACTIVATE_CONTAINER_ERROR, SOLVER_CONTAINER_ID, ERROR_MESSAGE)), 2, 0, true); - assertKieServerMessageWasAdded(Severity.ERROR, addExtensionMessagePrefix(String.format(PLANNER_CONTAINER_NOT_AVAILABLE, SOLVER_CONTAINER_ID)), 2, 1, true); - verify(extension, never()).registerExtractors(solverContainer); - } - - @Test - public void serverStartedWithSolverContainerNotExistingButCreatedSuccessful() { - prepareServerStartWithSolverContainerConfig(); - doReturn(solver).when(extension).createSolver(eq(registry), any()); - prepareContainerNotExistingButCreatedSuccessful(SOLVER_CONTAINER_ID, solverContainer); - - initAndStartServerSuccessful(); - verify(extension).registerExtractors(solverContainer); - } - - @Test - public void serverStartedWithSolverContainerNotExistingButCreatedFailed() { - prepareServerStartWithSolverContainerConfig(); - prepareContainerNotExistingButCreatedFailed(SOLVER_CONTAINER_ID); - extension.init(kieServer, registry); - extension.serverStarted(); - assertKieServerMessageWasAdded(Severity.ERROR, addExtensionMessagePrefix(String.format(CREATE_CONTAINER_ERROR, SOLVER_CONTAINER_ID, ERROR_MESSAGE)), 2, 0, true); - assertKieServerMessageWasAdded(Severity.ERROR, addExtensionMessagePrefix(String.format(PLANNER_CONTAINER_NOT_AVAILABLE, SOLVER_CONTAINER_ID)), 2, 1, true); - verify(extension, never()).registerExtractors(solverContainer); - } - - @Test - public void serverStartedWithUserSystemContainerExistingAndStartedSuccessful() { - prepareServerStartWithUserSystemContainerConfig(); - when(registry.getContainer(USER_SYSTEM_CONTAINER_ID)).thenReturn(userSystemContainer); - when(userSystemContainer.getStatus()).thenReturn(KieContainerStatus.STARTED); - - initAndStartServerSuccessful(); - verify(extension).registerExtractors(userSystemContainer); - } - - @Test - public void serverStartedWithUserSystemContainerExistingButNeedsActivationSuccessful() { - prepareServerStartWithUserSystemContainerConfig(); - prepareExistingContainerButNeedsActivationSuccessful(USER_SYSTEM_CONTAINER_ID, userSystemContainer); - - initAndStartServerSuccessful(); - verify(extension).registerExtractors(userSystemContainer); - } - - @Test - public void serverStartedWithUserSystemContainerExistingButNeedsActivationFailed() { - prepareServerStartWithUserSystemContainerConfig(); - prepareExistingContainerButNeedsActivationFailed(USER_SYSTEM_CONTAINER_ID, userSystemContainer); - extension.init(kieServer, registry); - extension.serverStarted(); - assertKieServerMessageWasAdded(Severity.ERROR, addExtensionMessagePrefix(String.format(ACTIVATE_CONTAINER_ERROR, USER_SYSTEM_CONTAINER_ID, ERROR_MESSAGE)), 2, 0, true); - assertKieServerMessageWasAdded(Severity.ERROR, addExtensionMessagePrefix(String.format(USER_SYSTEM_CONTAINER_NOT_AVAILABLE, USER_SYSTEM_CONTAINER_ID)), 2, 1, true); - verify(extension, never()).registerExtractors(userSystemContainer); - } - - @Test - public void serverStartedWithUserSystemContainerNotExistingButCreatedSuccessful() { - prepareServerStartWithUserSystemContainerConfig(); - prepareContainerNotExistingButCreatedSuccessful(USER_SYSTEM_CONTAINER_ID, userSystemContainer); - - initAndStartServerSuccessful(); - verify(extension).registerExtractors(userSystemContainer); - } - - @Test - public void serverStartedWithUserSystemContainerNotExistingButCreatedFailed() { - prepareServerStartWithUserSystemContainerConfig(); - prepareContainerNotExistingButCreatedFailed(USER_SYSTEM_CONTAINER_ID); - extension.init(kieServer, registry); - extension.serverStarted(); - assertKieServerMessageWasAdded(Severity.ERROR, addExtensionMessagePrefix(String.format(CREATE_CONTAINER_ERROR, USER_SYSTEM_CONTAINER_ID, ERROR_MESSAGE)), 2, 0, true); - assertKieServerMessageWasAdded(Severity.ERROR, addExtensionMessagePrefix(String.format(USER_SYSTEM_CONTAINER_NOT_AVAILABLE, USER_SYSTEM_CONTAINER_ID)), 2, 1, true); - verify(extension, never()).registerExtractors(userSystemContainer); - } - - @Test - public void serverStartedWithUserSystemNotFoundError() { - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - doReturn(null).when(extension).lookupUserSystem(eq(USER_SYSTEM_NAME), any()); - doReturn(solver).when(extension).createSolver(eq(registry), any()); - enableExtension(); - extension.init(kieServer, registry); - extension.serverStarted(); - assertKieServerMessageWasAdded(Severity.ERROR, addExtensionMessagePrefix(String.format(USER_SYSTEM_SERVICE_NOT_FOUND, USER_SYSTEM_NAME)), 1, 0, true); - } - - @Test - public void serverStartedWithUserSystemStartError() { - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - doReturn(userSystemService).when(extension).lookupUserSystem(eq(USER_SYSTEM_NAME), any()); - doThrow(new RuntimeException(ERROR_MESSAGE)).when(userSystemService).start(); - doReturn(solver).when(extension).createSolver(eq(registry), any()); - enableExtension(); - extension.init(kieServer, registry); - extension.serverStarted(); - assertKieServerMessageWasAdded(Severity.ERROR, addExtensionMessagePrefix(String.format(USER_SYSTEM_SERVICE_START_ERROR, USER_SYSTEM_NAME, ERROR_MESSAGE)), 1, 0, true); - } - - @Test - public void destroy() { - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - enableExtension(); - doReturn(userSystemService).when(extension).lookupUserSystem(eq(USER_SYSTEM_NAME), any()); - doReturn(solver).when(extension).createSolver(eq(registry), any()); - extension.init(kieServer, registry); - extension.serverStarted(); - extension.destroy(kieServer, registry); - verify(taskAssigningService).destroy(); - } - - @Test - public void destroyWhenNotInitialized() { - extension.destroy(kieServer, registry); - verify(taskAssigningService, never()).destroy(); - } - - @Test - public void healthCheck() { - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - enableExtension(); - extension.init(kieServer, registry); - List messages = extension.healthCheck(true); - assertContainsMesssage(messages, Severity.INFO, HEALTH_CHECK_IS_ALIVE_MESSAGE, 0); - } - - private void prepareTaskAssigningServiceProperties() { - TaskAssigningPlanningKieServerExtensionHelperTest.prepareTaskAssigningServiceProperties(); - } - - private void prepareInitRuntimeClient() { - System.setProperty(TASK_ASSIGNING_PROCESS_RUNTIME_URL, RUNTIME_URL); - System.setProperty(TASK_ASSIGNING_PROCESS_RUNTIME_USER, RUNTIME_USER); - System.setProperty(TASK_ASSIGNING_PROCESS_RUNTIME_PWD, RUNTIME_PWD); - System.setProperty(TASK_ASSIGNING_PROCESS_RUNTIME_TIMEOUT, RUNTIME_TIMEOUT); - } - - private void prepareServerStartWithSolverContainerConfig() { - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - enableExtension(); - when(solverContainer.getKieContainer()).thenReturn(internalSolverKieContainer); - when(internalSolverKieContainer.getClassLoader()).thenReturn(internalSolverKieContainerClassLoader); - prepareSolverContainerProperties(); - doReturn(userSystemService).when(extension).lookupUserSystem(eq(USER_SYSTEM_NAME), any()); - } - - private void prepareServerStartWithUserSystemContainerConfig() { - prepareUserContainerProperties(); - enableExtension(); - when(userSystemContainer.getKieContainer()).thenReturn(internalUserSystemKieContainer); - when(internalUserSystemKieContainer.getClassLoader()).thenReturn(internalUserSystemKieContainerClassLoader); - doReturn(userSystemService).when(extension).lookupUserSystem(eq(USER_SYSTEM_NAME), any()); - doReturn(solver).when(extension).createSolver(eq(registry), any()); - } - - private void prepareUserContainerProperties() { - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, USER_SYSTEM_NAME); - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ID, USER_SYSTEM_CONTAINER_ID); - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_GROUP_ID, USER_SYSTEM_CONTAINER_GROUP_ID); - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ARTIFACT_ID, USER_SYSTEM_CONTAINER_ARTIFACT_ID); - System.setProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_VERSION, USER_SYSTEM_CONTAINER_VERSION); - } - - private void prepareSolverContainerProperties() { - System.setProperty(TASK_ASSIGNING_SOLVER_CONTAINER_ID, SOLVER_CONTAINER_ID); - System.setProperty(TASK_ASSIGNING_SOLVER_CONTAINER_GROUP_ID, SOLVER_CONTAINER_GROUP_ID); - System.setProperty(TASK_ASSIGNING_SOLVER_CONTAINER_ARTIFACT_ID, SOLVER_CONTAINER_ARTIFACT_ID); - System.setProperty(TASK_ASSIGNING_SOLVER_CONTAINER_VERSION, SOLVER_CONTAINER_VERSION); - } - - private void prepareExistingContainerButNeedsActivationSuccessful(String containerId, KieContainerInstanceImpl containerMock) { - when(registry.getContainer(containerId)).thenReturn(containerMock); - when(kieServer.activateContainer(containerId)).thenReturn(containerResponse); - when(containerResponse.getType()).thenReturn(KieServiceResponse.ResponseType.SUCCESS); - - prepareContainerStatusInvocations(containerMock, Arrays.asList(KieContainerStatus.DEACTIVATED, - KieContainerStatus.DEACTIVATED, - KieContainerStatus.STARTED)); - } - - private void prepareExistingContainerButNeedsActivationFailed(String containerId, KieContainerInstanceImpl containerMock) { - when(registry.getContainer(containerId)).thenReturn(containerMock); - when(kieServer.activateContainer(containerId)).thenReturn(containerResponse); - when(containerResponse.getType()).thenReturn(KieServiceResponse.ResponseType.FAILURE); - when(containerResponse.getMsg()).thenReturn(ERROR_MESSAGE); - prepareContainerStatusInvocations(containerMock, Arrays.asList(KieContainerStatus.DEACTIVATED, - KieContainerStatus.DEACTIVATED, - KieContainerStatus.DEACTIVATED)); - } - - private void prepareContainerNotExistingButCreatedSuccessful(String containerId, KieContainerInstanceImpl containerMock) { - prepareGetContainerInvocations(registry, containerId, Arrays.asList(null, containerMock)); - when(kieServer.createContainer(eq(containerId), any())).thenReturn(containerResponse); - when(containerResponse.getType()).thenReturn(KieServiceResponse.ResponseType.SUCCESS); - prepareContainerStatusInvocations(containerMock, Arrays.asList(KieContainerStatus.STARTED, KieContainerStatus.STARTED)); - } - - private void prepareContainerNotExistingButCreatedFailed(String containerId) { - prepareGetContainerInvocations(registry, containerId, Arrays.asList(null, null)); - when(kieServer.createContainer(eq(containerId), any())).thenReturn(containerResponse); - when(containerResponse.getType()).thenReturn(KieServiceResponse.ResponseType.FAILURE); - when(containerResponse.getMsg()).thenReturn(ERROR_MESSAGE); - } - - private void prepareContainerStatusInvocations(KieContainerInstanceImpl containerMock, List results) { - doAnswer(new Answer() { - private int invocations = 0; - - public Object answer(InvocationOnMock invocation) { - return results.get(invocations++); - } - }).when(containerMock).getStatus(); - } - - private void prepareGetContainerInvocations(KieServerRegistry registryMock, String containerId, List results) { - doAnswer(new Answer() { - private int invocations = 0; - - public Object answer(InvocationOnMock invocation) { - return results.get(invocations++); - } - }).when(registryMock).getContainer(containerId); - } - - private void assertKieServerMessageWasAdded(Severity severity, String message, int times, int index, boolean includeHealthCheck) { - verify(kieServer, times(times)).addServerMessage(messageCaptor.capture()); - assertContainsMesssage(messageCaptor.getAllValues(), severity, message, index); - if (includeHealthCheck) { - List healthCheckMessages = extension.healthCheck(true); - assertContainsMesssage(healthCheckMessages, severity, message, index); - } - } - - private void assertContainsMesssage(List messages, Severity severity, String message, int index) { - assertThat(messages.get(index).getSeverity()).isEqualTo(severity); - assertThat(messages.get(index).getMessages().iterator().next()).isEqualTo(message); - } - - private void initAndStartServerSuccessful() { - extension.init(kieServer, registry); - extension.serverStarted(); - verify(kieServer, never()).addServerMessage(any()); - verify(taskAssigningService).setExecutorService(any()); - verify(taskAssigningService).setDelegate(any()); - verify(taskAssigningService).setUserSystemService(userSystemService); - verify(taskAssigningService).start(any(), eq(registry)); - verify(extension).createTaskAssigningService(taskAssigningServiceConfigCaptor.capture()); - assertThat(taskAssigningServiceConfigCaptor.getValue()).isNotNull(); - } - - private void enableExtension() { - System.setProperty(KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED, "false"); - } - - private void disableExtension() { - System.setProperty(KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED, "true"); - } - - private String getCurrentKeyStore() { - String vendor = System.getProperty("java.vendor"); - if (vendor.toUpperCase().contains("IBM")) { - return KEY_STORE_RESOURCE_IBM; - } else { - return KEY_STORE_RESOURCE; - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningRuntimeDelegateTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningRuntimeDelegateTest.java deleted file mode 100644 index 8a7853496f..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningRuntimeDelegateTest.java +++ /dev/null @@ -1,87 +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.planning; - -import java.time.LocalDateTime; -import java.util.Collections; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.kie.api.task.model.Status; -import org.kie.server.api.model.taskassigning.PlanningItem; -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.client.TaskAssigningRuntimeClient; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -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.model.taskassigning.util.StatusConverter.convertToString; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class TaskAssigningRuntimeDelegateTest { - - @Mock - private TaskAssigningRuntimeClient runtimeClient; - - @Captor - private ArgumentCaptor planCaptor; - - private TaskAssigningRuntimeDelegate delegate; - - @Before - public void setUp() { - this.delegate = new TaskAssigningRuntimeDelegate(runtimeClient); - } - - @Test - public void findTasks() { - List status = Collections.singletonList(convertToString(Status.Ready)); - List internalStatus = Collections.singletonList(Status.Ready); - LocalDateTime lastModificationDate = LocalDateTime.now(); - TaskInputVariablesReadMode mode = TaskInputVariablesReadMode.READ_FOR_ALL; - TaskDataList taskDataList = new TaskDataList(); - LocalDateTime queryTime = LocalDateTime.now(); - taskDataList.setQueryTime(queryTime); - - when(runtimeClient.findTasks(eq(0L), eq(status), eq(lastModificationDate), anyInt(), anyInt(), eq(mode))).thenReturn(taskDataList); - TaskAssigningRuntimeDelegate.FindTasksResult result = delegate.findTasks(internalStatus, lastModificationDate, mode); - verify(runtimeClient).findTasks(eq(0L), eq(status), eq(lastModificationDate), anyInt(), anyInt(), eq(mode)); - assertTrue(result.getTasks().isEmpty()); - assertEquals(queryTime, result.getQueryTime()); - } - - @Test - public void executePlanning() { - PlanningItem item = new PlanningItem(); - List planningItems = Collections.singletonList(item); - String targetUser = "TARGET_USER"; - delegate.executePlanning(planningItems, targetUser); - verify(runtimeClient).executePlanning(planCaptor.capture(), eq(targetUser)); - assertEquals(planningItems, planCaptor.getValue().getItems()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningServiceConfigTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningServiceConfigTest.java deleted file mode 100644 index 6eb5cb47d9..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningServiceConfigTest.java +++ /dev/null @@ -1,52 +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.planning; - -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.IMPROVE_SOLUTION_ON_BACKGROUND_DURATION; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.PUBLISH_WINDOW_SIZE; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.SYNC_QUERIES_SHIFT; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.TARGET_USER; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.USERS_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.SolverHandlerConfigTest.WAIT_FOR_IMPROVED_SOLUTION_DURATION; - -public class TaskAssigningServiceConfigTest { - - @Test - public void getSolverHandlerConfig() { - TaskAssigningServiceConfig serviceConfig = new TaskAssigningServiceConfig(TARGET_USER, - PUBLISH_WINDOW_SIZE, - SYNC_INTERVAL, - SYNC_QUERIES_SHIFT, - USERS_SYNC_INTERVAL, - WAIT_FOR_IMPROVED_SOLUTION_DURATION, - IMPROVE_SOLUTION_ON_BACKGROUND_DURATION); - - SolverHandlerConfig handlerConfig = serviceConfig.getSolverHandlerConfig(); - assertThat(handlerConfig).isNotNull(); - assertThat(handlerConfig.getTargetUserId()).isEqualTo(TARGET_USER); - assertThat(handlerConfig.getPublishWindowSize()).isEqualTo(PUBLISH_WINDOW_SIZE); - assertThat(handlerConfig.getSyncInterval()).isEqualTo(SYNC_INTERVAL); - assertThat(handlerConfig.getSyncQueriesShift()).isEqualTo(SYNC_QUERIES_SHIFT); - assertThat(handlerConfig.getUsersSyncInterval()).isEqualTo(USERS_SYNC_INTERVAL); - assertThat(handlerConfig.getWaitForImprovedSolutionDuration()).isEqualTo(WAIT_FOR_IMPROVED_SOLUTION_DURATION); - assertThat(handlerConfig.getImproveSolutionOnBackgroundDuration()).isEqualTo(IMPROVE_SOLUTION_ON_BACKGROUND_DURATION); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningServiceTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningServiceTest.java deleted file mode 100644 index 6d053a7335..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TaskAssigningServiceTest.java +++ /dev/null @@ -1,87 +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.planning; - -import java.util.concurrent.ScheduledExecutorService; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.kie.server.services.api.KieServerRegistry; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; - -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; - -@RunWith(MockitoJUnitRunner.class) -public class TaskAssigningServiceTest { - - @Mock - private UserSystemService userSystemService; - - @Mock - private ScheduledExecutorService executorService; - - @Mock - private TaskAssigningRuntimeDelegate delegate; - - @Mock - private SolverDef solverDef; - - @Mock - private KieServerRegistry registry; - - @Mock - private SolverHandler solverHandler; - - private TaskAssigningService taskAssigningService; - - @Mock - private TaskAssigningServiceConfig serviceConfig; - - @Mock - private SolverHandlerConfig handlerConfig; - - @Before - public void setUp() { - doReturn(handlerConfig).when(serviceConfig).getSolverHandlerConfig(); - taskAssigningService = spy(new TaskAssigningService(serviceConfig)); - doReturn(solverHandler) - .when(taskAssigningService) - .createSolverHandler(eq(solverDef), eq(registry), eq(delegate), eq(userSystemService), eq(executorService), eq(handlerConfig)); - taskAssigningService.setUserSystemService(userSystemService); - taskAssigningService.setDelegate(delegate); - taskAssigningService.setExecutorService(executorService); - } - - @Test - public void start() { - taskAssigningService.start(solverDef, registry); - verify(solverHandler).start(); - } - - @Test - public void destroy() { - taskAssigningService.start(solverDef, registry); - taskAssigningService.destroy(); - verify(solverHandler).destroy(); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TestUtil.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TestUtil.java deleted file mode 100644 index 1175342797..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/TestUtil.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.services.taskassigning.planning; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.kie.server.services.taskassigning.core.model.AbstractPersistable; -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 org.kie.server.services.taskassigning.user.system.api.Group; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - -public class TestUtil { - - private TestUtil() { - } - - public static User mockUser(long userId, List tasks) { - return initializeUser(new User(userId, "User_" + userId), tasks); - } - - public static User initializeUser(User user, List tasks) { - TaskOrUser previous = user; - for (Task task : tasks) { - previous.setNextTask(task); - task.setPreviousTaskOrUser(previous); - task.setUser(user); - previous = task; - } - return user; - } - - public static org.kie.server.services.taskassigning.user.system.api.Group mockExternalGroup(String groupId) { - return () -> groupId; - } - - public static org.kie.server.services.taskassigning.user.system.api.User mockExternalUser(String userId, - Set groups) { - return new org.kie.server.services.taskassigning.user.system.api.User() { - - @Override - public String getId() { - return userId; - } - - @Override - public Set getGroups() { - return groups; - } - - @Override - public Map getAttributes() { - return Collections.emptyMap(); - } - }; - } - - public static org.kie.server.services.taskassigning.user.system.api.User mockExternalUser(String userId) { - return mockExternalUser(userId, Collections.emptySet()); - } - - public static void assertContains(String entityId, Collection entities) { - assertNotNull("entityId: " + entityId + " is missing in collection: " + entities, - entities.stream() - .filter(entity -> entityId.equals(entity.getEntityId())) - .filter(entity -> entityId.hashCode() == entity.getId()) - .findFirst().orElse(null)); - } - - public static void assertContains(String entityId, int times, Collection entities) { - long currentTimes = entities.stream().filter(entity -> entityId.equals(entity.getEntityId())).count(); - assertEquals("entityId: " + entityId + " is not present the expected times.", times, currentTimes); - } - - public static void assertNotContains(String entityId, Collection entities) { - assertNull("entityId: " + entityId + " must not be present in collection: " + entities, - entities.stream() - .filter(entity -> entityId.equals(entity.getEntityId())) - .filter(entity -> entityId.hashCode() == entity.getId()) - .findFirst().orElse(null)); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/UserSystemServiceLoaderTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/UserSystemServiceLoaderTest.java deleted file mode 100644 index ad08e57e65..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/UserSystemServiceLoaderTest.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.taskassigning.planning; - -import java.util.Map; - -import org.junit.Test; -import org.kie.server.services.taskassigning.planning.test.model.UserSystemService1; -import org.kie.server.services.taskassigning.planning.test.model.UserSystemService2; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; -import org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemService; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -public class UserSystemServiceLoaderTest { - - @Test - public void loadServices() { - Map result = UserSystemServiceLoader.loadServices(getClass().getClassLoader()); - assertEquals(3, result.size()); - assertContains(result, UserSystemService1.NAME, UserSystemService1.class); - assertContains(result, UserSystemService2.NAME, UserSystemService2.class); - assertContains(result, SimpleUserSystemService.NAME, SimpleUserSystemService.class); - } - - private void assertContains(Map map, String name, Class serviceType) { - assertTrue(map.containsKey(name)); - assertEquals(serviceType.getName(), map.get(name).getClass().getName()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/AbstractAttributeMapValueLabelValueExtractorTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/AbstractAttributeMapValueLabelValueExtractorTest.java deleted file mode 100644 index eb4b1e0ff9..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/AbstractAttributeMapValueLabelValueExtractorTest.java +++ /dev/null @@ -1,34 +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.planning.data; - -import java.util.Map; - -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -public abstract class AbstractAttributeMapValueLabelValueExtractorTest, T, E extends AbstractAttributeMapValueLabelValueExtractor> - extends AbstractLabelValueExtractorTest { - - protected abstract String getExpectedAttributeName(); - - @Test - public void getAttributeName() { - assertThat(valueExtractor.getAttributeName()).isEqualTo(getExpectedAttributeName()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/AbstractLabelValueExtractorTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/AbstractLabelValueExtractorTest.java deleted file mode 100644 index 861dffa133..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/AbstractLabelValueExtractorTest.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.planning.data; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Set; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -import static org.assertj.core.api.Assertions.assertThat; - -@RunWith(Parameterized.class) -public abstract class AbstractLabelValueExtractorTest> { - - public static final String CUSTOM_NAME = "CUSTOM_NAME"; - public static final String VALUE1 = "VALUE1"; - public static final String VALUE2 = "VALUE2"; - - protected E valueExtractor; - - @Before - public void setUp() { - valueExtractor = createExtractor(); - } - - protected abstract E createExtractor(); - - protected abstract Class getExpectedType(); - - protected abstract int getExpectedPriority(); - - protected abstract String getExpectedLabelName(); - - @Parameterized.Parameter() - public T source; - - @Parameterized.Parameter(1) - public Set expectedValue; - - @Parameterized.Parameters(name = "{index}: source={0}, expectedValue={1}") - public static Collection data() { - return new ArrayList<>(); - } - - @Test - public void getType() { - assertThat(valueExtractor.getType()).isEqualTo(getExpectedType()); - } - - @Test - public void getLabelName() { - assertThat(valueExtractor.getLabelName()).isEqualTo(getExpectedLabelName()); - } - - @Test - public void getPriority() { - assertThat(valueExtractor.getPriority()).isEqualTo(getExpectedPriority()); - } - - @Test - public void extract() { - Set result = valueExtractor.extract(source); - assertThat(result).isEqualTo(expectedValue); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/AbstractStringListValueAttributeMapValueExtractorTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/AbstractStringListValueAttributeMapValueExtractorTest.java deleted file mode 100644 index ba9f9187d9..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/AbstractStringListValueAttributeMapValueExtractorTest.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.services.taskassigning.planning.data; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.services.taskassigning.user.system.api.User; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public abstract class AbstractStringListValueAttributeMapValueExtractorTest, T, E extends AbstractAttributeMapValueLabelValueExtractor> - extends AbstractAttributeMapValueLabelValueExtractorTest { - - protected static TaskData mockTaskData(String attributeName, String value) { - Map inputData = new HashMap<>(); - inputData.put(attributeName, value); - return TaskData.builder() - .inputData(inputData) - .build(); - } - - protected static User mockUser(String attributeName, String value) { - User user = mock(User.class); - Map attributes = new HashMap<>(); - attributes.put(attributeName, value); - when(user.getAttributes()).thenReturn(attributes); - return user; - } - - protected static Set mockSet(Object... values) { - return new HashSet<>(Arrays.asList(values)); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/DefaultTaskDataAffinitiesValueExtractorTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/DefaultTaskDataAffinitiesValueExtractorTest.java deleted file mode 100644 index fb32e2449a..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/DefaultTaskDataAffinitiesValueExtractorTest.java +++ /dev/null @@ -1,74 +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.planning.data; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import org.junit.Test; -import org.junit.runners.Parameterized; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.services.taskassigning.core.model.DefaultLabels; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.kie.server.services.taskassigning.planning.data.DefaultTaskDataAffinitiesValueExtractor.TASK_AFFINITIES_ATTRIBUTE; - -public class DefaultTaskDataAffinitiesValueExtractorTest extends AbstractStringListValueAttributeMapValueExtractorTest, TaskData, DefaultTaskDataAffinitiesValueExtractor> { - - @Override - protected DefaultTaskDataAffinitiesValueExtractor createExtractor() { - return new DefaultTaskDataAffinitiesValueExtractor(); - } - - @Override - protected Class getExpectedType() { - return TaskData.class; - } - - @Override - protected int getExpectedPriority() { - return 1; - } - - @Override - protected String getExpectedLabelName() { - return DefaultLabels.AFFINITIES.name(); - } - - @Override - protected String getExpectedAttributeName() { - return TASK_AFFINITIES_ATTRIBUTE; - } - - @Parameterized.Parameters - public static Collection data() { - List data = new ArrayList<>(); - data.add(new Object[]{mockTaskData(TASK_AFFINITIES_ATTRIBUTE, String.format("%s", VALUE1)), mockSet(VALUE1)}); - data.add(new Object[]{mockTaskData(TASK_AFFINITIES_ATTRIBUTE, String.format(" %s , ,%s", VALUE1, VALUE2)), mockSet(VALUE2, VALUE1)}); - data.add(new Object[]{mockTaskData(TASK_AFFINITIES_ATTRIBUTE, null), mockSet()}); - return data; - } - - @Test - public void getFromPropertyAttributeName() { - System.setProperty(DefaultTaskDataAffinitiesValueExtractor.TASK_AFFINITIES_ATTRIBUTE_PROPERTY_NAME, CUSTOM_NAME); - assertThat(createExtractor().getAttributeName()).isEqualTo(CUSTOM_NAME); - System.clearProperty(DefaultTaskDataAffinitiesValueExtractor.TASK_AFFINITIES_ATTRIBUTE_PROPERTY_NAME); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/DefaultTaskDataSkillsValueExtractorTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/DefaultTaskDataSkillsValueExtractorTest.java deleted file mode 100644 index 7589c6c47f..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/DefaultTaskDataSkillsValueExtractorTest.java +++ /dev/null @@ -1,74 +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.planning.data; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import org.junit.Test; -import org.junit.runners.Parameterized; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.services.taskassigning.core.model.DefaultLabels; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.kie.server.services.taskassigning.planning.data.DefaultTaskDataSkillsValueExtractor.TASK_SKILLS_ATTRIBUTE; - -public class DefaultTaskDataSkillsValueExtractorTest extends AbstractStringListValueAttributeMapValueExtractorTest, TaskData, DefaultTaskDataSkillsValueExtractor> { - - @Override - protected DefaultTaskDataSkillsValueExtractor createExtractor() { - return new DefaultTaskDataSkillsValueExtractor(); - } - - @Override - protected Class getExpectedType() { - return TaskData.class; - } - - @Override - protected int getExpectedPriority() { - return 1; - } - - @Override - protected String getExpectedLabelName() { - return DefaultLabels.SKILLS.name(); - } - - @Override - protected String getExpectedAttributeName() { - return TASK_SKILLS_ATTRIBUTE; - } - - @Parameterized.Parameters - public static Collection data() { - List data = new ArrayList<>(); - data.add(new Object[]{mockTaskData(TASK_SKILLS_ATTRIBUTE, String.format("%s", VALUE1)), mockSet(VALUE1)}); - data.add(new Object[]{mockTaskData(TASK_SKILLS_ATTRIBUTE, String.format(" %s , ,%s", VALUE1, VALUE2)), mockSet(VALUE2, VALUE1)}); - data.add(new Object[]{mockTaskData(TASK_SKILLS_ATTRIBUTE, null), mockSet()}); - return data; - } - - @Test - public void getFromPropertyAttributeName() { - System.setProperty(DefaultTaskDataSkillsValueExtractor.TASK_SKILLS_ATTRIBUTE_PROPERTY_NAME, CUSTOM_NAME); - assertThat(createExtractor().getAttributeName()).isEqualTo(CUSTOM_NAME); - System.clearProperty(DefaultTaskDataSkillsValueExtractor.TASK_SKILLS_ATTRIBUTE_PROPERTY_NAME); - } -} \ 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-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/DefaultUserAffinitiesValueExtractorTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/DefaultUserAffinitiesValueExtractorTest.java deleted file mode 100644 index dbef631450..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/DefaultUserAffinitiesValueExtractorTest.java +++ /dev/null @@ -1,74 +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.planning.data; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import org.junit.Test; -import org.junit.runners.Parameterized; -import org.kie.server.services.taskassigning.core.model.DefaultLabels; -import org.kie.server.services.taskassigning.user.system.api.User; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.kie.server.services.taskassigning.planning.data.DefaultUserAffinitiesValueExtractor.USER_AFFINITIES_ATTRIBUTE; - -public class DefaultUserAffinitiesValueExtractorTest extends AbstractStringListValueAttributeMapValueExtractorTest, User, DefaultUserAffinitiesValueExtractor> { - - @Override - protected DefaultUserAffinitiesValueExtractor createExtractor() { - return new DefaultUserAffinitiesValueExtractor(); - } - - @Override - protected Class getExpectedType() { - return User.class; - } - - @Override - protected int getExpectedPriority() { - return 1; - } - - @Override - protected String getExpectedLabelName() { - return DefaultLabels.AFFINITIES.name(); - } - - @Override - protected String getExpectedAttributeName() { - return USER_AFFINITIES_ATTRIBUTE; - } - - @Parameterized.Parameters - public static Collection data() { - List data = new ArrayList<>(); - data.add(new Object[]{mockUser(USER_AFFINITIES_ATTRIBUTE, String.format("%s", VALUE1)), mockSet(VALUE1)}); - data.add(new Object[]{mockUser(USER_AFFINITIES_ATTRIBUTE, String.format(" %s , ,%s", VALUE1, VALUE2)), mockSet(VALUE2, VALUE1)}); - data.add(new Object[]{mockUser(USER_AFFINITIES_ATTRIBUTE, null), mockSet()}); - return data; - } - - @Test - public void getFromPropertyAttributeName() { - System.setProperty(DefaultUserAffinitiesValueExtractor.USER_AFFINITIES_ATTRIBUTE_PROPERTY_NAME, CUSTOM_NAME); - assertThat(createExtractor().getAttributeName()).isEqualTo(CUSTOM_NAME); - System.clearProperty(DefaultUserAffinitiesValueExtractor.USER_AFFINITIES_ATTRIBUTE_PROPERTY_NAME); - } -} \ 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-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/DefaultUserSkillsValueExtractorTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/DefaultUserSkillsValueExtractorTest.java deleted file mode 100644 index 1c761b85b2..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/DefaultUserSkillsValueExtractorTest.java +++ /dev/null @@ -1,74 +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.planning.data; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import org.junit.Test; -import org.junit.runners.Parameterized; -import org.kie.server.services.taskassigning.core.model.DefaultLabels; -import org.kie.server.services.taskassigning.user.system.api.User; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.kie.server.services.taskassigning.planning.data.DefaultUserSkillsValueExtractor.USER_SKILLS_ATTRIBUTE; - -public class DefaultUserSkillsValueExtractorTest extends AbstractStringListValueAttributeMapValueExtractorTest, User, DefaultUserSkillsValueExtractor> { - - @Override - protected DefaultUserSkillsValueExtractor createExtractor() { - return new DefaultUserSkillsValueExtractor(); - } - - @Override - protected Class getExpectedType() { - return User.class; - } - - @Override - protected int getExpectedPriority() { - return 1; - } - - @Override - protected String getExpectedLabelName() { - return DefaultLabels.SKILLS.name(); - } - - @Override - protected String getExpectedAttributeName() { - return USER_SKILLS_ATTRIBUTE; - } - - @Parameterized.Parameters - public static Collection data() { - List data = new ArrayList<>(); - data.add(new Object[]{mockUser(USER_SKILLS_ATTRIBUTE, String.format("%s", VALUE1)), mockSet(VALUE1)}); - data.add(new Object[]{mockUser(USER_SKILLS_ATTRIBUTE, String.format(" %s , ,%s", VALUE1, VALUE2)), mockSet(VALUE2, VALUE1)}); - data.add(new Object[]{mockUser(USER_SKILLS_ATTRIBUTE, null), mockSet()}); - return data; - } - - @Test - public void getFromPropertyAttributeName() { - System.setProperty(DefaultUserSkillsValueExtractor.USER_SKILLS_ATTRIBUTE_PROPERTY_NAME, CUSTOM_NAME); - assertThat(createExtractor().getAttributeName()).isEqualTo(CUSTOM_NAME); - System.clearProperty(DefaultUserSkillsValueExtractor.USER_SKILLS_ATTRIBUTE_PROPERTY_NAME); - } -} \ 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-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/LabelValueExtractorRegistryTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/LabelValueExtractorRegistryTest.java deleted file mode 100644 index 8ec7d1ccf0..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/LabelValueExtractorRegistryTest.java +++ /dev/null @@ -1,117 +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.planning.data; - -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.function.BiConsumer; - -import org.junit.Test; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.api.model.taskassigning.data.LabelValueExtractor; -import org.kie.server.services.taskassigning.core.model.DefaultLabels; -import org.kie.server.services.taskassigning.user.system.api.User; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class LabelValueExtractorRegistryTest { - - private static final String SOME_VALUE = "SOME_VALUE"; - private static final String SKILLS_ATTRIBUTE = "skills"; - private static final String AFFINITIES_ATTRIBUTE = "affinities"; - - @Test - public void getInstance() { - assertThat(LabelValueExtractorRegistry.getInstance()).isNotNull(); - } - - @Test - public void defaultExtractorsAreLoaded() { - LabelValueExtractorRegistry registry = LabelValueExtractorRegistry.getInstance(); - assertLabelExtractorsLoaded(TaskData.class, registry, DefaultLabels.AFFINITIES.name(), DefaultTaskDataAffinitiesValueExtractor.class); - assertLabelExtractorsLoaded(TaskData.class, registry, DefaultLabels.SKILLS.name(), DefaultTaskDataSkillsValueExtractor.class); - assertLabelExtractorsLoaded(TaskData.class, registry, TestTaskDataLabelValueExtractor.TEST_LABEL, TestTaskDataLabelValueExtractorOverride.class); - assertLabelExtractorsLoaded(User.class, registry, DefaultLabels.AFFINITIES.name(), DefaultUserAffinitiesValueExtractor.class); - assertLabelExtractorsLoaded(User.class, registry, DefaultLabels.SKILLS.name(), DefaultUserSkillsValueExtractor.class); - } - - @Test - public void getLabelValueExtractorsForUser() { - getLabelValueExtractors(User.class, 2); - } - - @Test - public void getLabelValueExtractorsForTaskData() { - getLabelValueExtractors(TaskData.class, 3); - } - - private void getLabelValueExtractors(Class sourceType, int expectedCount) { - Optional>> valueExtractors = LabelValueExtractorRegistry.getInstance().getLabelValueExtractors(sourceType); - assertThat(valueExtractors.isPresent()).isTrue(); - valueExtractors.ifPresent(v -> assertThat(v.size()).isEqualTo(expectedCount)); - } - - @Test - public void applyUserLabelValueExtractors() { - User user = mock(User.class); - Map attributes = new HashMap<>(); - attributes.put(SKILLS_ATTRIBUTE, SOME_VALUE); - attributes.put(AFFINITIES_ATTRIBUTE, null); - when(user.getAttributes()).thenReturn(attributes); - Map> result = new HashMap<>(); - BiConsumer> consumer = result::put; - LabelValueExtractorRegistry.getInstance().applyLabelValueExtractors(User.class, user, consumer); - assertThat(result.get(DefaultLabels.SKILLS.name())).isEqualTo(new HashSet<>(Collections.singleton(SOME_VALUE))); - assertThat(result.get(DefaultLabels.AFFINITIES.name())).isEqualTo(Collections.EMPTY_SET); - } - - @Test - public void applyTaskDataLabelValueExtractors() { - Map inputData = new HashMap<>(); - inputData.put(SKILLS_ATTRIBUTE, null); - inputData.put(AFFINITIES_ATTRIBUTE, SOME_VALUE); - inputData.put(TestTaskDataLabelValueExtractor.TEST_LABEL, SOME_VALUE); - TaskData taskData = TaskData.builder().inputData(inputData).build(); - Map> result = new HashMap<>(); - BiConsumer> consumer = result::put; - LabelValueExtractorRegistry.getInstance().applyLabelValueExtractors(TaskData.class, taskData, consumer); - assertThat(result.get(DefaultLabels.SKILLS.name())).isEqualTo(Collections.EMPTY_SET); - assertThat(result.get(DefaultLabels.AFFINITIES.name())).isEqualTo(new HashSet<>(Collections.singleton(SOME_VALUE))); - assertThat(result.get(TestTaskDataLabelValueExtractor.TEST_LABEL)).isEqualTo(new HashSet<>(Collections.singleton(TestTaskDataLabelValueExtractorOverride.EXAMPLE_LABEL_VALUE2))); - } - - private void assertLabelExtractorsLoaded(Class sourceType, - LabelValueExtractorRegistry registry, - String labelName, - Class extractorType) { - Optional>> extractors = registry.getLabelValueExtractors(sourceType); - assertThat(extractors.isPresent()).isTrue(); - if (extractors.isPresent()) { - assertThat(extractors.get().size()) - .isGreaterThan(0); - assertThat(extractors.get().stream().anyMatch(extractor -> labelName.equals(extractor.getLabelName()) && - extractorType.equals(extractor.getClass()))) - .isTrue(); - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/TestTaskDataLabelValueExtractor.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/TestTaskDataLabelValueExtractor.java deleted file mode 100644 index 74ae21c925..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/TestTaskDataLabelValueExtractor.java +++ /dev/null @@ -1,41 +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.planning.data; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import org.kie.server.api.model.taskassigning.TaskData; - -/** - * Example value extractor for the LabelValueExtractorRegistryTest. - */ -public class TestTaskDataLabelValueExtractor extends AbstractLabelValueExtractor { - - public static final String TEST_LABEL = "TEST_LABEL"; - public static final String EXAMPLE_LABEL_VALUE1 = "EXAMPLE_LABEL_VALUE1"; - - public TestTaskDataLabelValueExtractor() { - super(TaskData.class, TEST_LABEL, 1); - } - - @Override - public Set extract(TaskData source) { - return new HashSet<>(Collections.singleton(EXAMPLE_LABEL_VALUE1)); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/TestTaskDataLabelValueExtractorOverride.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/TestTaskDataLabelValueExtractorOverride.java deleted file mode 100644 index 166a736fbe..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/data/TestTaskDataLabelValueExtractorOverride.java +++ /dev/null @@ -1,41 +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.planning.data; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import org.kie.server.api.model.taskassigning.TaskData; - -/** - * Example value extractor for the LabelValueExtractorRegistryTest. - */ -public class TestTaskDataLabelValueExtractorOverride extends AbstractLabelValueExtractor { - - public static final String EXAMPLE_LABEL_VALUE2 = "EXAMPLE_LABEL_VALUE2"; - - public TestTaskDataLabelValueExtractorOverride() { - // give priority 2 to this extractor and override the TestTaskDataLabelValueExtractor by intention. - super(TaskData.class, TestTaskDataLabelValueExtractor.TEST_LABEL, 2); - } - - @Override - public Set extract(TaskData source) { - return new HashSet<>(Collections.singleton(EXAMPLE_LABEL_VALUE2)); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/test/model/AbstractUserSystemService.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/test/model/AbstractUserSystemService.java deleted file mode 100644 index 1ec4c1902d..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/test/model/AbstractUserSystemService.java +++ /dev/null @@ -1,59 +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.planning.test.model; - -import java.util.List; - -import org.kie.server.services.taskassigning.user.system.api.User; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; - -/** - * Base test class for the UserSystemServiceLoaderTest - */ -public abstract class AbstractUserSystemService implements UserSystemService { - - protected String name; - - public AbstractUserSystemService(String name) { - this.name = name; - } - - @Override - public void start() { - - } - - @Override - public void test() throws Exception { - - } - - @Override - public String getName() { - return name; - } - - @Override - public List findAllUsers() { - return null; - } - - @Override - public User findUser(String id) { - return null; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/test/model/UserSystemService1.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/test/model/UserSystemService1.java deleted file mode 100644 index 74a3a60df2..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/test/model/UserSystemService1.java +++ /dev/null @@ -1,29 +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.planning.test.model; - -/** - * Test class for the UserSystemServiceLoaderTest - */ -public class UserSystemService1 extends AbstractUserSystemService { - - public static final String NAME = "UserSystemService1"; - - public UserSystemService1() { - super(NAME); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/test/model/UserSystemService2.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/test/model/UserSystemService2.java deleted file mode 100644 index 276f35cd17..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/test/model/UserSystemService2.java +++ /dev/null @@ -1,29 +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.planning.test.model; - -/** - * Test class for the UserSystemServiceLoaderTest - */ -public class UserSystemService2 extends AbstractUserSystemService { - - public static final String NAME = "UserSystemService2"; - - public UserSystemService2() { - super(NAME); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/IndexedElementTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/IndexedElementTest.java deleted file mode 100644 index 07c356c152..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/IndexedElementTest.java +++ /dev/null @@ -1,56 +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.planning.util; - -import java.util.ArrayList; -import java.util.List; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class IndexedElementTest { - - @Test - public void addInOrder() { - String element1 = "1"; - String element2 = "2"; - String element3 = "3"; - String element4 = "4"; - String element5 = "5"; - String element6 = "6"; - String element7 = "7"; - - List> elements = new ArrayList<>(); - - IndexedElement.addInOrder(elements, new IndexedElement<>(element1, 4, true)); - IndexedElement.addInOrder(elements, new IndexedElement<>(element2, 1, true)); - IndexedElement.addInOrder(elements, new IndexedElement<>(element3, -1, true)); - IndexedElement.addInOrder(elements, new IndexedElement<>(element4, 2, false)); - IndexedElement.addInOrder(elements, new IndexedElement<>(element5, 3, true)); - IndexedElement.addInOrder(elements, new IndexedElement<>(element6, -1, false)); - IndexedElement.addInOrder(elements, new IndexedElement<>(element7, 1, false)); - - assertEquals(element2, elements.get(0).getElement()); - assertEquals(element5, elements.get(1).getElement()); - assertEquals(element1, elements.get(2).getElement()); - assertEquals(element3, elements.get(3).getElement()); - assertEquals(element7, elements.get(4).getElement()); - assertEquals(element4, elements.get(5).getElement()); - assertEquals(element6, elements.get(6).getElement()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/KeyStoreUtil.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/KeyStoreUtil.java deleted file mode 100644 index 9449c541f5..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/KeyStoreUtil.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.kie.server.services.taskassigning.planning.util; - -import java.io.FileOutputStream; -import java.security.KeyStore; - -import javax.crypto.SecretKey; -import javax.crypto.SecretKeyFactory; -import javax.crypto.spec.PBEKeySpec; - -public class KeyStoreUtil { - - private KeyStoreUtil() { - } - - /** - * Helper method for facilitating the generation of the KeyStore with the values used by this tests. - * @param keyStoreLocation the keystore location. - * @param entryAlias the alias for the keystore entry to generate. - * @param entryAliasPassword the password for protecting the entry defined by the alias. - * @param valueToCipherAndStore the value to cipher and store in the alias name entryAlias. - * @param keyStorePassword the password for protecting the keystore. - * @throws Exception exceptions are thrown if any cryptographic error is produced or the keystore can't be created, etc. - */ - public static void makeNewKeystoreEntry(String keyStoreLocation, - String entryAlias, - String entryAliasPassword, - String valueToCipherAndStore, - String keyStorePassword) throws Exception { - - KeyStore ks = KeyStore.getInstance("JCEKS"); - ks.load(null, keyStorePassword.toCharArray()); - - SecretKeyFactory factoryBPE = SecretKeyFactory.getInstance("PBEWithMD5AndDES"); - SecretKey generatedSecret = - factoryBPE.generateSecret(new PBEKeySpec( - valueToCipherAndStore.toCharArray())); - - KeyStore.PasswordProtection entryPasswordProtection = new KeyStore.PasswordProtection(entryAliasPassword.toCharArray()); - - KeyStore.SecretKeyEntry secret = new KeyStore.SecretKeyEntry(generatedSecret); - ks.setEntry(entryAlias, secret, entryPasswordProtection); - - FileOutputStream fos = new java.io.FileOutputStream(keyStoreLocation); - ks.store(fos, keyStorePassword.toCharArray()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/PropertyUtilTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/PropertyUtilTest.java deleted file mode 100644 index 764ef53d5e..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/PropertyUtilTest.java +++ /dev/null @@ -1,74 +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.planning.util; - -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class PropertyUtilTest { - - private static final String TEST_PROPERTY = "TEST_PROPERTY"; - private static final Integer VALUE = 1234; - private static final Integer DEFAULT_VALUE = 5678; - - @Before - public void setUp() { - System.clearProperty(TEST_PROPERTY); - } - - @Test - public void readySystemPropertyWithValueSetAndParser() { - System.setProperty(TEST_PROPERTY, VALUE.toString()); - Integer result = PropertyUtil.readSystemProperty(TEST_PROPERTY, DEFAULT_VALUE, Integer::parseInt); - assertEquals(VALUE, result, 0); - - result = PropertyUtil.readSystemProperty(TEST_PROPERTY, null, Integer::parseInt); - assertEquals(VALUE, result, 0); - } - - @Test - public void readySystemPropertyWithNoValueButDefaultSet() { - Integer result = PropertyUtil.readSystemProperty(TEST_PROPERTY, DEFAULT_VALUE, Integer::parseInt); - assertEquals(DEFAULT_VALUE, result, 0); - - result = PropertyUtil.readSystemProperty(TEST_PROPERTY, DEFAULT_VALUE, Integer::parseInt); - assertEquals(DEFAULT_VALUE, result, 0); - } - - @Test - public void readySystemPropertyWithValueSetButParsingError() { - System.setProperty(TEST_PROPERTY, "VALUE"); - Integer result = PropertyUtil.readSystemProperty(TEST_PROPERTY, DEFAULT_VALUE, Integer::parseInt); - assertEquals(DEFAULT_VALUE, result, 0); - - result = PropertyUtil.readSystemProperty(TEST_PROPERTY, null, Integer::parseInt); - assertNull(result); - } - - @Test - public void readySystemPropertyWithNoParser() { - Integer result = PropertyUtil.readSystemProperty(TEST_PROPERTY, DEFAULT_VALUE, null); - assertEquals(DEFAULT_VALUE, result, 0); - - System.setProperty(TEST_PROPERTY, VALUE.toString()); - result = PropertyUtil.readSystemProperty(TEST_PROPERTY, null, null); - assertNull(result); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/TaskUtilTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/TaskUtilTest.java deleted file mode 100644 index 67a654f5f8..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/TaskUtilTest.java +++ /dev/null @@ -1,112 +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.planning.util; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.junit.Test; -import org.kie.server.api.model.taskassigning.OrganizationalEntity; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.api.model.taskassigning.UserType; -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.User; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.kie.server.services.taskassigning.core.model.DefaultLabels.AFFINITIES; -import static org.kie.server.services.taskassigning.core.model.DefaultLabels.SKILLS; - -public class TaskUtilTest { - - private static final String SKILLS_ATTRIBUTE = "skills"; - private static final String AFFINITIES_ATTRIBUTE = "affinities"; - private static final long TASK_ID = 0L; - private static final long PROCESS_INSTANCE_ID = 1L; - private static final String PROCESS_ID = "PROCESS_ID"; - private static final String CONTAINER_ID = "CONTAINER_ID"; - private static final String NAME = "NAME"; - private static final int PRIORITY = 2; - private static final String STATUS = "Ready"; - private static final Map INPUT_DATA = new HashMap<>(); - private static final OrganizationalEntity OE_1 = OrganizationalEntity.builder().type(UserType.USER).name("OE1").build(); - private static final OrganizationalEntity OE_2 = OrganizationalEntity.builder().type(UserType.GROUP).name("OE2").build(); - private static final String SKILL1 = "skill1"; - private static final String SKILL2 = "skill2"; - private static final String SKILL3 = "skill3"; - private static final String AFFINITY1 = "affinity1"; - private static final String AFFINITY2 = "affinity2"; - - @Test - public void fromTaskData() { - fromTaskData(INPUT_DATA, Collections.emptySet(), Collections.emptySet()); - } - - @Test - public void fromTaskDataWithSkillsAndAffinities() { - Map inputData = new HashMap<>(); - inputData.put(SKILLS_ATTRIBUTE, String.format("%s, %s,%s", SKILL2, SKILL1, SKILL3)); - inputData.put(AFFINITIES_ATTRIBUTE, String.format(" %s, %s", AFFINITY2, AFFINITY1)); - fromTaskData(inputData, new HashSet<>(Arrays.asList(SKILL3, SKILL2, SKILL1)), new HashSet<>(Arrays.asList(AFFINITY1, AFFINITY2))); - } - - private void fromTaskData(Map inputData, Set expectedSkills, Set expectedAffinities) { - Set potentialOwners = new HashSet<>(); - potentialOwners.add(OE_1); - potentialOwners.add(OE_2); - - TaskData taskData = TaskData.builder() - .taskId(TASK_ID) - .processInstanceId(PROCESS_INSTANCE_ID) - .processId(PROCESS_ID) - .containerId(CONTAINER_ID) - .name(NAME) - .priority(PRIORITY) - .status(STATUS) - .inputData(inputData) - .potentialOwners(potentialOwners) - .build(); - - Task task = TaskUtil.fromTaskData(taskData); - assertEquals(TASK_ID, task.getId(), 0); - assertEquals(PROCESS_INSTANCE_ID, task.getProcessInstanceId(), 0); - assertEquals(PROCESS_ID, task.getProcessId()); - assertEquals(CONTAINER_ID, task.getContainerId()); - assertEquals(NAME, task.getName()); - assertEquals(PRIORITY, task.getPriority(), 0); - assertEquals(STATUS, task.getStatus()); - assertEquals(inputData, task.getInputData()); - assertEquals(potentialOwners.size(), task.getPotentialOwners().size(), 2); - User user = task.getPotentialOwners().stream() - .filter(u -> OE_1.getName().equals(u.getEntityId()) && u.isUser()) - .map(u -> (User) u) - .findFirst().orElse(null); - assertNotNull(user); - Group group = task.getPotentialOwners().stream() - .filter(g -> OE_2.getName().equals(g.getEntityId()) && !g.isUser()) - .map(g -> (Group) g) - .findFirst().orElse(null); - assertNotNull(group); - assertEquals(expectedSkills, task.getLabelValues(SKILLS.name())); - assertEquals(expectedAffinities, task.getLabelValues(AFFINITIES.name())); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/UserUtilTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/UserUtilTest.java deleted file mode 100644 index 9fc1cd52a6..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/java/org/kie/server/services/taskassigning/planning/util/UserUtilTest.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.planning.util; - -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import org.junit.Test; -import org.kie.server.services.taskassigning.core.model.User; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.kie.server.services.taskassigning.core.model.DefaultLabels.AFFINITIES; -import static org.kie.server.services.taskassigning.core.model.DefaultLabels.SKILLS; -import static org.kie.server.services.taskassigning.planning.TestUtil.assertContains; -import static org.kie.server.services.taskassigning.planning.TestUtil.mockExternalGroup; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class UserUtilTest { - - private static final String SKILLS_ATTRIBUTE = "skills"; - private static final String AFFINITIES_ATTRIBUTE = "affinities"; - private static final String ANOTHER__ATTRIBUTE = "ANOTHER__ATTRIBUTE"; - 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 String USER_ID_4 = "USER_ID_4"; - private static final String GROUP1_ID = "GROUP1_ID"; - private static final String GROUP2_ID = "GROUP2_ID"; - private static final String GROUP3_ID = "GROUP3_ID"; - private static final String SKILL1 = "skill1"; - private static final String SKILL2 = "skill2"; - private static final String SKILL3 = "skill3"; - private static final String AFFINITY1 = "affinity1"; - private static final String AFFINITY2 = "affinity2"; - - @Test - public void fromExternalUser() { - Map attributes = new HashMap<>(); - attributes.put(SKILLS_ATTRIBUTE, String.format("%s, %s,%s", SKILL2, SKILL1, SKILL3)); - attributes.put(AFFINITIES_ATTRIBUTE, String.format(" %s, %s", AFFINITY2, AFFINITY1)); - attributes.put(ANOTHER__ATTRIBUTE, "someValue"); - - org.kie.server.services.taskassigning.user.system.api.User externalUser = mockUser(USER_ID_1, attributes); - - org.kie.server.services.taskassigning.user.system.api.Group externalGroup1 = mockExternalGroup(GROUP1_ID); - org.kie.server.services.taskassigning.user.system.api.Group externalGroup2 = mockExternalGroup(GROUP2_ID); - org.kie.server.services.taskassigning.user.system.api.Group externalGroup3 = mockExternalGroup(GROUP3_ID); - Set externalGroups = new HashSet<>(); - externalGroups.add(externalGroup1); - externalGroups.add(externalGroup2); - externalGroups.add(externalGroup3); - when(externalUser.getGroups()).thenReturn(externalGroups); - - User user = UserUtil.fromExternalUser(externalUser); - assertEquals(USER_ID_1.hashCode(), user.getId(), 0); - assertEquals(USER_ID_1, user.getEntityId()); - assertTrue(user.isEnabled()); - assertEquals(user.getGroups().size(), externalGroups.size()); - assertContains(GROUP1_ID, user.getGroups()); - assertContains(GROUP2_ID, user.getGroups()); - assertContains(GROUP3_ID, user.getGroups()); - assertEquals(new HashSet<>(Arrays.asList(SKILL3, SKILL2, SKILL1)), user.getLabelValues(SKILLS.name())); - assertEquals(new HashSet<>(Arrays.asList(AFFINITY1, AFFINITY2)), user.getLabelValues(AFFINITIES.name())); - assertEquals(attributes, user.getAttributes()); - } - - @Test - public void isUser() { - assertTrue(UserUtil.isUser("User")); - assertFalse(UserUtil.isUser("NotAUser")); - } - - @Test - public void filterDuplicates() { - Collection externalUsers = Arrays.asList(mockUser(USER_ID_1), - mockUser(USER_ID_2), - null, - mockUser(USER_ID_1), - mockUser(USER_ID_4), - null, - mockUser(USER_ID_3), - mockUser(USER_ID_3)); - List result = UserUtil.filterDuplicates(externalUsers).collect(Collectors.toList()); - assertEquals(4, result.size()); - assertEquals(USER_ID_1, result.get(0).getId()); - assertEquals(USER_ID_2, result.get(1).getId()); - assertEquals(USER_ID_4, result.get(2).getId()); - assertEquals(USER_ID_3, result.get(3).getId()); - } - - @Test - public void filterDuplicatesWhenNull() { - assertTrue(UserUtil.filterDuplicates(null).collect(Collectors.toList()).isEmpty()); - } - - private static org.kie.server.services.taskassigning.user.system.api.User mockUser(String userId) { - return mockUser(userId, null); - } - - private static org.kie.server.services.taskassigning.user.system.api.User mockUser(String userId, Map attributes) { - org.kie.server.services.taskassigning.user.system.api.User externalUser = - mock(org.kie.server.services.taskassigning.user.system.api.User.class); - when(externalUser.getId()).thenReturn(userId); - when(externalUser.getAttributes()).thenReturn(attributes); - return externalUser; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/META-INF/kmodule.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/META-INF/kmodule.xml deleted file mode 100644 index ad2f892258..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/META-INF/kmodule.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - \ 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-planning/src/test/resources/META-INF/services/org.kie.server.api.model.taskassigning.data.LabelValueExtractor b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/META-INF/services/org.kie.server.api.model.taskassigning.data.LabelValueExtractor deleted file mode 100644 index 468947e9d3..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/META-INF/services/org.kie.server.api.model.taskassigning.data.LabelValueExtractor +++ /dev/null @@ -1,2 +0,0 @@ -org.kie.server.services.taskassigning.planning.data.TestTaskDataLabelValueExtractor -org.kie.server.services.taskassigning.planning.data.TestTaskDataLabelValueExtractorOverride diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/META-INF/services/org.kie.server.services.taskassigning.user.system.api.UserSystemService b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/META-INF/services/org.kie.server.services.taskassigning.user.system.api.UserSystemService deleted file mode 100644 index d5207cab11..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/META-INF/services/org.kie.server.services.taskassigning.user.system.api.UserSystemService +++ /dev/null @@ -1,2 +0,0 @@ -org.kie.server.services.taskassigning.planning.test.model.UserSystemService1 -org.kie.server.services.taskassigning.planning.test.model.UserSystemService2 diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/org/kie/server/services/taskassigning/planning/test/model/SolverBuilderTestContainerConfig.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/org/kie/server/services/taskassigning/planning/test/model/SolverBuilderTestContainerConfig.xml deleted file mode 100755 index f82a8d0b9d..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/org/kie/server/services/taskassigning/planning/test/model/SolverBuilderTestContainerConfig.xml +++ /dev/null @@ -1,21 +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 - - - testKSession - - - diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/org/kie/server/services/taskassigning/planning/test/model/SolverBuilderTestRules.drl b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/org/kie/server/services/taskassigning/planning/test/model/SolverBuilderTestRules.drl deleted file mode 100644 index 78c7255ea2..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/org/kie/server/services/taskassigning/planning/test/model/SolverBuilderTestRules.drl +++ /dev/null @@ -1,15 +0,0 @@ -// Test file with the only purpose of creating a solver for the SolverBuilderTest.java. Don't modify this file unless -// you made the proper adjustments in the corresponding test if any. -// note: this file is not intended for creating a solver to work with. - -package org.kie.server.services.taskassigning.planning.test.model; -dialect "java" - -import org.optaplanner.core.api.score.buildin.bendable.BendableScoreHolder; - -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 - -global BendableScoreHolder scoreHolder; diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/org/kie/server/services/taskassigning/planning/test/model/SolverBuilderTestSimpleConfig.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/org/kie/server/services/taskassigning/planning/test/model/SolverBuilderTestSimpleConfig.xml deleted file mode 100755 index 737c622049..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/org/kie/server/services/taskassigning/planning/test/model/SolverBuilderTestSimpleConfig.xml +++ /dev/null @@ -1,21 +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/planning/test/model/SolverBuilderTestRules.drl - - - diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/taskAssigningKeystore.jceks b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/taskAssigningKeystore.jceks deleted file mode 100644 index a51140b73e..0000000000 Binary files a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/taskAssigningKeystore.jceks and /dev/null differ diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/taskAssigningKeystoreIBM.jceks b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/taskAssigningKeystoreIBM.jceks deleted file mode 100644 index 0b8e15e64f..0000000000 Binary files a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-planning/src/test/resources/taskAssigningKeystoreIBM.jceks and /dev/null differ diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/.gitignore b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/.gitignore deleted file mode 100644 index 91a87d3ed0..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-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-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/pom.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/pom.xml deleted file mode 100644 index 3c9dba4b7c..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - 4.0.0 - - - org.kie.server - kie-server-services-task-assigning - 7.75.0-SNAPSHOT - - - kie-server-services-task-assigning-runtime - - KIE :: Execution Server :: Services :: Task Assigning :: Runtime - KIE Execution Server Services Task Assigning Runtime - - - - org.kie.soup - kie-soup-dataset-api - - - org.kie - kie-api - - - org.jbpm - jbpm-kie-services - - - org.kie.server - kie-server-services-common - - - org.kie.server - kie-server-services-jbpm - - - org.kie.server - kie-server-api - - - org.apache.commons - commons-lang3 - - - - - org.assertj - assertj-core - test - - - - diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeKieServerExtension.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeKieServerExtension.java deleted file mode 100644 index 9058ddbe3e..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeKieServerExtension.java +++ /dev/null @@ -1,241 +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.runtime; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.ServiceLoader; - -import org.apache.commons.io.IOUtils; -import org.jbpm.kie.services.impl.query.SqlQueryDefinition; -import org.jbpm.services.api.UserTaskService; -import org.jbpm.services.api.query.QueryService; -import org.kie.server.api.exception.KieServicesException; -import org.kie.server.api.marshalling.Marshaller; -import org.kie.server.api.marshalling.MarshallerFactory; -import org.kie.server.api.marshalling.MarshallingFormat; -import org.kie.server.api.model.Message; -import org.kie.server.api.model.Severity; -import org.kie.server.api.model.definition.QueryDefinition; -import org.kie.server.api.model.taskassigning.LocalDateTimeValue; -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.impl.KieServerImpl; -import org.kie.server.services.jbpm.JbpmKieServerExtension; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.kie.server.api.KieServerConstants.KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED; -import static org.kie.server.api.model.taskassigning.QueryParamName.TO_TASK_ID; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtensionMessages.HEALTH_CHECK_ERROR; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtensionMessages.HEALTH_CHECK_IS_ALIVE_MESSAGE; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtensionMessages.MISSING_REQUIRED_JBPM_EXTENSION_ERROR; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtensionMessages.QUERIES_INITIALIZATION_ERROR; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtensionMessages.QUERIES_RESOURCE_NOT_FOUND; - -public class TaskAssigningRuntimeKieServerExtension implements KieServerExtension { - - private static final Logger LOGGER = LoggerFactory.getLogger(TaskAssigningRuntimeKieServerExtension.class); - - public static final String EXTENSION_NAME = "TaskAssigningRuntime"; - - static final String CAPABILITY_TASK_ASSIGNING_RUNTIME = "TaskAssigningRuntime"; - - static final int EXTENSION_START_ORDER = 1000; - - static final String TASK_ASSIGNING_QUERY_DEFINITIONS_RESOURCE = "/task-assigning-query-definitions.json"; - - private KieServerRegistry registry; - private TaskAssigningRuntimeServiceBase taskAssigningRuntimeServiceBase; - private QueryService queryService = null; - - private List services = new ArrayList<>(); - private boolean initialized = false; - - @Override - public boolean isInitialized() { - return initialized; - } - - @Override - public boolean isActive() { - return Boolean.FALSE.toString().equals(System.getProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED, Boolean.TRUE.toString())); - } - - @Override - public void init(KieServerImpl kieServer, KieServerRegistry registry) { - this.registry = registry; - //JAXB and JSON required. - registry.getExtraClasses().add(LocalDateTimeValue.class); - - KieServerExtension jbpmExtension = registry.getServerExtension(JbpmKieServerExtension.EXTENSION_NAME); - if (jbpmExtension == null) { - throw new KieServicesException(MISSING_REQUIRED_JBPM_EXTENSION_ERROR); - } - - configureServices(kieServer, registry); - services.add(taskAssigningRuntimeServiceBase); - - try { - registerQueries(); - } catch (Exception e) { - throw new KieServicesException(String.format(QUERIES_INITIALIZATION_ERROR, e.getMessage()), e); - } - initialized = true; - } - - private void configureServices(KieServerImpl kieServer, KieServerRegistry registry) { - KieServerExtension jbpmExtension = registry.getServerExtension(JbpmKieServerExtension.EXTENSION_NAME); - List jbpmServices = jbpmExtension.getServices(); - UserTaskService userTaskService = null; - - for (Object object : jbpmServices) { - // in case given service is null (meaning was not configured) continue with next one - if (object != null) { - if (UserTaskService.class.isAssignableFrom(object.getClass())) { - userTaskService = (UserTaskService) object; - } else if (QueryService.class.isAssignableFrom(object.getClass())) { - queryService = (QueryService) object; - } - } - } - taskAssigningRuntimeServiceBase = new TaskAssigningRuntimeServiceBase(kieServer, registry, userTaskService, queryService); - } - - @Override - public void destroy(KieServerImpl kieServer, KieServerRegistry registry) { - // no-op are required for this extension. - } - - @Override - public void createContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { - // no-op are required for this extension. - } - - @Override - public void updateContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { - // no-op are required for this extension. - } - - @Override - public boolean isUpdateContainerAllowed(String id, KieContainerInstance kieContainerInstance, Map parameters) { - return true; - } - - @Override - public void disposeContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { - // no-op are required for this extension. - } - - @Override - public List getAppComponents(SupportedTransports type) { - ServiceLoader appComponentsServices - = ServiceLoader.load(KieServerApplicationComponentsService.class); - List appComponentsList = new ArrayList<>(); - Object[] componentServices = {taskAssigningRuntimeServiceBase, registry}; - for (KieServerApplicationComponentsService appComponentsService : appComponentsServices) { - appComponentsList.addAll(appComponentsService.getAppComponents(EXTENSION_NAME, type, componentServices)); - } - return appComponentsList; - } - - @Override - public T getAppComponents(Class serviceType) { - if (serviceType.isAssignableFrom(taskAssigningRuntimeServiceBase.getClass())) { - return (T) taskAssigningRuntimeServiceBase; - } - return null; - } - - @Override - public String getImplementedCapability() { - return CAPABILITY_TASK_ASSIGNING_RUNTIME; - } - - @Override - public List getServices() { - return services; - } - - @Override - public String getExtensionName() { - return EXTENSION_NAME; - } - - @Override - public Integer getStartOrder() { - return EXTENSION_START_ORDER; - } - - @Override - public String toString() { - return EXTENSION_NAME + " KIE Server extension"; - } - - @Override - public List healthCheck(boolean report) { - List messages = KieServerExtension.super.healthCheck(report); - try { - // execute dummy check query to ensure the base service was instantiated well and queries are working. - Map params = new HashMap<>(); - params.put(TO_TASK_ID, -1L); - taskAssigningRuntimeServiceBase.executeFindTasksQuery(params); - if (report) { - messages.add(new Message(Severity.INFO, HEALTH_CHECK_IS_ALIVE_MESSAGE)); - } - } catch (Exception e) { - messages.add(new Message(Severity.ERROR, String.format(HEALTH_CHECK_ERROR, e.getMessage()))); - } - return messages; - } - - private void registerQueries() throws IOException { - try (InputStream stream = this.getClass().getResourceAsStream(TASK_ASSIGNING_QUERY_DEFINITIONS_RESOURCE)) { - if (stream == null) { - throw new FileNotFoundException(QUERIES_RESOURCE_NOT_FOUND); - } - final Marshaller marshaller = MarshallerFactory.getMarshaller(MarshallingFormat.JSON, - getClass().getClassLoader()); - final String queriesString = IOUtils.toString(stream, StandardCharsets.UTF_8); - final QueryDefinition[] queries = marshaller.unmarshall(queriesString, QueryDefinition[].class); - - if (queries == null || queries.length == 0) { - LOGGER.info("No queries were found"); - return; - } - registerQueries(queries); - } - } - - private void registerQueries(QueryDefinition[] queries) { - for (QueryDefinition query : queries) { - SqlQueryDefinition sqlQuery = new SqlQueryDefinition(query.getName(), query.getSource()); - sqlQuery.setTarget(org.jbpm.services.api.query.model.QueryDefinition.Target.valueOf(query.getTarget())); - sqlQuery.setExpression(query.getExpression()); - queryService.replaceQuery(sqlQuery); - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeKieServerExtensionMessages.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeKieServerExtensionMessages.java deleted file mode 100644 index 0a04a8ba82..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeKieServerExtensionMessages.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.taskassigning.runtime; - -import org.kie.server.services.jbpm.JbpmKieServerExtension; - -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtension.EXTENSION_NAME; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtension.TASK_ASSIGNING_QUERY_DEFINITIONS_RESOURCE; - -public class TaskAssigningRuntimeKieServerExtensionMessages { - - private TaskAssigningRuntimeKieServerExtensionMessages() { - } - - static final String MISSING_REQUIRED_JBPM_EXTENSION_ERROR = JbpmKieServerExtension.EXTENSION_NAME + " extension is required for the task assigning api to work."; - - static final String QUERIES_INITIALIZATION_ERROR = "An error was produced during extension queries initialization, error: %s"; - - static final String QUERIES_RESOURCE_NOT_FOUND = "Extension queries resource was not found: " + TASK_ASSIGNING_QUERY_DEFINITIONS_RESOURCE; - - static final String HEALTH_CHECK_ERROR = EXTENSION_NAME + " failed due to: %s"; - - static final String HEALTH_CHECK_IS_ALIVE_MESSAGE = EXTENSION_NAME + " is alive"; -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeServiceBase.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeServiceBase.java deleted file mode 100644 index 6db385c09e..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeServiceBase.java +++ /dev/null @@ -1,301 +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.runtime; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -import org.apache.commons.lang3.time.StopWatch; -import org.jbpm.services.api.UserTaskService; -import org.jbpm.services.api.query.QueryService; -import org.jbpm.services.task.commands.CompositeCommand; -import org.jbpm.services.task.commands.TaskCommand; -import org.kie.api.runtime.Context; -import org.kie.api.task.model.Status; -import org.kie.server.api.exception.KieServicesException; -import org.kie.server.api.model.KieContainerStatus; -import org.kie.server.api.model.taskassigning.PlanningExecutionResult; -import org.kie.server.api.model.taskassigning.PlanningItem; -import org.kie.server.api.model.taskassigning.PlanningItemList; -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.services.api.KieServerRegistry; -import org.kie.server.services.impl.KieContainerInstanceImpl; -import org.kie.server.services.impl.KieServerImpl; -import org.kie.server.services.taskassigning.runtime.command.DelegateAndSaveCommand; -import org.kie.server.services.taskassigning.runtime.command.DeletePlanningItemCommand; -import org.kie.server.services.taskassigning.runtime.command.PlanningCommand; -import org.kie.server.services.taskassigning.runtime.command.PlanningException; -import org.kie.server.services.taskassigning.runtime.command.SavePlanningItemCommand; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.apache.commons.lang3.StringUtils.isNotEmpty; -import static org.kie.api.task.model.Status.InProgress; -import static org.kie.api.task.model.Status.Ready; -import static org.kie.api.task.model.Status.Reserved; -import static org.kie.api.task.model.Status.Suspended; -import static org.kie.server.api.model.taskassigning.util.StatusConverter.convertFromString; -import static org.kie.server.api.model.taskassigning.util.StatusConverter.convertToStringList; - -public class TaskAssigningRuntimeServiceBase { - - private static final Logger LOGGER = LoggerFactory.getLogger(TaskAssigningRuntimeServiceBase.class); - - private static final int INTERNAL_QUERY_PAGE_SIZE = 3000; - - static final String TASK_MODIFIED_ERROR_MSG = "Task: %s was modified by an external action since the last executed plan"; - - static final String TASK_MODIFIED_ERROR_MSG_1 = TASK_MODIFIED_ERROR_MSG + " actualOwner is %s but the last assignedUser is %s"; - - static final String TASK_MODIFIED_ERROR_MSG_2 = TASK_MODIFIED_ERROR_MSG + " actualOwner is %s but the expected is %s"; - - static final String TASK_MODIFIED_ERROR_MSG_3 = TASK_MODIFIED_ERROR_MSG + " and is no longer in one of the expected status %s"; - - static final String UNEXPECTED_ERROR_DURING_PLAN_CALCULATION = "An unexpected error was produced during plan calculation: %s"; - - static final String UNEXPECTED_ERROR_DURING_PLAN_EXECUTION = "An unexpected error was produced during plan execution on containerId: %s, message: %s"; - - static final String SERVER_NOT_READY_ERROR = "Current server is not ready to serve requests"; - - private KieServerImpl kieServer; - private KieServerRegistry registry; - private UserTaskService userTaskService; - private TaskAssigningRuntimeServiceQueryHelper queryHelper; - - public TaskAssigningRuntimeServiceBase(KieServerImpl kieServer, KieServerRegistry registry, UserTaskService userTaskService, QueryService queryService) { - this.kieServer = kieServer; - this.registry = registry; - this.userTaskService = userTaskService; - this.queryHelper = createQueryHelper(registry, userTaskService, queryService); - } - - public List executeFindTasksQuery(Map params) { - checkServerStatus(); - return queryHelper.executeFindTasksQuery(params); - } - - public PlanningExecutionResult executePlanning(PlanningItemList planningItemList, String userId) { - StopWatch stopWatch = new StopWatch(); - stopWatch.start(); - checkServerStatus(); - Map> commandsByContainer; - try { - commandsByContainer = calculatePlanningCommands(planningItemList, userId); - } catch (PlanningException e) { - LOGGER.debug("An error was produced during plan calculation, containerId: {}, error code: {}, message: {}", - e.getContainerId(), e.getCode(), e.getMessage()); - return PlanningExecutionResult.builder() - .error(e.getCode()) - .errorMessage(e.getMessage()) - .containerId(e.getContainerId()) - .build(); - } catch (Exception e) { - final String msg = String.format(UNEXPECTED_ERROR_DURING_PLAN_CALCULATION, e.getMessage()); - LOGGER.error(msg, e); - return PlanningExecutionResult.builder() - .error(PlanningExecutionResult.ErrorCode.UNEXPECTED_ERROR) - .errorMessage(msg) - .build(); - } - stopWatch.stop(); - LOGGER.debug("Time to calculate the planning commands: {}", stopWatch); - - stopWatch.reset(); - stopWatch.start(); - for (Map.Entry> entry : commandsByContainer.entrySet()) { - try { - executeContainerCommands(entry.getKey(), entry.getValue()); - } catch (PlanningException e) { - LOGGER.debug("An error was produced during plan execution on containerId: {}, error code: {}, message: {}", - entry.getKey(), e.getCode(), e.getMessage()); - return PlanningExecutionResult.builder() - .error(e.getCode()) - .errorMessage(e.getMessage()) - .containerId(e.getContainerId()) - .build(); - } catch (Exception e) { - final String msg = String.format(UNEXPECTED_ERROR_DURING_PLAN_EXECUTION, entry.getKey(), e.getMessage()); - LOGGER.error(msg, e); - return PlanningExecutionResult.builder() - .error(PlanningExecutionResult.ErrorCode.UNEXPECTED_ERROR) - .errorMessage(msg) - .containerId(entry.getKey()) - .build(); - } - } - stopWatch.stop(); - LOGGER.debug("Time for executing the planning with planning items: {} -> {}", planningItemList.getItems().size(), stopWatch); - return PlanningExecutionResult.builder().build(); - } - - private Map> calculatePlanningCommands(PlanningItemList planningItemList, String userId) { - final Map> commandsByContainer = new HashMap<>(); - final Map taskDataById = prepareTaskDataForExecutePlanning(); - for (PlanningItem planningItem : planningItemList.getItems()) { - final TaskData taskData = taskDataById.remove(planningItem.getTaskId()); - if (taskData == null) { - // Un-common case, task is no longer in one of the managed status. It was probably assigned, started, - // and completed in middle. - // Proposal A) rollbacks this change since the solution is being updated at this moment - // and a new plan will arrive soon. - throw new PlanningException(String.format(TASK_MODIFIED_ERROR_MSG_3, - planningItem.getPlanningTask().getTaskId(), - Arrays.toString(new Status[]{Ready, Reserved, InProgress, Suspended})), - planningItem.getContainerId(), - PlanningExecutionResult.ErrorCode.TASK_MODIFIED_SINCE_PLAN_CALCULATION_ERROR); - } - - final String actualOwner = taskData.getActualOwner(); - final PlanningTask actualPlanningTask = taskData.getPlanningTask(); - final Status taskStatus = convertFromString(taskData.getStatus()); - - if (isNotEmpty(actualOwner) && - actualPlanningTask != null && - actualOwner.equals(actualPlanningTask.getAssignedUser()) && - actualPlanningTask.equals(planningItem.getPlanningTask())) { - continue; - } - - switch (taskStatus) { - case Ready: - addCommand(commandsByContainer, planningItem.getContainerId(), new DelegateAndSaveCommand(planningItem, userId)); - break; - - case Reserved: - if (actualPlanningTask != null && !actualOwner.equals(actualPlanningTask.getAssignedUser()) && !actualOwner.equals(planningItem.getPlanningTask().getAssignedUser())) { - // the task was manually reassigned from the task list "in the middle" and we are not updating to - // current user, so it's not the last update that is coming. - // Proposal A) rollbacks this change since the solution is being updated at this moment - // and a new plan will arrive soon. - throw new PlanningException(String.format(TASK_MODIFIED_ERROR_MSG_1, - planningItem.getPlanningTask().getTaskId(), - actualOwner, - actualPlanningTask.getAssignedUser()), - planningItem.getContainerId(), - PlanningExecutionResult.ErrorCode.TASK_MODIFIED_SINCE_PLAN_CALCULATION_ERROR); - } else { - addCommand(commandsByContainer, planningItem.getContainerId(), new DelegateAndSaveCommand(planningItem, userId)); - } - break; - - case InProgress: - case Suspended: - if (actualOwner == null || !actualOwner.equals(planningItem.getPlanningTask().getAssignedUser())) { - // task changed in "in the middle" and we are not updating to current user, so it's not the last - // update that is coming. - // Proposal A) rollbacks this change since the solution is being updated at this moment - // and a new plan will arrive soon. - throw new PlanningException(String.format(TASK_MODIFIED_ERROR_MSG_2, - planningItem.getPlanningTask().getTaskId(), - actualOwner, - planningItem.getPlanningTask().getAssignedUser()), - planningItem.getContainerId(), - PlanningExecutionResult.ErrorCode.TASK_MODIFIED_SINCE_PLAN_CALCULATION_ERROR); - } else { - // task might have been created, assigned and started/suspended completely out of the task - // or the planning data might have changed. Just update the planning data. - addCommand(commandsByContainer, planningItem.getContainerId(), new SavePlanningItemCommand(planningItem)); - } - break; - default: - // sonar required, no more cases are expected for this switch by construction. - throw new IndexOutOfBoundsException("Value: " + taskData.getStatus() + " is out of range in current switch"); - } - } - for (TaskData taskData : taskDataById.values()) { - final Status status = convertFromString(taskData.getStatus()); - if ((status == Ready || status == Reserved || status == Suspended) && taskData.getPlanningTask() != null) { - commandsByContainer.computeIfAbsent(taskData.getContainerId(), k -> new ArrayList<>()).add(new DeletePlanningItemCommand(taskData.getTaskId())); - } - } - return commandsByContainer; - } - - TaskAssigningRuntimeServiceQueryHelper createQueryHelper(KieServerRegistry registry, UserTaskService userTaskService, QueryService queryService) { - return new TaskAssigningRuntimeServiceQueryHelper(registry, userTaskService, queryService); - } - - private Map prepareTaskDataForExecutePlanning() { - //optimized reading, only taskId, taskStatus, actualOwner, deploymentId, and the PlanningTask is needed. - List result = queryHelper.readTasksDataSummary(0, - convertToStringList(Ready, Reserved, InProgress, Suspended), - INTERNAL_QUERY_PAGE_SIZE); - return result.stream().collect(Collectors.toMap(TaskData::getTaskId, Function.identity())); - } - - private void executeContainerCommands(String containerId, List commands) { - LOGGER.debug("Executing planning commands for container: {}", containerId); - List delegations = new ArrayList<>(); - List saves = new ArrayList<>(); - List deletes = new ArrayList<>(); - validateContainer(containerId); - for (PlanningCommand command : commands) { - if (command instanceof DelegateAndSaveCommand) { - delegations.add((DelegateAndSaveCommand) command); - } else if (command instanceof SavePlanningItemCommand) { - saves.add((SavePlanningItemCommand) command); - } else if (command instanceof DeletePlanningItemCommand) { - deletes.add((DeletePlanningItemCommand) command); - } - } - - bulkDelegate(containerId, delegations); - List onlyDBCommands = new ArrayList<>(saves); - onlyDBCommands.addAll(deletes); - if (!onlyDBCommands.isEmpty()) { - CompositeCommand onlyDBCommand = new CompositeCommand<>(new TaskCommand() { - @Override - public TaskCommand execute(Context context) { - return null; - } - }, onlyDBCommands.toArray(new TaskCommand[0])); - userTaskService.execute(containerId, onlyDBCommand); - } - LOGGER.debug("Planning commands execution for container: {} finished successfully", containerId); - } - - private void validateContainer(String containerId) { - KieContainerInstanceImpl container = registry.getContainer(containerId); - if (container == null || (container.getStatus() != KieContainerStatus.STARTED && container.getStatus() != KieContainerStatus.DEACTIVATED)) { - throw new KieServicesException("Container " + containerId + " is not available to serve requests"); - } - } - - private void bulkDelegate(String containerId, List delegations) { - LOGGER.debug("Executing bulk delegation for container: {}", containerId); - for (DelegateAndSaveCommand command : delegations) { - userTaskService.execute(containerId, command); - } - LOGGER.debug("Bulk delegation for container: {} finished successfully", containerId); - } - - private void addCommand(Map> commandsByContainer, String containerId, PlanningCommand command) { - commandsByContainer.computeIfAbsent(containerId, k -> new ArrayList<>()).add(command); - } - - private void checkServerStatus() { - if (!kieServer.isKieServerReady()) { - throw new KieServicesException(SERVER_NOT_READY_ERROR); - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeServiceQueryHelper.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeServiceQueryHelper.java deleted file mode 100644 index 0a004cb3d5..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeServiceQueryHelper.java +++ /dev/null @@ -1,198 +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.runtime; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import org.jbpm.services.api.UserTaskService; -import org.jbpm.services.api.query.QueryMapperRegistry; -import org.jbpm.services.api.query.QueryResultMapper; -import org.jbpm.services.api.query.QueryService; -import org.jbpm.services.api.query.model.QueryParam; -import org.kie.api.runtime.query.QueryContext; -import org.kie.api.task.model.Status; -import org.kie.server.api.exception.KieServicesException; -import org.kie.server.api.model.KieContainerStatus; -import org.kie.server.api.model.taskassigning.LocalDateTimeValue; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.api.model.taskassigning.TaskInputVariablesReadMode; -import org.kie.server.api.model.taskassigning.util.StatusConverter; -import org.kie.server.services.api.KieServerRegistry; -import org.kie.server.services.impl.KieContainerInstanceImpl; -import org.kie.server.services.taskassigning.runtime.query.AbstractTaskAssigningQueryMapper; -import org.kie.server.services.taskassigning.runtime.query.TaskAssigningTaskDataWithPotentialOwnersQueryMapper; -import org.kie.server.services.taskassigning.runtime.query.TaskAssigningTaskDataSummaryQueryMapper; - -import static org.apache.commons.lang3.ClassUtils.isPrimitiveWrapper; -import static org.kie.api.task.model.Status.Created; -import static org.kie.api.task.model.Status.InProgress; -import static org.kie.api.task.model.Status.Ready; -import static org.kie.api.task.model.Status.Reserved; -import static org.kie.api.task.model.Status.Suspended; -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.QueryParamName.TO_TASK_ID; - -public class TaskAssigningRuntimeServiceQueryHelper { - - private static final String TASK_ASSIGNING_TASKS_WITH_POTENTIAL_OWNERS_AND_PLANNING_TASK = "task-assigning-tasks-with-potential-owners-and-planning-task"; - - private static final String TASK_ASSIGNING_TASKS_WITH_PLANNING_TASK_OPTIMIZED = "task-assigning-tasks-with-planning-task-optimized"; - - private KieServerRegistry registry; - private UserTaskService userTaskService; - private QueryService queryService; - - public TaskAssigningRuntimeServiceQueryHelper(KieServerRegistry registry, UserTaskService userTaskService, QueryService queryService) { - this.registry = registry; - this.userTaskService = userTaskService; - this.queryService = queryService; - } - - public List executeFindTasksQuery(Map params) { - List queryParams = buildQueryParams(params); - Integer page = params.containsKey(PAGE) ? (Integer) params.get(PAGE) : 0; - Integer pageSize = params.containsKey(PAGE_SIZE) ? (Integer) params.get(PAGE_SIZE) : 10; - String loadVariablesMode = (String) params.get(TASK_INPUT_VARIABLES_MODE); - QueryContext queryContext = new QueryContext(page * pageSize, pageSize, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_ID.columnName(), true); - - AbstractTaskAssigningQueryMapper resultMapper = (AbstractTaskAssigningQueryMapper) QueryMapperRegistry.get() - .mapperFor(TaskAssigningTaskDataWithPotentialOwnersQueryMapper.NAME, null); - - List result = executeQuery(queryService, TASK_ASSIGNING_TASKS_WITH_POTENTIAL_OWNERS_AND_PLANNING_TASK, - resultMapper, queryContext, queryParams.toArray(new QueryParam[0])); - - Optional> loadInputVariables = Optional.empty(); - if (TaskInputVariablesReadMode.READ_FOR_ALL.name().equals(loadVariablesMode)) { - loadInputVariables = Optional.of(taskData -> true); - } else if (TaskInputVariablesReadMode.READ_FOR_ACTIVE_TASKS_WITH_NO_PLANNING_ENTITY.name().equals(loadVariablesMode)) { - final Predicate isActive = taskData -> { - if (taskData.getPlanningTask() != null) { - return false; - } - Status taskStatus = StatusConverter.convertFromString(taskData.getStatus()); - return taskStatus == Created || taskStatus == Ready || taskStatus == Reserved || taskStatus == InProgress || taskStatus == Suspended; - }; - loadInputVariables = Optional.of(isActive); - } - - loadInputVariables.ifPresent(taskDataPredicate -> result.stream() - .filter(taskDataPredicate) - .forEach(taskData -> taskData.setInputData(readTaskVariables(taskData)))); - return result; - } - - public List readTasksDataSummary(long fromTaskId, List status, int pageSize) { - boolean finished = false; - List result = new ArrayList<>(); - List partialResult; - long taskId = fromTaskId; - while (!finished) { - partialResult = executeOptimizedFindTasksDataSummaryQuery(taskId, status, 0, pageSize); - if (partialResult.isEmpty()) { - finished = true; - } else { - taskId = partialResult.get(partialResult.size() - 1).getTaskId() + 1; - result.addAll(partialResult); - } - } - return result; - } - - private List executeOptimizedFindTasksDataSummaryQuery(Long fromTaskId, List status, int page, int pageSize) { - QueryContext queryContext = new QueryContext(page * pageSize, pageSize, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_ID.columnName(), true); - Map params = new HashMap<>(); - params.put(FROM_TASK_ID, fromTaskId); - params.put(STATUS, status); - List queryParams = buildQueryParams(params); - AbstractTaskAssigningQueryMapper resultMapper = (AbstractTaskAssigningQueryMapper) QueryMapperRegistry.get() - .mapperFor(TaskAssigningTaskDataSummaryQueryMapper.NAME, null); - - return executeQuery(queryService, TASK_ASSIGNING_TASKS_WITH_PLANNING_TASK_OPTIMIZED, resultMapper, queryContext, queryParams.toArray(new QueryParam[0])); - } - - private Map readTaskVariables(TaskData taskData) { - KieContainerInstanceImpl container = registry.getContainer(taskData.getContainerId()); - if (container == null || (container.getStatus() != KieContainerStatus.STARTED && container.getStatus() != KieContainerStatus.DEACTIVATED)) { - throw new KieServicesException("Container " + taskData.getContainerId() + " is not available to serve requests"); - } - Map variables = userTaskService.getTaskInputContentByTaskId(taskData.getContainerId(), taskData.getTaskId()); - variables = variables == null ? new HashMap<>() : variables; - return variables.entrySet().stream() - .filter(entry -> isSimpleTypeValue(entry.getValue())) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - } - - private static boolean isSimpleTypeValue(Object value) { - if (value == null) { - return false; - } - return isPrimitiveWrapper(value.getClass()) || value instanceof Date || value instanceof String; - } - - // helper method for facilitating testing and avoiding ellipsis parameters capturing. - T executeQuery(QueryService queryService, - String queryName, QueryResultMapper resultMapper, QueryContext queryContext, QueryParam[] params) { - return queryService.query(queryName, resultMapper, queryContext, params); - } - - List buildQueryParams(Map params) { - List queryParams = new ArrayList<>(); - if (params.get(FROM_TASK_ID) instanceof Number) { - Long fromTaskId = ((Number) params.get(FROM_TASK_ID)).longValue(); - queryParams.add(QueryParam.greaterOrEqualTo(AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_ID.columnName(), fromTaskId)); - } - - if (params.get(TO_TASK_ID) instanceof Number) { - Long toTaskId = ((Number) params.get(TO_TASK_ID)).longValue(); - queryParams.add(QueryParam.lowerOrEqualTo(AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_ID.columnName(), toTaskId)); - } - - if (params.containsKey(FROM_LAST_MODIFICATION_DATE)) { - LocalDateTime fromLastModificationDate; - if (params.get(FROM_LAST_MODIFICATION_DATE) instanceof LocalDateTimeValue) { - fromLastModificationDate = ((LocalDateTimeValue) params.get(FROM_LAST_MODIFICATION_DATE)).getValue(); - } else { - fromLastModificationDate = (LocalDateTime) params.get(FROM_LAST_MODIFICATION_DATE); - } - if (fromLastModificationDate != null) { - Date lastModificationDateValue = Date.from(fromLastModificationDate.atZone(ZoneId.systemDefault()).toInstant()); - queryParams.add(QueryParam.greaterOrEqualTo(AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.LAST_MODIFICATION_DATE.columnName(), lastModificationDateValue)); - } - } - - List status = (List) params.get(STATUS); - if (status != null && !status.isEmpty()) { - queryParams.add(QueryParam.equalsTo(AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.STATUS.columnName(), status.toArray(new String[0]))); - } - - return queryParams; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/DelegateAndSaveCommand.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/DelegateAndSaveCommand.java deleted file mode 100644 index 7757adbe72..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/DelegateAndSaveCommand.java +++ /dev/null @@ -1,104 +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.runtime.command; - -import java.util.Arrays; - -import org.jbpm.services.task.commands.DelegateTaskCommand; -import org.kie.api.runtime.Context; -import org.kie.api.task.model.OrganizationalEntity; -import org.kie.api.task.model.Status; -import org.kie.api.task.model.Task; -import org.kie.api.task.model.User; -import org.kie.server.api.model.taskassigning.PlanningExecutionResult; -import org.kie.server.api.model.taskassigning.PlanningItem; - -import static org.kie.api.task.model.Status.Ready; -import static org.kie.api.task.model.Status.Reserved; - -/** - * Helper class intended to be used by the TaskAssigningRuntimeServiceBase and planning execution. - */ -public class DelegateAndSaveCommand extends PlanningCommand { - - static final String TASK_MODIFIED_ERROR_MSG = "Task: %s was modified by an external action since the last executed plan," + - " current status is %s but the expected should be in %s"; - - static final String TASK_MODIFIED_ERROR_MSG_1 = "Task: %s was not found, it might have been deleted by an external action since the last executed plan." + - " Most likely as part of the tasks cleanup procedure at the process completion."; - - public DelegateAndSaveCommand(PlanningItem planningItem, String userId) { - super(planningItem); - this.userId = userId; - } - - @Override - public Void execute(Context context) { - super.execute(context); - final Task task = taskContext.getPersistenceContext().findTask(planningItem.getTaskId()); - if (task == null) { - throw new PlanningException(String.format(TASK_MODIFIED_ERROR_MSG_1, - planningItem.getTaskId()), - planningItem.getContainerId(), - PlanningExecutionResult.ErrorCode.TASK_MODIFIED_SINCE_PLAN_CALCULATION_ERROR); - } - final org.kie.api.task.model.TaskData taskData = task.getTaskData(); - final Status status = taskData.getStatus(); - if (!(Ready == status || Reserved == status)) { - throw new PlanningException(String.format(TASK_MODIFIED_ERROR_MSG, - planningItem.getTaskId(), - status, - Arrays.toString(new Status[]{Ready, Reserved})), - planningItem.getContainerId(), - PlanningExecutionResult.ErrorCode.TASK_MODIFIED_SINCE_PLAN_CALCULATION_ERROR); - } - - // the by default jBPM task delegation adds the delegated user as a potential owner of the task, but this is - // something we don't from the task assigning perspective. So by now we ensure that the tasks assigning - // api doesn't add it. - // If provided, the bulk delegation should skipp this automatic adding. (https://issues.redhat.com/browse/JBPM-8924) - final OrganizationalEntity existingPotentialOwner = findPotentialOwner(task, planningItem.getPlanningTask().getAssignedUser()); - - // perform the delegation - DelegateTaskCommand delegateTaskCommand = createDelegateCommand(planningItem.getTaskId(), getUserId(), planningItem.getPlanningTask().getAssignedUser()); - delegateTaskCommand.execute(context); - - if (existingPotentialOwner == null) { - // we remove it. - OrganizationalEntity addedPotentialOwner = findPotentialOwner(task, planningItem.getPlanningTask().getAssignedUser()); - if (addedPotentialOwner != null) { - task.getPeopleAssignments().getPotentialOwners().remove(addedPotentialOwner); - } - } - - saveOrUpdatePlanningTask(planningItem); - return null; - } - - DelegateTaskCommand createDelegateCommand(long taskId, String userId, String targetEntityId) { - return new DelegateTaskCommand(taskId, userId, targetEntityId); - } - - private static OrganizationalEntity findPotentialOwner(Task task, String potentialOwnerId) { - if (task.getPeopleAssignments() != null && task.getPeopleAssignments().getPotentialOwners() != null) { - return task.getPeopleAssignments().getPotentialOwners().stream() - .filter(organizationalEntity -> organizationalEntity.getId().equals(potentialOwnerId) && organizationalEntity instanceof User) - .findFirst().orElse(null); - } - return null; - } -} \ 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-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/DeletePlanningItemCommand.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/DeletePlanningItemCommand.java deleted file mode 100644 index 1a873474f4..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/DeletePlanningItemCommand.java +++ /dev/null @@ -1,47 +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.runtime.command; - -import org.kie.api.runtime.Context; -import org.kie.server.services.taskassigning.runtime.persistence.PlanningTaskImpl; - -/** - * Helper class intended to be used by the TaskAssigningRuntimeServiceBase and planning execution. - */ -public class DeletePlanningItemCommand extends PlanningCommand { - - private long itemId; - - public DeletePlanningItemCommand(long itemId) { - super(null); - this.itemId = itemId; - } - - public long getItemId() { - return itemId; - } - - @Override - public Object execute(Context context) { - super.execute(context); - PlanningTaskImpl instance = persistenceContext.find(PlanningTaskImpl.class, getItemId()); - if (instance != null) { - persistenceContext.remove(instance); - } - return null; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/PlanningCommand.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/PlanningCommand.java deleted file mode 100644 index 399e07c7e3..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/PlanningCommand.java +++ /dev/null @@ -1,69 +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.runtime.command; - -import java.util.Date; - -import org.jbpm.services.task.commands.TaskCommand; -import org.jbpm.services.task.commands.TaskContext; -import org.kie.api.runtime.Context; -import org.kie.internal.task.api.TaskPersistenceContext; -import org.kie.server.api.model.taskassigning.PlanningItem; -import org.kie.server.services.taskassigning.runtime.persistence.PlanningTaskImpl; - -/** - * Helper class intended to be used by the TaskAssigningRuntimeServiceBase and planning execution. - */ -public abstract class PlanningCommand extends TaskCommand { - - protected PlanningItem planningItem; - protected TaskContext taskContext; - protected TaskPersistenceContext persistenceContext; - - public PlanningCommand(PlanningItem planningItem) { - this.planningItem = planningItem; - } - - @Override - public Object execute(Context context) { - taskContext = (TaskContext) context; - persistenceContext = taskContext.getPersistenceContext(); - return null; - } - - public PlanningItem getPlanningItem() { - return planningItem; - } - - protected void saveOrUpdatePlanningTask(PlanningItem planningItem) { - PlanningTaskImpl planningTask = persistenceContext.find(PlanningTaskImpl.class, planningItem.getTaskId()); - if (planningTask != null) { - planningTask.setAssignedUser(planningItem.getPlanningTask().getAssignedUser()); - planningTask.setIndex(planningItem.getPlanningTask().getIndex()); - planningTask.setPublished(planningItem.getPlanningTask().isPublished()); - planningTask.setLastModificationDate(new Date()); - persistenceContext.merge(planningTask); - } else { - planningTask = new PlanningTaskImpl(planningItem.getTaskId(), - planningItem.getPlanningTask().getAssignedUser(), - planningItem.getPlanningTask().getIndex(), - planningItem.getPlanningTask().isPublished(), - new Date()); - persistenceContext.persist(planningTask); - } - } -} \ 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-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/PlanningException.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/PlanningException.java deleted file mode 100644 index f50b66b6d2..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/PlanningException.java +++ /dev/null @@ -1,42 +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.runtime.command; - -import org.kie.server.api.model.taskassigning.PlanningExecutionResult; - -/** - * Helper class intended to be used by the TaskAssigningRuntimeServiceBase and planning execution. - */ -public class PlanningException extends RuntimeException { - - private final String containerId; - private final PlanningExecutionResult.ErrorCode code; - - public PlanningException(String message, String containerId, PlanningExecutionResult.ErrorCode code) { - super(message); - this.containerId = containerId; - this.code = code; - } - - public PlanningExecutionResult.ErrorCode getCode() { - return code; - } - - public String getContainerId() { - return containerId; - } -} \ 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-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/SavePlanningItemCommand.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/SavePlanningItemCommand.java deleted file mode 100644 index 81e21e3718..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/command/SavePlanningItemCommand.java +++ /dev/null @@ -1,37 +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.runtime.command; - -import org.kie.api.runtime.Context; -import org.kie.server.api.model.taskassigning.PlanningItem; - -/** - * Helper class intended to be used by the TaskAssigningRuntimeServiceBase and planning execution. - */ -public class SavePlanningItemCommand extends PlanningCommand { - - public SavePlanningItemCommand(PlanningItem planningItem) { - super(planningItem); - } - - @Override - public Object execute(Context context) { - super.execute(context); - saveOrUpdatePlanningTask(planningItem); - return null; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/persistence/PlanningTaskImpl.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/persistence/PlanningTaskImpl.java deleted file mode 100644 index 82c5b5ce3c..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/persistence/PlanningTaskImpl.java +++ /dev/null @@ -1,105 +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.runtime.persistence; - -import java.util.Date; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.Version; - -@Entity -@Table(name = "PlanningTask") -public class PlanningTaskImpl { - - @Id - @Column(name = "taskId") - private long taskId; - @Version - @Column(name = "OPTLOCK") - private Integer version; - private String assignedUser; - @Column(name = "taskIndex") - private int index; - private short published = 0; - @Temporal(javax.persistence.TemporalType.TIMESTAMP) - private java.util.Date lastModificationDate; - - - public PlanningTaskImpl() { - //hibernate required constructor - } - - public PlanningTaskImpl(long taskId, String assignedUser, int index, boolean published, Date lastModificationDate) { - this.taskId = taskId; - this.assignedUser = assignedUser; - this.index = index; - this.lastModificationDate = lastModificationDate; - setPublished(published); - } - - public long getTaskId() { - return taskId; - } - - public void setTaskId(long taskId) { - this.taskId = taskId; - } - - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } - - public String getAssignedUser() { - return assignedUser; - } - - public void setAssignedUser(String assignedUser) { - this.assignedUser = assignedUser; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } - - public boolean isPublished() { - return published == 1; - } - - public void setPublished(boolean published) { - this.published = (short) (published ? 1 : 0); - } - - public Date getLastModificationDate() { - return lastModificationDate; - } - - public void setLastModificationDate(Date lastModificationDate) { - this.lastModificationDate = lastModificationDate; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/persistence/TaskAssigningPersistenceUnitExtensionsLoader.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/persistence/TaskAssigningPersistenceUnitExtensionsLoader.java deleted file mode 100644 index 732d9a70d7..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/persistence/TaskAssigningPersistenceUnitExtensionsLoader.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.runtime.persistence; - -import java.net.URL; - -import javax.persistence.spi.PersistenceUnitInfo; - -import org.kie.server.services.jbpm.jpa.PersistenceUnitExtensionsLoader; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.kie.server.api.KieServerConstants.KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED; - -public class TaskAssigningPersistenceUnitExtensionsLoader implements PersistenceUnitExtensionsLoader { - - private static final Logger LOGGER = LoggerFactory.getLogger(TaskAssigningPersistenceUnitExtensionsLoader.class); - - public TaskAssigningPersistenceUnitExtensionsLoader() { - // SPI constructor - } - - @Override - public boolean isEnabled() { - return "false".equals(System.getProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED)); - } - - @Override - public void loadExtensions(PersistenceUnitInfo info) { - LOGGER.debug("Adding the task assigning entities to the current jBPM persistent unit info."); - final String classResource = "/" + PlanningTaskImpl.class.getName().replaceAll("[.]", "/") + ".class"; - final URL classURL = this.getClass().getResource(classResource); - if (classURL != null) { - info.getManagedClassNames().add(PlanningTaskImpl.class.getName()); - final String classJarLocation = classURL.toExternalForm().split("!")[0].replace(classResource, ""); - try { - info.getJarFileUrls().add(new URL(classJarLocation)); - } catch (Exception e) { - // in case setting URL to jar file location only fails, fallback to complete URL - info.getJarFileUrls().add(classURL); - } - LOGGER.debug("Task assigning entities where successfully added."); - } else { - LOGGER.error("Unexpected error, it was not possible to get resource for: {}", classResource); - } - } -} - diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/AbstractTaskAssigningQueryMapper.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/AbstractTaskAssigningQueryMapper.java deleted file mode 100644 index ff92e947bb..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/AbstractTaskAssigningQueryMapper.java +++ /dev/null @@ -1,209 +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.runtime.query; - -import java.time.DateTimeException; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import org.dashbuilder.dataset.DataSet; -import org.jbpm.kie.services.impl.query.mapper.AbstractQueryMapper; -import org.jbpm.services.api.query.QueryResultMapper; - -import static org.apache.commons.lang3.StringUtils.defaultIfEmpty; -import static org.apache.commons.lang3.StringUtils.isNotEmpty; - -public abstract class AbstractTaskAssigningQueryMapper extends AbstractQueryMapper implements QueryResultMapper> { - - /** - * Represents the columns returned by the "jbpm-task-assigning-human-task-with-user", - * "task-assigning-tasks-with-potential-owners-and-planning-task" and task-assigning-tasks-with-planning-task-optimized" - * queries. - * This enum must be kept in sync with any change on this queries. - */ - public enum TASK_QUERY_COLUMN { - /** - * A Long value with the taskId. Is never null. - */ - TASK_ID("TASKID"), - - /** - * A time stamp without time zone with the task creation date/time. Is never null. - */ - CREATED_ON("CREATEDON"), - - /** - * String with the task actual owner id. Can be null. - */ - ACTUAL_OWNER("ACTUALOWNER"), - - /** - * A String with the deploymentId (containerId) to where the task belong. Is never null. - */ - DEPLOYMENT_ID("DEPLOYMENTID"), - - /** - * A String with the task name. Is never null. - */ - TASK_NAME("NAME"), - - /** - * An Integer with the task priority. Is never null. - */ - PRIORITY("PRIORITY"), - - /** - * A String with the process identifier. Is never null. - */ - PROCESS_ID("PROCESSID"), - - /** - * A Long value with the process instance id. Is never null. - */ - PROCESS_INSTANCE_ID("PROCESSINSTANCEID"), - - /** - * A String value with the task status. Is never null. - */ - STATUS("STATUS"), - - /** - * A time stamp without time zone with the task last modification date. Is never null. - */ - LAST_MODIFICATION_DATE("LASTMODIFICATIONDATE"), - - PLANNING_TASK_TASK_ID("PTTASKID"), - - PLANNING_TASK_ASSIGNED_USER("ASSIGNEDUSER"), - - PLANNING_TASK_INDEX("TASKINDEX"), - - PLANNING_TASK_PUBLISHED("PUBLISHED"), - - /** - * A String with a potential owner identifier for the task. (a task can have many potential owners). Can be null. - */ - POTENTIAL_OWNER_ID("POTENTIALOWNER"), - - /** - * A String with the values "User" or "Group" indicating the type of the potential owner. - * (a task can have many potential owners) - * If POTENTIAL_OWNER_ID != null => POTENTIAL_OWNER_TYPE != null. - * If POTENTIAL_OWNER_ID == null => POTENTIAL_OWNER_TYPE == null. - */ - POTENTIAL_OWNER_TYPE("POTENTIALOWNERTYPE"); - - private String columnName; - - TASK_QUERY_COLUMN(String columnName) { - this.columnName = columnName; - } - - public String columnName() { - return columnName; - } - } - - /** - * Default access to get instance of the mapper - */ - protected abstract T createInstance(); - - protected abstract boolean readPotentialOwners(); - - @Override - protected T buildInstance(DataSet dataSetResult, int index) { - T row = createInstance(); - final Long taskId = getColumnLongValue(dataSetResult, TASK_QUERY_COLUMN.TASK_ID.columnName(), index); - final Date createdOn = getColumnDateValue(dataSetResult, TASK_QUERY_COLUMN.CREATED_ON.columnName(), index); - final Long processInstanceId = getColumnLongValue(dataSetResult, TASK_QUERY_COLUMN.PROCESS_INSTANCE_ID.columnName(), index); - final String processId = getColumnStringValue(dataSetResult, TASK_QUERY_COLUMN.PROCESS_ID.columnName(), index); - final String deploymentId = getColumnStringValue(dataSetResult, TASK_QUERY_COLUMN.DEPLOYMENT_ID.columnName(), index); - final String status = getColumnStringValue(dataSetResult, TASK_QUERY_COLUMN.STATUS.columnName(), index); - final Integer priority = getColumnIntValue(dataSetResult, TASK_QUERY_COLUMN.PRIORITY.columnName(), index); - final String taskName = getColumnStringValue(dataSetResult, TASK_QUERY_COLUMN.TASK_NAME.columnName(), index); - final Date lastModificationDate = getColumnDateValue(dataSetResult, TASK_QUERY_COLUMN.LAST_MODIFICATION_DATE.columnName(), index); - final String actualOwner = defaultIfEmpty(getColumnStringValue(dataSetResult, TASK_QUERY_COLUMN.ACTUAL_OWNER.columnName(), index), null); - - final Long ptTaskId = getColumnLongValue(dataSetResult, TASK_QUERY_COLUMN.PLANNING_TASK_TASK_ID.columnName(), index); - String assignedUser = null; - Integer taskIndex = null; - Integer published = null; - if (ptTaskId != null) { - assignedUser = defaultIfEmpty(getColumnStringValue(dataSetResult, TASK_QUERY_COLUMN.PLANNING_TASK_ASSIGNED_USER.columnName(), index), null); - taskIndex = getColumnIntValue(dataSetResult, TASK_QUERY_COLUMN.PLANNING_TASK_INDEX.columnName(), index); - published = getColumnIntValue(dataSetResult, TASK_QUERY_COLUMN.PLANNING_TASK_PUBLISHED.columnName(), index); - } - - setInstanceValues(row, taskId, createdOn, processInstanceId, processId, deploymentId, status, priority, - taskName, lastModificationDate, actualOwner, assignedUser, taskIndex, published); - return row; - } - - protected abstract void setInstanceValues(T row, Long taskId, Date createdOn, Long processInstanceId, String processId, - String deploymentId, String status, Integer priority, String taskName, - Date lastModificationDate, String actualOwner, - String assignedUser, Integer taskIndex, Integer published); - - @Override - public List map(Object result) { - DataSet dataSetResult = (DataSet) result; - final List mappedResult = new ArrayList<>(); - - long taskId; - long previousTaskId = -1; - String potentialOwnerId; - String potentialOwnerType; - T taskRow = null; - - for (int i = 0; i < dataSetResult.getRowCount(); i++) { - taskId = getColumnLongValue(dataSetResult, TASK_QUERY_COLUMN.TASK_ID.columnName(), i); - if (previousTaskId != taskId) { - previousTaskId = taskId; - taskRow = buildInstance(dataSetResult, i); - mappedResult.add(taskRow); - } - - if (readPotentialOwners()) { - potentialOwnerId = getColumnStringValue(dataSetResult, TASK_QUERY_COLUMN.POTENTIAL_OWNER_ID.columnName(), i); - if (isNotEmpty(potentialOwnerId)) { - potentialOwnerType = getColumnStringValue(dataSetResult, TASK_QUERY_COLUMN.POTENTIAL_OWNER_TYPE.columnName(), i); - addPotentialOwner(taskRow, potentialOwnerId, potentialOwnerType); - } - } - } - return mappedResult; - } - - protected abstract void addPotentialOwner(T taskRow, String potentialOwnerId, String potentialOwnerType); - - protected static LocalDateTime toLocalDateTime(Object value) { - if (value == null) { - return null; - } - if (value instanceof Date) { - return LocalDateTime.ofInstant(((Date) value).toInstant(), ZoneId.systemDefault()); - } - if (value instanceof LocalDateTime) { - return (LocalDateTime) value; - } - throw new DateTimeException(String.format("Unexpected type %s for toLocalDateTime conversion.", value.getClass())); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataQueryMapper.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataQueryMapper.java deleted file mode 100644 index e5e0f62002..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataQueryMapper.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.taskassigning.runtime.query; - -import org.kie.server.api.model.taskassigning.TaskAssigningQueries; - -public class TaskAssigningTaskDataQueryMapper extends TaskAssigningTaskDataWithPotentialOwnersQueryMapper { - - public static final String NAME = TaskAssigningQueries.TASK_DATA_QUERY_MAPPER; - - public TaskAssigningTaskDataQueryMapper() { - // Dedicated for ServiceLoader to create instance, use get() method instead - } - - /** - * Default access to get instance of the mapper - */ - public static TaskAssigningTaskDataQueryMapper get() { - return new TaskAssigningTaskDataQueryMapper(); - } - - @Override - protected boolean readPotentialOwners() { - return false; - } - - @Override - public String getName() { - return NAME; - } -} \ 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-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataRawQueryMapper.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataRawQueryMapper.java deleted file mode 100644 index 0be0e7c3ba..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataRawQueryMapper.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.taskassigning.runtime.query; - -import org.kie.server.api.model.taskassigning.TaskAssigningQueries; - -public class TaskAssigningTaskDataRawQueryMapper extends TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper { - - public static final String NAME = TaskAssigningQueries.TASK_DATA_RAW_QUERY_MAPPER; - - public TaskAssigningTaskDataRawQueryMapper() { - // Dedicated for ServiceLoader to create instance, use get() method instead - } - - /** - * Default access to get instance of the mapper - */ - public static TaskAssigningTaskDataRawQueryMapper get() { - return new TaskAssigningTaskDataRawQueryMapper(); - } - - @Override - protected boolean readPotentialOwners() { - return false; - } - - @Override - public String getName() { - return NAME; - } -} \ 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-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataSummaryQueryMapper.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataSummaryQueryMapper.java deleted file mode 100644 index 64a38be2b8..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataSummaryQueryMapper.java +++ /dev/null @@ -1,79 +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.runtime.query; - -import org.dashbuilder.dataset.DataSet; -import org.kie.server.api.model.taskassigning.TaskData; - -import static org.apache.commons.lang3.StringUtils.isEmpty; - -public class TaskAssigningTaskDataSummaryQueryMapper extends TaskAssigningTaskDataWithPotentialOwnersQueryMapper { - - public static final String NAME = "TaskAssigningTaskDataSummaryQueryMapper"; - - public TaskAssigningTaskDataSummaryQueryMapper() { - // Dedicated for ServiceLoader to create instance, use get() method instead - } - - /** - * Default access to get instance of the mapper - */ - public static TaskAssigningTaskDataSummaryQueryMapper get() { - return new TaskAssigningTaskDataSummaryQueryMapper(); - } - - @Override - protected boolean readPotentialOwners() { - return false; - } - - @Override - protected TaskData buildInstance(DataSet dataSetResult, int index) { - TaskData row = createInstance(); - final Long taskId = getColumnLongValue(dataSetResult, TASK_QUERY_COLUMN.TASK_ID.columnName(), index); - final String status = getColumnStringValue(dataSetResult, TASK_QUERY_COLUMN.STATUS.columnName(), index); - - String actualOwner = getColumnStringValue(dataSetResult, TASK_QUERY_COLUMN.ACTUAL_OWNER.columnName(), index); - if (isEmpty(actualOwner)) { - actualOwner = null; - } - - final String deploymentId = getColumnStringValue(dataSetResult, TASK_QUERY_COLUMN.DEPLOYMENT_ID.columnName(), index); - - final Long ptTaskId = getColumnLongValue(dataSetResult, TASK_QUERY_COLUMN.PLANNING_TASK_TASK_ID.columnName(), index); - String assignedUser = null; - Integer taskIndex = null; - Integer published = null; - if (ptTaskId != null) { - assignedUser = getColumnStringValue(dataSetResult, TASK_QUERY_COLUMN.PLANNING_TASK_ASSIGNED_USER.columnName(), index); - if (isEmpty(assignedUser)) { - assignedUser = null; - } - taskIndex = getColumnIntValue(dataSetResult, TASK_QUERY_COLUMN.PLANNING_TASK_INDEX.columnName(), index); - published = getColumnIntValue(dataSetResult, TASK_QUERY_COLUMN.PLANNING_TASK_PUBLISHED.columnName(), index); - } - - setInstanceValues(row, taskId, null, null, null, deploymentId, status, null, - null, null, actualOwner, assignedUser, taskIndex, published); - return row; - } - - @Override - public String getName() { - return NAME; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataWithPotentialOwnersQueryMapper.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataWithPotentialOwnersQueryMapper.java deleted file mode 100644 index 9bc010a501..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataWithPotentialOwnersQueryMapper.java +++ /dev/null @@ -1,101 +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.runtime.query; - -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Map; - -import org.jbpm.services.api.query.QueryResultMapper; -import org.kie.server.api.model.taskassigning.OrganizationalEntity; -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.api.model.taskassigning.TaskData; - -public class TaskAssigningTaskDataWithPotentialOwnersQueryMapper extends AbstractTaskAssigningQueryMapper { - - public static final String NAME = "TaskAssigningTaskDataWithPotentialOwnersQueryMapper"; - - public TaskAssigningTaskDataWithPotentialOwnersQueryMapper() { - // Dedicated for ServiceLoader to create instance, use get() method instead - } - - /** - * Default access to get instance of the mapper - */ - public static TaskAssigningTaskDataWithPotentialOwnersQueryMapper get() { - return new TaskAssigningTaskDataWithPotentialOwnersQueryMapper(); - } - - @Override - protected TaskData createInstance() { - return TaskData.builder().potentialOwners(new HashSet<>()).build(); - } - - @Override - protected boolean readPotentialOwners() { - return true; - } - - @Override - protected void setInstanceValues(TaskData row, Long taskId, Date createdOn, Long processInstanceId, String processId, - String deploymentId, String status, Integer priority, String taskName, - Date lastModificationDate, String actualOwner, - String assignedUser, Integer taskIndex, Integer published) { - row.setTaskId(taskId); - row.setCreatedOn(toLocalDateTime(createdOn)); - row.setProcessInstanceId(processInstanceId); - row.setProcessId(processId); - row.setContainerId(deploymentId); - row.setStatus(status); - row.setPriority(priority); - row.setName(taskName); - row.setLastModificationDate(toLocalDateTime(lastModificationDate)); - row.setActualOwner(actualOwner); - if (assignedUser != null || taskIndex != null) { - row.setPlanningTask(PlanningTask.builder() - .taskId(taskId) - .assignedUser(assignedUser) - .index(taskIndex) - .published(published != null && published == 1) - .build()); - } - } - - @Override - protected void addPotentialOwner(TaskData taskRow, String potentialOwnerId, String potentialOwnerType) { - taskRow.getPotentialOwners().add(OrganizationalEntity.builder() - .name(potentialOwnerId) - .type(potentialOwnerType) - .build()); - } - - @Override - public Class getType() { - return TaskData.class; - } - - @Override - public String getName() { - return NAME; - } - - @Override - public QueryResultMapper> forColumnMapping(Map map) { - return get(); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper.java deleted file mode 100644 index de2c522d53..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper.java +++ /dev/null @@ -1,104 +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.runtime.query; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import org.jbpm.services.api.query.QueryResultMapper; - -public class TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper extends AbstractTaskAssigningQueryMapper> { - - public static final String NAME = "TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper"; - - public TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper() { - // Dedicated for ServiceLoader to create instance, use get() method instead - } - - /** - * Default access to get instance of the mapper - * @return - */ - - public static TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper get() { - return new TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper(); - } - - @Override - protected List createInstance() { - return new ArrayList<>(); - } - - @Override - protected boolean readPotentialOwners() { - return true; - } - - @Override - protected void setInstanceValues(List row, Long taskId, Date createdOn, Long processInstanceId, - String processId, String deploymentId, String status, Integer priority, - String taskName, Date lastModificationDate, String actualOwner, - String assignedUser, Integer taskIndex, Integer published) { - row.add(taskId); - row.add(createdOn); - row.add(actualOwner); - row.add(deploymentId); - row.add(taskName); - row.add(priority); - row.add(processId); - row.add(processInstanceId); - row.add(status); - row.add(lastModificationDate); - - List planningEntityRow = new ArrayList<>(); - row.add(planningEntityRow); - if (assignedUser != null || taskIndex != null) { - planningEntityRow.add(taskId); - planningEntityRow.add(assignedUser); - planningEntityRow.add(taskIndex); - planningEntityRow.add(published != null && published == 1); - } - if (readPotentialOwners()) { - //make room for the potential owners. - row.add(new ArrayList<>()); - } - } - - @Override - protected void addPotentialOwner(List taskRow, String potentialOwnerId, String potentialOwnerType) { - List> potentialOwners = (List>) taskRow.get(taskRow.size() - 1); - potentialOwners.add(Arrays.asList(potentialOwnerId, potentialOwnerType)); - } - - @Override - public String getName() { - return NAME; - } - - @Override - public Class getType() { - return List.class; - } - - @Override - public QueryResultMapper>> forColumnMapping(Map map) { - return get(); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/resources/META-INF/services/org.jbpm.services.api.query.QueryResultMapper b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/resources/META-INF/services/org.jbpm.services.api.query.QueryResultMapper deleted file mode 100644 index 1e94bb6913..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/resources/META-INF/services/org.jbpm.services.api.query.QueryResultMapper +++ /dev/null @@ -1,5 +0,0 @@ -org.kie.server.services.taskassigning.runtime.query.TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper -org.kie.server.services.taskassigning.runtime.query.TaskAssigningTaskDataWithPotentialOwnersQueryMapper -org.kie.server.services.taskassigning.runtime.query.TaskAssigningTaskDataSummaryQueryMapper -org.kie.server.services.taskassigning.runtime.query.TaskAssigningTaskDataQueryMapper -org.kie.server.services.taskassigning.runtime.query.TaskAssigningTaskDataRawQueryMapper \ 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-runtime/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerExtension b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerExtension deleted file mode 100644 index db0fad60fe..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerExtension +++ /dev/null @@ -1 +0,0 @@ -org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtension \ 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-runtime/src/main/resources/META-INF/services/org.kie.server.services.jbpm.jpa.PersistenceUnitExtensionsLoader b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/resources/META-INF/services/org.kie.server.services.jbpm.jpa.PersistenceUnitExtensionsLoader deleted file mode 100644 index e947521563..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/resources/META-INF/services/org.kie.server.services.jbpm.jpa.PersistenceUnitExtensionsLoader +++ /dev/null @@ -1 +0,0 @@ -org.kie.server.services.taskassigning.runtime.persistence.TaskAssigningPersistenceUnitExtensionsLoader \ 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-runtime/src/main/resources/task-assigning-query-definitions.json b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/resources/task-assigning-query-definitions.json deleted file mode 100644 index e374f1c8ad..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/main/resources/task-assigning-query-definitions.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "query-name": "task-assigning-tasks-with-potential-owners-and-planning-task", - "query-source": "${org.kie.server.persistence.ds}", - "query-expression": "select t.taskId, t.createdOn, t.activationTime, t.actualOwner, t.deploymentId, t.dueDate, t.name, t.priority, t.processId, t.processInstanceId, t.status, t.lastModificationDate, pt.taskId pttaskId, pt.assigneduser, pt.taskIndex, pt.published, oe.id as potentialOwner, oe.dtype as potentialOwnerType from AuditTaskImpl t left join PlanningTask pt on t.taskId = pt.taskId left join PeopleAssignments_PotOwners po on t.taskId=po.task_id left join OrganizationalEntity oe on po.entity_id=oe.id", - "query-target": "CUSTOM" - }, - - { - "query-name": "task-assigning-tasks-with-planning-task-optimized", - "query-source": "${org.kie.server.persistence.ds}", - "query-expression": "select t.taskId, t.actualOwner, t.status, t.deploymentId, t.lastModificationDate, pt.taskId pttaskId, pt.assigneduser, pt.taskIndex, pt.published from AuditTaskImpl t left join PlanningTask pt on t.taskId = pt.taskId", - "query-target": "CUSTOM" - }, - - { - "query-name": "task-assigning-jbpmHumanTasksWithUser", - "query-source": "${org.kie.server.persistence.ds}", - "query-expression": "select t.activationTime, t.actualOwner, t.createdBy, t.createdOn, t.deploymentId, t.description, t.dueDate, t.name, t.parentId, t.priority, t.processId, t.processInstanceId, t.processSessionId, t.status, t.taskId, t.workItemId, t.lastModificationDate, pil.correlationKey, pil.processInstanceDescription, oe.id, eo.entity_id, nil.sla_due_date, nil.slaCompliance, pt.taskId as pttaskId, pt.assignedUser, pt.taskIndex, pt.published from AuditTaskImpl t left join PlanningTask pt on (pt.taskId = t.taskId and pt.assignedUser = t.actualOwner) left join PeopleAssignments_PotOwners po on t.taskId=po.task_id left join OrganizationalEntity oe on po.entity_id=oe.id left join ProcessInstanceLog pil on pil.processInstanceId=t.processInstanceId left join PeopleAssignments_ExclOwners eo on t.taskId=eo.task_id left join NodeInstanceLog nil on (nil.workItemId=t.workItemId and nil.type = 0)", - "query-target": "FILTERED_PO_TASK" - }, - - { - "query-name": "task-assigning-jbpmHumanTasks", - "query-source": "${org.kie.server.persistence.ds}", - "query-expression": "select t.activationTime, t.actualOwner, t.createdBy, t.createdOn, t.deploymentId, t.description, t.dueDate, t.name, t.parentId, t.priority, t.processId, t.processInstanceId, t.processSessionId, t.status, t.taskId, t.workItemId, t.lastModificationDate, pil.correlationKey, pil.processInstanceDescription, nil.sla_due_date, nil.slaCompliance, pt.taskId as pttaskId, pt.assignedUser, pt.taskIndex, pt.published from AuditTaskImpl t left join PlanningTask pt on (pt.taskId = t.taskId and pt.assignedUser = t.actualOwner) left join ProcessInstanceLog pil on pil.processInstanceId=t.processInstanceId left join NodeInstanceLog nil on (nil.workItemId=t.workItemId and nil.type = 0)", - "query-target": "CUSTOM" - } -] \ 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-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/DummyKieServerApplicationComponentService.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/DummyKieServerApplicationComponentService.java deleted file mode 100644 index 1f3f2d66bc..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/DummyKieServerApplicationComponentService.java +++ /dev/null @@ -1,41 +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.runtime; - -import java.util.Collection; -import java.util.Collections; - -import org.kie.server.services.api.KieServerApplicationComponentsService; -import org.kie.server.services.api.SupportedTransports; - -/** - * Dummy class intended for the TaskAssigningRuntimeKieServerExtensionTest - */ -public class DummyKieServerApplicationComponentService implements KieServerApplicationComponentsService { - - public class DummyComponent { - } - - public DummyKieServerApplicationComponentService() { - //SPI constructor - } - - @Override - public Collection getAppComponents(String extension, SupportedTransports type, Object... services) { - return TaskAssigningRuntimeKieServerExtension.EXTENSION_NAME.equals(extension) ? Collections.singletonList(new DummyComponent()) : null; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeKieServerExtensionTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeKieServerExtensionTest.java deleted file mode 100644 index d6487fa094..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeKieServerExtensionTest.java +++ /dev/null @@ -1,199 +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.runtime; - -import java.util.ArrayList; -import java.util.List; - -import org.assertj.core.api.Assertions; -import org.jbpm.services.api.UserTaskService; -import org.jbpm.services.api.query.QueryService; -import org.jbpm.services.api.query.model.QueryParam; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.kie.api.runtime.query.QueryContext; -import org.kie.server.api.model.Message; -import org.kie.server.api.model.Severity; -import org.kie.server.services.api.KieServerRegistry; -import org.kie.server.services.api.SupportedTransports; -import org.kie.server.services.impl.KieServerImpl; -import org.kie.server.services.jbpm.JbpmKieServerExtension; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; - -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.kie.server.api.KieServerConstants.KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtension.CAPABILITY_TASK_ASSIGNING_RUNTIME; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtension.EXTENSION_NAME; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtension.EXTENSION_START_ORDER; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtensionMessages.HEALTH_CHECK_ERROR; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtensionMessages.HEALTH_CHECK_IS_ALIVE_MESSAGE; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtensionMessages.MISSING_REQUIRED_JBPM_EXTENSION_ERROR; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class TaskAssigningRuntimeKieServerExtensionTest { - - private static final String ERROR_MESSAGE = "ERROR_MESSAGE"; - - @Mock - private KieServerImpl kieServer; - - @Mock - private KieServerRegistry registry; - - private TaskAssigningRuntimeKieServerExtension extension; - - @Mock - private JbpmKieServerExtension jbpmExtension; - - @Mock - private QueryService queryService; - - @Mock - private UserTaskService userTaskService; - - @Before - public void setUp() { - extension = new TaskAssigningRuntimeKieServerExtension(); - List services = new ArrayList<>(); - services.add(queryService); - services.add(userTaskService); - when(kieServer.isKieServerReady()).thenReturn(true); - when(jbpmExtension.getServices()).thenReturn(services); - } - - @After - public void cleanUp() { - System.clearProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED); - } - - @Test - public void isActiveDefaultValue() { - assertFalse(extension.isActive()); - } - - @Test - public void isActiveTrue() { - enableExtension(); - assertTrue(extension.isActive()); - } - - @Test - public void isActiveFalse() { - System.setProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED, "true"); - assertFalse(extension.isActive()); - } - - @Test - public void initWithJbpmExtensionNotAvailable() { - enableExtension(); - Assertions.assertThatThrownBy(() -> extension.init(kieServer, registry)) - .hasMessage(MISSING_REQUIRED_JBPM_EXTENSION_ERROR); - assertFalse(extension.isInitialized()); - } - - @Test - public void initSuccessful() { - prepareExtension(); - extension.init(kieServer, registry); - assertTrue(extension.isInitialized()); - verify(queryService, times(4)).replaceQuery(any()); - } - - @Test - public void getExtensionName() { - assertEquals(EXTENSION_NAME, extension.getExtensionName()); - } - - @Test - public void getServices() { - prepareExtension(); - extension.init(kieServer, registry); - List services = extension.getServices(); - assertEquals(1, services.size(), 0); - assertTrue(services.get(0) instanceof TaskAssigningRuntimeServiceBase); - } - - @Test - public void getAppComponents() { - prepareExtension(); - extension.init(kieServer, registry); - List components = extension.getAppComponents(SupportedTransports.REST); - assertEquals(1, components.size()); - assertTrue(components.get(0) instanceof DummyKieServerApplicationComponentService.DummyComponent); - } - - @Test - public void getAppComponentsForTaskAssigningRuntimeServiceBase() { - prepareExtension(); - extension.init(kieServer, registry); - assertNotNull(extension.getAppComponents(TaskAssigningRuntimeServiceBase.class)); - } - - @Test - public void getImplementedCapability() { - assertEquals(CAPABILITY_TASK_ASSIGNING_RUNTIME, extension.getImplementedCapability()); - } - - @Test - public void getStartOrder() { - assertEquals(EXTENSION_START_ORDER, extension.getStartOrder(), 0); - } - - @Test - public void healthCheck() { - prepareExtension(); - extension.init(kieServer, registry); - List messages = extension.healthCheck(true); - assertEquals(1, messages.size()); - assertEquals(Severity.INFO, messages.get(0).getSeverity()); - assertEquals(HEALTH_CHECK_IS_ALIVE_MESSAGE, messages.get(0).getMessages().iterator().next()); - } - - @Test - public void healthCheckWithFailure() { - prepareExtension(); - doThrow(new RuntimeException(ERROR_MESSAGE)) - .when(queryService).query(any(), any(), any(), Mockito.any()); - extension.init(kieServer, registry); - List messages = extension.healthCheck(true); - assertEquals(1, messages.size()); - assertEquals(Severity.ERROR, messages.get(0).getSeverity()); - assertEquals(String.format(HEALTH_CHECK_ERROR, ERROR_MESSAGE), messages.get(0).getMessages().iterator().next()); - } - - private void prepareExtension() { - enableExtension(); - when(registry.getServerExtension(JbpmKieServerExtension.EXTENSION_NAME)).thenReturn(jbpmExtension); - } - - private void enableExtension() { - System.setProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED, "false"); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeServiceBaseTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeServiceBaseTest.java deleted file mode 100644 index 87b884b7ea..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeServiceBaseTest.java +++ /dev/null @@ -1,392 +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.runtime; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.jbpm.services.api.UserTaskService; -import org.jbpm.services.api.query.QueryService; -import org.jbpm.services.task.commands.CompositeCommand; -import org.jbpm.services.task.commands.TaskCommand; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.kie.api.task.model.Status; -import org.kie.server.api.model.KieContainerStatus; -import org.kie.server.api.model.taskassigning.PlanningExecutionResult; -import org.kie.server.api.model.taskassigning.PlanningItem; -import org.kie.server.api.model.taskassigning.PlanningItemList; -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.services.api.KieServerRegistry; -import org.kie.server.services.impl.KieContainerInstanceImpl; -import org.kie.server.services.impl.KieServerImpl; -import org.kie.server.services.taskassigning.runtime.command.DelegateAndSaveCommand; -import org.kie.server.services.taskassigning.runtime.command.DeletePlanningItemCommand; -import org.kie.server.services.taskassigning.runtime.command.SavePlanningItemCommand; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.kie.api.task.model.Status.InProgress; -import static org.kie.api.task.model.Status.Ready; -import static org.kie.api.task.model.Status.Reserved; -import static org.kie.api.task.model.Status.Suspended; -import static org.kie.server.api.model.taskassigning.util.StatusConverter.convertToString; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeServiceBase.TASK_MODIFIED_ERROR_MSG_1; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeServiceBase.TASK_MODIFIED_ERROR_MSG_2; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeServiceBase.TASK_MODIFIED_ERROR_MSG_3; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeServiceBase.UNEXPECTED_ERROR_DURING_PLAN_CALCULATION; -import static org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeServiceBase.UNEXPECTED_ERROR_DURING_PLAN_EXECUTION; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class TaskAssigningRuntimeServiceBaseTest { - - private static final String USER_ID = "USER_ID"; - private static final long TASK_ID = 1L; - private static final String CONTAINER_ID = "CONTAINER_ID"; - private static final String ASSIGNED_USER_ID = "ASSIGNED_USER_ID"; - private static final String PREVIOUS_ASSIGNED_USER_ID = "PREVIOUS_ASSIGNED_USER_ID"; - private static final String PREVIOUS_ASSIGNED_USER_ID_CHANGED = "PREVIOUS_ASSIGNED_USER_ID_CHANGED"; - private static final String ERROR_MESSAGE = "ERROR_MESSAGE"; - - @Mock - private KieServerImpl kieServer; - @Mock - private KieServerRegistry registry; - - @Mock - private UserTaskService userTaskService; - - @Mock - private QueryService queryService; - - @Mock - private TaskAssigningRuntimeServiceQueryHelper queryHelper; - - @Mock - private KieContainerInstanceImpl container; - - @Captor - private ArgumentCaptor planningCommandCaptor; - - private TaskAssigningRuntimeServiceBase serviceBase; - - @Before - public void setUp() { - when(kieServer.isKieServerReady()).thenReturn(true); - serviceBase = new TaskAssigningRuntimeServiceBaseMock(kieServer, registry, userTaskService, queryService); - } - - @Test - public void executePlanningWithTaskNoLongerInActiveStatus() { - List taskDataList = Collections.emptyList(); - PlanningItem planningItem = mockPlanningItem(TASK_ID, CONTAINER_ID, ASSIGNED_USER_ID); - PlanningItemList planningItemList = new PlanningItemList(Collections.singletonList(planningItem)); - - prepareExecution(taskDataList, CONTAINER_ID); - PlanningExecutionResult result = serviceBase.executePlanning(planningItemList, USER_ID); - - String errorMessage = String.format(TASK_MODIFIED_ERROR_MSG_3, - planningItem.getPlanningTask().getTaskId(), - Arrays.toString(new Status[]{Ready, Reserved, InProgress, Suspended})); - assertHasError(result, - PlanningExecutionResult.ErrorCode.TASK_MODIFIED_SINCE_PLAN_CALCULATION_ERROR, - errorMessage, - CONTAINER_ID); - } - - @Test - public void executePlanningWithTaskInReadyStatus() { - TaskData taskData = mockTaskData(TASK_ID, Ready); - List taskDataList = Collections.singletonList(taskData); - PlanningItem planningItem = mockPlanningItem(TASK_ID, CONTAINER_ID, ASSIGNED_USER_ID); - PlanningItemList planningItemList = new PlanningItemList(Collections.singletonList(planningItem)); - - prepareExecution(taskDataList, CONTAINER_ID); - PlanningExecutionResult result = serviceBase.executePlanning(planningItemList, USER_ID); - verify(userTaskService).execute(eq(CONTAINER_ID), planningCommandCaptor.capture()); - - assertDelegateAndSaveCommand(planningCommandCaptor.getAllValues(), 0, USER_ID, planningItem); - assertNoError(result); - } - - @Test - public void executePlanningWithTaskInReservedStatusWithNoPlanningTask() { - TaskData taskData = mockTaskData(TASK_ID, Reserved); - List taskDataList = Collections.singletonList(taskData); - PlanningItem planningItem = mockPlanningItem(TASK_ID, CONTAINER_ID, ASSIGNED_USER_ID); - PlanningItemList planningItemList = new PlanningItemList(Collections.singletonList(planningItem)); - - prepareExecution(taskDataList, CONTAINER_ID); - PlanningExecutionResult result = serviceBase.executePlanning(planningItemList, USER_ID); - verify(userTaskService).execute(eq(CONTAINER_ID), planningCommandCaptor.capture()); - - assertDelegateAndSaveCommand(planningCommandCaptor.getAllValues(), 0, USER_ID, planningItem); - assertNoError(result); - } - - @Test - public void executePlanningWithTaskInReservedStatusWithPlanningTaskDontReassigned() { - PlanningTask planningTask = mockPlanningTask(TASK_ID, PREVIOUS_ASSIGNED_USER_ID); - TaskData taskData = mockTaskData(TASK_ID, Reserved, PREVIOUS_ASSIGNED_USER_ID, planningTask); - List taskDataList = Collections.singletonList(taskData); - PlanningItem planningItem = mockPlanningItem(TASK_ID, CONTAINER_ID, ASSIGNED_USER_ID); - PlanningItemList planningItemList = new PlanningItemList(Collections.singletonList(planningItem)); - - prepareExecution(taskDataList, CONTAINER_ID); - PlanningExecutionResult result = serviceBase.executePlanning(planningItemList, USER_ID); - verify(userTaskService).execute(eq(CONTAINER_ID), planningCommandCaptor.capture()); - - assertDelegateAndSaveCommand(planningCommandCaptor.getAllValues(), 0, USER_ID, planningItem); - assertNoError(result); - } - - @Test - public void executePlanningWithTaskInReservedStatusWithPlanningTaskButReassigned() { - PlanningTask planningTask = mockPlanningTask(TASK_ID, PREVIOUS_ASSIGNED_USER_ID); - TaskData taskData = mockTaskData(TASK_ID, Reserved, PREVIOUS_ASSIGNED_USER_ID_CHANGED, planningTask); - List taskDataList = Collections.singletonList(taskData); - PlanningItem planningItem = mockPlanningItem(TASK_ID, CONTAINER_ID, ASSIGNED_USER_ID); - PlanningItemList planningItemList = new PlanningItemList(Collections.singletonList(planningItem)); - - prepareExecution(taskDataList, CONTAINER_ID); - PlanningExecutionResult result = serviceBase.executePlanning(planningItemList, USER_ID); - verify(userTaskService, never()).execute(eq(CONTAINER_ID), any()); - - String errorMessage = String.format(TASK_MODIFIED_ERROR_MSG_1, - taskData.getTaskId(), - PREVIOUS_ASSIGNED_USER_ID_CHANGED, - PREVIOUS_ASSIGNED_USER_ID); - assertHasError(result, - PlanningExecutionResult.ErrorCode.TASK_MODIFIED_SINCE_PLAN_CALCULATION_ERROR, - errorMessage, - CONTAINER_ID); - } - - @Test - public void executePlanningWithTaskInInProgressStatusWithActualOwnerChanged() { - executePlanningWithTaskInInProgressOrSuspendedStatusWithActualOwnerChanged(InProgress); - } - - @Test - public void executePlanningWithTaskInSuspendedStatusWithActualOwnerChanged() { - executePlanningWithTaskInInProgressOrSuspendedStatusWithActualOwnerChanged(Suspended); - } - - @Test - public void executePlanningWithTaskInInProgressStatusWithActualOwnerUnChanged() { - executePlanningWithTaskInInProgressOrSuspendedStatusWithActualOwnerUnChanged(InProgress); - } - - @Test - public void executePlanningWithTaskInSuspendedStatusWithActualOwnerUnChanged() { - executePlanningWithTaskInInProgressOrSuspendedStatusWithActualOwnerUnChanged(Suspended); - } - - @Test - public void executePlanningWithDetachedReadyTask() { - executePlanningWithDetachedTask(Ready); - } - - @Test - public void executePlanningWithDetachedReservedTask() { - executePlanningWithDetachedTask(Reserved); - } - - @Test - public void executePlanningWithDetachedSuspendedTask() { - executePlanningWithDetachedTask(Suspended); - } - - @Test - public void unexpectedErrorDuringPlanCalculation() { - when(queryHelper.readTasksDataSummary(anyLong(), any(), anyInt())).thenThrow(new RuntimeException(ERROR_MESSAGE)); - PlanningExecutionResult result = serviceBase.executePlanning(new PlanningItemList(Collections.emptyList()), USER_ID); - assertHasError(result, PlanningExecutionResult.ErrorCode.UNEXPECTED_ERROR, String.format(UNEXPECTED_ERROR_DURING_PLAN_CALCULATION, ERROR_MESSAGE), null); - } - - @Test - public void unexpectedErrorDuringPlanExecution() { - TaskData taskData = mockTaskData(TASK_ID, Ready); - List taskDataList = Collections.singletonList(taskData); - PlanningItem planningItem = mockPlanningItem(TASK_ID, CONTAINER_ID, ASSIGNED_USER_ID); - PlanningItemList planningItemList = new PlanningItemList(Collections.singletonList(planningItem)); - - prepareExecution(taskDataList, CONTAINER_ID); - when(userTaskService.execute(eq(CONTAINER_ID), any())).thenThrow(new RuntimeException(ERROR_MESSAGE)); - PlanningExecutionResult result = serviceBase.executePlanning(planningItemList, USER_ID); - assertHasError(result, PlanningExecutionResult.ErrorCode.UNEXPECTED_ERROR, String.format(UNEXPECTED_ERROR_DURING_PLAN_EXECUTION, CONTAINER_ID, ERROR_MESSAGE), CONTAINER_ID); - } - - @Test - public void executeFindTasksQuery() { - Map params = new HashMap<>(); - serviceBase.executeFindTasksQuery(params); - verify(queryHelper).executeFindTasksQuery(params); - } - - private void prepareExecution(List taskDataList, String containerId) { - when(queryHelper.readTasksDataSummary(anyLong(), any(), anyInt())).thenReturn(taskDataList); - when(registry.getContainer(containerId)).thenReturn(container); - when(container.getStatus()).thenReturn(KieContainerStatus.STARTED); - } - - private void executePlanningWithTaskInInProgressOrSuspendedStatusWithActualOwnerChanged(Status status) { - TaskData taskData = mockTaskData(TASK_ID, status, PREVIOUS_ASSIGNED_USER_ID_CHANGED, null); - List taskDataList = Collections.singletonList(taskData); - PlanningItem planningItem = mockPlanningItem(TASK_ID, CONTAINER_ID, ASSIGNED_USER_ID); - PlanningItemList planningItemList = new PlanningItemList(Collections.singletonList(planningItem)); - - prepareExecution(taskDataList, CONTAINER_ID); - PlanningExecutionResult result = serviceBase.executePlanning(planningItemList, USER_ID); - verify(userTaskService, never()).execute(eq(CONTAINER_ID), any()); - - String errorMessage = String.format(TASK_MODIFIED_ERROR_MSG_2, - planningItem.getPlanningTask().getTaskId(), - PREVIOUS_ASSIGNED_USER_ID_CHANGED, - ASSIGNED_USER_ID); - - assertHasError(result, - PlanningExecutionResult.ErrorCode.TASK_MODIFIED_SINCE_PLAN_CALCULATION_ERROR, - errorMessage, - CONTAINER_ID); - } - - private void executePlanningWithTaskInInProgressOrSuspendedStatusWithActualOwnerUnChanged(Status status) { - TaskData taskData = mockTaskData(TASK_ID, status, ASSIGNED_USER_ID, null); - List taskDataList = Collections.singletonList(taskData); - PlanningItem planningItem = mockPlanningItem(TASK_ID, CONTAINER_ID, ASSIGNED_USER_ID); - PlanningItemList planningItemList = new PlanningItemList(Collections.singletonList(planningItem)); - - prepareExecution(taskDataList, CONTAINER_ID); - PlanningExecutionResult result = serviceBase.executePlanning(planningItemList, USER_ID); - verify(userTaskService).execute(eq(CONTAINER_ID), planningCommandCaptor.capture()); - - CompositeCommand compositeCommand = (CompositeCommand) planningCommandCaptor.getValue(); - assertSavePlanningItemCommand(compositeCommand.getCommands(), 0, planningItem); - assertNoError(result); - } - - private void executePlanningWithDetachedTask(Status status) { - TaskData taskData = mockTaskData(TASK_ID, status, ASSIGNED_USER_ID, CONTAINER_ID, mockPlanningTask(TASK_ID, ASSIGNED_USER_ID)); - List taskDataList = Collections.singletonList(taskData); - PlanningItemList planningItemList = new PlanningItemList(Collections.emptyList()); - - prepareExecution(taskDataList, CONTAINER_ID); - PlanningExecutionResult result = serviceBase.executePlanning(planningItemList, USER_ID); - verify(userTaskService).execute(eq(CONTAINER_ID), planningCommandCaptor.capture()); - - CompositeCommand compositeCommand = (CompositeCommand) planningCommandCaptor.getValue(); - assertDeletePlanningItemCommand(compositeCommand.getCommands(), 0, TASK_ID); - assertNoError(result); - } - - private void assertHasError(PlanningExecutionResult result, PlanningExecutionResult.ErrorCode error, String message, String containerId) { - assertEquals(error, result.getError()); - assertEquals(message, result.getErrorMessage()); - assertEquals(containerId, result.getContainerId()); - } - - private void assertNoError(PlanningExecutionResult result) { - assertFalse(result.hasError()); - } - - private void assertDelegateAndSaveCommand(List commands, int index, String userId, PlanningItem planningItem) { - assertTrue("DelegateAndSaveCommand is expected at index: " + index, commands.get(index) instanceof DelegateAndSaveCommand); - DelegateAndSaveCommand delegateAndSaveCommand = (DelegateAndSaveCommand) commands.get(index); - assertEquals("DelegateAndSaveCommand for userId: " + userId + " is expected at index: " + index, userId, delegateAndSaveCommand.getUserId()); - assertEquals("DelegateAndSaveCommand for planningItem: " + planningItem + " is expected at index: ", planningItem, delegateAndSaveCommand.getPlanningItem()); - } - - private void assertSavePlanningItemCommand(List commands, int index, PlanningItem planningItem) { - assertTrue("SavePlanningItemCommand is expected at index: " + index, commands.get(index) instanceof SavePlanningItemCommand); - SavePlanningItemCommand savePlanningItemCommand = (SavePlanningItemCommand) commands.get(index); - assertEquals("SavePlanningItemCommand for planningItem: " + planningItem + " is expected at index: ", planningItem, savePlanningItemCommand.getPlanningItem()); - } - - private void assertDeletePlanningItemCommand(List commands, int index, Long taskId) { - assertTrue("DeletePlanningItemCommand is expected at index: " + index, commands.get(index) instanceof DeletePlanningItemCommand); - DeletePlanningItemCommand deletePlanningItemCommand = (DeletePlanningItemCommand) commands.get(index); - assertEquals("DeletePlanningItemCommand for taskId: " + taskId + " is expected at index: ", taskId, deletePlanningItemCommand.getItemId(), 0); - } - - private class TaskAssigningRuntimeServiceBaseMock extends TaskAssigningRuntimeServiceBase { - - public TaskAssigningRuntimeServiceBaseMock(KieServerImpl kieServer, KieServerRegistry registry, UserTaskService userTaskService, QueryService queryService) { - super(kieServer, registry, userTaskService, queryService); - } - - @Override - TaskAssigningRuntimeServiceQueryHelper createQueryHelper(KieServerRegistry registry, UserTaskService userTaskService, QueryService queryService) { - return queryHelper; - } - } - - private TaskData mockTaskData(long taskId, Status status) { - return mockTaskData(taskId, status, null, null); - } - - private TaskData mockTaskData(long taskId, Status status, String actualOwner, PlanningTask planningTask) { - return mockTaskData(taskId, status, actualOwner, null, planningTask); - } - - private TaskData mockTaskData(long taskId, Status status, String actualOwner, String containerId, PlanningTask planningTask) { - return TaskData.builder() - .taskId(taskId) - .status(convertToString(status)) - .actualOwner(actualOwner) - .containerId(containerId) - .planningTask(planningTask) - .build(); - } - - private PlanningItem mockPlanningItem(long taskId, String containerId, String assignedUser) { - return PlanningItem.builder() - .taskId(taskId) - .containerId(containerId) - .planningTask(PlanningTask.builder() - .taskId(taskId) - .assignedUser(assignedUser) - .published(true) - .build() - ) - .build(); - } - - private PlanningTask mockPlanningTask(long taskId, String assignedUser) { - return PlanningTask.builder() - .taskId(taskId) - .assignedUser(assignedUser) - .build(); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeServiceQueryHelperTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeServiceQueryHelperTest.java deleted file mode 100644 index 4cdebd4c13..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/TaskAssigningRuntimeServiceQueryHelperTest.java +++ /dev/null @@ -1,394 +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.runtime; - -import java.sql.Date; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Stream; - -import org.jbpm.services.api.UserTaskService; -import org.jbpm.services.api.query.QueryService; -import org.jbpm.services.api.query.model.QueryParam; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.kie.api.runtime.query.QueryContext; -import org.kie.api.task.model.Status; -import org.kie.server.api.model.KieContainerStatus; -import org.kie.server.api.model.taskassigning.LocalDateTimeValue; -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.api.model.taskassigning.TaskData; -import org.kie.server.api.model.taskassigning.TaskInputVariablesReadMode; -import org.kie.server.services.api.KieServerRegistry; -import org.kie.server.services.impl.KieContainerInstanceImpl; -import org.kie.server.services.taskassigning.runtime.query.AbstractTaskAssigningQueryMapper; -import org.kie.server.services.taskassigning.runtime.query.TaskAssigningTaskDataWithPotentialOwnersQueryMapper; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.runners.MockitoJUnitRunner; -import org.mockito.stubbing.Answer; - -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -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.QueryParamName.TO_TASK_ID; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class TaskAssigningRuntimeServiceQueryHelperTest { - - private static final String GREATER_OR_EQUALS_TO = "GREATER_OR_EQUALS_TO"; - private static final String LOWER_OR_EQUALS_TO = "LOWER_OR_EQUALS_TO"; - private static final String EQUALS_TO = "EQUALS_TO"; - - private static final String FROM_LAST_MODIFICATION_STR_VALUE = "2020-02-11T16:07:34.332"; - private static final LocalDateTime FROM_LAST_MODIFICATION_VALUE = LocalDateTime.parse(FROM_LAST_MODIFICATION_STR_VALUE); - private static final List STATUS_VALUE = Arrays.asList("Ready", "Reserved"); - - private static final Long FROM_TASK_ID_VALUE = 1L; - private static final Long TO_TASK_ID_VALUE = 2L; - private static final Integer PAGE_VALUE = 3; - private static final Integer PAGE_SIZE_VALUE = 4; - - // Task1 is Ready and has PlanningTask - private static final Long TASK1_ID = 1L; - // Task2 is Reserved and doesn't have PlanningTask - private static final Long TASK2_ID = 2L; - // Task3 is Completed - private static final Long TASK3_ID = 3L; - - private static final Map TASK1_INPUTS = new HashMap<>(); - private static final Map TASK2_INPUTS = new HashMap<>(); - private static final Map TASK3_INPUTS = new HashMap<>(); - - public static final String TASK1_PARAM1 = "task1.param1"; - public static final String TASK1_PARAM1_VALUE = "task1.param1.value"; - public static final String TASK1_PARAM2 = "task1.param2"; - - public static final String TASK2_PARAM1 = "task2.param1"; - public static final String TASK2_PARAM1_VALUE = "task2.param1.value"; - public static final String TASK2_PARAM2 = "task2.param2"; - - public static final String TASK3_PARAM1 = "task3.param1"; - public static final String TASK3_PARAM1_VALUE = "task3.param1.value"; - public static final String TASK3_PARAM2 = "task3.param2"; - - private static final Map TASK1_INPUTS_SANITIZED = new HashMap<>(); - private static final Map TASK2_INPUTS_SANITIZED = new HashMap<>(); - private static final Map TASK3_INPUTS_SANITIZED = new HashMap<>(); - - private static final String CONTAINER_ID = "CONTAINER_ID"; - - @Mock - private KieServerRegistry registry; - - @Mock - private QueryService queryService; - - @Mock - private UserTaskService userTaskService; - - private TaskAssigningRuntimeServiceQueryHelper helper; - - @Captor - private ArgumentCaptor paramsCaptor; - - @Captor - private ArgumentCaptor contextCaptor; - - @Before - public void setUp() { - this.helper = spy(new TaskAssigningRuntimeServiceQueryHelper(registry, userTaskService, queryService)); - } - - @Test - public void executeFindTaskQueryReadNoInputs() { - Map params = prepareQuery(TaskInputVariablesReadMode.DONT_READ); - - List result = helper.executeFindTasksQuery(params); - - verifyQueryWasExecuted(); - - // no inputs were loaded - assertNull(result.get(0).getInputData()); - assertNull(result.get(1).getInputData()); - assertNull(result.get(2).getInputData()); - } - - @Test - public void executeFindTaskQueryReadNoInputsByDefault() { - Map params = prepareQuery(null); - - List result = helper.executeFindTasksQuery(params); - - verifyQueryWasExecuted(); - - // no inputs were loaded - assertNull(result.get(0).getInputData()); - assertNull(result.get(1).getInputData()); - assertNull(result.get(2).getInputData()); - } - - @Test - public void executeFindTaskQueryReadInputsForAll() { - Map params = prepareQuery(TaskInputVariablesReadMode.READ_FOR_ALL); - - List result = helper.executeFindTasksQuery(params); - - verifyQueryWasExecuted(); - - // all the inputs were loaded - assertEquals(TASK1_INPUTS_SANITIZED, result.get(0).getInputData()); - assertEquals(TASK2_INPUTS_SANITIZED, result.get(1).getInputData()); - assertEquals(TASK3_INPUTS_SANITIZED, result.get(2).getInputData()); - } - - @Test - public void executeFindTaskQueryReadInputsForActiveTasks() { - Map params = prepareQuery(TaskInputVariablesReadMode.READ_FOR_ACTIVE_TASKS_WITH_NO_PLANNING_ENTITY); - - List result = helper.executeFindTasksQuery(params); - - verifyQueryWasExecuted(); - - // task1 is Ready and has PlanningTask - assertEquals(TASK1_INPUTS_SANITIZED, result.get(0).getInputData()); - // task2 is Reserved but hasn't PlanningTask - assertNull(result.get(1).getInputData()); - // task3 is not active. - assertNull(result.get(2).getInputData()); - } - - @Test - public void executeFindTaskQueryContainerNoAvailableFailure() { - Map params = prepareQuery(TaskInputVariablesReadMode.READ_FOR_ALL); - when(registry.getContainer(CONTAINER_ID)).thenReturn(null); - assertThatThrownBy(() -> helper.executeFindTasksQuery(params)).hasMessage("Container " + CONTAINER_ID + " is not available to serve requests"); - } - - @Test - public void buildQueryParamsWithFromTaskId() { - buildQueryParamsWithParam(FROM_TASK_ID, FROM_TASK_ID_VALUE, Collections.singletonList(FROM_TASK_ID_VALUE), AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_ID.columnName(), GREATER_OR_EQUALS_TO); - } - - @Test - public void buildQueryParamsWithoutFromTaskId() { - buildQueryParamsWithoutParam(FROM_TASK_ID, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_ID.columnName()); - } - - @Test - public void buildQueryParamsWithToTaskId() { - buildQueryParamsWithParam(TO_TASK_ID, TO_TASK_ID_VALUE, Collections.singletonList(TO_TASK_ID_VALUE), AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_ID.columnName(), LOWER_OR_EQUALS_TO); - } - - @Test - public void buildQueryParamsWithoutToTaskId() { - buildQueryParamsWithoutParam(TO_TASK_ID, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_ID.columnName()); - } - - @Test - public void buildQueryParamsWithStatus() { - buildQueryParamsWithParam(STATUS, STATUS_VALUE, STATUS_VALUE, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.STATUS.columnName(), EQUALS_TO); - } - - @Test - public void buildQueryParamsWithStatusEmpty() { - Map params = Collections.singletonMap(STATUS, Collections.emptyList()); - List result = helper.buildQueryParams(params); - assertNotContainsParam(result.toArray(new QueryParam[0]), AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.STATUS.columnName()); - } - - @Test - public void buildQueryParamsWithoutStatus() { - buildQueryParamsWithoutParam(STATUS, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.STATUS.columnName()); - } - - @Test - public void buildQueryParamsWithFromLasModificationDate() { - buildQueryParamsWithParam(FROM_LAST_MODIFICATION_DATE, FROM_LAST_MODIFICATION_VALUE, Collections.singletonList(Date.from(FROM_LAST_MODIFICATION_VALUE.atZone(ZoneId.systemDefault()).toInstant())), AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.LAST_MODIFICATION_DATE.columnName(), GREATER_OR_EQUALS_TO); - } - - @Test - public void buildQueryParamsWithFromLasModificationDate2() { - buildQueryParamsWithParam(FROM_LAST_MODIFICATION_DATE, LocalDateTimeValue.from(FROM_LAST_MODIFICATION_VALUE), Collections.singletonList(Date.from(FROM_LAST_MODIFICATION_VALUE.atZone(ZoneId.systemDefault()).toInstant())), AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.LAST_MODIFICATION_DATE.columnName(), GREATER_OR_EQUALS_TO); - } - - @Test - public void buildQueryParamsWithoutFromLastModificationDate() { - buildQueryParamsWithoutParam(FROM_LAST_MODIFICATION_DATE, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.LAST_MODIFICATION_DATE.columnName()); - } - - private void buildQueryParamsWithParam(String paramName, T value, E expectedValue, String expectedColumnName, String expectedOperation) { - Map params = Collections.singletonMap(paramName, value); - List result = helper.buildQueryParams(params); - assertContainsParam(result.toArray(new QueryParam[0]), expectedColumnName, expectedOperation, expectedValue, 0); - } - - private void buildQueryParamsWithoutParam(String paramName, String columnName) { - List result = helper.buildQueryParams(Collections.singletonMap(paramName, null)); - assertNotContainsParam(result.toArray(new QueryParam[0]), columnName); - } - - @Test - public void readTaskDataSummary() { - List invocation0 = mockTasks(); - List invocation1 = Arrays.asList(mockTaskData(4L), mockTaskData(5L)); - List invocation2 = Collections.singletonList(mockTaskData(6L)); - doAnswer(new Answer() { - private int invocations = 0; - - public Object answer(InvocationOnMock invocation) { - switch (invocations++) { - case 0: - return invocation0; - case 1: - return invocation1; - case 2: - return invocation2; - default: - return Collections.emptyList(); - } - } - }).when(helper).executeQuery(eq(queryService), anyString(), any(TaskAssigningTaskDataWithPotentialOwnersQueryMapper.class), any(), any()); - List result = helper.readTasksDataSummary(0, Collections.emptyList(), 10); - assertEquals(TASK1_ID, result.get(0).getTaskId(), 0); - assertEquals(TASK2_ID, result.get(1).getTaskId(), 0); - assertEquals(TASK3_ID, result.get(2).getTaskId(), 0); - assertEquals(4L, result.get(3).getTaskId(), 0); - assertEquals(5L, result.get(4).getTaskId(), 0); - assertEquals(6L, result.get(5).getTaskId(), 0); - } - - private Map prepareQuery(TaskInputVariablesReadMode readMode) { - Map params = mockQueryParams(readMode); - List taskDataList = mockTasks(); - doReturn(taskDataList).when(helper) - .executeQuery(eq(queryService), anyString(), any(TaskAssigningTaskDataWithPotentialOwnersQueryMapper.class), any(), any()); - KieContainerInstanceImpl container = mock(KieContainerInstanceImpl.class); - when(container.getStatus()).thenReturn(KieContainerStatus.STARTED); - when(registry.getContainer(CONTAINER_ID)).thenReturn(container); - return params; - } - - private void verifyQueryWasExecuted() { - verify(helper).executeQuery(eq(queryService), anyString(), any(TaskAssigningTaskDataWithPotentialOwnersQueryMapper.class), contextCaptor.capture(), paramsCaptor.capture()); - QueryParam[] queryParams = paramsCaptor.getValue(); - assertContainsParam(queryParams, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_ID.columnName(), GREATER_OR_EQUALS_TO, Collections.singletonList(FROM_TASK_ID_VALUE), 0); - assertContainsParam(queryParams, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_ID.columnName(), LOWER_OR_EQUALS_TO, Collections.singletonList(TO_TASK_ID_VALUE), 1); - assertContainsParam(queryParams, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.LAST_MODIFICATION_DATE.columnName(), GREATER_OR_EQUALS_TO, Collections.singletonList(Date.from(FROM_LAST_MODIFICATION_VALUE.atZone(ZoneId.systemDefault()).toInstant())), 2); - assertContainsParam(queryParams, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.STATUS.columnName(), EQUALS_TO, STATUS_VALUE, 3); - - QueryContext context = contextCaptor.getValue(); - assertEquals(AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_ID.columnName(), context.getOrderBy()); - assertEquals(PAGE_SIZE_VALUE, context.getCount(), 0); - assertEquals(PAGE_VALUE * PAGE_SIZE_VALUE, context.getOffset(), 0); - assertTrue(context.isAscending()); - } - - private void assertContainsParam(QueryParam[] params, String columnName, String operation, Object value, int index) { - QueryParam param = params[index]; - assertEquals(columnName, param.getColumn()); - assertEquals(operation, param.getOperator()); - assertEquals(value, param.getValue()); - } - - private void assertNotContainsParam(QueryParam[] params, String columnName) { - assertFalse(Stream.of(params).anyMatch(param -> param.getColumn().equals(columnName))); - } - - private List mockTasks() { - TaskData task1 = mockTaskData(TASK1_ID, Status.Ready, false, CONTAINER_ID); - TaskData task2 = mockTaskData(TASK2_ID, Status.Reserved, true, CONTAINER_ID); - TaskData task3 = mockTaskData(TASK3_ID, Status.Completed, true, CONTAINER_ID); - - TASK1_INPUTS.put(TASK1_PARAM1, TASK1_PARAM1_VALUE); - TASK1_INPUTS.put(TASK1_PARAM2, null); - - TASK2_INPUTS.put(TASK2_PARAM1, TASK2_PARAM1_VALUE); - TASK2_INPUTS.put(TASK2_PARAM2, null); - - TASK3_INPUTS.put(TASK3_PARAM1, TASK3_PARAM1_VALUE); - TASK3_INPUTS.put(TASK3_PARAM2, null); - - TASK1_INPUTS_SANITIZED.put(TASK1_PARAM1, TASK1_PARAM1_VALUE); - TASK2_INPUTS_SANITIZED.put(TASK2_PARAM1, TASK2_PARAM1_VALUE); - TASK3_INPUTS_SANITIZED.put(TASK3_PARAM1, TASK3_PARAM1_VALUE); - - when(userTaskService.getTaskInputContentByTaskId(any(), eq(TASK1_ID))).thenReturn(TASK1_INPUTS); - when(userTaskService.getTaskInputContentByTaskId(any(), eq(TASK2_ID))).thenReturn(TASK2_INPUTS); - when(userTaskService.getTaskInputContentByTaskId(any(), eq(TASK3_ID))).thenReturn(TASK3_INPUTS); - - return Arrays.asList(task1, task2, task3); - } - - private Map mockQueryParams(TaskInputVariablesReadMode readMode) { - Map params = new HashMap<>(); - params.put(FROM_TASK_ID, FROM_TASK_ID_VALUE); - params.put(TO_TASK_ID, TO_TASK_ID_VALUE); - params.put(FROM_LAST_MODIFICATION_DATE, FROM_LAST_MODIFICATION_VALUE); - params.put(STATUS, STATUS_VALUE); - params.put(PAGE, PAGE_VALUE); - params.put(PAGE_SIZE, PAGE_SIZE_VALUE); - if (readMode != null) { - params.put(TASK_INPUT_VARIABLES_MODE, readMode.name()); - } - return params; - } - - private TaskData mockTaskData(Long taskId) { - return TaskData.builder().taskId(taskId).build(); - } - - private TaskData mockTaskData(Long taskId, Status status, boolean hasPlanningTask, String containerId) { - TaskData taskData = TaskData.builder() - .taskId(taskId) - .status(status.name()) - .containerId(containerId) - .build(); - if (hasPlanningTask) { - PlanningTask planningTask = PlanningTask.builder() - .taskId(taskId) - .build(); - taskData.setPlanningTask(planningTask); - } - return taskData; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/command/AbstractPlanningCommandTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/command/AbstractPlanningCommandTest.java deleted file mode 100644 index 2e51058db5..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/command/AbstractPlanningCommandTest.java +++ /dev/null @@ -1,74 +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.runtime.command; - -import org.jbpm.services.task.commands.TaskContext; -import org.junit.Before; -import org.kie.internal.task.api.TaskPersistenceContext; -import org.kie.server.services.taskassigning.runtime.persistence.PlanningTaskImpl; -import org.mockito.ArgumentCaptor; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -public abstract class AbstractPlanningCommandTest { - - protected static final Long TASK_ID = 1L; - protected static final String ASSIGNED_USER = "ASSIGNED_USER"; - protected static final Integer INDEX = 2; - protected static final Boolean PUBLISHED = Boolean.TRUE; - protected static final String USER_ID = "USER_ID"; - - protected TaskContext taskContext; - - protected TaskPersistenceContext persistenceContext; - - protected ArgumentCaptor planningTaskCaptor; - - protected T command; - - @Before - public void setUp() { - taskContext = mock(TaskContext.class); - persistenceContext = mock(TaskPersistenceContext.class); - planningTaskCaptor = ArgumentCaptor.forClass(PlanningTaskImpl.class); - when(taskContext.getPersistenceContext()).thenReturn(persistenceContext); - command = createCommand(); - } - - protected abstract T createCommand(); - - protected void verifyPlanningTaskMerged(PlanningTaskImpl planningTask) { - verify(persistenceContext).merge(planningTask); - verify(planningTask).setAssignedUser(ASSIGNED_USER); - verify(planningTask).setIndex(INDEX); - verify(planningTask).setPublished(PUBLISHED); - verify(planningTask).setLastModificationDate(any()); - } - - protected void verifyPlanningTaskPersisted(PlanningTaskImpl planningTask) { - verify(persistenceContext).persist(planningTask); - assertThat(planningTask.getTaskId()).isEqualTo(TASK_ID); - assertThat(planningTask.getAssignedUser()).isEqualTo(ASSIGNED_USER); - assertThat(planningTask.getIndex()).isEqualTo(INDEX); - assertThat(planningTask.isPublished()).isEqualTo(PUBLISHED); - assertThat(planningTask.getLastModificationDate()).isNotNull(); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/command/DelegateAndSaveCommandTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/command/DelegateAndSaveCommandTest.java deleted file mode 100644 index 83fcf4b9b8..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/command/DelegateAndSaveCommandTest.java +++ /dev/null @@ -1,210 +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.runtime.command; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.assertj.core.api.Assertions; -import org.jbpm.services.task.commands.DelegateTaskCommand; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.kie.api.runtime.Context; -import org.kie.api.task.model.OrganizationalEntity; -import org.kie.api.task.model.PeopleAssignments; -import org.kie.api.task.model.Status; -import org.kie.api.task.model.Task; -import org.kie.api.task.model.TaskData; -import org.kie.server.api.model.taskassigning.PlanningItem; -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.services.taskassigning.runtime.persistence.PlanningTaskImpl; -import org.mockito.ArgumentCaptor; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.kie.api.task.model.Status.Completed; -import static org.kie.api.task.model.Status.Created; -import static org.kie.api.task.model.Status.Error; -import static org.kie.api.task.model.Status.Exited; -import static org.kie.api.task.model.Status.Failed; -import static org.kie.api.task.model.Status.InProgress; -import static org.kie.api.task.model.Status.Obsolete; -import static org.kie.api.task.model.Status.Ready; -import static org.kie.api.task.model.Status.Reserved; -import static org.kie.api.task.model.Status.Suspended; -import static org.kie.server.services.taskassigning.runtime.command.DelegateAndSaveCommand.TASK_MODIFIED_ERROR_MSG; -import static org.kie.server.services.taskassigning.runtime.command.DelegateAndSaveCommand.TASK_MODIFIED_ERROR_MSG_1; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@RunWith(Parameterized.class) -public class DelegateAndSaveCommandTest extends AbstractPlanningCommandTest { - - private Task task; - - private org.kie.api.task.model.TaskData taskData; - - private PeopleAssignments peopleAssignments; - - private List potentialOwners; - - private org.kie.api.task.model.User organizationalEntity; - - private DelegateTaskCommand delegateTaskCommand; - - @Parameterized.Parameter - public Status status; - - @Parameterized.Parameter(1) - public boolean statusIsValid; - - @Parameterized.Parameter(2) - public boolean potentialOwnerBelongsToTask; - - @Parameterized.Parameter(3) - public PlanningTaskImpl previousPlanningTask; - - @Parameterized.Parameters - public static Collection data() { - List data = new ArrayList<>(); - - data.add(new Object[]{Ready, true, false, null}); - data.add(new Object[]{Ready, true, false, mockPlanningTask(TASK_ID)}); - data.add(new Object[]{Ready, true, true, null}); - data.add(new Object[]{Ready, true, true, mockPlanningTask(TASK_ID)}); - - data.add(new Object[]{Reserved, true, false, null}); - data.add(new Object[]{Reserved, true, false, mockPlanningTask(TASK_ID)}); - data.add(new Object[]{Reserved, true, true, null}); - data.add(new Object[]{Reserved, true, true, mockPlanningTask(TASK_ID)}); - - data.add(new Object[]{Created, false, false, null}); - data.add(new Object[]{InProgress, false, false, null}); - data.add(new Object[]{Suspended, false, false, null}); - data.add(new Object[]{Completed, false, false, null}); - data.add(new Object[]{Failed, false, false, null}); - data.add(new Object[]{Error, false, false, null}); - data.add(new Object[]{Exited, false, false, null}); - data.add(new Object[]{Obsolete, false, false, null}); - return data; - } - - @Override - @Before - public void setUp() { - super.setUp(); - task = mock(Task.class); - taskData = mock(TaskData.class); - peopleAssignments = mock(PeopleAssignments.class); - potentialOwners = new ArrayList<>(); - organizationalEntity = mock(org.kie.api.task.model.User.class); - delegateTaskCommand = mock(DelegateTaskCommand.class); - planningTaskCaptor = ArgumentCaptor.forClass(PlanningTaskImpl.class); - } - - @Override - protected DelegateAndSaveCommand createCommand() { - PlanningItem planningItem = PlanningItem.builder() - .taskId(TASK_ID) - .planningTask(PlanningTask.builder() - .taskId(TASK_ID) - .assignedUser(ASSIGNED_USER) - .index(INDEX) - .published(PUBLISHED) - .build()).build(); - return spy(new DelegateAndSaveCommand(planningItem, USER_ID)); - } - - @Test - public void execute() { - if (statusIsValid) { - executeWithValidStatus(status, potentialOwnerBelongsToTask, previousPlanningTask); - if (potentialOwnerBelongsToTask) { - assertThat(potentialOwners).contains(organizationalEntity); - } else { - assertThat(potentialOwners).doesNotContain(organizationalEntity); - } - } else { - executeWithInvalidStatus(status, previousPlanningTask); - } - } - - @Test - public void executeWithDeletedTask() { - when(persistenceContext.findTask(TASK_ID)).thenReturn(null); - Assertions.assertThatThrownBy(() -> command.execute(taskContext)).hasMessage(String.format(TASK_MODIFIED_ERROR_MSG_1, - TASK_ID)); - } - - private void executeWithValidStatus(Status status, boolean potentialOwnerAlreadyBelongs, PlanningTaskImpl previousPlanningTask) { - prepareExecution(status, potentialOwnerAlreadyBelongs, previousPlanningTask); - command.execute(taskContext); - - verify(delegateTaskCommand).execute(taskContext); - - if (previousPlanningTask != null) { - verifyPlanningTaskMerged(previousPlanningTask); - } else { - verify(persistenceContext).persist(planningTaskCaptor.capture()); - verifyPlanningTaskPersisted(planningTaskCaptor.getValue()); - } - } - - private void executeWithInvalidStatus(Status status, PlanningTaskImpl previousPlanningTask) { - prepareExecution(status, false, previousPlanningTask); - Assertions.assertThatThrownBy(() -> command.execute(taskContext)).hasMessage(String.format(TASK_MODIFIED_ERROR_MSG, - TASK_ID, - status, - Arrays.toString(new Status[]{Ready, Reserved}))); - } - - private void prepareExecution(Status status, boolean potentialOwnerAlreadyBelongs, PlanningTaskImpl previousPlanningTask) { - when(task.getTaskData()).thenReturn(taskData); - when(taskData.getStatus()).thenReturn(status); - when(task.getPeopleAssignments()).thenReturn(peopleAssignments); - when(peopleAssignments.getPotentialOwners()).thenReturn(potentialOwners); - if (potentialOwnerAlreadyBelongs) { - potentialOwners.add(organizationalEntity); - } - when(persistenceContext.findTask(TASK_ID)).thenReturn(task); - if (previousPlanningTask != null) { - when(persistenceContext.find(PlanningTaskImpl.class, TASK_ID)).thenReturn(previousPlanningTask); - } - when(organizationalEntity.getId()).thenReturn(ASSIGNED_USER); - delegateTaskCommand = spy(new DelegateTaskCommand() { - @Override - public Void execute(Context context) { - if (!potentialOwners.contains(organizationalEntity)) { - potentialOwners.add(organizationalEntity); - } - return null; - } - }); - when(command.createDelegateCommand(TASK_ID, USER_ID, ASSIGNED_USER)).thenReturn(delegateTaskCommand); - } - - private static PlanningTaskImpl mockPlanningTask(long taskId) { - PlanningTaskImpl result = new PlanningTaskImpl(); - result.setTaskId(taskId); - return spy(result); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/command/DeletePlanningItemCommandTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/command/DeletePlanningItemCommandTest.java deleted file mode 100644 index c77512179a..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/command/DeletePlanningItemCommandTest.java +++ /dev/null @@ -1,49 +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.runtime.command; - -import org.junit.Test; -import org.kie.server.services.taskassigning.runtime.persistence.PlanningTaskImpl; - -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -public class DeletePlanningItemCommandTest extends AbstractPlanningCommandTest { - - @Override - protected DeletePlanningItemCommand createCommand() { - return new DeletePlanningItemCommand(TASK_ID); - } - - @Test - public void executeWithExistingItem() { - PlanningTaskImpl planningTask = mock(PlanningTaskImpl.class); - when(persistenceContext.find(PlanningTaskImpl.class, TASK_ID)).thenReturn(planningTask); - command.execute(taskContext); - verify(persistenceContext).remove(planningTask); - } - - @Test - public void executeWithNonExistingItem() { - when(persistenceContext.find(PlanningTaskImpl.class, TASK_ID)).thenReturn(null); - command.execute(taskContext); - verify(persistenceContext, never()).remove(any()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/command/SavePlanningItemCommandTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/command/SavePlanningItemCommandTest.java deleted file mode 100644 index e0cf857cbb..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/command/SavePlanningItemCommandTest.java +++ /dev/null @@ -1,58 +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.runtime.command; - -import org.junit.Test; -import org.kie.server.api.model.taskassigning.PlanningItem; -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.services.taskassigning.runtime.persistence.PlanningTaskImpl; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -public class SavePlanningItemCommandTest extends AbstractPlanningCommandTest { - - @Override - protected SavePlanningItemCommand createCommand() { - PlanningItem planningItem = PlanningItem.builder() - .taskId(TASK_ID) - .planningTask(PlanningTask.builder() - .taskId(TASK_ID) - .assignedUser(ASSIGNED_USER) - .index(INDEX) - .published(PUBLISHED) - .build()).build(); - return new SavePlanningItemCommand(planningItem); - } - - @Test - public void executeWithPlanningTaskExisting() { - PlanningTaskImpl planningTask = mock(PlanningTaskImpl.class); - when(persistenceContext.find(PlanningTaskImpl.class, TASK_ID)).thenReturn(planningTask); - command.execute(taskContext); - verifyPlanningTaskMerged(planningTask); - } - - @Test - public void executeWithPlanningTaskNotExisting() { - when(persistenceContext.find(PlanningTaskImpl.class, TASK_ID)).thenReturn(null); - command.execute(taskContext); - verify(persistenceContext).persist(planningTaskCaptor.capture()); - verifyPlanningTaskPersisted(planningTaskCaptor.getValue()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/persistence/TaskAssigningPersistenceUnitExtensionsLoaderTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/persistence/TaskAssigningPersistenceUnitExtensionsLoaderTest.java deleted file mode 100644 index 801e542011..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/persistence/TaskAssigningPersistenceUnitExtensionsLoaderTest.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.runtime.persistence; - -import java.util.ArrayList; -import java.util.List; - -import javax.persistence.spi.PersistenceUnitInfo; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.kie.server.api.KieServerConstants.KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class TaskAssigningPersistenceUnitExtensionsLoaderTest { - - private TaskAssigningPersistenceUnitExtensionsLoader extensionsLoader; - - @Mock - private PersistenceUnitInfo info; - - @Before - public void setUp() { - extensionsLoader = new TaskAssigningPersistenceUnitExtensionsLoader(); - } - - @After - public void cleanUp() { - System.clearProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED); - } - - @Test - public void isEnabledTrue() { - System.setProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED, "false"); - assertThat(extensionsLoader.isEnabled()).isTrue(); - } - - @Test - public void isEnabledFalse() { - System.setProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED, "true"); - assertThat(extensionsLoader.isEnabled()).isFalse(); - } - - @Test - public void isEnabledFalseWithUnSetProperty() { - System.clearProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED); - assertThat(extensionsLoader.isEnabled()).isFalse(); - } - - @Test - public void loadExtensions() { - List managedClassNames = new ArrayList<>(); - when(info.getManagedClassNames()).thenReturn(managedClassNames); - extensionsLoader.loadExtensions(info); - assertThat(managedClassNames).contains(PlanningTaskImpl.class.getName()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/AbstractTaskAssigningDataQueryMapperTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/AbstractTaskAssigningDataQueryMapperTest.java deleted file mode 100644 index 59714aae1a..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/AbstractTaskAssigningDataQueryMapperTest.java +++ /dev/null @@ -1,321 +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.runtime.query; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -import org.apache.commons.lang3.tuple.Pair; -import org.dashbuilder.dataset.DataColumn; -import org.dashbuilder.dataset.DataSet; -import org.junit.Before; -import org.junit.Test; -import org.kie.server.api.model.taskassigning.PlanningTask; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public abstract class AbstractTaskAssigningDataQueryMapperTest> { - - /** - * Task1 has planning task and potential owners. - */ - static final Long TASK1_ID = 1L; - static final Date TASK1_CREATED_ON = new Date(); - static final String TASK1_ACTUAL_OWNER = "TASK1_ACTUAL_OWNER"; - static final String TASK1_DEPLOYMENT_ID = "TASK1_DEPLOYMENT_ID"; - static final String TASK1_NAME = "TASK1_NAME"; - static final Integer TASK1_PRIORITY = 1; - static final String TASK1_PROCESS_ID = "TASK1_PROCESS_ID"; - static final Long TASK1_PROCESS_INSTANCE_ID = 1L; - static final String TASK1_STATUS = "TASK1_STATUS"; - static final Date TASK1_LAST_MODIFICATION_DATE = new Date(); - static final Long TASK1_PLANNING_TASK_ID = 1L; - static final String TASK1_PLANNING_TASK_ASSIGNED_USER = "TASK1_PLANNING_ASSIGNED_USER"; - static final Boolean TASK1_PLANNING_TASK_PUBLISHED = true; - static final Integer TASK1_PLANNING_TASK_INDEX = 1; - - static final String TASK1_PO_1_ID = "TASK1_PO_1_ID"; - static final String TASK1_PO_1_TYPE = "User"; - static final String TASK1_PO_2_ID = "TASK1_PO_2_ID"; - static final String TASK1_PO_2_TYPE = "Group"; - - /** - * Task2 has planning task and no potential owners. - */ - static final Long TASK2_ID = 2L; - static final Date TASK2_CREATED_ON = new Date(); - static final String TASK2_ACTUAL_OWNER = "TASK2_ACTUAL_OWNER"; - static final String TASK2_DEPLOYMENT_ID = "TASK2_DEPLOYMENT_ID"; - static final String TASK2_NAME = "TASK2_NAME"; - static final Integer TASK2_PRIORITY = 2; - static final String TASK2_PROCESS_ID = "TASK2_PROCESS_ID"; - static final Long TASK2_PROCESS_INSTANCE_ID = 2L; - static final String TASK2_STATUS = "TASK2_STATUS"; - static final Date TASK2_LAST_MODIFICATION_DATE = new Date(); - static final Long TASK2_PLANNING_TASK_ID = 2L; - static final String TASK2_PLANNING_TASK_ASSIGNED_USER = "TASK2_PLANNING_ASSIGNED_USER"; - static final Boolean TASK2_PLANNING_TASK_PUBLISHED = false; - static final Integer TASK2_PLANNING_TASK_INDEX = 2; - - /** - * Task3 has potential owners and no planning task. - */ - static final Long TASK3_ID = 3L; - static final Date TASK3_CREATED_ON = new Date(); - static final String TASK3_ACTUAL_OWNER = "TASK3_ACTUAL_OWNER"; - static final String TASK3_DEPLOYMENT_ID = "TASK3_DEPLOYMENT_ID"; - static final String TASK3_NAME = "TASK3_NAME"; - static final Integer TASK3_PRIORITY = 3; - static final String TASK3_PROCESS_ID = "TASK3_PROCESS_ID"; - static final Long TASK3_PROCESS_INSTANCE_ID = 3L; - static final String TASK3_STATUS = "TASK3_STATUS"; - static final Date TASK3_LAST_MODIFICATION_DATE = new Date(); - - static final String TASK3_PO_1_ID = "TASK3_PO_1_ID"; - static final String TASK3_PO_1_TYPE = "User"; - static final String TASK3_PO_2_ID = "TASK3_PO_2_ID"; - static final String TASK3_PO_2_TYPE = "Group"; - - T queryMapper; - - @Before - public void setUp() { - queryMapper = createQueryMapper(); - } - - protected abstract T createQueryMapper(); - - protected abstract void verifyResult(List result); - - protected abstract String getExpectedName(); - - protected abstract boolean readPotentialOwnersExpectedValue(); - - @Test - public void map() { - List> rawValues = createTestValues(); - DataSet dataSet = mockDataSet(rawValues); - List result = queryMapper.map(dataSet); - verifyResult(result); - } - - @Test - public void getName() { - assertEquals(getExpectedName(), queryMapper.getName()); - } - - @Test - public void toLocalDateTimeNull() { - assertNull(null, TaskAssigningTaskDataWithPotentialOwnersQueryMapper.toLocalDateTime(null)); - } - - @Test - public void toLocalDateTimeFromDate() { - Date date = new Date(); - LocalDateTime expectedValue = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); - assertEquals(expectedValue, TaskAssigningTaskDataWithPotentialOwnersQueryMapper.toLocalDateTime(date)); - } - - @Test - public void toLocalDateTimeFromLocalDateTime() { - LocalDateTime value = LocalDateTime.now(); - assertEquals(value, TaskAssigningTaskDataWithPotentialOwnersQueryMapper.toLocalDateTime(value)); - } - - @Test - public void readPotentialOwners() { - assertEquals(readPotentialOwnersExpectedValue(), queryMapper.readPotentialOwners()); - } - - protected List> createTestValues() { - PlanningTask task1PlanningTask = PlanningTask.builder() - .taskId(TASK1_PLANNING_TASK_ID) - .assignedUser(TASK1_PLANNING_TASK_ASSIGNED_USER) - .index(TASK1_PLANNING_TASK_INDEX) - .published(TASK1_PLANNING_TASK_PUBLISHED) - .build(); - List> task1PotentialOwners = Arrays.asList(Pair.of(TASK1_PO_1_ID, TASK1_PO_1_TYPE), - Pair.of(TASK1_PO_2_ID, TASK1_PO_2_TYPE)); - - List> task1RawValues = mockRawValues(TASK1_ID, - TASK1_CREATED_ON, - TASK1_ACTUAL_OWNER, - TASK1_DEPLOYMENT_ID, - TASK1_NAME, - TASK1_PRIORITY, - TASK1_PROCESS_ID, - TASK1_PROCESS_INSTANCE_ID, - TASK1_STATUS, - TASK1_LAST_MODIFICATION_DATE, - task1PlanningTask, - task1PotentialOwners); - - PlanningTask task2PlanningTask = PlanningTask.builder() - .taskId(TASK2_PLANNING_TASK_ID) - .assignedUser(TASK2_PLANNING_TASK_ASSIGNED_USER) - .index(TASK2_PLANNING_TASK_INDEX) - .published(TASK2_PLANNING_TASK_PUBLISHED) - .build(); - - List> task2RawValues = mockRawValues(TASK2_ID, - TASK2_CREATED_ON, - TASK2_ACTUAL_OWNER, - TASK2_DEPLOYMENT_ID, - TASK2_NAME, - TASK2_PRIORITY, - TASK2_PROCESS_ID, - TASK2_PROCESS_INSTANCE_ID, - TASK2_STATUS, - TASK2_LAST_MODIFICATION_DATE, - task2PlanningTask, - Collections.emptyList()); - - List> task3PotentialOwners = Arrays.asList(Pair.of(TASK3_PO_1_ID, TASK3_PO_1_TYPE), - Pair.of(TASK3_PO_2_ID, TASK3_PO_2_TYPE)); - - List> task3RawValues = mockRawValues(TASK3_ID, - TASK3_CREATED_ON, - TASK3_ACTUAL_OWNER, - TASK3_DEPLOYMENT_ID, - TASK3_NAME, - TASK3_PRIORITY, - TASK3_PROCESS_ID, - TASK3_PROCESS_INSTANCE_ID, - TASK3_STATUS, - TASK3_LAST_MODIFICATION_DATE, - null, - task3PotentialOwners); - - List> rawValues = new ArrayList<>(); - rawValues.addAll(task1RawValues); - rawValues.addAll(task2RawValues); - rawValues.addAll(task3RawValues); - return rawValues; - } - - protected List> mockRawValues(Long taskId, Date createdOn, String actualOwner, String deploymentId, String taskName, - Integer priority, String processId, Long processInstanceId, String status, Date lastModificationDate, - PlanningTask planningTask, - List> potentialOwners) { - List> result = new ArrayList<>(); - - if (!potentialOwners.isEmpty()) { - potentialOwners.forEach(potentialOwner -> { - result.add(mockRawValues(taskId, createdOn, actualOwner, deploymentId, taskName, priority, processId, processInstanceId, - status, lastModificationDate, planningTask, potentialOwner.getLeft(), potentialOwner.getRight())); - }); - } else { - result.add(mockRawValues(taskId, createdOn, actualOwner, deploymentId, taskName, priority, processId, processInstanceId, - status, lastModificationDate, planningTask, null, null)); - } - return result; - } - - protected List mockRawValues(Long taskId, Date createdOn, String actualOwner, String deploymentId, String taskName, - Integer priority, String processId, Long processInstanceId, String status, Date lastModificationDate, - PlanningTask planningTask, String potentialOwnerId, String potentialOwnerType) { - - return mockRawValues(taskId, createdOn, actualOwner, deploymentId, taskName, priority, processId, processInstanceId, - status, lastModificationDate, - planningTask != null ? planningTask.getTaskId() : null, - planningTask != null ? planningTask.getAssignedUser() : null, - planningTask != null ? planningTask.getIndex() : null, - planningTask != null ? toInteger(planningTask.getPublished()) : null, - potentialOwnerId, - potentialOwnerType); - } - - protected List mockRawValues(Long taskId, Date createdOn, String actualOwner, String deploymentId, String taskName, - Integer priority, String processId, Long processInstanceId, String status, Date lastModificationDate, - Long planningTaskId, String planningTaskAssignedUser, Integer planningTaskIndex, Integer planningTaskPublished, - String potentialOwnerId, String potentialOwnerType) { - List row = new ArrayList<>(); - row.add(taskId); - row.add(createdOn); - row.add(actualOwner); - row.add(deploymentId); - row.add(taskName); - row.add(priority); - row.add(processId); - row.add(processInstanceId); - row.add(status); - row.add(lastModificationDate); - row.add(planningTaskId); - row.add(planningTaskAssignedUser); - row.add(planningTaskIndex); - row.add(planningTaskPublished); - row.add(potentialOwnerId); - row.add(potentialOwnerType); - return row; - } - - protected Integer toInteger(Boolean value) { - return value != null && value ? 1 : 0; - } - - protected DataSet mockDataSet(List> dbRows) { - - DataSet dataSet = mock(DataSet.class); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_ID.columnName(), dbRows, 0); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.CREATED_ON.columnName(), dbRows, 1); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.ACTUAL_OWNER.columnName(), dbRows, 2); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.DEPLOYMENT_ID.columnName(), dbRows, 3); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.TASK_NAME.columnName(), dbRows, 4); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.PRIORITY.columnName(), dbRows, 5); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.PROCESS_ID.columnName(), dbRows, 6); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.PROCESS_INSTANCE_ID.columnName(), dbRows, 7); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.STATUS.columnName(), dbRows, 8); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.LAST_MODIFICATION_DATE.columnName(), dbRows, 9); - - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.PLANNING_TASK_TASK_ID.columnName(), dbRows, 10); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.PLANNING_TASK_ASSIGNED_USER.columnName(), dbRows, 11); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.PLANNING_TASK_INDEX.columnName(), dbRows, 12); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.PLANNING_TASK_PUBLISHED.columnName(), dbRows, 13); - - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.POTENTIAL_OWNER_ID.columnName(), dbRows, 14); - addColumn(dataSet, AbstractTaskAssigningQueryMapper.TASK_QUERY_COLUMN.POTENTIAL_OWNER_TYPE.columnName(), dbRows, 15); - - when(dataSet.getRowCount()).thenReturn(dbRows.size()); - return dataSet; - } - - protected void addColumn(DataSet dataSetMock, String columnId, List> dbRows, int columnIndex) { - DataColumn dataColumn = mockColumn(columnId, dbRows, columnIndex); - when(dataSetMock.getColumnById(columnId)).thenReturn(dataColumn); - } - - protected DataColumn mockColumn(String columnId, List> dbRows, int columnIndex) { - DataColumn column = mock(DataColumn.class); - when(column.getId()).thenReturn(columnId); - List columnValues = buildColumnValues(dbRows, columnIndex); - when(column.getValues()).thenReturn(columnValues); - return column; - } - - protected List buildColumnValues(List> dbRows, int column) { - return dbRows.stream().map(row -> row.get(column)).collect(Collectors.toList()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataQueryMapperTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataQueryMapperTest.java deleted file mode 100644 index de8f77b9ab..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataQueryMapperTest.java +++ /dev/null @@ -1,47 +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.runtime.query; - -import java.util.List; - -import org.kie.server.api.model.taskassigning.TaskData; - -public class TaskAssigningTaskDataQueryMapperTest extends TaskAssigningTaskDataWithPotentialOwnersQueryMapperTest { - - @Override - protected TaskAssigningTaskDataWithPotentialOwnersQueryMapper createQueryMapper() { - return TaskAssigningTaskDataQueryMapper.get(); - } - - @Override - protected String getExpectedName() { - return TaskAssigningTaskDataQueryMapper.NAME; - } - - @Override - protected boolean readPotentialOwnersExpectedValue() { - return false; - } - - @Override - protected void verifyResult(List result) { - List taskDataResult = (List) result; - assertTask1IsPresent(taskDataResult, 0, false); - assertTask2IsPresent(taskDataResult, 1, false); - assertTask3IsPresent(taskDataResult, 2, false); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataRawQueryMapperTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataRawQueryMapperTest.java deleted file mode 100644 index cbc9b77057..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataRawQueryMapperTest.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.taskassigning.runtime.query; - -import java.util.List; - -public class TaskAssigningTaskDataRawQueryMapperTest extends TaskAssigningTaskDataWithPotentialOwnersRawQueryMapperTest { - - @Override - protected TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper createQueryMapper() { - return TaskAssigningTaskDataRawQueryMapper.get(); - } - - @Override - protected String getExpectedName() { - return TaskAssigningTaskDataRawQueryMapper.NAME; - } - - @Override - protected boolean readPotentialOwnersExpectedValue() { - return false; - } - - @Override - protected void verifyResult(List result) { - List> rawResult = (List>) result; - assertTask1IsPresent(rawResult, 0, false); - assertTask2IsPresent(rawResult, 1, false); - assertTask3IsPresent(rawResult, 2, false); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataSummaryQueryMapperTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataSummaryQueryMapperTest.java deleted file mode 100644 index cf31c804cc..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataSummaryQueryMapperTest.java +++ /dev/null @@ -1,98 +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.runtime.query; - -import java.util.Collections; -import java.util.List; - -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.api.model.taskassigning.TaskData; - -public class TaskAssigningTaskDataSummaryQueryMapperTest extends TaskAssigningTaskDataWithPotentialOwnersQueryMapperTest { - - @Override - protected TaskAssigningTaskDataSummaryQueryMapper createQueryMapper() { - return TaskAssigningTaskDataSummaryQueryMapper.get(); - } - - @Override - protected String getExpectedName() { - return TaskAssigningTaskDataSummaryQueryMapper.NAME; - } - - @Override - protected boolean readPotentialOwnersExpectedValue() { - return false; - } - - @Override - protected void assertTask1IsPresent(List result, int index, boolean withPotentialOwners) { - assertTaskIsPresent(result, index, - TASK1_ID, - TASK1_ACTUAL_OWNER, - TASK1_DEPLOYMENT_ID, - TASK1_STATUS, - PlanningTask.builder() - .taskId(TASK1_PLANNING_TASK_ID) - .published(TASK1_PLANNING_TASK_PUBLISHED) - .assignedUser(TASK1_PLANNING_TASK_ASSIGNED_USER) - .index(TASK1_PLANNING_TASK_INDEX) - .build()); - } - - @Override - protected void assertTask2IsPresent(List result, int index, boolean withPotentialOwners) { - assertTaskIsPresent(result, index, - TASK2_ID, - TASK2_ACTUAL_OWNER, - TASK2_DEPLOYMENT_ID, - TASK2_STATUS, - PlanningTask.builder() - .taskId(TASK2_PLANNING_TASK_ID) - .published(TASK2_PLANNING_TASK_PUBLISHED) - .assignedUser(TASK2_PLANNING_TASK_ASSIGNED_USER) - .index(TASK2_PLANNING_TASK_INDEX) - .build()); - } - - @Override - protected void assertTask3IsPresent(List result, int index, boolean withPotentialOwners) { - assertTaskIsPresent(result, index, - TASK3_ID, - TASK3_ACTUAL_OWNER, - TASK3_DEPLOYMENT_ID, - TASK3_STATUS, - null); - } - - private void assertTaskIsPresent(List taskDataList, int index, Long taskId, String actualOwner, - String deploymentId, String status, PlanningTask planningTask) { - assertTaskIsPresent(taskDataList, index, - taskId, - null, - actualOwner, - deploymentId, - null, - null, - null, - null, - status, - null, - planningTask, - Collections.emptyList()); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataWithPotentialOwnersQueryMapperTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataWithPotentialOwnersQueryMapperTest.java deleted file mode 100644 index 66a6452583..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataWithPotentialOwnersQueryMapperTest.java +++ /dev/null @@ -1,160 +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.runtime.query; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.apache.commons.lang3.tuple.Pair; -import org.junit.Test; -import org.kie.server.api.model.taskassigning.OrganizationalEntity; -import org.kie.server.api.model.taskassigning.PlanningTask; -import org.kie.server.api.model.taskassigning.TaskData; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -public class TaskAssigningTaskDataWithPotentialOwnersQueryMapperTest extends AbstractTaskAssigningDataQueryMapperTest { - - @Override - protected TaskAssigningTaskDataWithPotentialOwnersQueryMapper createQueryMapper() { - return TaskAssigningTaskDataWithPotentialOwnersQueryMapper.get(); - } - - @Override - protected String getExpectedName() { - return TaskAssigningTaskDataWithPotentialOwnersQueryMapper.NAME; - } - - @Override - protected boolean readPotentialOwnersExpectedValue() { - return true; - } - - @Test - public void getType() { - assertEquals(TaskData.class, queryMapper.getType()); - } - - @Override - @SuppressWarnings("unchecked") - protected void verifyResult(List result) { - List taskDataResult = (List) result; - assertTask1IsPresent(taskDataResult, 0, true); - assertTask2IsPresent(taskDataResult, 1, true); - assertTask3IsPresent(taskDataResult, 2, true); - } - - protected void assertTask1IsPresent(List result, int index, boolean withPotentialOwners) { - assertTaskIsPresent(result, index, - TASK1_ID, - TASK1_CREATED_ON, - TASK1_ACTUAL_OWNER, - TASK1_DEPLOYMENT_ID, - TASK1_NAME, - TASK1_PRIORITY, - TASK1_PROCESS_ID, - TASK1_PROCESS_INSTANCE_ID, - TASK1_STATUS, - TASK1_LAST_MODIFICATION_DATE, - PlanningTask.builder() - .taskId(TASK1_PLANNING_TASK_ID) - .published(TASK1_PLANNING_TASK_PUBLISHED) - .assignedUser(TASK1_PLANNING_TASK_ASSIGNED_USER) - .index(TASK1_PLANNING_TASK_INDEX) - .build(), - withPotentialOwners ? - Arrays.asList(Pair.of(TASK1_PO_1_ID, TASK1_PO_1_TYPE), - Pair.of(TASK1_PO_2_ID, TASK1_PO_2_TYPE)) : Collections.emptyList()); - } - - protected void assertTask2IsPresent(List result, int index, boolean withPotentialOwners) { - assertTaskIsPresent(result, index, - TASK2_ID, - TASK2_CREATED_ON, - TASK2_ACTUAL_OWNER, - TASK2_DEPLOYMENT_ID, - TASK2_NAME, - TASK2_PRIORITY, - TASK2_PROCESS_ID, - TASK2_PROCESS_INSTANCE_ID, - TASK2_STATUS, - TASK2_LAST_MODIFICATION_DATE, - PlanningTask.builder() - .taskId(TASK2_PLANNING_TASK_ID) - .published(TASK2_PLANNING_TASK_PUBLISHED) - .assignedUser(TASK2_PLANNING_TASK_ASSIGNED_USER) - .index(TASK2_PLANNING_TASK_INDEX) - .build(), - withPotentialOwners ? Collections.emptyList() : Collections.emptyList()); - } - - protected void assertTask3IsPresent(List result, int index, boolean withPotentialOwners) { - assertTaskIsPresent(result, index, - TASK3_ID, - TASK3_CREATED_ON, - TASK3_ACTUAL_OWNER, - TASK3_DEPLOYMENT_ID, - TASK3_NAME, - TASK3_PRIORITY, - TASK3_PROCESS_ID, - TASK3_PROCESS_INSTANCE_ID, - TASK3_STATUS, - TASK3_LAST_MODIFICATION_DATE, - null, - withPotentialOwners ? - Arrays.asList(Pair.of(TASK3_PO_1_ID, TASK3_PO_1_TYPE), - Pair.of(TASK3_PO_2_ID, TASK3_PO_2_TYPE)) : Collections.emptyList()); - } - - protected void assertTaskIsPresent(List taskDataList, int index, Long taskId, Date createdOn, String actualOwner, - String deploymentId, String taskName, Integer priority, String processId, - Long processInstanceId, String status, Date lastModificationDate, PlanningTask planningTask, - List> potentialOwners) { - TaskData taskData = taskDataList.get(index); - Set potentialOwnersSet = new HashSet<>(); - potentialOwners.forEach(potentialOwner -> potentialOwnersSet.add(OrganizationalEntity.builder() - .name(potentialOwner.getLeft()) - .type(potentialOwner.getRight()) - .build()) - ); - - TaskData expectedTaskData = TaskData.builder() - .taskId(taskId) - .createdOn(createdOn != null ? LocalDateTime.ofInstant(createdOn.toInstant(), ZoneId.systemDefault()) : null) - .actualOwner(actualOwner) - .containerId(deploymentId) - .name(taskName) - .priority(priority) - .processId(processId) - .processInstanceId(processInstanceId) - .status(status) - .lastModificationDate(lastModificationDate != null ? LocalDateTime.ofInstant(lastModificationDate.toInstant(), ZoneId.systemDefault()) : null) - .planningTask(planningTask) - .potentialOwners(potentialOwnersSet) - .build(); - - assertNotNull(taskData); - assertEquals(expectedTaskData, taskData); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataWithPotentialOwnersRawQueryMapperTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataWithPotentialOwnersRawQueryMapperTest.java deleted file mode 100644 index 4feba897ed..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/java/org/kie/server/services/taskassigning/runtime/query/TaskAssigningTaskDataWithPotentialOwnersRawQueryMapperTest.java +++ /dev/null @@ -1,131 +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.runtime.query; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.List; - -import org.apache.commons.lang3.tuple.Pair; -import org.junit.Test; -import org.kie.server.api.model.taskassigning.PlanningTask; - -import static org.junit.Assert.assertEquals; - -public class TaskAssigningTaskDataWithPotentialOwnersRawQueryMapperTest extends AbstractTaskAssigningDataQueryMapperTest { - - @Override - protected TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper createQueryMapper() { - return TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper.get(); - } - - @Override - protected String getExpectedName() { - return TaskAssigningTaskDataWithPotentialOwnersRawQueryMapper.NAME; - } - - @Override - protected boolean readPotentialOwnersExpectedValue() { - return true; - } - - @Test - public void getType() { - assertEquals(List.class, queryMapper.getType()); - } - - @Override - @SuppressWarnings("unchecked") - protected void verifyResult(List result) { - List> rawResult = (List>) result; - assertTask1IsPresent(rawResult, 0, true); - assertTask2IsPresent(rawResult, 1, true); - assertTask3IsPresent(rawResult, 2, true); - } - - protected void assertTask1IsPresent(List> rawResult, int index, boolean withPotentialOwners) { - assertTaskIsPresent(rawResult, index, TASK1_ID, TASK1_CREATED_ON, TASK1_ACTUAL_OWNER, TASK1_DEPLOYMENT_ID, - TASK1_NAME, TASK1_PRIORITY, TASK1_PROCESS_ID, TASK1_PROCESS_INSTANCE_ID, TASK1_STATUS, TASK1_LAST_MODIFICATION_DATE, - PlanningTask.builder() - .taskId(TASK1_PLANNING_TASK_ID) - .published(TASK1_PLANNING_TASK_PUBLISHED) - .assignedUser(TASK1_PLANNING_TASK_ASSIGNED_USER) - .index(TASK1_PLANNING_TASK_INDEX) - .build(), - withPotentialOwners ? - Arrays.asList(Pair.of(TASK1_PO_1_ID, TASK1_PO_1_TYPE), - Pair.of(TASK1_PO_2_ID, TASK1_PO_2_TYPE)) : null); - } - - protected void assertTask2IsPresent(List> rawResult, int index, boolean withPotentialOwners) { - assertTaskIsPresent(rawResult, index, TASK2_ID, TASK2_CREATED_ON, TASK2_ACTUAL_OWNER, TASK2_DEPLOYMENT_ID, - TASK2_NAME, TASK2_PRIORITY, TASK2_PROCESS_ID, TASK2_PROCESS_INSTANCE_ID, TASK2_STATUS, TASK2_LAST_MODIFICATION_DATE, - PlanningTask.builder() - .taskId(TASK2_PLANNING_TASK_ID) - .published(TASK2_PLANNING_TASK_PUBLISHED) - .assignedUser(TASK2_PLANNING_TASK_ASSIGNED_USER) - .index(TASK2_PLANNING_TASK_INDEX) - .build(), - withPotentialOwners ? - Collections.emptyList() : null); - } - - protected void assertTask3IsPresent(List> rawResult, int index, boolean withPotentialOwners) { - assertTaskIsPresent(rawResult, index, TASK3_ID, TASK3_CREATED_ON, TASK3_ACTUAL_OWNER, TASK3_DEPLOYMENT_ID, - TASK3_NAME, TASK3_PRIORITY, TASK3_PROCESS_ID, TASK3_PROCESS_INSTANCE_ID, TASK3_STATUS, TASK3_LAST_MODIFICATION_DATE, - null, - withPotentialOwners ? - Arrays.asList(Pair.of(TASK3_PO_1_ID, TASK3_PO_1_TYPE), - Pair.of(TASK3_PO_2_ID, TASK3_PO_2_TYPE)) : null); - } - - private void assertTaskIsPresent(List> rawDataList, int index, Long taskId, Date createdOn, String actualOwner, - String deploymentId, String taskName, Integer priority, String processId, - Long processInstanceId, String status, Date lastModificationDate, PlanningTask planningTask, - List> potentialOwners) { - List expectedRow = new ArrayList<>(); - expectedRow.add(taskId); - expectedRow.add(createdOn); - expectedRow.add(actualOwner); - expectedRow.add(deploymentId); - expectedRow.add(taskName); - expectedRow.add(priority); - expectedRow.add(processId); - expectedRow.add(processInstanceId); - expectedRow.add(status); - expectedRow.add(lastModificationDate); - - List planningTaskRow = new ArrayList<>(); - expectedRow.add(planningTaskRow); - if (planningTask != null) { - planningTaskRow.add(planningTask.getTaskId()); - planningTaskRow.add(planningTask.getAssignedUser()); - planningTaskRow.add(planningTask.getIndex()); - planningTaskRow.add(planningTask.getPublished()); - } - if (potentialOwners != null) { - List> potentialOwnersRow = new ArrayList<>(); - expectedRow.add(potentialOwnersRow); - potentialOwners.forEach(potentialOwner -> { - potentialOwnersRow.add(Arrays.asList(potentialOwner.getLeft(), potentialOwner.getRight())); - }); - } - assertEquals(expectedRow, rawDataList.get(index)); - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/resources/META-INF/services/org.kie.server.services.api.KieServerApplicationComponentsService b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/resources/META-INF/services/org.kie.server.services.api.KieServerApplicationComponentsService deleted file mode 100644 index 0278cef816..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-runtime/src/test/resources/META-INF/services/org.kie.server.services.api.KieServerApplicationComponentsService +++ /dev/null @@ -1 +0,0 @@ -org.kie.server.services.taskassigning.runtime.DummyKieServerApplicationComponentService \ 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-user-system/.gitignore b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/.gitignore deleted file mode 100644 index 91a87d3ed0..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/.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-user-system/kie-server-services-task-assigning-user-system-api/.gitignore b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-api/.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-user-system/kie-server-services-task-assigning-user-system-api/.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-user-system/kie-server-services-task-assigning-user-system-api/pom.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-api/pom.xml deleted file mode 100644 index 8d39468e39..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-api/pom.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - kie-server-services-task-assigning-user-system - org.kie.server - 7.75.0-SNAPSHOT - - 4.0.0 - - kie-server-services-task-assigning-user-system-api - - KIE :: Execution Server :: Services :: Task Assigning :: User System :: API - KIE Execution Server Services Task Assigning User System API - - - - \ 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-user-system/kie-server-services-task-assigning-user-system-api/src/main/java/org/kie/server/services/taskassigning/user/system/api/Group.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-api/src/main/java/org/kie/server/services/taskassigning/user/system/api/Group.java deleted file mode 100644 index 2ab543a345..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-api/src/main/java/org/kie/server/services/taskassigning/user/system/api/Group.java +++ /dev/null @@ -1,23 +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.user.system.api; - -public interface Group { - - String getId(); - -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-api/src/main/java/org/kie/server/services/taskassigning/user/system/api/User.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-api/src/main/java/org/kie/server/services/taskassigning/user/system/api/User.java deleted file mode 100644 index 6b0f034ea3..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-api/src/main/java/org/kie/server/services/taskassigning/user/system/api/User.java +++ /dev/null @@ -1,29 +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.user.system.api; - -import java.util.Map; -import java.util.Set; - -public interface User { - - String getId(); - - Set getGroups(); - - Map getAttributes(); -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-api/src/main/java/org/kie/server/services/taskassigning/user/system/api/UserSystemService.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-api/src/main/java/org/kie/server/services/taskassigning/user/system/api/UserSystemService.java deleted file mode 100644 index 227da667c7..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-api/src/main/java/org/kie/server/services/taskassigning/user/system/api/UserSystemService.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.user.system.api; - -import java.util.List; - -public interface UserSystemService { - - /** - * Invoked by the task assigning integration as part of the initialization procedure and before any other method - * is invoked. - */ - void start(); - - /** - * Invoked by the task assigning integration as part of the initialization procedure and after the start() method - * is invoked. - * @throws Exception if the test method failed. - */ - void test() throws Exception; - - /*** - * @return the name of the UserSystemService implementation. - */ - String getName(); - - /** - * @return the list of all users present in the external user system. This method is normally invoked each time - * the solver is initialized or when the users information is updated from the external user system. - */ - List findAllUsers(); - - /** - * Get the user information for a particular user. - * @param id user identifier for querying. - * @return the User corresponding to the given identifier, null if no user was found. - */ - User findUser(String id); -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/.gitignore b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/.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-user-system/kie-server-services-task-assigning-user-system-simple/.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-user-system/kie-server-services-task-assigning-user-system-simple/pom.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/pom.xml deleted file mode 100644 index 77174ec022..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - kie-server-services-task-assigning-user-system - org.kie.server - 7.75.0-SNAPSHOT - - 4.0.0 - - kie-server-services-task-assigning-user-system-simple - - KIE :: Execution Server :: Services :: Task Assigning :: User System :: Simple - KIE Execution Server Services Task Assigning User System Simple - - - - org.kie.server - kie-server-services-task-assigning-user-system-api - - - org.apache.commons - commons-lang3 - - - commons-io - commons-io - - - org.slf4j - slf4j-api - - - - - org.assertj - assertj-core - test - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - ${project.basedir} - - - - - - - diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/java/org/kie/server/services/taskassigning/user/system/simple/GroupImpl.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/java/org/kie/server/services/taskassigning/user/system/simple/GroupImpl.java deleted file mode 100644 index 9cd680c388..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/java/org/kie/server/services/taskassigning/user/system/simple/GroupImpl.java +++ /dev/null @@ -1,33 +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.user.system.simple; - -import org.kie.server.services.taskassigning.user.system.api.Group; - -public class GroupImpl implements Group { - - private String id; - - public GroupImpl(String id) { - this.id = id; - } - - @Override - public String getId() { - return id; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/java/org/kie/server/services/taskassigning/user/system/simple/SimpleUserSystemService.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/java/org/kie/server/services/taskassigning/user/system/simple/SimpleUserSystemService.java deleted file mode 100644 index 024fde0630..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/java/org/kie/server/services/taskassigning/user/system/simple/SimpleUserSystemService.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.user.system.simple; - -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -import org.kie.server.services.taskassigning.user.system.api.Group; -import org.kie.server.services.taskassigning.user.system.api.User; -import org.kie.server.services.taskassigning.user.system.api.UserSystemService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.apache.commons.lang3.StringUtils.isEmpty; -import static org.apache.commons.lang3.StringUtils.isNotEmpty; - -public class SimpleUserSystemService implements UserSystemService { - - static final String USERS_FILE_NOT_CONFIGURED_ERROR = "No users file configuration was provided. Please configure the property: %s"; - - static final String USERS_INFO_LOADING_ERROR = "An error was produced during users information loading from files, users: %s, skills: %s, affinities: %s"; - - /** - * Property name for configuring the path to the users definition file. - */ - public static final String USERS_FILE = "org.kie.server.services.taskassigning.user.system.simple.users"; - - /** - * Property name for configuring the path to the optional users skills definition file. - */ - public static final String SKILLS_FILE = "org.kie.server.services.taskassigning.user.system.simple.skills"; - - /** - * Property name for configuring the path to the optional users affinities definition file. - */ - public static final String AFFINITIES_FILE = "org.kie.server.services.taskassigning.user.system.simple.affinities"; - - private static final Logger LOGGER = LoggerFactory.getLogger(SimpleUserSystemService.class); - - private SimpleUserSystemServiceHelper.UserGroupInfo userGroupInfo = new SimpleUserSystemServiceHelper.UserGroupInfo(new ArrayList<>(), new ArrayList<>()); - private Map userById = new HashMap<>(); - protected Exception error = null; - - public static final String NAME = "SimpleUserSystemService"; - - public SimpleUserSystemService() { - //SPI constructor - } - - @Override - public void start() { - final String usersFile = System.getProperty(USERS_FILE); - if (isEmpty(usersFile)) { - String msg = String.format(USERS_FILE_NOT_CONFIGURED_ERROR, USERS_FILE); - throw new SimpleUserSystemServiceException(msg); - } - final String skillsFile = System.getProperty(SKILLS_FILE); - if (isNotEmpty(skillsFile)) { - LOGGER.info("Using skills configuration from: {}", skillsFile); - } - final String affinitiesFile = System.getProperty(AFFINITIES_FILE); - if (isNotEmpty(affinitiesFile)) { - LOGGER.info("Using affinities configuration from: {}", affinitiesFile); - } - - try { - this.userGroupInfo = SimpleUserSystemServiceHelper.buildInfo(Paths.get(usersFile), - isNotEmpty(skillsFile) ? Paths.get(skillsFile) : null, - isNotEmpty(affinitiesFile) ? Paths.get(affinitiesFile) : null); - this.userById = userGroupInfo.getUsers().stream().collect(Collectors.toMap(User::getId, Function.identity())); - } catch (Exception e) { - String msg = String.format(USERS_INFO_LOADING_ERROR, usersFile, skillsFile, affinitiesFile); - throw new SimpleUserSystemServiceException(msg, e); - } - } - - @Override - public String getName() { - return NAME; - } - - @Override - public List findAllUsers() { - return userGroupInfo.getUsers(); - } - - public List findAllGroups() { - return userGroupInfo.getGroups(); - } - - @Override - public void test() { - // no-op for this implementation. - } - - @Override - public User findUser(String id) { - return userById.get(id); - } - - public class SimpleUserSystemServiceException extends RuntimeException { - - public SimpleUserSystemServiceException(String message, Throwable cause) { - super(message, cause); - } - - public SimpleUserSystemServiceException(String message) { - super(message); - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/java/org/kie/server/services/taskassigning/user/system/simple/SimpleUserSystemServiceHelper.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/java/org/kie/server/services/taskassigning/user/system/simple/SimpleUserSystemServiceHelper.java deleted file mode 100644 index ca51092205..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/java/org/kie/server/services/taskassigning/user/system/simple/SimpleUserSystemServiceHelper.java +++ /dev/null @@ -1,195 +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.user.system.simple; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.stream.Collectors; - -import org.apache.commons.lang3.tuple.Pair; -import org.kie.server.services.taskassigning.user.system.api.Group; -import org.kie.server.services.taskassigning.user.system.api.User; - -import static org.apache.commons.lang3.StringUtils.isNotEmpty; -import static org.apache.commons.lang3.StringUtils.trim; - -/** - * Utility class for loading users definition from a file using the Wildfly roles.properties definition file format. - * i.e. - * user1=group1,group2 - * user1=group2,group3 - *

- * and additionally facilitates the reading of user attributes like skills and affinities in a similar format. - * e.g. - * skills.properties: - * user1=skill1,skill2 - * user2=skill3 - *

- * e.g. - * affinities.properties - * user1=affinity1,affinity2 - *

- * When configured, the users skills will be loaded in the SKILLS_ATTRIBUTE_NAME. Following the example above - * user.getAttributes().get(SKILLS_ATTRIBUTE_NAME) will return the String "skill1,skill2"); - *

- * When configured, the users affinities will be loaded in the AFFINITIES_ATTRIBUTE_NAME. Following the example above - * user1.getAttributes().get(AFFINITIES_ATTRIBUTE_NAME) will return the String "affinity1,affinity2"); - * and - * user2.getAttributes().get(AFFINITIES_ATTRIBUTE_NAME) will return null. - */ -public class SimpleUserSystemServiceHelper { - - public static final String SKILLS_ATTRIBUTE_NAME = "skills"; - public static final String AFFINITIES_ATTRIBUTE_NAME = "affinities"; - - private SimpleUserSystemServiceHelper() { - } - - /** - * Reads the users definitions from a file using the Wildfly roles.properties definition file format. See class comments. - * Additionally loads the users skills and affinities if present. - * @param users a path to the user + roles file in the WF format. - * @param skills an optional path to the users skills file. - * @param affinities an optional path to the users affinities file. - * @return a UserGroupInfo instance with the Users and Groups loaded. - * @throws IOException if an I/O error occurs - */ - public static UserGroupInfo buildInfo(Path users, Path skills, Path affinities) throws IOException { - try (InputStream usersIn = Files.newInputStream(users); - InputStream skillsIn = skills != null ? Files.newInputStream(skills) : null; - InputStream affinitiesIn = affinities != null ? Files.newInputStream(affinities) : null) { - return buildInfo(usersIn, skillsIn, affinitiesIn); - } - } - - /** - * Reads the users definitions for a file in the Wildfly roles.properties definition file format. See class comments. - * Additionally loads the users skills and affinities if present. - * @param usersIn InputStream with the user + roles file in the WF format. - * @param skillsIn InputStream with the users skills. - * @param affinitiesIn InputStream with the users affinities. - * @return a UserGroupInfo instance with the Users and Groups loaded. - * @throws IOException if an I/O error occurs - */ - public static UserGroupInfo buildInfo(InputStream usersIn, InputStream skillsIn, InputStream affinitiesIn) throws IOException { - - final Map usersMap = new HashMap<>(); - final Map groupMap = new HashMap<>(); - final List lines = readLines(usersIn); - final List skillLines = skillsIn != null ? readLines(skillsIn) : Collections.emptyList(); - final List affinityLines = affinitiesIn != null ? readLines(affinitiesIn) : Collections.emptyList(); - - for (ElementLine line : lines) { - Set userGroups = new HashSet<>(); - User user = new UserImpl(line.getElementId(), userGroups, new HashMap<>()); - line.values.forEach(groupName -> { - Group group = groupMap.computeIfAbsent(groupName, GroupImpl::new); - userGroups.add(group); - }); - usersMap.put(user.getId(), user); - } - populateAttribute(usersMap, SKILLS_ATTRIBUTE_NAME, skillLines); - populateAttribute(usersMap, AFFINITIES_ATTRIBUTE_NAME, affinityLines); - return new UserGroupInfo(new ArrayList<>(usersMap.values()), new ArrayList<>(groupMap.values())); - } - - public static class UserGroupInfo { - - private List users; - private List groups; - - UserGroupInfo(List users, List groups) { - this.users = users; - this.groups = groups; - } - - public List getUsers() { - return users; - } - - public List getGroups() { - return groups; - } - } - - private static class ElementLine { - - private String elementId; - private List values; - - public ElementLine(String elementId, List values) { - this.elementId = elementId; - this.values = values; - } - - public String getElementId() { - return elementId; - } - - public List getValues() { - return values; - } - } - - private static void populateAttribute(Map usersMap, String attributeName, List attributeLines) { - for (ElementLine attributeLine : attributeLines) { - User user = usersMap.get(attributeLine.getElementId()); - if (user != null) { - final String value = String.join(",", attributeLine.getValues()); - if (value.length() > 1) { - user.getAttributes().put(attributeName, value); - } - } - } - } - - private static List readLines(InputStream input) throws IOException { - final Properties properties = new Properties(); - properties.load(new InputStreamReader(input, StandardCharsets.UTF_8)); - return properties.entrySet().stream() - .map(entry -> Pair.of(trim(entry.getKey().toString()), trim(entry.getValue().toString()))) - .filter(pair -> isNotEmpty(pair.getKey())) - .map(pair -> new ElementLine(pair.getKey(), readLine(pair.getValue()))) - .collect(Collectors.toList()); - } - - private static List readLine(String encodedValues) { - final List values = new ArrayList<>(); - if (encodedValues != null) { - final String[] valuesSplit = encodedValues.split(","); - for (String rawValue : valuesSplit) { - String value = rawValue.trim(); - if (isNotEmpty(value)) { - values.add(value); - } - } - } - return values; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/java/org/kie/server/services/taskassigning/user/system/simple/UserImpl.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/java/org/kie/server/services/taskassigning/user/system/simple/UserImpl.java deleted file mode 100644 index ccfc1faf8a..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/java/org/kie/server/services/taskassigning/user/system/simple/UserImpl.java +++ /dev/null @@ -1,51 +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.user.system.simple; - -import java.util.Map; -import java.util.Set; - -import org.kie.server.services.taskassigning.user.system.api.Group; -import org.kie.server.services.taskassigning.user.system.api.User; - -public class UserImpl implements User { - - private String id; - private Set groups; - private Map attributes; - - public UserImpl(String id, Set groups, Map attributes) { - this.id = id; - this.groups = groups; - this.attributes = attributes; - } - - @Override - public String getId() { - return id; - } - - @Override - public Set getGroups() { - return groups; - } - - @Override - public Map getAttributes() { - return attributes; - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/resources/META-INF/services/org.kie.server.services.taskassigning.user.system.api.UserSystemService b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/resources/META-INF/services/org.kie.server.services.taskassigning.user.system.api.UserSystemService deleted file mode 100644 index 509d3db3ac..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/main/resources/META-INF/services/org.kie.server.services.taskassigning.user.system.api.UserSystemService +++ /dev/null @@ -1 +0,0 @@ -org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemService \ 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-user-system/kie-server-services-task-assigning-user-system-simple/src/test/java/org/kie/server/services/taskassigning/user/system/simple/SimpleUserSystemServiceHelperTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/java/org/kie/server/services/taskassigning/user/system/simple/SimpleUserSystemServiceHelperTest.java deleted file mode 100644 index 321cbdc256..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/java/org/kie/server/services/taskassigning/user/system/simple/SimpleUserSystemServiceHelperTest.java +++ /dev/null @@ -1,141 +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.user.system.simple; - -import java.io.InputStream; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import org.junit.Test; -import org.kie.server.services.taskassigning.user.system.api.Group; -import org.kie.server.services.taskassigning.user.system.api.User; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelper.AFFINITIES_ATTRIBUTE_NAME; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelper.SKILLS_ATTRIBUTE_NAME; - -public class SimpleUserSystemServiceHelperTest { - - static final String RESOURCES = "src/test/resources"; - static final String USERS_FILE = "/org/kie/server/service/taskassigning/user/system/simple/roles.properties"; - static final String SKILLS_FILE = "/org/kie/server/service/taskassigning/user/system/simple/skills.properties"; - static final String AFFINITIES_FILE = "/org/kie/server/service/taskassigning/user/system/simple/affinities.properties"; - - static final String USER1 = "user1"; - static final String USER2 = "user2"; - static final String USER3 = "user3"; - static final String USER4 = "user4"; - static final String USER5 = "user5"; - - static final String GROUP1 = "group1"; - static final String GROUP2 = "group2"; - static final String GROUP3 = "group3"; - - static final String SKILL1 = "skill1"; - static final String SKILL2 = "skill2"; - static final String SKILL3 = "skill3"; - - static final String AFFINITY1 = "affinity1"; - static final String AFFINITY2 = "affinity2"; - static final String AFFINITY3 = "affinity3"; - - @Test - public void buildInfoFromPath() throws Exception { - assertUserGroupInfo(SimpleUserSystemServiceHelper.buildInfo(getTestFile(RESOURCES, USERS_FILE).toAbsolutePath(), - getTestFile(RESOURCES, SKILLS_FILE).toAbsolutePath(), - getTestFile(RESOURCES, AFFINITIES_FILE).toAbsolutePath())); - } - - @Test - public void buildFromInputStream() throws Exception { - InputStream inUsers = SimpleUserSystemServiceHelperTest.class.getResourceAsStream(USERS_FILE); - InputStream inSkills = SimpleUserSystemServiceHelperTest.class.getResourceAsStream(SKILLS_FILE); - InputStream inAffinities = SimpleUserSystemServiceHelperTest.class.getResourceAsStream(AFFINITIES_FILE); - - try { - assertUserGroupInfo(SimpleUserSystemServiceHelper.buildInfo(inUsers, inSkills, inAffinities)); - } finally { - inUsers.close(); - inSkills.close(); - inAffinities.close(); - } - } - - static Path getTestFile(String base, String resource) throws Exception { - String baseDir = System.getProperty("project.base.dir"); - if (baseDir != null) { - return Paths.get(baseDir, base + resource); - } else { - return Paths.get(SimpleUserSystemServiceHelperTest.class.getResource(resource).toURI()); - } - } - - private void assertUserGroupInfo(SimpleUserSystemServiceHelper.UserGroupInfo info) { - assertUser(info, USER1, Collections.singletonList(GROUP1), Arrays.asList(SKILL1, SKILL2), null); - assertUser(info, USER2, Arrays.asList(GROUP1, GROUP2), Arrays.asList(SKILL2, SKILL3), Collections.singletonList(AFFINITY1)); - assertUser(info, USER3, Arrays.asList(GROUP3, GROUP1), null, null); - assertUser(info, USER4, Arrays.asList(GROUP1, GROUP2), null, Arrays.asList(AFFINITY2, AFFINITY1)); - assertUser(info, USER5, Collections.emptyList(), Collections.singletonList(SKILL3), Arrays.asList(AFFINITY3, AFFINITY2, AFFINITY1)); - assertGroups(info, GROUP1, GROUP2, GROUP3); - } - - private void assertUser(SimpleUserSystemServiceHelper.UserGroupInfo info, String userId, List groupIds, List skills, List affinities) { - User user = info.getUsers().stream() - .filter(u -> userId.equals(u.getId())) - .findFirst().orElse(null); - - assertNotNull("User: " + userId + " was not found", user); - assertEquals("User:" + userId + " don't have the expected groups count", groupIds.size(), user.getGroups().size()); - for (String groupId : groupIds) { - Group group = user.getGroups().stream() - .filter(g -> groupId.equals(g.getId())) - .findFirst().orElse(null); - assertNotNull("Group: " + groupId + " was not found for user: " + userId, group); - } - assertStringListAttribute(user, SKILLS_ATTRIBUTE_NAME, skills); - assertStringListAttribute(user, AFFINITIES_ATTRIBUTE_NAME, affinities); - } - - private void assertStringListAttribute(User user, String attribute, List expectedValues) { - String value = (String) user.getAttributes().get(attribute); - if (expectedValues == null) { - assertNull(value); - } else { - assertNotNull(value); - List valuesList = Stream.of(value.split(",")).collect(Collectors.toList()); - assertEquals(expectedValues.size(), valuesList.size()); - expectedValues.forEach(expectedValue -> assertTrue(valuesList.contains(expectedValue))); - } - } - - private void assertGroups(SimpleUserSystemServiceHelper.UserGroupInfo info, String... groupIds) { - for (String groupId : groupIds) { - Group group = info.getGroups().stream() - .filter(g -> groupId.equals(g.getId())) - .findFirst().orElse(null); - assertNotNull("Group: " + groupId + " was not found", group); - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/java/org/kie/server/services/taskassigning/user/system/simple/SimpleUserSystemServiceTest.java b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/java/org/kie/server/services/taskassigning/user/system/simple/SimpleUserSystemServiceTest.java deleted file mode 100644 index 9521a7a977..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/java/org/kie/server/services/taskassigning/user/system/simple/SimpleUserSystemServiceTest.java +++ /dev/null @@ -1,165 +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.user.system.simple; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import org.assertj.core.api.Assertions; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.kie.server.services.taskassigning.user.system.api.Group; -import org.kie.server.services.taskassigning.user.system.api.User; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemService.USERS_FILE_NOT_CONFIGURED_ERROR; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemService.USERS_INFO_LOADING_ERROR; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelperTest.AFFINITIES_FILE; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelperTest.GROUP1; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelperTest.GROUP2; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelperTest.GROUP3; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelperTest.RESOURCES; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelperTest.SKILLS_FILE; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelperTest.USER1; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelperTest.USER2; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelperTest.USER3; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelperTest.USER4; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelperTest.USER5; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemServiceHelperTest.USERS_FILE; - -public class SimpleUserSystemServiceTest { - - private static final String NON_EXISTING_PATH = "a_path_that_dont_exists"; - - private SimpleUserSystemService userSystem; - private static final List USERS = Arrays.asList(USER1, USER2, USER3, USER4, USER5); - private static final List GROUPS = Arrays.asList(GROUP1, GROUP2, GROUP3); - - private String usersPath; - private String skillsPath; - private String affinitiesPath; - - @Before - public void setUp() throws Exception { - usersPath = SimpleUserSystemServiceHelperTest.getTestFile(RESOURCES, USERS_FILE).toAbsolutePath().toString(); - skillsPath = SimpleUserSystemServiceHelperTest.getTestFile(RESOURCES, SKILLS_FILE).toAbsolutePath().toString(); - affinitiesPath = SimpleUserSystemServiceHelperTest.getTestFile(RESOURCES, AFFINITIES_FILE).toAbsolutePath().toString(); - System.setProperty(SimpleUserSystemService.USERS_FILE, usersPath); - System.setProperty(SimpleUserSystemService.SKILLS_FILE, skillsPath); - System.setProperty(SimpleUserSystemService.AFFINITIES_FILE, affinitiesPath); - userSystem = new SimpleUserSystemService(); - } - - @After - public void cleanUp() { - System.clearProperty(SimpleUserSystemService.USERS_FILE); - System.clearProperty(SimpleUserSystemService.SKILLS_FILE); - System.clearProperty(SimpleUserSystemService.AFFINITIES_FILE); - } - - @Test - public void startSuccess() { - Assertions.assertThatCode(() -> userSystem.start()) - .doesNotThrowAnyException(); - } - - @Test - public void startWithoutSkillsAndAffinitiesSuccess() { - System.clearProperty(SimpleUserSystemService.SKILLS_FILE); - System.clearProperty(SimpleUserSystemService.AFFINITIES_FILE); - Assertions.assertThatCode(() -> userSystem.start()) - .doesNotThrowAnyException(); - } - - @Test - public void startWithUsersFileNotConfiguredError() { - System.clearProperty(SimpleUserSystemService.USERS_FILE); - String expectedMessage = String.format(USERS_FILE_NOT_CONFIGURED_ERROR, SimpleUserSystemService.USERS_FILE); - Assertions.assertThatThrownBy(() -> userSystem.start()) - .hasMessage(expectedMessage); - } - - @Test - public void startWithUsersFileLoadingError() { - System.setProperty(SimpleUserSystemService.USERS_FILE, NON_EXISTING_PATH); - String expectedMessage = String.format(USERS_INFO_LOADING_ERROR, NON_EXISTING_PATH, skillsPath, affinitiesPath); - Assertions.assertThatThrownBy(() -> userSystem.start()) - .hasMessage(expectedMessage); - } - - @Test - public void startWithSkillsFileLoadingError() { - System.setProperty(SimpleUserSystemService.SKILLS_FILE, NON_EXISTING_PATH); - String expectedMessage = String.format(USERS_INFO_LOADING_ERROR, usersPath, NON_EXISTING_PATH, affinitiesPath); - Assertions.assertThatThrownBy(() -> userSystem.start()) - .hasMessage(expectedMessage); - } - - @Test - public void startWithAffinitiesFileLoadingError() { - System.setProperty(SimpleUserSystemService.AFFINITIES_FILE, NON_EXISTING_PATH); - String expectedMessage = String.format(USERS_INFO_LOADING_ERROR, usersPath, skillsPath, NON_EXISTING_PATH); - Assertions.assertThatThrownBy(() -> userSystem.start()) - .hasMessage(expectedMessage); - } - - @Test - public void getName() { - assertEquals(SimpleUserSystemService.NAME, userSystem.getName()); - } - - @Test - public void test() { - userSystem.test(); - } - - @Test - public void findUser() { - userSystem.start(); - for (String user : USERS) { - assertNotNull("User: " + user + " was not found", userSystem.findUser(user)); - } - } - - @Test - public void findAllUsers() { - userSystem.start(); - List userIds = userSystem.findAllUsers().stream() - .map(User::getId) - .collect(Collectors.toList()); - - for (String user : USERS) { - assertTrue("User: " + user + " was not found", userIds.contains(user)); - } - } - - @Test - public void findAllGroups() { - userSystem.start(); - List groupIds = userSystem.findAllGroups().stream() - .map(Group::getId) - .collect(Collectors.toList()); - - for (String user : GROUPS) { - assertTrue("Group: " + user + " was not found", groupIds.contains(user)); - } - } -} diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/resources/org/kie/server/service/taskassigning/user/system/simple/affinities.properties b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/resources/org/kie/server/service/taskassigning/user/system/simple/affinities.properties deleted file mode 100644 index 54391f3021..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/resources/org/kie/server/service/taskassigning/user/system/simple/affinities.properties +++ /dev/null @@ -1,4 +0,0 @@ -#Used by SimpleUserSystemServiceHelperTest -user2= affinity1 -user4=affinity2, affinity1 -user5=affinity3, affinity2, affinity1 \ 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-user-system/kie-server-services-task-assigning-user-system-simple/src/test/resources/org/kie/server/service/taskassigning/user/system/simple/roles.properties b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/resources/org/kie/server/service/taskassigning/user/system/simple/roles.properties deleted file mode 100644 index a5b10d6cce..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/resources/org/kie/server/service/taskassigning/user/system/simple/roles.properties +++ /dev/null @@ -1,16 +0,0 @@ -#Used by SimpleUserSystemServiceHelperTest -#user1 definition -user1=group1 -#user2 definition -user2=group1,group2 - -#skipped line - -#skipped line - -#user3 definition -user3=group3,group1 -user4= group1 , group2 -user5= - - diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/resources/org/kie/server/service/taskassigning/user/system/simple/skills.properties b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/resources/org/kie/server/service/taskassigning/user/system/simple/skills.properties deleted file mode 100644 index ff73eee0d0..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/kie-server-services-task-assigning-user-system-simple/src/test/resources/org/kie/server/service/taskassigning/user/system/simple/skills.properties +++ /dev/null @@ -1,7 +0,0 @@ -#Used by SimpleUserSystemServiceHelperTest -#user1 skills -user1=skill1, skill2 -#user2 skills -user2= skill2, skill3 -#user5 skills -user5=skill3 \ 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-user-system/pom.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/pom.xml deleted file mode 100644 index 0a3ade895c..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/kie-server-services-task-assigning-user-system/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - 4.0.0 - - - kie-server-services-task-assigning - org.kie.server - 7.75.0-SNAPSHOT - - - kie-server-services-task-assigning-user-system - pom - - KIE :: Execution Server :: Services :: Task Assigning :: User System - KIE Execution Server Services Task Assigning User System - - - kie-server-services-task-assigning-user-system-api - kie-server-services-task-assigning-user-system-simple - - - \ No newline at end of file diff --git a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/pom.xml b/kie-server-parent/kie-server-services/kie-server-services-task-assigning/pom.xml deleted file mode 100644 index 23750dcbf1..0000000000 --- a/kie-server-parent/kie-server-services/kie-server-services-task-assigning/pom.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - 4.0.0 - - - org.kie.server - kie-server-services - 7.75.0-SNAPSHOT - - - kie-server-services-task-assigning - pom - - KIE :: Execution Server :: Services :: Task Assigning - KIE Execution Server Services Task Assigning - - - kie-server-services-task-assigning-core - kie-server-services-task-assigning-user-system - kie-server-services-task-assigning-runtime - kie-server-services-task-assigning-planning - - - diff --git a/kie-server-parent/kie-server-services/pom.xml b/kie-server-parent/kie-server-services/pom.xml index fa88628660..ced4a72a30 100644 --- a/kie-server-parent/kie-server-services/pom.xml +++ b/kie-server-parent/kie-server-services/pom.xml @@ -19,7 +19,6 @@ kie-server-services-drools kie-server-services-jbpm kie-server-services-jbpm-ui - kie-server-services-optaplanner kie-server-services-case-mgmt kie-server-services-dmn kie-server-services-swagger @@ -27,8 +26,7 @@ kie-server-services-prometheus kie-server-services-openshift kie-server-services-scenario-simulation - kie-server-services-task-assigning kie-server-services-jbpm-cluster - \ No newline at end of file + diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/pom.xml index 7f9ae831d8..ca99ec1a28 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/pom.xml @@ -98,7 +98,7 @@ parallel build (otherwise the tests fail because of conflicting port binding) --> org.kie.server - kie-server-integ-tests-optaplanner + kie-server-integ-tests-jbpm test @@ -134,7 +134,6 @@ ${kie.server.jndi.response.queue} ${org.jbpm.server.ext.disabled} ${org.drools.server.ext.disabled} - true ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} ${kie.server.testing.kjars.build.settings.xml} @@ -167,7 +166,6 @@ ${org.jbpm.server.ext.disabled} ${org.drools.server.ext.disabled} - true ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-case-id-generator/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-case-id-generator/pom.xml index d04412b18b..9fcd7017a4 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-case-id-generator/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-case-id-generator/pom.xml @@ -137,7 +137,6 @@ ${org.jbpm.server.ext.disabled} ${org.drools.server.ext.disabled} true - true ${org.jbpm.case.server.ext.disabled} ${kie.server.testing.kjars.build.settings.xml} @@ -169,7 +168,6 @@ ${org.jbpm.server.ext.disabled} ${org.drools.server.ext.disabled} true - true ${org.jbpm.case.server.ext.disabled} CUSTOM_NUMBER_PREFIX ${project.basedir}/target/cargo/configurations/wildfly23x/kie-fs-realm-users diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-common/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-common/pom.xml index 9dc8e5f2b4..433c9e685a 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-common/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-common/pom.xml @@ -168,7 +168,6 @@ true true true - true true true true @@ -211,7 +210,6 @@ true true true - true true true true diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-common/src/main/java/org/kie/server/integrationtests/shared/KieServerSynchronization.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-common/src/main/java/org/kie/server/integrationtests/shared/KieServerSynchronization.java index 6c108cc23c..fcdd8d5d56 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-common/src/main/java/org/kie/server/integrationtests/shared/KieServerSynchronization.java +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-common/src/main/java/org/kie/server/integrationtests/shared/KieServerSynchronization.java @@ -39,7 +39,6 @@ import org.kie.server.api.model.instance.NodeInstance; import org.kie.server.api.model.instance.ProcessInstance; import org.kie.server.api.model.instance.RequestInfoInstance; -import org.kie.server.api.model.instance.SolverInstance; import org.kie.server.api.model.instance.TaskInstance; import org.kie.server.client.JobServicesClient; import org.kie.server.client.KieServicesClient; @@ -48,7 +47,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.UserTaskServicesClient; import org.kie.server.controller.api.model.spec.ServerTemplate; import org.kie.server.controller.client.KieServerControllerClient; @@ -173,39 +171,6 @@ public static void waitForContainerWithScannerStatus(final KieServicesClient cli }); } - public static void waitForSolver(final SolverServicesClient client, final String containerId, final String solverId) throws Exception { - waitForCondition(() -> { - List solverInstanceList = client.getSolvers(containerId); - for (SolverInstance solver : solverInstanceList) { - if (solverId.equals(solver.getSolverId())) { - return true; - } - } - return false; - }); - } - - public static void waitForSolverDispose(final SolverServicesClient client, final String containerId, final String solverId) throws Exception { - waitForCondition(() -> { - List solverInstanceList = client.getSolvers(containerId); - for (SolverInstance solver : solverInstanceList) { - if (solverId.equals(solver.getSolverId())) { - return false; - } - } - return true; - }); - } - - public static void waitForSolverStatus(final SolverServicesClient client, final String containerId, final String solverId, - final SolverInstance.SolverStatus status) throws Exception { - waitForCondition(() -> { - SolverInstance solverInstance = client.getSolver(containerId, - solverId); - return status.equals(solverInstance.getStatus()); - }); - } - public static void waitForCommandResult(final RuleServicesClient client, final String containerId, final Command command, final String identifier, final Object value) throws Exception { waitForCondition(() -> { diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-prometheus/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-prometheus/pom.xml index 925919e9e7..62979cfcbb 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-prometheus/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-prometheus/pom.xml @@ -39,11 +39,6 @@ jbpm-executor - - org.optaplanner - optaplanner-core - - org.kie.server kie-server-services-drools diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-prometheus/src/main/java/org/kie/server/ext/prometheus/MyPrometheusMetricsProvider.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-prometheus/src/main/java/org/kie/server/ext/prometheus/MyPrometheusMetricsProvider.java index 8fdc3631e1..03aef9e6ff 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-prometheus/src/main/java/org/kie/server/ext/prometheus/MyPrometheusMetricsProvider.java +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-prometheus/src/main/java/org/kie/server/ext/prometheus/MyPrometheusMetricsProvider.java @@ -21,7 +21,6 @@ import org.kie.dmn.api.core.event.DMNRuntimeEventListener; import org.kie.server.services.api.KieContainerInstance; import org.kie.server.services.prometheus.PrometheusMetricsProvider; -import org.optaplanner.core.impl.phase.event.PhaseLifecycleListener; public class MyPrometheusMetricsProvider implements PrometheusMetricsProvider { @@ -33,10 +32,6 @@ public AgendaEventListener createAgendaEventListener(String kieSessionId, KieCon return new AgendaEventCustomPrometheusMetricListener(kContainer); } - public PhaseLifecycleListener createPhaseLifecycleListener(String solverId) { - return new PhaseLifecycleCustomPrometheusMetricListener(solverId); - } - public AsynchronousJobListener createAsynchronousJobListener() { return new JobsCustomPrometheusMetricListener(); } diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-prometheus/src/main/java/org/kie/server/ext/prometheus/PhaseLifecycleCustomPrometheusMetricListener.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-prometheus/src/main/java/org/kie/server/ext/prometheus/PhaseLifecycleCustomPrometheusMetricListener.java deleted file mode 100644 index 762974f1ab..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-prometheus/src/main/java/org/kie/server/ext/prometheus/PhaseLifecycleCustomPrometheusMetricListener.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. - * - * 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.ext.prometheus; - -import io.prometheus.client.Gauge; -import org.optaplanner.core.impl.phase.event.PhaseLifecycleListenerAdapter; -import org.optaplanner.core.impl.solver.scope.DefaultSolverScope; - -public class PhaseLifecycleCustomPrometheusMetricListener extends PhaseLifecycleListenerAdapter { - - private final String solverId; - - private static final Gauge randomGauge = Gauge.build() - .name("random_gauge_phase_lifecycle_best_solution_time_millis") - .help("Random gauge as an example of custom KIE Prometheus metric") - .labelNames("solver_id") - .register(); - - public PhaseLifecycleCustomPrometheusMetricListener(String solverId) { - this.solverId = solverId; - } - - @Override - public void solvingEnded(DefaultSolverScope solverScope) { - Long bestSolutionTimeMillis = solverScope.getBestSolutionTimeMillis(); - randomGauge.labels(solverId).set(bestSolutionTimeMillis); - } -} \ No newline at end of file diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/pom.xml index e9000986af..524f9f8297 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/pom.xml @@ -15,7 +15,6 @@ org.kie.server.itests.custom.extension.test false - false false false false @@ -129,7 +128,6 @@ ${kie.server.jndi.response.queue} true ${org.drools.server.ext.disabled} - true ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} ${kie.server.testing.kjars.build.settings.xml} @@ -161,7 +159,6 @@ ${org.jbpm.server.ext.disabled} ${org.drools.server.ext.disabled} - ${org.optaplanner.server.ext.disabled} ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} ${project.basedir}/target/cargo/configurations/wildfly23x/kie-fs-realm-users diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/pom.xml deleted file mode 100644 index 6d0e7f3824..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - 4.0.0 - - org.kie.server.testing - common-parent - 1.0.0.Final - - - cloudbalance - 1.0.0.Final - kjar - - - NO - - - - - org.optaplanner - optaplanner-core - provided - ${version.org.kie} - - - org.optaplanner - optaplanner-persistence-xstream - provided - ${version.org.kie} - - - org.optaplanner - optaplanner-persistence-jaxb - provided - ${version.org.kie} - - - org.codehaus.jackson - jackson-core-asl - provided - ${version.org.codehaus.jackson} - - - jakarta.xml.bind - jakarta.xml.bind-api - provided - - - - - - - org.kie - kie-maven-plugin - - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/AbstractPersistable.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/AbstractPersistable.java deleted file mode 100644 index a52cdef378..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/AbstractPersistable.java +++ /dev/null @@ -1,93 +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.server.testing; - -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/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/AddComputerProblemFactChange.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/AddComputerProblemFactChange.java deleted file mode 100644 index 48ee597709..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/AddComputerProblemFactChange.java +++ /dev/null @@ -1,67 +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.testing; - -import java.util.ArrayList; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; - -import org.optaplanner.core.impl.score.director.ScoreDirector; -import org.optaplanner.core.impl.solver.ProblemFactChange; - -@XmlRootElement -@XmlAccessorType(XmlAccessType.FIELD) -public class AddComputerProblemFactChange implements ProblemFactChange { - - private CloudComputer computer; - - public AddComputerProblemFactChange() { - } - - public AddComputerProblemFactChange(CloudComputer computer) { - this.computer = computer; - } - - public CloudComputer getComputer() { - return computer; - } - - public void setComputer(CloudComputer computer) { - this.computer = computer; - } - - @Override - public void doChange(ScoreDirector scoreDirector) { - CloudBalance cloudBalance = scoreDirector.getWorkingSolution(); - // Set a unique id on the new computer - long nextComputerId = 0L; - for (CloudComputer otherComputer : cloudBalance.getComputerList()) { - if (nextComputerId <= otherComputer.getId()) { - nextComputerId = otherComputer.getId() + 1L; - } - } - computer.setId(nextComputerId); - // A SolutionCloner does not clone problem fact lists (such as computerList) - // Shallow clone the computerList so only workingSolution is affected, not bestSolution or guiSolution - cloudBalance.setComputerList(new ArrayList<>(cloudBalance.getComputerList())); - // Add the problem fact itself - scoreDirector.beforeProblemFactAdded(computer); - cloudBalance.getComputerList().add(computer); - scoreDirector.afterProblemFactAdded(computer); - } -} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudBalance.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudBalance.java deleted file mode 100644 index c083376cc6..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudBalance.java +++ /dev/null @@ -1,85 +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.server.testing; - -import java.util.ArrayList; -import java.util.Collection; -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/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudBalancingGenerator.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudBalancingGenerator.java deleted file mode 100644 index e23cace92b..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudBalancingGenerator.java +++ /dev/null @@ -1,300 +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.server.testing; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -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/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudComputer.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudComputer.java deleted file mode 100644 index 22eb5ae63c..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudComputer.java +++ /dev/null @@ -1,77 +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.server.testing; - -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/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudProcess.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudProcess.java deleted file mode 100644 index 44a97005dc..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudProcess.java +++ /dev/null @@ -1,90 +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.server.testing; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlIDREF; -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/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/DeleteComputerProblemFactChange.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/DeleteComputerProblemFactChange.java deleted file mode 100644 index 8390f283be..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/DeleteComputerProblemFactChange.java +++ /dev/null @@ -1,76 +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.testing; - -import java.util.ArrayList; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; - -import org.optaplanner.core.impl.score.director.ScoreDirector; -import org.optaplanner.core.impl.solver.ProblemFactChange; - -@XmlRootElement -@XmlAccessorType(XmlAccessType.FIELD) -public class DeleteComputerProblemFactChange implements ProblemFactChange { - - private CloudComputer computer; - - public DeleteComputerProblemFactChange() { - } - - public DeleteComputerProblemFactChange(CloudComputer computer) { - this.computer = computer; - } - - public CloudComputer getComputer() { - return computer; - } - - public void setComputer(CloudComputer computer) { - this.computer = computer; - } - - @Override - public void doChange(ScoreDirector scoreDirector) { - CloudBalance cloudBalance = scoreDirector.getWorkingSolution(); - CloudComputer workingComputer = scoreDirector.lookUpWorkingObject(computer); - if (workingComputer == null) { - // The computer has already been deleted (the UI asked to changed the same computer twice), so do nothing - return; - } - // First remove the problem fact from all planning entities that use it - for (CloudProcess process : cloudBalance.getProcessList()) { - if (process.getComputer() == workingComputer) { - scoreDirector.beforeVariableChanged(process, - "computer"); - process.setComputer(null); - scoreDirector.afterVariableChanged(process, - "computer"); - } - } - // A SolutionCloner does not clone problem fact lists (such as computerList) - // Shallow clone the computerList so only workingSolution is affected, not bestSolution or guiSolution - ArrayList computerList = new ArrayList<>(cloudBalance.getComputerList()); - cloudBalance.setComputerList(computerList); - // Remove the problem fact itself - scoreDirector.beforeProblemFactRemoved(workingComputer); - computerList.remove(workingComputer); - scoreDirector.afterProblemFactRemoved(workingComputer); - scoreDirector.triggerVariableListeners(); - } -} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/META-INF/kmodule.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/META-INF/kmodule.xml deleted file mode 100644 index a3d6f9fd33..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/META-INF/kmodule.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-realtime-planning-daemon-solver.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-realtime-planning-daemon-solver.xml deleted file mode 100644 index 806e323680..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-realtime-planning-daemon-solver.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - org.kie.server.testing.CloudBalance - org.kie.server.testing.CloudProcess - - - true - - - - cloudBalancingKsession - ONLY_DOWN - - - - - 3 - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-realtime-planning-solver.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-realtime-planning-solver.xml deleted file mode 100644 index 02f2c3ab82..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-realtime-planning-solver.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - org.kie.server.testing.CloudBalance - org.kie.server.testing.CloudProcess - - - - cloudBalancingKsession - ONLY_DOWN - - - - - 5 - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-solver.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-solver.xml deleted file mode 100644 index 47f5dd2404..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-solver.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - org.kie.server.testing.CloudBalance - org.kie.server.testing.CloudProcess - - - - cloudBalancingKsession - ONLY_DOWN - - - - - 5 - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/kjar1/cloudBalancingScoreRules.drl b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/kjar1/cloudBalancingScoreRules.drl deleted file mode 100644 index 1f63aceed8..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/kjar1/cloudBalancingScoreRules.drl +++ /dev/null @@ -1,78 +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. - */ - -import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScoreHolder; - -import org.kie.server.testing.CloudBalance; -import org.kie.server.testing.CloudComputer; -import org.kie.server.testing.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/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/java/org/kie/server/integrationtests/extension/custom/PrometheusCustomExtensionIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/java/org/kie/server/integrationtests/extension/custom/PrometheusCustomExtensionIntegrationTest.java index 4338354e7c..b4a92dd523 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/java/org/kie/server/integrationtests/extension/custom/PrometheusCustomExtensionIntegrationTest.java +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-custom-extension/kie-server-integ-tests-custom-extension-test/src/test/java/org/kie/server/integrationtests/extension/custom/PrometheusCustomExtensionIntegrationTest.java @@ -15,8 +15,6 @@ package org.kie.server.integrationtests.extension.custom; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.math.BigDecimal; import java.net.URI; import java.util.ArrayList; @@ -43,16 +41,13 @@ import org.kie.api.runtime.ExecutionResults; import org.kie.dmn.api.core.DMNContext; import org.kie.dmn.api.core.DMNResult; -import org.kie.server.api.model.KieContainerResource; import org.kie.server.api.model.ReleaseId; import org.kie.server.api.model.ServiceResponse; import org.kie.server.api.model.instance.JobRequestInstance; -import org.kie.server.api.model.instance.SolverInstance; import org.kie.server.client.DMNServicesClient; import org.kie.server.client.JobServicesClient; import org.kie.server.client.KieServicesClient; import org.kie.server.client.RuleServicesClient; -import org.kie.server.client.SolverServicesClient; import org.kie.server.integrationtests.config.TestConfig; import org.kie.server.integrationtests.shared.KieServerAssert; import org.kie.server.integrationtests.shared.KieServerDeployer; @@ -61,26 +56,14 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; public class PrometheusCustomExtensionIntegrationTest extends RestJmsSharedBaseIntegrationTest { private static ReleaseId releaseId = new ReleaseId("org.kie.server.testing", "function-definition", "1.0.0.Final"); private static ReleaseId releaseIdRuleflowGroup = new ReleaseId("org.kie.server.testing", "ruleflow-group", "1.0.0.Final"); - private static ReleaseId releaseIdCloudBalance = new ReleaseId("org.kie.server.testing", "cloudbalance", "1.0.0.Final"); private static final String CONTAINER_ID = "function-definition"; private static final String CONTAINER_ID_RULE_FLOW = "ruleflow-group"; - private static final String CONTAINER_ID_CLOUD_BALANCE = "cloudbalance"; - - private static final String SOLVER_CONFIG = "cloudbalance-solver.xml"; - - private static final String CLASS_CLOUD_BALANCE = "org.kie.server.testing.CloudBalance"; - private static final String CLASS_CLOUD_COMPUTER = "org.kie.server.testing.CloudComputer"; - private static final String CLASS_CLOUD_PROCESS = "org.kie.server.testing.CloudProcess"; - private static final String CLASS_ADD_COMPUTER_PROBLEM_FACT_CHANGE = "org.kie.server.testing.AddComputerProblemFactChange"; - private static final String CLASS_DELETE_COMPUTER_PROBLEM_FACT_CHANGE = "org.kie.server.testing.DeleteComputerProblemFactChange"; - private static final String CLASS_CLOUD_GENERATOR = "org.kie.server.testing.CloudBalancingGenerator"; protected static final String PRINT_OUT_COMMAND = "org.jbpm.executor.commands.PrintOutCommand"; @@ -88,28 +71,18 @@ public class PrometheusCustomExtensionIntegrationTest extends RestJmsSharedBaseI private DMNServicesClient dmnClient; private RuleServicesClient ruleClient; - private SolverServicesClient solverClient; private JobServicesClient jobServicesClient; - private static final long EXTENDED_TIMEOUT = 300_000L; - @BeforeClass public static void deployArtifacts() { KieServerDeployer.buildAndDeployCommonMavenParent(); KieServerDeployer.buildAndDeployMavenProjectFromResource("/kjars-sources/function-definition"); KieServerDeployer.buildAndDeployMavenProjectFromResource("/kjars-sources/ruleflow-group"); - KieServerDeployer.buildAndDeployMavenProjectFromResource("/kjars-sources/cloudbalance"); commandsFactory = KieServices.Factory.get().getCommands(); - kieContainer = KieServices.Factory.get().newKieContainer(releaseIdCloudBalance); KieServerBaseIntegrationTest.createContainer(CONTAINER_ID, releaseId); KieServerBaseIntegrationTest.createContainer(CONTAINER_ID_RULE_FLOW, releaseIdRuleflowGroup); - - // Having timeout issues due to kjar dependencies -> raised timeout. - KieServicesClient client = createDefaultStaticClient(EXTENDED_TIMEOUT); - ServiceResponse reply = client.createContainer(CONTAINER_ID_CLOUD_BALANCE, new KieContainerResource(CONTAINER_ID_CLOUD_BALANCE, releaseIdCloudBalance)); - KieServerAssert.assertSuccess(reply); } @AfterClass @@ -129,19 +102,9 @@ public static void closeHttpClient() { protected void setupClients(KieServicesClient client) { dmnClient = client.getServicesClient( DMNServicesClient.class ); ruleClient = client.getServicesClient(RuleServicesClient.class); - solverClient = client.getServicesClient(SolverServicesClient.class); jobServicesClient = client.getServicesClient(JobServicesClient.class); } - @Override - protected void addExtraCustomClasses(Map> extraClasses) throws ClassNotFoundException { - extraClasses.put(CLASS_CLOUD_BALANCE, Class.forName(CLASS_CLOUD_BALANCE, true, kieContainer.getClassLoader())); - extraClasses.put(CLASS_CLOUD_COMPUTER, Class.forName(CLASS_CLOUD_COMPUTER, true, kieContainer.getClassLoader())); - extraClasses.put(CLASS_CLOUD_PROCESS, Class.forName(CLASS_CLOUD_PROCESS, true, kieContainer.getClassLoader())); - extraClasses.put(CLASS_ADD_COMPUTER_PROBLEM_FACT_CHANGE, Class.forName(CLASS_ADD_COMPUTER_PROBLEM_FACT_CHANGE, true, kieContainer.getClassLoader())); - extraClasses.put(CLASS_DELETE_COMPUTER_PROBLEM_FACT_CHANGE, Class.forName(CLASS_DELETE_COMPUTER_PROBLEM_FACT_CHANGE, true, kieContainer.getClassLoader())); - } - @Test public void test_evaluateAll() { DMNContext dmnContext = dmnClient.newContext(); @@ -182,36 +145,6 @@ public void testExecuteSimpleRuleFlowProcess() { assertThat(getMetrics()).contains("random_gauge_ruleflow_group_nanosecond", "ruleflow_group_name=\"ruleflow-group1\"", "ruleflow_group_name=\"ruleflow-group2\""); } - @Test(timeout = 15_000) - public void testExecuteSolver() throws Exception { - String solverId = "my-solver"; - SolverInstance solverInstance = solverClient.createSolver(CONTAINER_ID_CLOUD_BALANCE, solverId, SOLVER_CONFIG); - assertNotNull(solverInstance); - assertEquals(SolverInstance.SolverStatus.NOT_SOLVING, - solverInstance.getStatus()); - - // the following status starts the solver - Object planningProblem = loadPlanningProblem(5, 15); - solverClient.solvePlanningProblem(CONTAINER_ID_CLOUD_BALANCE, solverId, planningProblem); - - solverInstance = solverClient.getSolver(CONTAINER_ID_CLOUD_BALANCE, solverId); - - // solver should finish in 5 seconds, but we wait up to 15s before timing out - final long SOLVER_STATUS_CHECK_PERIOD = 1000L; - while (solverInstance.getStatus() == SolverInstance.SolverStatus.SOLVING) { - solverInstance = solverClient.getSolver(CONTAINER_ID_CLOUD_BALANCE, solverId); - assertNotNull(solverInstance); - Thread.sleep(SOLVER_STATUS_CHECK_PERIOD); - } - - assertEquals(SolverInstance.SolverStatus.NOT_SOLVING, - solverInstance.getStatus()); - - solverClient.disposeSolver(CONTAINER_ID_CLOUD_BALANCE, solverId); - - assertThat(getMetrics()).contains("random_gauge_phase_lifecycle_best_solution_time_millis", "solver_id=\"my-solver\""); - } - @Test public void testDeploymentEvents() { // Deployment was created in @BeforeClass phase, the metric is already available for Prometheus @@ -246,16 +179,6 @@ private String getMetrics() { } } - private Object loadPlanningProblem(int computerListSize, - int processListSize) throws NoSuchMethodException, ClassNotFoundException, - IllegalAccessException, InstantiationException, InvocationTargetException { - Class cbgc = kieContainer.getClassLoader().loadClass(CLASS_CLOUD_GENERATOR); - Object cbgi = cbgc.newInstance(); - - Method method = cbgc.getMethod("createCloudBalance", int.class, int.class); - return method.invoke(cbgi, computerListSize, processListSize); - } - private JobRequestInstance createJobRequestInstance() { JobRequestInstance jobRequestInstance = new JobRequestInstance(); jobRequestInstance.setCommand(PRINT_OUT_COMMAND); diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn-pmml-trusty/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn-pmml-trusty/pom.xml index 548d04c936..928e2b1136 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn-pmml-trusty/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn-pmml-trusty/pom.xml @@ -176,7 +176,6 @@ true true ${org.drools.server.ext.disabled} - true true ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} @@ -223,7 +222,6 @@ true ${org.drools.server.ext.disabled} - true ${org.kie.dmn.server.ext.disabled} ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} @@ -304,4 +302,4 @@ - \ No newline at end of file + diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn-pmml/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn-pmml/pom.xml index 5e1f71f9e9..b482442b5a 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn-pmml/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn-pmml/pom.xml @@ -131,7 +131,6 @@ true true ${org.drools.server.ext.disabled} - true true ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} @@ -179,7 +178,6 @@ true ${org.drools.server.ext.disabled} - true ${org.kie.dmn.server.ext.disabled} ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} @@ -311,4 +309,4 @@ - \ No newline at end of file + diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn/pom.xml index aabb131a55..3db080e610 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn/pom.xml @@ -134,7 +134,6 @@ true true ${org.drools.server.ext.disabled} - true true ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} @@ -181,7 +180,6 @@ true ${org.drools.server.ext.disabled} - true ${org.kie.dmn.server.ext.disabled} ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn/src/test/java/org/kie/server/integrationtests/dmn/DMNKieServerBaseIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn/src/test/java/org/kie/server/integrationtests/dmn/DMNKieServerBaseIntegrationTest.java index bc943cc61f..6bb7a701ec 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn/src/test/java/org/kie/server/integrationtests/dmn/DMNKieServerBaseIntegrationTest.java +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-dmn/src/test/java/org/kie/server/integrationtests/dmn/DMNKieServerBaseIntegrationTest.java @@ -26,7 +26,6 @@ import org.kie.server.api.model.ServiceResponse; import org.kie.server.client.DMNServicesClient; import org.kie.server.client.KieServicesClient; -import org.kie.server.client.SolverServicesClient; import org.kie.server.integrationtests.shared.basetests.RestJmsSharedBaseIntegrationTest; public abstract class DMNKieServerBaseIntegrationTest diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/pom.xml index 99a2699e87..1f12d0883d 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/pom.xml @@ -110,7 +110,6 @@ ${kie.server.jndi.response.queue} true true - true true ${org.drools.server.ext.disabled} ${kie.server.testing.kjars.build.settings.xml} @@ -154,7 +153,6 @@ true true - true true ${org.drools.server.ext.disabled} ${org.kie.prometheus.server.ext.disabled} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/pom.xml index bc5dd083a7..8130c2fc5e 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/pom.xml @@ -189,7 +189,6 @@ ${org.jbpm.server.ext.disabled} true true - true true ${kie.server.testing.kjars.build.settings.xml} ${org.kie.server.persistence.ds} @@ -239,7 +238,6 @@ true ${org.jbpm.server.ext.disabled} true - true true true diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/.gitignore b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/.gitignore deleted file mode 100644 index 7b4c47dadf..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-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-tests/kie-server-integ-tests-optaplanner/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/pom.xml deleted file mode 100644 index e1c8b7b9f5..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/pom.xml +++ /dev/null @@ -1,279 +0,0 @@ - - 4.0.0 - - org.kie.server - kie-server-tests - 7.75.0-SNAPSHOT - - - kie-server-integ-tests-optaplanner - - KIE :: Execution Server :: Tests :: OptaPlanner Integration Tests - KIE Execution Server Integration Tests (REST, JMS) with configuration options to run on different containers. - - - org.kie.server.itests.optaplanner - false - false - false - - - - - - org.kie.server - kie-server-integ-tests-common - test - - - - - org.kie.server - kie-server-api - test - - - org.kie.server - kie-server-client - test - - - - - org.slf4j - slf4j-api - test - - - ch.qos.logback - logback-classic - test - - - - - org.kie.server - kie-server - webc - war - test - - - org.kie.server - kie-server - ee7 - war - test - - - org.kie.server - kie-server - ee8 - war - test - - - - - org.kie.server - kie-server-integ-tests-jbpm - test - - - * - * - - - - - - org.assertj - assertj-core - test - - - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - - ${kie.server.remoting.url} - ${kie.server.base.http.url} - ${kie.server.context.factory} - ${kie.server.connection.factory} - ${kie.server.jndi.request.queue} - ${kie.server.jndi.response.queue} - true - true - ${org.drools.server.ext.disabled} - ${org.optaplanner.server.ext.disabled} - true - true - ${org.kie.prometheus.server.ext.disabled} - ${kie.server.testing.kjars.build.settings.xml} - - - - - org.apache.maven.plugins - maven-resources-plugin - - - xls - - - - - - - - src/test/resources - false - - - src/test/filtered-resources - true - - - ../src/test/filtered-resources - true - - - - - org.codehaus.cargo - cargo-maven3-plugin - - - - true - true - true - true - ${org.drools.server.ext.disabled} - ${org.kie.prometheus.server.ext.disabled} - ${project.basedir}/target/cargo/configurations/wildfly23x/kie-fs-realm-users - - - - - - - - - - local-test-run - - true - - - - org.kie.server - kie-server-services-common - test - - - org.kie.server - kie-server-services-drools - test - - - org.kie.server - kie-server-services-optaplanner - test - - - org.kie.server - kie-server-rest-common - test - - - org.kie.server - kie-server-rest-drools - test - - - org.kie.server - kie-server-rest-optaplanner - test - - - org.kie.server - kie-server-rest-prometheus - test - - - org.kie.server - kie-server-services-prometheus - test - - - - - tomcat9 - - - container.profile - tomcat9 - - - - - wildfly - - - container.profile - wildfly - - - - - eap7 - - - container.profile - eap7 - - - - - oracle-wls-12 - - - container.profile - oracle-wls-12 - - - - - websphere9 - - - container.profile - websphere9 - - - - - springboot - - - container.profile - springboot - - - - true - true - true - - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kie-server-testing-client-deployment-settings.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kie-server-testing-client-deployment-settings.xml deleted file mode 100644 index 504a3f7a4b..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kie-server-testing-client-deployment-settings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - ${kie.server.testing.remote.repo.dir} - - ${maven.settings.mirror} - - - - additional-maven-repos - - - remote-testing-repo - ${kie.server.testing.remote.repo.url} - - - - - - - additional-maven-repos - - \ No newline at end of file diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kie-server-testing-server-custom-settings.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kie-server-testing-server-custom-settings.xml deleted file mode 100644 index f88dbda9c2..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kie-server-testing-server-custom-settings.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - ${kie.server.testing.server.local.repo.dir} - - ${maven.settings.mirror} - - - - additional-maven-repos - - - remote-testing-repo - ${kie.server.testing.remote.repo.url} - - - - - - - additional-maven-repos - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/pom.xml deleted file mode 100644 index acb0b9c625..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - 4.0.0 - - org.kie.server.testing - common-parent - 1.0.0.Final - - - cloudbalance - 1.0.0.Final - kjar - - - - org.optaplanner - optaplanner-core - provided - ${version.org.kie} - - - org.optaplanner - optaplanner-persistence-xstream - provided - ${version.org.kie} - - - org.optaplanner - optaplanner-persistence-jaxb - provided - ${version.org.kie} - - - org.codehaus.jackson - jackson-core-asl - provided - ${version.org.codehaus.jackson} - - - jakarta.xml.bind - jakarta.xml.bind-api - provided - - - org.drools - drools-model-compiler - provided - - - - - - - org.kie - kie-maven-plugin - - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/AbstractPersistable.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/AbstractPersistable.java deleted file mode 100644 index a52cdef378..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/AbstractPersistable.java +++ /dev/null @@ -1,93 +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.server.testing; - -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/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/AddComputerProblemFactChange.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/AddComputerProblemFactChange.java deleted file mode 100644 index 48ee597709..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/AddComputerProblemFactChange.java +++ /dev/null @@ -1,67 +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.testing; - -import java.util.ArrayList; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; - -import org.optaplanner.core.impl.score.director.ScoreDirector; -import org.optaplanner.core.impl.solver.ProblemFactChange; - -@XmlRootElement -@XmlAccessorType(XmlAccessType.FIELD) -public class AddComputerProblemFactChange implements ProblemFactChange { - - private CloudComputer computer; - - public AddComputerProblemFactChange() { - } - - public AddComputerProblemFactChange(CloudComputer computer) { - this.computer = computer; - } - - public CloudComputer getComputer() { - return computer; - } - - public void setComputer(CloudComputer computer) { - this.computer = computer; - } - - @Override - public void doChange(ScoreDirector scoreDirector) { - CloudBalance cloudBalance = scoreDirector.getWorkingSolution(); - // Set a unique id on the new computer - long nextComputerId = 0L; - for (CloudComputer otherComputer : cloudBalance.getComputerList()) { - if (nextComputerId <= otherComputer.getId()) { - nextComputerId = otherComputer.getId() + 1L; - } - } - computer.setId(nextComputerId); - // A SolutionCloner does not clone problem fact lists (such as computerList) - // Shallow clone the computerList so only workingSolution is affected, not bestSolution or guiSolution - cloudBalance.setComputerList(new ArrayList<>(cloudBalance.getComputerList())); - // Add the problem fact itself - scoreDirector.beforeProblemFactAdded(computer); - cloudBalance.getComputerList().add(computer); - scoreDirector.afterProblemFactAdded(computer); - } -} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudBalance.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudBalance.java deleted file mode 100644 index c083376cc6..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudBalance.java +++ /dev/null @@ -1,85 +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.server.testing; - -import java.util.ArrayList; -import java.util.Collection; -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/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudBalancingGenerator.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudBalancingGenerator.java deleted file mode 100644 index 3f9c71eee4..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudBalancingGenerator.java +++ /dev/null @@ -1,273 +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.server.testing; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -public class CloudBalancingGenerator { - - 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/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudComputer.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudComputer.java deleted file mode 100644 index 22eb5ae63c..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudComputer.java +++ /dev/null @@ -1,77 +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.server.testing; - -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/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudProcess.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudProcess.java deleted file mode 100644 index 44a97005dc..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/CloudProcess.java +++ /dev/null @@ -1,90 +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.server.testing; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlIDREF; -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/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/DeleteComputerProblemFactChange.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/DeleteComputerProblemFactChange.java deleted file mode 100644 index 8390f283be..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/DeleteComputerProblemFactChange.java +++ /dev/null @@ -1,76 +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.testing; - -import java.util.ArrayList; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; - -import org.optaplanner.core.impl.score.director.ScoreDirector; -import org.optaplanner.core.impl.solver.ProblemFactChange; - -@XmlRootElement -@XmlAccessorType(XmlAccessType.FIELD) -public class DeleteComputerProblemFactChange implements ProblemFactChange { - - private CloudComputer computer; - - public DeleteComputerProblemFactChange() { - } - - public DeleteComputerProblemFactChange(CloudComputer computer) { - this.computer = computer; - } - - public CloudComputer getComputer() { - return computer; - } - - public void setComputer(CloudComputer computer) { - this.computer = computer; - } - - @Override - public void doChange(ScoreDirector scoreDirector) { - CloudBalance cloudBalance = scoreDirector.getWorkingSolution(); - CloudComputer workingComputer = scoreDirector.lookUpWorkingObject(computer); - if (workingComputer == null) { - // The computer has already been deleted (the UI asked to changed the same computer twice), so do nothing - return; - } - // First remove the problem fact from all planning entities that use it - for (CloudProcess process : cloudBalance.getProcessList()) { - if (process.getComputer() == workingComputer) { - scoreDirector.beforeVariableChanged(process, - "computer"); - process.setComputer(null); - scoreDirector.afterVariableChanged(process, - "computer"); - } - } - // A SolutionCloner does not clone problem fact lists (such as computerList) - // Shallow clone the computerList so only workingSolution is affected, not bestSolution or guiSolution - ArrayList computerList = new ArrayList<>(cloudBalance.getComputerList()); - cloudBalance.setComputerList(computerList); - // Remove the problem fact itself - scoreDirector.beforeProblemFactRemoved(workingComputer); - computerList.remove(workingComputer); - scoreDirector.afterProblemFactRemoved(workingComputer); - scoreDirector.triggerVariableListeners(); - } -} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/Price.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/Price.java deleted file mode 100644 index 964cd0680e..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/java/org/kie/server/testing/Price.java +++ /dev/null @@ -1,43 +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.server.testing; - -public class Price { - - private int hardwareValue; - private String description; - private int cost; - - public 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; - } -} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/META-INF/kmodule.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/META-INF/kmodule.xml deleted file mode 100644 index a3d6f9fd33..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/META-INF/kmodule.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-realtime-planning-daemon-solver.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-realtime-planning-daemon-solver.xml deleted file mode 100644 index 806e323680..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-realtime-planning-daemon-solver.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - org.kie.server.testing.CloudBalance - org.kie.server.testing.CloudProcess - - - true - - - - cloudBalancingKsession - ONLY_DOWN - - - - - 3 - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-realtime-planning-solver.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-realtime-planning-solver.xml deleted file mode 100644 index 02f2c3ab82..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-realtime-planning-solver.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - org.kie.server.testing.CloudBalance - org.kie.server.testing.CloudProcess - - - - cloudBalancingKsession - ONLY_DOWN - - - - - 5 - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-solver.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-solver.xml deleted file mode 100644 index 47f5dd2404..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/cloudbalance-solver.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - org.kie.server.testing.CloudBalance - org.kie.server.testing.CloudProcess - - - - cloudBalancingKsession - ONLY_DOWN - - - - - 5 - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/kjar1/cloudBalancingScoreRules.drl b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/kjar1/cloudBalancingScoreRules.drl deleted file mode 100644 index 02dc7f688b..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/cloudbalance/src/main/resources/kjar1/cloudBalancingScoreRules.drl +++ /dev/null @@ -1,80 +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 kjar1; - -import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScoreHolder; - -import org.kie.server.testing.CloudBalance; -import org.kie.server.testing.CloudComputer; -import org.kie.server.testing.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/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/common-parent/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/common-parent/pom.xml deleted file mode 100644 index 723c7960d1..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/filtered-resources/kjars-sources/common-parent/pom.xml +++ /dev/null @@ -1,87 +0,0 @@ - - 4.0.0 - org.kie.server.testing - common-parent - 1.0.0.Final - pom - - - - ${version.org.kie} - ${version.org.codehaus.jackson} - ${version.org.javassist} - ${version.jakarta.xml.bind-api} - 1.8 - 1.8 - - UTF-8 - - - - - - - org.javassist - javassist - ${version.org.javassist} - - - jakarta.xml.bind - jakarta.xml.bind-api - ${version.jakarta.xml.bind-api} - - - org.drools - drools-model-compiler - ${version.org.kie} - provided - - - - - - - - - org.kie - kie-maven-plugin - ${version.org.kie} - true - - - - - - - - - jboss-public-repo - https://repository.jboss.org/nexus/content/groups/public-jboss/ - - - - - - - jboss-public-repo - https://repository.jboss.org/nexus/content/groups/public-jboss/ - - - - - - remote-testing-repo - ${kie.server.testing.remote.repo.url} - - - remote-testing-repo - ${kie.server.testing.remote.repo.url} - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/java/org/kie/server/integrationtests/optaplanner/OptaplannerIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/java/org/kie/server/integrationtests/optaplanner/OptaplannerIntegrationTest.java deleted file mode 100644 index a90e66d6f8..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/java/org/kie/server/integrationtests/optaplanner/OptaplannerIntegrationTest.java +++ /dev/null @@ -1,751 +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.integrationtests.optaplanner; - -import java.io.BufferedReader; -import java.io.StringReader; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; -import java.util.concurrent.TimeUnit; - -import org.jboss.resteasy.client.jaxrs.BasicAuthentication; -import org.jboss.resteasy.client.jaxrs.ResteasyClient; -import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.kie.api.KieServices; -import org.kie.server.api.exception.KieServicesException; -import org.kie.server.api.model.KieContainerResource; -import org.kie.server.api.model.ReleaseId; -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.client.KieServicesClient; -import org.kie.server.integrationtests.config.TestConfig; -import org.kie.server.integrationtests.shared.KieServerAssert; -import org.kie.server.integrationtests.shared.KieServerDeployer; -import org.kie.server.integrationtests.shared.KieServerReflections; -import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore; -import org.optaplanner.core.impl.solver.ProblemFactChange; - -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -import static org.junit.Assert.*; -import org.assertj.core.api.Assertions; - -public class OptaplannerIntegrationTest - extends OptaplannerKieServerBaseIntegrationTest { - - private static final ReleaseId kjar1 = new ReleaseId( - "org.kie.server.testing", - "cloudbalance", - "1.0.0.Final"); - - private static final String NOT_EXISTING_CONTAINER_ID = "no_container"; - private static final String CONTAINER_1_ID = "cloudbalance"; - private static final String SOLVER_1_ID = "cloudsolver"; - private static final String SOLVER_PROMETHEUS_ID = "cloudsolver-prometheus"; - private static final String SOLVER_1_CONFIG = "cloudbalance-solver.xml"; - private static final String SOLVER_1_REALTIME_CONFIG = "cloudbalance-realtime-planning-solver.xml"; - private static final String SOLVER_1_REALTIME_DAEMON_CONFIG = "cloudbalance-realtime-planning-daemon-solver.xml"; - - private static final String CLASS_CLOUD_BALANCE = "org.kie.server.testing.CloudBalance"; - private static final String CLASS_CLOUD_COMPUTER = "org.kie.server.testing.CloudComputer"; - private static final String CLASS_CLOUD_PROCESS = "org.kie.server.testing.CloudProcess"; - private static final String CLASS_ADD_COMPUTER_PROBLEM_FACT_CHANGE = "org.kie.server.testing.AddComputerProblemFactChange"; - private static final String CLASS_DELETE_COMPUTER_PROBLEM_FACT_CHANGE = "org.kie.server.testing.DeleteComputerProblemFactChange"; - private static final String CLASS_CLOUD_GENERATOR = "org.kie.server.testing.CloudBalancingGenerator"; - - private static final long EXTENDED_TIMEOUT = 300_000L; - - @BeforeClass - public static void deployArtifacts() { - KieServerDeployer.buildAndDeployCommonMavenParent(); - KieServerDeployer.buildAndDeployMavenProjectFromResource("/kjars-sources/cloudbalance"); - - kieContainer = KieServices.Factory.get().newKieContainer(kjar1); - - // Having timeout issues due to kjar dependencies -> raised timeout. - KieServicesClient client = createDefaultStaticClient(EXTENDED_TIMEOUT); - ServiceResponse reply = client.createContainer(CONTAINER_1_ID, new KieContainerResource(CONTAINER_1_ID, kjar1)); - KieServerAssert.assertSuccess(reply); - } - - @Override - protected void addExtraCustomClasses(Map> extraClasses) - throws ClassNotFoundException { - - extraClasses.put(CLASS_CLOUD_BALANCE, - Class.forName(CLASS_CLOUD_BALANCE, - true, - kieContainer.getClassLoader())); - extraClasses.put(CLASS_CLOUD_COMPUTER, - Class.forName(CLASS_CLOUD_COMPUTER, - true, - kieContainer.getClassLoader())); - extraClasses.put(CLASS_CLOUD_PROCESS, - Class.forName(CLASS_CLOUD_PROCESS, - true, - kieContainer.getClassLoader())); - extraClasses.put(CLASS_ADD_COMPUTER_PROBLEM_FACT_CHANGE, - Class.forName(CLASS_ADD_COMPUTER_PROBLEM_FACT_CHANGE, - true, - kieContainer.getClassLoader())); - extraClasses.put(CLASS_DELETE_COMPUTER_PROBLEM_FACT_CHANGE, - Class.forName(CLASS_DELETE_COMPUTER_PROBLEM_FACT_CHANGE, - true, - kieContainer.getClassLoader())); - } - - @Test - public void testCreateDisposeSolver() { - solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - SOLVER_1_CONFIG); - solverClient.disposeSolver(CONTAINER_1_ID, - SOLVER_1_ID); - } - - @Test - public void testCreateSolverFromNotExistingContainer() { - try { - solverClient.createSolver(NOT_EXISTING_CONTAINER_ID, - SOLVER_1_ID, - SOLVER_1_CONFIG); - fail("A KieServicesException should have been thrown by now."); - } catch (KieServicesException e) { - KieServerAssert.assertResultContainsStringRegex(e.getMessage(), - ".*Container '" + NOT_EXISTING_CONTAINER_ID + "' is not instantiated or cannot find container for alias '" + NOT_EXISTING_CONTAINER_ID + "'.*"); - } - } - - @Test(expected = IllegalArgumentException.class) - public void testCreateSolverWithoutConfigPath() { - solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - null); - } - - @Test - public void testCreateSolverWrongConfigPath() { - try { - solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - "NonExistingPath"); - fail("A KieServicesException should have been thrown by now."); - } catch (KieServicesException e) { - KieServerAssert.assertResultContainsStringRegex(e.getMessage(), - ".*The solverConfigResource \\(.*\\) does not exist as a classpath resource in the classLoader \\(.*\\)*"); - } - } - - @Test(expected = IllegalArgumentException.class) - public void testCreateSolverNullContainer() { - solverClient.createSolver(null, - SOLVER_1_ID, - SOLVER_1_CONFIG); - } - - @Test - public void testCreateDuplicitSolver() { - SolverInstance solverInstance = solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - SOLVER_1_CONFIG); - assertNotNull(solverInstance); - - try { - solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - SOLVER_1_CONFIG); - fail("A KieServicesException should have been thrown by now."); - } catch (KieServicesException e) { - KieServerAssert.assertResultContainsStringRegex(e.getMessage(), - ".*Failed to create solver. Solver .* already exists for container .*"); - } - } - - @Test - public void testDisposeNotExistingSolver() { - try { - solverClient.disposeSolver(CONTAINER_1_ID, - SOLVER_1_ID); - fail("A KieServicesException should have been thrown by now."); - } catch (KieServicesException e) { - KieServerAssert.assertResultContainsStringRegex(e.getMessage(), - ".*Solver.*from container.*not found.*"); - } - } - - @Test - public void testGetSolverState() { - SolverInstance solverInstance = solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - SOLVER_1_CONFIG); - assertNotNull(solverInstance); - - solverInstance = solverClient.getSolver(CONTAINER_1_ID, - SOLVER_1_ID); - assertNotNull(solverInstance); - assertEquals(CONTAINER_1_ID, - solverInstance.getContainerId()); - assertEquals(SOLVER_1_CONFIG, - solverInstance.getSolverConfigFile()); - assertEquals(SOLVER_1_ID, - solverInstance.getSolverId()); - assertEquals(SolverInstance.getSolverInstanceKey(CONTAINER_1_ID, - SOLVER_1_ID), - solverInstance.getSolverInstanceKey()); - assertEquals(SolverInstance.SolverStatus.NOT_SOLVING, - solverInstance.getStatus()); - assertNotNull(solverInstance.getScoreWrapper()); - assertNull(solverInstance.getScoreWrapper().toScore()); - } - - @Test - public void testGetNotExistingSolverState() { - try { - solverClient.getSolver(CONTAINER_1_ID, - SOLVER_1_ID); - fail("A KieServicesException should have been thrown by now."); - } catch (KieServicesException e) { - KieServerAssert.assertResultContainsStringRegex(e.getMessage(), - ".*Solver.*not found in container.*"); - } - } - - @Test - public void testGetSolvers() { - List solverInstanceList = solverClient.getSolvers(CONTAINER_1_ID); - assertNotNull(solverInstanceList); - assertEquals(0, - solverInstanceList.size()); - - solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - SOLVER_1_CONFIG); - - solverInstanceList = solverClient.getSolvers(CONTAINER_1_ID); - assertNotNull(solverInstanceList); - assertEquals(1, - solverInstanceList.size()); - - SolverInstance returnedInstance = solverInstanceList.get(0); - assertEquals(CONTAINER_1_ID, - returnedInstance.getContainerId()); - assertEquals(SOLVER_1_CONFIG, - returnedInstance.getSolverConfigFile()); - assertEquals(SOLVER_1_ID, - returnedInstance.getSolverId()); - assertEquals(SolverInstance.getSolverInstanceKey(CONTAINER_1_ID, - SOLVER_1_ID), - returnedInstance.getSolverInstanceKey()); - assertEquals(SolverInstance.SolverStatus.NOT_SOLVING, - returnedInstance.getStatus()); - assertNotNull(returnedInstance.getScoreWrapper()); - assertNull(returnedInstance.getScoreWrapper().toScore()); - } - - @Test(timeout = 15_000) - public void testExecuteSolver() throws Exception { - testExecuteSolverHelper(SOLVER_1_ID); - } - - @Test(timeout = 15_000) - public void testPrometheusMetrics() throws Exception { - testExecuteSolverHelper(SOLVER_PROMETHEUS_ID); - checkPrometheusMetrics(); - } - - private void testExecuteSolverHelper(String solverID) throws Exception { - SolverInstance solverInstance = solverClient.createSolver(CONTAINER_1_ID, - solverID, - SOLVER_1_CONFIG); - assertNotNull(solverInstance); - assertEquals(SolverInstance.SolverStatus.NOT_SOLVING, - solverInstance.getStatus()); - - // the following status starts the solver - Object planningProblem = loadPlanningProblem(5, - 15); - solverClient.solvePlanningProblem(CONTAINER_1_ID, - solverID, - planningProblem); - - solverInstance = solverClient.getSolver(CONTAINER_1_ID, - solverID); - - // solver should finish in 5 seconds, but we wait up to 15s before timing out - final long SOLVER_STATUS_CHECK_PERIOD = 1000L; - while (solverInstance.getStatus() == SolverInstance.SolverStatus.SOLVING) { - solverInstance = solverClient.getSolver(CONTAINER_1_ID, - solverID); - assertNotNull(solverInstance); - Thread.sleep(SOLVER_STATUS_CHECK_PERIOD); - } - - assertEquals(SolverInstance.SolverStatus.NOT_SOLVING, - solverInstance.getStatus()); - - solverClient.disposeSolver(CONTAINER_1_ID, - solverID); - } - - @Test(timeout = 60_000) - public void testExecuteRealtimePlanningSolverSingleItemSubmit() throws Exception { - testExecuteRealtimePlanningSolverSingleItemSubmit(false); - } - - @Test(timeout = 60_000) - public void testExecuteRealtimePlanningSolverSingleItemSubmitDaemonEnabled() throws Exception { - testExecuteRealtimePlanningSolverSingleItemSubmit(true); - } - - private void testExecuteRealtimePlanningSolverSingleItemSubmit(boolean daemon) throws Exception { - SolverInstance solverInstance = solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - daemon ? SOLVER_1_REALTIME_DAEMON_CONFIG : SOLVER_1_REALTIME_CONFIG); - assertNotNull(solverInstance); - assertEquals(SolverInstance.SolverStatus.NOT_SOLVING, - solverInstance.getStatus()); - - final int computerCount = 5; - final int numberOfComputersToAdd = 5; - final Object planningProblem = loadPlanningProblem(computerCount, - 15); - solverClient.solvePlanningProblem(CONTAINER_1_ID, - SOLVER_1_ID, - planningProblem); - - SolverInstance solver = solverClient.getSolver(CONTAINER_1_ID, - SOLVER_1_ID); - assertEquals(SolverInstance.SolverStatus.SOLVING, - solver.getStatus()); - - Thread.sleep(3000); - - List computerList = null; - - for (int i = 0; i < numberOfComputersToAdd; i++) { - ProblemFactChange problemFactChange = loadAddProblemFactChange(computerCount + i); - solverClient.addProblemFactChange(CONTAINER_1_ID, - SOLVER_1_ID, - problemFactChange); - - do { - final Object bestSolution = verifySolverAndGetBestSolution(); - computerList = getCloudBalanceComputerList(bestSolution); - } while (computerCount + i + 1 != computerList.size()); - } - - assertTrue(solverClient.isEveryProblemFactChangeProcessed(CONTAINER_1_ID, - SOLVER_1_ID)); - - Thread.sleep(3000); - - assertNotNull(computerList); - - for (int i = 0; i < numberOfComputersToAdd; i++) { - ProblemFactChange problemFactChange = loadDeleteProblemFactChange(computerList.get(i)); - - solverClient.addProblemFactChange(CONTAINER_1_ID, - SOLVER_1_ID, - problemFactChange); - - do { - final Object bestSolution = verifySolverAndGetBestSolution(); - computerList = getCloudBalanceComputerList(bestSolution); - } while (computerCount + numberOfComputersToAdd - i - 1 != computerList.size()); - } - - assertTrue(solverClient.isEveryProblemFactChangeProcessed(CONTAINER_1_ID, - SOLVER_1_ID)); - - solverClient.disposeSolver(CONTAINER_1_ID, - SOLVER_1_ID); - } - - @Test(timeout = 60_000) - public void testExecuteRealtimePlanningSolverBulkItemSubmit() throws Exception { - testExecuteRealtimePlanningSolverBulkItemSubmit(false); - } - - @Test(timeout = 60_000) - public void testExecuteRealtimePlanningSolverBulkItemSubmitDaemonEnabled() throws Exception { - testExecuteRealtimePlanningSolverBulkItemSubmit(true); - } - - private void testExecuteRealtimePlanningSolverBulkItemSubmit(boolean daemon) throws Exception { - SolverInstance solverInstance = solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - daemon ? SOLVER_1_REALTIME_DAEMON_CONFIG : SOLVER_1_REALTIME_CONFIG); - assertNotNull(solverInstance); - assertEquals(SolverInstance.SolverStatus.NOT_SOLVING, - solverInstance.getStatus()); - - final int initialComputerCount = 5; - final int numberOfComputersToAdd = 5; - final Object planningProblem = loadPlanningProblem(initialComputerCount, - 15); - solverClient.solvePlanningProblem(CONTAINER_1_ID, - SOLVER_1_ID, - planningProblem); - - SolverInstance solver = solverClient.getSolver(CONTAINER_1_ID, - SOLVER_1_ID); - assertEquals(SolverInstance.SolverStatus.SOLVING, - solver.getStatus()); - - Thread.sleep(3000); - - List problemFactChangeList = new ArrayList<>(numberOfComputersToAdd); - for (int i = 0; i < numberOfComputersToAdd; i++) { - problemFactChangeList.add(loadAddProblemFactChange(initialComputerCount + i)); - } - solverClient.addProblemFactChanges(CONTAINER_1_ID, - SOLVER_1_ID, - problemFactChangeList); - - List computerList = null; - do { - final Object bestSolution = verifySolverAndGetBestSolution(); - computerList = getCloudBalanceComputerList(bestSolution); - } while (initialComputerCount + numberOfComputersToAdd != computerList.size()); - - assertNotNull(computerList); - assertTrue(solverClient.isEveryProblemFactChangeProcessed(CONTAINER_1_ID, - SOLVER_1_ID)); - - Thread.sleep(3000); - - problemFactChangeList.clear(); - for (int i = 0; i < numberOfComputersToAdd; i++) { - problemFactChangeList.add(loadDeleteProblemFactChange(computerList.get(i))); - } - - solverClient.addProblemFactChanges(CONTAINER_1_ID, - SOLVER_1_ID, - problemFactChangeList); - - do { - final Object bestSolution = verifySolverAndGetBestSolution(); - computerList = getCloudBalanceComputerList(bestSolution); - } while (initialComputerCount != computerList.size()); - - assertTrue(solverClient.isEveryProblemFactChangeProcessed(CONTAINER_1_ID, - SOLVER_1_ID)); - - solverClient.disposeSolver(CONTAINER_1_ID, - SOLVER_1_ID); - } - - private Object verifySolverAndGetBestSolution() { - SolverInstance solver = solverClient.getSolverWithBestSolution(CONTAINER_1_ID, - SOLVER_1_ID); - assertEquals(SolverInstance.SolverStatus.SOLVING, - solver.getStatus()); - - Object bestSolution = solver.getBestSolution(); - assertEquals(bestSolution.getClass().getName(), - CLASS_CLOUD_BALANCE); - return bestSolution; - } - - private List getCloudBalanceComputerList(final Object cloudBalance) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { - Method computerListMethod = cloudBalance.getClass().getDeclaredMethod("getComputerList"); - return (List) computerListMethod.invoke(cloudBalance); - } - - @Test - public void testExecuteRunningSolver() throws Exception { - SolverInstance solverInstance = solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - SOLVER_1_CONFIG); - assertNotNull(solverInstance); - assertEquals(SolverInstance.SolverStatus.NOT_SOLVING, - solverInstance.getStatus()); - - // start solver - Object planningProblem = loadPlanningProblem(5, - 15); - solverClient.solvePlanningProblem(CONTAINER_1_ID, - SOLVER_1_ID, - planningProblem); - - // start solver again - try { - solverClient.solvePlanningProblem(CONTAINER_1_ID, - SOLVER_1_ID, - planningProblem); - fail("A KieServicesException should have been thrown by now."); - } catch (KieServicesException e) { - KieServerAssert.assertResultContainsStringRegex(e.getMessage(), - ".*Solver .* on container .* is already executing.*"); - } - - solverClient.disposeSolver(CONTAINER_1_ID, - SOLVER_1_ID); - } - - @Test(timeout = 60000) - public void testGetBestSolution() throws Exception { - SolverInstance solverInstance = solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - SOLVER_1_CONFIG); - - // Start the solver - Object planningProblem = loadPlanningProblem(10, - 30); - solverClient.solvePlanningProblem(CONTAINER_1_ID, - SOLVER_1_ID, - planningProblem); - - Object solution = null; - HardSoftScore score = null; - // It can take a while for the Construction Heuristic to initialize the solution - // The test timeout will interrupt this thread if it takes too long - while (!Thread.currentThread().isInterrupted()) { - solverInstance = solverClient.getSolverWithBestSolution(CONTAINER_1_ID, - SOLVER_1_ID); - assertNotNull(solverInstance); - solution = solverInstance.getBestSolution(); - - ScoreWrapper scoreWrapper = solverInstance.getScoreWrapper(); - assertNotNull(scoreWrapper); - - if (scoreWrapper.toScore() != null) { - assertEquals(HardSoftScore.class, - scoreWrapper.getScoreClass()); - score = (HardSoftScore) scoreWrapper.toScore(); - } - - // Wait until the solver finished initializing the solution - if (solution != null && score != null && score.isSolutionInitialized()) { - break; - } - Thread.sleep(1000); - } - assertNotNull(score); - assertTrue(score.isSolutionInitialized()); - assertTrue(score.getHardScore() <= 0); - // A soft score of 0 is impossible because we'll always need at least 1 computer - assertTrue(score.getSoftScore() < 0); - - List computerList = (List) KieServerReflections.valueOf(solution, - "computerList"); - assertEquals(10, - computerList.size()); - List processList = (List) KieServerReflections.valueOf(solution, - "processList"); - assertEquals(30, - processList.size()); - for (Object process : processList) { - Object computer = KieServerReflections.valueOf(process, - "computer"); - assertNotNull(computer); - // TODO: Change to identity comparation after @XmlID is implemented - assertTrue(computerList.contains(computer)); - } - - solverClient.disposeSolver(CONTAINER_1_ID, - SOLVER_1_ID); - } - - @Test - public void testGetBestSolutionNotExistingSolver() { - try { - solverClient.getSolverWithBestSolution(CONTAINER_1_ID, - SOLVER_1_ID); - fail("A KieServicesException should have been thrown by now."); - } catch (KieServicesException e) { - KieServerAssert.assertResultContainsStringRegex(e.getMessage(), - ".*Solver.*not found in container.*"); - } - } - - @Test - public void testTerminateEarlyNotExistingSolver() { - try { - solverClient.terminateSolverEarly(CONTAINER_1_ID, - SOLVER_1_ID); - fail("A KieServicesException should have been thrown by now."); - } catch (KieServicesException e) { - KieServerAssert.assertResultContainsStringRegex(e.getMessage(), - ".*Solver.*not found in container.*"); - } - } - - @Test - public void testTerminateEarlyStoppedSolver() { - solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - SOLVER_1_CONFIG); - - try { - solverClient.terminateSolverEarly(CONTAINER_1_ID, - SOLVER_1_ID); - fail("A KieServicesException should have been thrown by now."); - } catch (KieServicesException e) { - KieServerAssert.assertResultContainsStringRegex(e.getMessage(), - ".*Solver.*from container.*is not executing.*"); - } - } - - @Test - public void testTerminateEarly() throws Exception { - solverClient.createSolver(CONTAINER_1_ID, - SOLVER_1_ID, - SOLVER_1_CONFIG); - - // start solver - solverClient.solvePlanningProblem(CONTAINER_1_ID, - SOLVER_1_ID, - loadPlanningProblem(50, - 150)); - - SolverInstance instance = solverClient.getSolver(CONTAINER_1_ID, - SOLVER_1_ID); - assertEquals(SolverInstance.SolverStatus.SOLVING, - instance.getStatus()); - - // and then terminate it - solverClient.terminateSolverEarly(CONTAINER_1_ID, - SOLVER_1_ID); - - instance = solverClient.getSolver(CONTAINER_1_ID, - SOLVER_1_ID); - assertTrue(instance.getStatus() == SolverInstance.SolverStatus.TERMINATING_EARLY - || instance.getStatus() == SolverInstance.SolverStatus.NOT_SOLVING); - - solverClient.disposeSolver(CONTAINER_1_ID, - SOLVER_1_ID); - } - - protected WebTarget newRequest(String uriString) { - - ResteasyClient httpClient = new ResteasyClientBuilder() - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(10, TimeUnit.SECONDS) - .build(); - - WebTarget webTarget = httpClient.target(uriString); - webTarget.register(new BasicAuthentication(TestConfig.getUsername(), TestConfig.getPassword())); - return webTarget; - } - - private void checkPrometheusMetrics() { - Response response = null; - try { - String uriString = TestConfig.getKieServerHttpUrl().replaceAll("/server", "") + "/metrics"; - WebTarget clientRequest = newRequest(uriString); - response = clientRequest.request(MediaType.TEXT_PLAIN_TYPE).get(); - - Assert.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); - - String res = response.readEntity(String.class); - - //These are Prometheus metrics attributes we defined in Optaplanner - Assertions.assertThat(res).contains("solvers_running"); - Assertions.assertThat(res).contains("solver_duration_seconds_count{solver_id=\"cloudsolver-prometheus\""); - Assertions.assertThat(res).contains("solver_duration_seconds_sum{solver_id=\"cloudsolver-prometheus\""); - Assertions.assertThat(res).contains("solver_score_calculation_speed_count{solver_id=\"cloudsolver-prometheus\""); - Assertions.assertThat(res).contains("solver_score_calculation_speed_sum{solver_id=\"cloudsolver-prometheus\""); - //verify metric values - try (BufferedReader br = new BufferedReader(new StringReader(res))) { - String line = br.readLine(); - while (line != null) { - checkPrometheusMetricsLine(line); - line = br.readLine(); - } - } - - } catch (Exception e) { - throw new RuntimeException(e); - } finally { - if (response != null) { - response.close(); - } - } - } - - private void checkPrometheusMetricsLine(String line) { - if (line.startsWith("solver_duration_seconds_count") - || line.startsWith("solver_duration_seconds_sum") - || line.startsWith("solver_score_calculation_speed_count") - || line.startsWith("solver_score_calculation_speed_sum") - ) { - // all metric values should be a positive double - Assertions.assertThat(Double.parseDouble(getMetricToken(line))).isGreaterThan(0d); - } else if (line.startsWith("solvers_running")) { - //when test is done we should have zero solvers running - Assertions.assertThat(Double.parseDouble(getMetricToken(line))).isEqualTo(0d); - } - } - - private String getMetricToken(String line) { - StringTokenizer st = new StringTokenizer(line, " "); - Assert.assertEquals(2, st.countTokens()); - st.nextToken(); - return st.nextToken(); - } - - private Object loadPlanningProblem(int computerListSize, - int processListSize) throws NoSuchMethodException, ClassNotFoundException, - IllegalAccessException, InstantiationException, InvocationTargetException { - Class cbgc = kieContainer.getClassLoader().loadClass(CLASS_CLOUD_GENERATOR); - Object cbgi = cbgc.newInstance(); - - Method method = cbgc.getMethod("createCloudBalance", - int.class, - int.class); - return method.invoke(cbgi, - computerListSize, - processListSize); - } - - private ProblemFactChange loadAddProblemFactChange(final int currentNumberOfComputers) throws ClassNotFoundException, - IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { - Class cbgc = kieContainer.getClassLoader().loadClass(CLASS_CLOUD_GENERATOR); - Object cbgi = cbgc.newInstance(); - - Method method = cbgc.getMethod("createCloudComputer", - int.class); - Object cloudComputer = method.invoke(cbgi, - currentNumberOfComputers); - - Class cloudComputerClass = kieContainer.getClassLoader().loadClass(CLASS_CLOUD_COMPUTER); - Class problemFactChangeClass = kieContainer.getClassLoader().loadClass(CLASS_ADD_COMPUTER_PROBLEM_FACT_CHANGE); - - Constructor constructor = problemFactChangeClass.getConstructor(cloudComputerClass); - return (ProblemFactChange) constructor.newInstance(cloudComputer); - } - - private ProblemFactChange loadDeleteProblemFactChange(final Object cloudComputer) throws ClassNotFoundException, - NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { - Class cloudComputerClass = kieContainer.getClassLoader().loadClass(CLASS_CLOUD_COMPUTER); - Class problemFactChangeClass = kieContainer.getClassLoader().loadClass(CLASS_DELETE_COMPUTER_PROBLEM_FACT_CHANGE); - - Constructor constructor = problemFactChangeClass.getConstructor(cloudComputerClass); - return (ProblemFactChange) constructor.newInstance(cloudComputer); - } -} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/java/org/kie/server/integrationtests/optaplanner/OptaplannerKieServerBaseIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/java/org/kie/server/integrationtests/optaplanner/OptaplannerKieServerBaseIntegrationTest.java deleted file mode 100644 index 977596d2f4..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/java/org/kie/server/integrationtests/optaplanner/OptaplannerKieServerBaseIntegrationTest.java +++ /dev/null @@ -1,71 +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.integrationtests.optaplanner; - -import java.util.List; - -import org.junit.Before; -import org.junit.BeforeClass; -import org.kie.api.KieServices; -import org.kie.server.api.model.KieContainerResource; -import org.kie.server.api.model.KieContainerResourceList; -import org.kie.server.api.model.ServiceResponse; -import org.kie.server.api.model.instance.SolverInstance; -import org.kie.server.client.KieServicesClient; -import org.kie.server.client.SolverServicesClient; -import org.kie.server.integrationtests.shared.KieServerAssert; -import org.kie.server.integrationtests.shared.basetests.RestJmsSharedBaseIntegrationTest; - -public abstract class OptaplannerKieServerBaseIntegrationTest - extends RestJmsSharedBaseIntegrationTest { - - protected SolverServicesClient solverClient; - - @BeforeClass - public static void setupFactory() - throws Exception { - commandsFactory = KieServices.Factory.get().getCommands(); - } - - @Before - public void abortAllSolvers() { - for (KieContainerResource container : getContainers()) { - abortSolvers(container.getContainerId()); - } - } - - public void abortSolvers(String containerId) { - for (SolverInstance solver : getSolvers(containerId)) { - solverClient.disposeSolver(containerId, - solver.getSolverId()); - } - } - - private List getContainers() { - ServiceResponse response = client.listContainers(); - KieServerAssert.assertSuccess(response); - return response.getResult().getContainers(); - } - - private List getSolvers(String containerId) { - return solverClient.getSolvers(containerId); - } - - @Override - protected void setupClients(KieServicesClient kieServicesClient) { - this.solverClient = kieServicesClient.getServicesClient(SolverServicesClient.class); - } -} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/java/org/kie/server/integrationtests/optaplanner/jms/OptaPlannerJmsResponseHandlerIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/java/org/kie/server/integrationtests/optaplanner/jms/OptaPlannerJmsResponseHandlerIntegrationTest.java deleted file mode 100644 index b4fefaef53..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/java/org/kie/server/integrationtests/optaplanner/jms/OptaPlannerJmsResponseHandlerIntegrationTest.java +++ /dev/null @@ -1,207 +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. - * - * 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.integrationtests.optaplanner.jms; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Map; - -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.junit.runners.Parameterized; -import org.kie.api.KieServices; -import org.kie.server.api.marshalling.Marshaller; -import org.kie.server.api.marshalling.MarshallerFactory; -import org.kie.server.api.marshalling.MarshallingFormat; -import org.kie.server.api.model.KieContainerResource; -import org.kie.server.api.model.ReleaseId; -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.client.KieServicesClient; -import org.kie.server.client.KieServicesConfiguration; -import org.kie.server.client.jms.AsyncResponseHandler; -import org.kie.server.client.jms.BlockingResponseCallback; -import org.kie.server.client.jms.FireAndForgetResponseHandler; -import org.kie.server.client.jms.RequestReplyResponseHandler; -import org.kie.server.client.jms.ResponseCallback; -import org.kie.server.client.jms.ResponseHandler; -import org.kie.server.integrationtests.category.JMSOnly; -import org.kie.server.integrationtests.optaplanner.OptaplannerKieServerBaseIntegrationTest; -import org.kie.server.integrationtests.shared.KieServerAssert; -import org.kie.server.integrationtests.shared.KieServerDeployer; -import org.kie.server.integrationtests.shared.KieServerSynchronization; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.fail; - -@Category({JMSOnly.class}) -public class OptaPlannerJmsResponseHandlerIntegrationTest extends OptaplannerKieServerBaseIntegrationTest { - - private static final ReleaseId RELEASE_ID = new ReleaseId("org.kie.server.testing", "cloudbalance", "1.0.0.Final"); - - private static final String CONTAINER_1_ID = "cloudbalance"; - private static final String SOLVER_1_ID = "cloudsolver"; - private static final String SOLVER_1_CONFIG = "cloudbalance-solver.xml"; - - private static final String CLASS_CLOUD_BALANCE = "org.kie.server.testing.CloudBalance"; - private static final String CLASS_CLOUD_COMPUTER = "org.kie.server.testing.CloudComputer"; - private static final String CLASS_CLOUD_PROCESS = "org.kie.server.testing.CloudProcess"; - private static final String CLASS_CLOUD_GENERATOR = "org.kie.server.testing.CloudBalancingGenerator"; - private static final String CLASS_ADD_COMPUTER_PROBLEM_FACT_CHANGE = "org.kie.server.testing.AddComputerProblemFactChange"; - private static final String CLASS_DELETE_COMPUTER_PROBLEM_FACT_CHANGE = "org.kie.server.testing.DeleteComputerProblemFactChange"; - - private static final long EXTENDED_TIMEOUT = 300_000L; - - @Parameterized.Parameters(name = "{0}") - public static Collection data() { - KieServicesConfiguration jmsConfiguration = createKieServicesJmsConfiguration(); - - return new ArrayList<>(Arrays.asList(new Object[][]{ - {MarshallingFormat.JAXB, jmsConfiguration}, - {MarshallingFormat.JSON, jmsConfiguration}, - {MarshallingFormat.XSTREAM, jmsConfiguration} - })); - } - - @BeforeClass - public static void deployArtifacts() { - KieServerDeployer.buildAndDeployCommonMavenParent(); - KieServerDeployer.buildAndDeployMavenProjectFromResource("/kjars-sources/cloudbalance"); - - kieContainer = KieServices.Factory.get().newKieContainer(RELEASE_ID); - - // Having timeout issues due to kjar dependencies -> raised timeout. - KieServicesClient client = createDefaultStaticClient(EXTENDED_TIMEOUT); - ServiceResponse reply = client.createContainer(CONTAINER_1_ID, new KieContainerResource(CONTAINER_1_ID, RELEASE_ID)); - KieServerAssert.assertSuccess(reply); - } - - @Override - protected void addExtraCustomClasses(Map> extraClasses) throws Exception { - extraClasses.put(CLASS_CLOUD_BALANCE, Class.forName(CLASS_CLOUD_BALANCE, true, kieContainer.getClassLoader())); - extraClasses.put(CLASS_CLOUD_COMPUTER, Class.forName(CLASS_CLOUD_COMPUTER, true, kieContainer.getClassLoader())); - extraClasses.put(CLASS_CLOUD_PROCESS, Class.forName(CLASS_CLOUD_PROCESS, true, kieContainer.getClassLoader())); - extraClasses.put(CLASS_ADD_COMPUTER_PROBLEM_FACT_CHANGE, Class.forName(CLASS_ADD_COMPUTER_PROBLEM_FACT_CHANGE, true, kieContainer.getClassLoader())); - extraClasses.put(CLASS_DELETE_COMPUTER_PROBLEM_FACT_CHANGE, Class.forName(CLASS_DELETE_COMPUTER_PROBLEM_FACT_CHANGE, true, kieContainer.getClassLoader())); - } - - @Test - public void testSolverWithAsyncResponseHandler() throws Exception { - Marshaller marshaller = MarshallerFactory.getMarshaller(new HashSet<>(extraClasses.values()), - configuration.getMarshallingFormat(), client.getClassLoader()); - ResponseCallback responseCallback = new BlockingResponseCallback(marshaller); - ResponseHandler asyncResponseHandler = new AsyncResponseHandler(responseCallback); - solverClient.setResponseHandler(asyncResponseHandler); - - SolverInstance response = solverClient.createSolver(CONTAINER_1_ID, SOLVER_1_ID, SOLVER_1_CONFIG); - assertThat(response).isNull(); - SolverInstance solver = responseCallback.get(SolverInstance.class); - assertThat(solver).isNotNull(); - assertThat(solver.getContainerId()).isEqualTo(CONTAINER_1_ID); - assertThat(solver.getSolverId()).isEqualTo(SOLVER_1_ID); - - List solverInstanceList = solverClient.getSolvers(CONTAINER_1_ID); - assertThat(solverInstanceList).isNull(); - SolverInstanceList solverList = responseCallback.get(SolverInstanceList.class); - assertThat(solverList).isNotNull(); - assertThat(solverList.getContainers()).isNotNull().isNotEmpty().hasSize(1); - solver = solverList.getContainers().get(0); - assertThat(solver.getSolverId()).isEqualTo(SOLVER_1_ID); - assertThat(solver.getStatus()).isEqualTo(SolverInstance.SolverStatus.NOT_SOLVING); - - solverClient.solvePlanningProblem(CONTAINER_1_ID, SOLVER_1_ID, loadPlanningProblem(5, 15)); - // Make sure the service call result is consumed - responseCallback.get(Void.class); - - response = solverClient.getSolver(CONTAINER_1_ID, SOLVER_1_ID); - assertThat(response).isNull(); - solver = responseCallback.get(SolverInstance.class); - assertThat(solver.getSolverId()).isEqualTo(SOLVER_1_ID); - assertThat(solver.getStatus()).isEqualTo(SolverInstance.SolverStatus.SOLVING); - - solverClient.terminateSolverEarly(CONTAINER_1_ID, SOLVER_1_ID); - // Make sure the service call result is consumed - responseCallback.get(Void.class); - - response = solverClient.getSolver(CONTAINER_1_ID, SOLVER_1_ID); - assertThat(response).isNull(); - solver = responseCallback.get(SolverInstance.class); - assertThat(solver.getSolverId()).isEqualTo(SOLVER_1_ID); - assertThat(solver.getStatus()).isIn(SolverInstance.SolverStatus.TERMINATING_EARLY, SolverInstance.SolverStatus.NOT_SOLVING); - - solverClient.disposeSolver(CONTAINER_1_ID, SOLVER_1_ID); - // Make sure the service call result is consumed - responseCallback.get(Void.class); - - solverClient.getSolvers(CONTAINER_1_ID); - assertThat(response).isNull(); - solverList = responseCallback.get(SolverInstanceList.class); - assertThat(solverList).isNotNull(); - assertThat(solverList.getContainers()).isNullOrEmpty(); - } - - @Test - public void testSolverWithFireAndForgetResponseHandler() throws Exception { - solverClient.setResponseHandler(new FireAndForgetResponseHandler()); - SolverInstance solverInstance = solverClient.createSolver(CONTAINER_1_ID, SOLVER_1_ID, SOLVER_1_CONFIG); - assertThat(solverInstance).isNull(); - - solverClient.setResponseHandler(new RequestReplyResponseHandler()); - KieServerSynchronization.waitForSolver(solverClient, CONTAINER_1_ID, SOLVER_1_ID); - - solverClient.setResponseHandler(new FireAndForgetResponseHandler()); - solverClient.solvePlanningProblem(CONTAINER_1_ID, SOLVER_1_ID, loadPlanningProblem(5, 15)); - - solverClient.setResponseHandler(new RequestReplyResponseHandler()); - KieServerSynchronization.waitForSolverStatus(solverClient, CONTAINER_1_ID, SOLVER_1_ID, SolverInstance.SolverStatus.SOLVING); - - solverClient.setResponseHandler(new FireAndForgetResponseHandler()); - solverClient.terminateSolverEarly(CONTAINER_1_ID, SOLVER_1_ID); - - solverClient.setResponseHandler(new RequestReplyResponseHandler()); - KieServerSynchronization.waitForSolverStatus(solverClient, CONTAINER_1_ID, SOLVER_1_ID, - SolverInstance.SolverStatus.NOT_SOLVING); - - solverClient.setResponseHandler(new FireAndForgetResponseHandler()); - solverClient.disposeSolver(CONTAINER_1_ID, SOLVER_1_ID); - - solverClient.setResponseHandler(new RequestReplyResponseHandler()); - KieServerSynchronization.waitForSolverDispose(solverClient, CONTAINER_1_ID, SOLVER_1_ID); - - List solverInstanceList = solverClient.getSolvers(CONTAINER_1_ID); - assertThat(solverInstanceList).isNullOrEmpty(); - } - - public Object loadPlanningProblem(int computerListSize, int processListSize) { - Object problem = null; - try { - Class cbgc = kieContainer.getClassLoader().loadClass(CLASS_CLOUD_GENERATOR); - Object cbgi = cbgc.newInstance(); - - Method method = cbgc.getMethod("createCloudBalance", int.class, int.class); - problem = method.invoke(cbgi, computerListSize, processListSize); - } catch (Exception e) { - e.printStackTrace(); - fail("Exception trying to create cloud balance unsolved problem."); - } - return problem; - } -} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/resources/logback-test.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/resources/logback-test.xml deleted file mode 100644 index fe10807e5b..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-optaplanner/src/test/resources/logback-test.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - %d{HH:mm:ss.SSS} [%t] %-5p %m%n - - - - - - - - - - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-pmml-legacy/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-pmml-legacy/pom.xml index 030ac60157..85d9690514 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-pmml-legacy/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-pmml-legacy/pom.xml @@ -141,7 +141,6 @@ true true ${org.drools.server.ext.disabled} - true true ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} @@ -187,7 +186,6 @@ true ${org.drools.server.ext.disabled} - true ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} true @@ -266,4 +264,4 @@ - \ No newline at end of file + diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-pmml/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-pmml/pom.xml index a537e32e5b..aed35f24d3 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-pmml/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-pmml/pom.xml @@ -141,7 +141,6 @@ true true ${org.drools.server.ext.disabled} - true true ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} @@ -187,7 +186,6 @@ true ${org.drools.server.ext.disabled} - true ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} true @@ -266,4 +264,4 @@ - \ No newline at end of file + diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-policy/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-policy/pom.xml index 342d732952..029fa111de 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-policy/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-policy/pom.xml @@ -118,7 +118,6 @@ ${org.jbpm.server.ext.disabled} ${org.drools.server.ext.disabled} true - true true ${kie.server.testing.kjars.build.settings.xml} ${org.kie.server.persistence.ds} @@ -159,7 +158,6 @@ ${org.jbpm.server.ext.disabled} ${org.drools.server.ext.disabled} true - true true KeepLatestOnly diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-router/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-router/pom.xml index b51ba942da..429534d58c 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-router/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-router/pom.xml @@ -137,7 +137,6 @@ ${org.jbpm.server.ext.disabled} ${org.drools.server.ext.disabled} true - true true ${kie.server.testing.kjars.build.settings.xml} ${org.kie.server.persistence.ds} @@ -173,7 +172,6 @@ ${org.jbpm.server.ext.disabled} ${org.drools.server.ext.disabled} true - true true ${kie.server.router.url} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-scenario-simulation/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-scenario-simulation/pom.xml index b11d615f36..f495a88105 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-scenario-simulation/pom.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-scenario-simulation/pom.xml @@ -120,7 +120,6 @@ true true ${org.drools.server.ext.disabled} - true true ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} @@ -168,7 +167,6 @@ true ${org.drools.server.ext.disabled} - true ${org.kie.dmn.server.ext.disabled} ${org.kie.prometheus.server.ext.disabled} ${org.kie.scenariosimulation.server.ext.disabled} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/pom.xml deleted file mode 100644 index 26ebc2fd92..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/pom.xml +++ /dev/null @@ -1,288 +0,0 @@ - - 4.0.0 - - org.kie.server - kie-server-tests - 7.75.0-SNAPSHOT - - - kie-server-integ-tests-task-assigning - - KIE :: Execution Server :: Tests :: Task Assigning Integration Tests - KIE Execution Server Integration Tests with configuration options to run on different containers. - - - org.kie.server.itests.taskassigning - - - - - - org.kie.server - kie-server-integ-tests-common - test - - - - - org.kie.server - kie-server-api - test - - - org.kie.server - kie-server-client - test - - - - - org.slf4j - slf4j-api - test - - - ch.qos.logback - logback-classic - test - - - - org.assertj - assertj-core - test - - - - - org.kie.server - kie-server - webc - war - test - - - org.kie.server - kie-server - ee7 - war - test - - - org.kie.server - kie-server - ee8 - war - test - - - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - - true - ${cargo.container.id} - ${container.port} - ${kie.server.context} - ${kie.server.war.path} - ${kie.server.remoting.url} - ${kie.server.base.http.url} - ${kie.server.testing.kjars.build.settings.xml} - - - - - - - - src/test/resources - false - - - src/test/filtered-resources - true - - - ../src/test/filtered-resources - - application.properties - - true - - - - - org.codehaus.cargo - cargo-maven3-plugin - - - - false - false - false - true - true - true - true - - true - process-admin - - 2 - http://${container.hostname}:${container.port}/kie-server-services/services/rest/server - yoda - usetheforce123@ - yoda> - PT1S - - SimpleUserSystemService - ${project.build.testOutputDirectory}/roles.properties - ${project.build.testOutputDirectory}/skills.properties - yoda - ${project.basedir}/target/cargo/configurations/wildfly23x/kie-fs-realm-users - - - - - - yoda - usetheforce123@ - - kie-server - guest - process-admin - - - - john - john123* - - kie-server - user - ClientRelations - - - - mary - mary123* - - kie-server - user - ClientRelations - - - - katy - katy123* - - kie-server - user - CreditAnalyst - - - - maciek - maciek123* - - kie-server - user - CreditAnalyst - - - - - ${project.basedir}/script/setup.cli - - - - - - - - - - tomcat9 - - - container.profile - tomcat9 - - - - - wildfly - - - container.profile - wildfly - - - - - eap7 - - - container.profile - eap7 - - - - - oracle-wls-12 - - - container.profile - oracle-wls-12 - - - - - websphere9 - - - container.profile - websphere9 - - - - - springboot - - - container.profile - springboot - - - - true - false - false - false - false - - true - true - true - - http://${container.hostname}:${container.port}/kie-server-services/services/rest/server - administrator - usetheforce123@ - administrator - administrator - 2 - PT1S - - SimpleUserSystemService - ${project.build.testOutputDirectory}/roles.properties - ${project.build.testOutputDirectory}/skills.properties - - - - \ No newline at end of file diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/script/setup.cli b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/script/setup.cli deleted file mode 100644 index f5d9ab4003..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/script/setup.cli +++ /dev/null @@ -1,45 +0,0 @@ - -# Add new file system realm to ApplicationRealm. Benefit of File System realms is that it is editable from the Business Central UI. -# We need to use "role" for roles, Business Central depends on it -/subsystem=elytron/filesystem-realm=KieRealm:add(path=kie-fs-realm-users) -/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=role) - -/subsystem=elytron/security-domain=ApplicationDomain:list-add(name=realms, index=0, value={realm=KieRealm, role-decoder=from-roles-attribute}) -/subsystem=elytron/security-domain=ApplicationDomain:write-attribute(name=default-realm, value=KieRealm) -/subsystem=elytron/security-domain=ApplicationDomain:write-attribute(name=permission-mapper, value=default-permission-mapper) - -/subsystem=undertow/application-security-domain=other:add(security-domain=ApplicationDomain) - -/subsystem=elytron/http-authentication-factory=application-http-authentication:add(http-server-mechanism-factory=global,security-domain=ApplicationDomain,mechanism-configurations=[{mechanism-name=BASIC,mechanism-realm-configurations=[{realm-name=KieRealm}]}, {mechanism-name=FORM}]) - -/subsystem=ejb3/service=remote:remove -/subsystem=ejb3/service=remote:add(connector-ref=http-remoting-connector, thread-pool-name=default) - -/core-service=management/security-realm=KieRealm:add() -/core-service=management/security-realm=KieRealm/server-identity=ssl:add(keystore-relative-to=jboss.server.config.dir, keystore-password=password) - - -/subsystem=elytron/filesystem-realm=KieRealm:add-identity(identity=yoda) -/subsystem=elytron/filesystem-realm=KieRealm:set-password(identity=yoda, clear={password="usetheforce123@"}) -/subsystem=elytron/filesystem-realm=KieRealm:add-identity-attribute(identity=yoda, name=role, value=["kie-server","guest","process-admin"]) - -/subsystem=elytron/filesystem-realm=KieRealm:add-identity(identity=john) -/subsystem=elytron/filesystem-realm=KieRealm:set-password(identity=john, clear={password="john123*"}) -/subsystem=elytron/filesystem-realm=KieRealm:add-identity-attribute(identity=john, name=role, value=["kie-server","user", "ClientRelations"]) - -/subsystem=elytron/filesystem-realm=KieRealm:add-identity(identity=mary) -/subsystem=elytron/filesystem-realm=KieRealm:set-password(identity=mary, clear={password="mary123*"}) -/subsystem=elytron/filesystem-realm=KieRealm:add-identity-attribute(identity=mary, name=role, value=["kie-server","user", "ClientRelations"]) - -/subsystem=elytron/filesystem-realm=KieRealm:add-identity(identity=katy) -/subsystem=elytron/filesystem-realm=KieRealm:set-password(identity=katy, clear={password="katy123*"}) -/subsystem=elytron/filesystem-realm=KieRealm:add-identity-attribute(identity=katy, name=role, value=["kie-server","user","CreditAnalyst"]) - -/subsystem=elytron/filesystem-realm=KieRealm:add-identity(identity=maciek) -/subsystem=elytron/filesystem-realm=KieRealm:set-password(identity=maciek, clear={password="maciek123*"}) -/subsystem=elytron/filesystem-realm=KieRealm:add-identity-attribute(identity=maciek, name=role, value=["kie-server","user","CreditAnalyst"]) - -# Disable jaeger-tracer (same as proposed at WFLY-14625) -if (outcome == success) of /subsystem=microprofile-opentracing-smallrye:read-resource - /subsystem=microprofile-opentracing-smallrye/jaeger-tracer=jaeger:write-attribute(name=sampler-param, value=0) -end-if diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/application.properties b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/application.properties deleted file mode 100644 index 431b369b44..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/application.properties +++ /dev/null @@ -1,65 +0,0 @@ -# -# https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties -# -#server configuration -server.address=${container.hostname} -server.port=${container.port} - -cxf.path=/${kie.server.context}/services/rest - -#jbpm configuration -jbpm.executor.enabled=${jbpm.executor.enabled} -#jbpm.executor.retries=5 -#jbpm.executor.interval=0 -#jbpm.executor.threadPoolSize=1 -#jbpm.executor.timeUnit=SECONDS - -kieserver.location=${kie.server.base.http.url} -#kieserver.controllers= - -kieserver.drools.enabled=${kieserver.drools.enabled} -kieserver.dmn.enabled=${kieserver.dmn.enabled} -kieserver.jbpm.enabled=${kieserver.jbpm.enabled} -kieserver.jbpmui.enabled=${kieserver.jbpmui.enabled} -kieserver.casemgmt.enabled=${kieserver.casemgmt.enabled} -kieserver.optaplanner.enabled=${kieserver.optaplanner.enabled} -kieserver.swagger.enabled=${kieserver.swagger.enabled} -kieserver.prometheus.enabled=${kieserver.prometheus.enabled} -kieserver.scenariosimulation.enabled=${kieserver.scenariosimulation.enabled} - -# task assigning extensions enablement -kieserver.taskAssigning.runtime.enabled=${kieserver.taskAssigning.runtime.enabled} -kieserver.taskAssigning.planning.enabled=${kieserver.taskAssigning.planning.enabled} - -# only required for jBPM -#data source configuration -spring.datasource.username=${org.kie.server.datasource.username} -spring.datasource.password=${org.kie.server.datasource.password} -spring.datasource.url=${org.kie.server.datasource.connection.url} -spring.datasource.xa.data-source-class-name=${org.kie.server.datasource.driver.class} - -narayana.dbcp.enabled=true -narayana.dbcp.maxTotal=20 - -#hibernate configuration -spring.jpa.properties.hibernate.dialect=${org.kie.server.persistence.dialect} -spring.jpa.properties.hibernate.show_sql=false -spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop -spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl - -#transaction manager configuration -spring.jta.narayana.transaction-manager-id=1 - - -# task assigning configuration parameters -taskassigning.processRuntime.url=${taskassigning.processRuntime.url} -taskassigning.processRuntime.user=${taskassigning.processRuntime.user} -taskassigning.processRuntime.pwd=${taskassigning.processRuntime.pwd} -taskassigning.processRuntime.targetUser=${taskassigning.processRuntime.targetUser} -taskassigning.core.model.planningUserId=${taskassigning.core.model.planningUserId} -taskassigning.publishWindowSize=${taskassigning.publishWindowSize} -taskassigning.solutionSyncInterval=${taskassigning.solutionSyncInterval} - -taskassigning.userSystem.name=${taskassigning.userSystem.name} -taskassigning.userSystem.simple.users=${taskassigning.userSystem.simple.users} -taskassigning.userSystem.simple.skills=${taskassigning.userSystem.simple.skills} \ No newline at end of file diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kie-server-testing-client-deployment-settings.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kie-server-testing-client-deployment-settings.xml deleted file mode 100644 index 504a3f7a4b..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kie-server-testing-client-deployment-settings.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - ${kie.server.testing.remote.repo.dir} - - ${maven.settings.mirror} - - - - additional-maven-repos - - - remote-testing-repo - ${kie.server.testing.remote.repo.url} - - - - - - - additional-maven-repos - - \ No newline at end of file diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kie-server-testing-server-custom-settings.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kie-server-testing-server-custom-settings.xml deleted file mode 100644 index f88dbda9c2..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kie-server-testing-server-custom-settings.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - ${kie.server.testing.server.local.repo.dir} - - ${maven.settings.mirror} - - - - additional-maven-repos - - - remote-testing-repo - ${kie.server.testing.remote.repo.url} - - - - - - - additional-maven-repos - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/common-parent/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/common-parent/pom.xml deleted file mode 100644 index 9cea7f8d37..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/common-parent/pom.xml +++ /dev/null @@ -1,81 +0,0 @@ - - 4.0.0 - org.kie.server.testing - common-parent - 1.0.0.Final - pom - - - - ${version.org.kie} - ${version.org.codehaus.jackson} - ${version.org.javassist} - 1.8 - 1.8 - - UTF-8 - - - - - - - org.javassist - javassist - ${version.org.javassist} - - - org.drools - drools-model-compiler - ${version.org.kie} - provided - - - - - - - - - org.kie - kie-maven-plugin - ${version.org.kie} - true - - - - - - - - - jboss-public-repo - https://repository.jboss.org/nexus/content/groups/public-jboss/ - - - - - - - jboss-public-repo - https://repository.jboss.org/nexus/content/groups/public-jboss/ - - - - - - remote-testing-repo - ${kie.server.testing.remote.repo.url} - - - remote-testing-repo - ${kie.server.testing.remote.repo.url} - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/pom.xml deleted file mode 100644 index 91cec67b20..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/pom.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - 4.0.0 - - - org.kie.server.testing - common-parent - 1.0.0.Final - - - task-assigning - 1.0.0.Final - task-assigning - - - - - org.kie - kie-maven-plugin - - - - \ No newline at end of file diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/src/main/resources/CreditDispute.bpmn b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/src/main/resources/CreditDispute.bpmn deleted file mode 100644 index b3e090a4db..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/src/main/resources/CreditDispute.bpmn +++ /dev/null @@ -1,426 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _0A2479EA-3DAA-4AFE-8C3C-1B0ACFD552D5 - - - - - - - - _D8F92254-CD6E-4913-96CC-8E83A0AB528C - _9A2D3D5C-4052-4E7E-9538-5D093997AB66 - - - - - - - - - - - - - - - - - - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_TaskNameInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_skillsInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_cardHolderNameInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_contactNumberInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_emailInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_cardNumberInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_languageInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_transactionDateInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_amountInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_disputReasonInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_disputDescriptionInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_merchantNameInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_SkippableInputX - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_GroupIdInputX - - - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_resolutionOutputX - - - - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_TaskNameInputX - - - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_TaskNameInputX - - - - cardType - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_skillsInputX - - - cardHolderName - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_cardHolderNameInputX - - - contactNumber - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_contactNumberInputX - - - email - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_emailInputX - - - cardNumber - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_cardNumberInputX - - - language - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_languageInputX - - - transactionDate - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_transactionDateInputX - - - amount - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_amountInputX - - - disputReason - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_disputReasonInputX - - - disputDescription - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_disputDescriptionInputX - - - merchantName - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_merchantNameInputX - - - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_SkippableInputX - - - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_SkippableInputX - - - - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_GroupIdInputX - - - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_GroupIdInputX - - - - _AB4F5FEC-F48B-45CE-89BB-4936CB4E1236_resolutionOutputX - resolution - - - - _D8F92254-CD6E-4913-96CC-8E83A0AB528C - - - - - - - - _9A2D3D5C-4052-4E7E-9538-5D093997AB66 - _0A2479EA-3DAA-4AFE-8C3C-1B0ACFD552D5 - - - - - - - - - - - - - - - - - - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_TaskNameInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_skillsInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_cardTypeInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_cardHolderNameInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_contactNumberInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_cardNumberInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_emailInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_transactionDateInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_merchantNameInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_amountInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_disputReasonInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_disputDescriptionInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_resolutionInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_SkippableInputX - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_GroupIdInputX - - - - - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_TaskNameInputX - - - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_TaskNameInputX - - - - language - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_skillsInputX - - - cardType - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_cardTypeInputX - - - cardHolderName - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_cardHolderNameInputX - - - contactNumber - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_contactNumberInputX - - - cardNumber - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_cardNumberInputX - - - email - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_emailInputX - - - transactionDate - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_transactionDateInputX - - - merchantName - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_merchantNameInputX - - - amount - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_amountInputX - - - disputReason - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_disputReasonInputX - - - disputDescription - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_disputDescriptionInputX - - - resolution - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_resolutionInputX - - - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_SkippableInputX - - - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_SkippableInputX - - - - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_GroupIdInputX - - - _FD5F3D67-F8D4-4F67-B985-F78AB97B53E1_GroupIdInputX - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _Uj_8QIMNEeq_Tf9cotckOA - _Uj_8QIMNEeq_Tf9cotckOA - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/src/main/resources/META-INF/kie-deployment-descriptor.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/src/main/resources/META-INF/kie-deployment-descriptor.xml deleted file mode 100644 index befe763de3..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/src/main/resources/META-INF/kie-deployment-descriptor.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - org.jbpm.domain - org.jbpm.domain - JPA - JPA - PER_PROCESS_INSTANCE - - - reflection - org.jbpm.document.marshalling.DocumentMarshallingStrategy - - - - - - - - mvel - new org.jbpm.process.workitem.bpmn2.ServiceTaskHandler(ksession, classLoader) - - Service Task - - - mvel - new org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler() - - Log - - - mvel - new org.jbpm.process.instance.impl.demo.DoNothingWorkItemHandler() - - Email - - - mvel - new org.jbpm.process.workitem.webservice.WebServiceWorkItemHandler(ksession, classLoader) - - WebService - - - mvel - new org.jbpm.process.workitem.rest.RESTWorkItemHandler() - - Rest - - - - - - - - diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/src/main/resources/META-INF/kmodule.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/src/main/resources/META-INF/kmodule.xml deleted file mode 100644 index 2ba4076c16..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/src/main/resources/META-INF/kmodule.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/src/main/resources/WorkDefinitions.wid b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/src/main/resources/WorkDefinitions.wid deleted file mode 100644 index 8a17b12007..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/kjars-sources/task-assigning/src/main/resources/WorkDefinitions.wid +++ /dev/null @@ -1,61 +0,0 @@ -import org.jbpm.process.core.datatype.impl.type.StringDataType; -import org.jbpm.process.core.datatype.impl.type.ObjectDataType; - -[ - [ - "name" : "Email", - "parameters" : [ - "From" : new StringDataType(), - "To" : new StringDataType(), - "Subject" : new StringDataType(), - "Body" : new StringDataType() - ], - "displayName" : "Email", - "icon" : "defaultemailicon.gif" - ], - - [ - "name" : "Log", - "parameters" : [ - "Message" : new StringDataType() - ], - "displayName" : "Log", - "icon" : "defaultlogicon.gif" - ], - - [ - "name" : "WebService", - "parameters" : [ - "Url" : new StringDataType(), - "Namespace" : new StringDataType(), - "Interface" : new StringDataType(), - "Operation" : new StringDataType(), - "Parameter" : new StringDataType(), - "Endpoint" : new StringDataType(), - "Mode" : new StringDataType() - ], - "results" : [ - "Result" : new ObjectDataType(), - ], - "displayName" : "WS", - "icon" : "defaultservicenodeicon.png" - ], - - [ - "name" : "Rest", - "parameters" : [ - "Url" : new StringDataType(), - "Method" : new StringDataType(), - "ConnectTimeout" : new StringDataType(), - "ReadTimeout" : new StringDataType(), - "Username" : new StringDataType(), - "Password" : new StringDataType() - ], - "results" : [ - "Result" : new ObjectDataType(), - ], - "displayName" : "REST", - "icon" : "defaultservicenodeicon.png" - ] - -] diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/roles.properties b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/roles.properties deleted file mode 100644 index 7f212e6189..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/roles.properties +++ /dev/null @@ -1,4 +0,0 @@ -john=user,ClientRelations -mary=user,ClientRelations -katy=user,CreditAnalyst -maciek=user,CreditAnalyst diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/skills.properties b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/skills.properties deleted file mode 100644 index 13b5ba3ce6..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/filtered-resources/skills.properties +++ /dev/null @@ -1,4 +0,0 @@ -john=ES,EN -mary=ZH -katy=CITI,MASTER -maciek=VISA,AMERICAN_EXPRESS diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/java/org/kie/server/integrationtests/taskassigning/TaskAssigningIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/java/org/kie/server/integrationtests/taskassigning/TaskAssigningIntegrationTest.java deleted file mode 100644 index a6ad392815..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/java/org/kie/server/integrationtests/taskassigning/TaskAssigningIntegrationTest.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. - * - * 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.integrationtests.taskassigning; - -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Supplier; - -import org.junit.BeforeClass; -import org.junit.Test; -import org.kie.server.api.model.instance.ProcessInstance; -import org.kie.server.api.model.instance.TaskSummary; -import org.kie.server.api.marshalling.MarshallingFormat; -import org.kie.server.api.model.KieContainerResource; -import org.kie.server.api.model.ReleaseId; -import org.kie.server.api.model.ServiceResponse; -import org.kie.server.client.KieServicesClient; -import org.kie.server.client.KieServicesConfiguration; -import org.kie.server.client.KieServicesFactory; -import org.kie.server.client.ProcessServicesClient; -import org.kie.server.client.UserTaskServicesClient; -import org.kie.server.integrationtests.config.TestConfig; -import org.kie.server.integrationtests.shared.KieServerAssert; -import org.kie.server.integrationtests.shared.KieServerDeployer; -import org.kie.server.integrationtests.shared.basetests.KieServerBaseIntegrationTest; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeFalse; - -public class TaskAssigningIntegrationTest extends KieServerBaseIntegrationTest { - - private static final ReleaseId TEST_KJAR = new ReleaseId("org.kie.server.testing", "task-assigning", "1.0.0.Final"); - private static final String CONTAINER_ID = "task-assigning"; - private static final String PROCESS_ID = "org.kie.server.CreditDispute"; - private static final int ASSIGNMENT_TIMEOUT_SECONDS = 600; - - private final KieServicesClient kieServicesClient = createDefaultClient(); - private final ProcessServicesClient processClient = kieServicesClient.getServicesClient(ProcessServicesClient.class); - private final UserTaskServicesClient taskClient = kieServicesClient.getServicesClient(UserTaskServicesClient.class); - - @BeforeClass - public static void deployArtifacts() { - KieServerDeployer.buildAndDeployCommonMavenParent(); - KieServerDeployer.buildAndDeployMavenProjectFromResource("/kjars-sources/task-assigning"); - - KieServicesClient staticKieServicesClient = createDefaultStaticClient(); - ServiceResponse reply = staticKieServicesClient - .createContainer(CONTAINER_ID, new KieContainerResource(CONTAINER_ID, TEST_KJAR)); - KieServerAssert.assertSuccess(reply); - } - - public TaskAssigningIntegrationTest() throws Exception { - // nothing to do here - } - - @Test - public void task_assigning_with_skills() { - // Skip for MySQL and MariaDB until PLANNER-2079 is fixed - assumeFalse(TestConfig.isMySqlDataSource()); - assumeFalse(TestConfig.isMariaDbDataSource()); - - Map parameters = new HashMap<>(); - parameters.put("cardType", "VISA"); - parameters.put("language", "ZH"); - Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID, parameters); - - // maciek is in the CreditAnalyst group and has a VISA skill => should be assigned to the ResolveDispute task. - doNextTaskByUser("maciek"); - - // mary is in the ClientRelations group and has a ZH (Chinese) skill => should be assigned to the NotifyCustomer task. - doNextTaskByUser("mary"); - - ProcessInstance processInstance = processClient.getProcessInstance(CONTAINER_ID, processInstanceId); - assertThat(processInstance).isNotNull(); - assertThat(processInstance.getState().intValue()) - .isEqualTo(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED); - } - - private void doNextTaskByUser(String userId) { - List tasks = waitForTasks(() -> taskClient.findTasks(userId, 0, 1), ASSIGNMENT_TIMEOUT_SECONDS); - assertThat(tasks).hasSize(1); - final long resolveDisputeTaskId = tasks.get(0).getId(); - taskClient.startTask(CONTAINER_ID, resolveDisputeTaskId, userId); - taskClient.completeTask(CONTAINER_ID, resolveDisputeTaskId, userId, Collections.emptyMap()); - } - - private List waitForTasks(Supplier> taskProducer, int timeoutSeconds) { - if (timeoutSeconds < 1) { - throw new IllegalArgumentException("TimeoutSeconds must be a positive integer."); - } - final long TIME_STEP_MILLIS = 500L; - long timeSpentMillis = 0L; - List tasks; - while ((tasks = taskProducer.get()).isEmpty()) { - if (timeSpentMillis > timeoutSeconds * 1000) { - throw new RuntimeException("No task retrieved in " + timeoutSeconds + " seconds."); - } - try { - Thread.sleep(TIME_STEP_MILLIS); - timeSpentMillis += TIME_STEP_MILLIS; - } catch (InterruptedException e) { - throw new RuntimeException("Interrupted waiting.", e); - } - } - - return tasks; - } - - @Override - protected KieServicesClient createDefaultClient() throws Exception { - addExtraCustomClasses(extraClasses); - KieServicesConfiguration configuration = TestConfig.isLocalServer() ? - KieServicesFactory.newRestConfiguration(TestConfig.getKieServerHttpUrl(), null, null) - : KieServicesFactory.newRestConfiguration(TestConfig.getKieServerHttpUrl(), TestConfig.getUsername(), - TestConfig.getPassword()); - // the marshalling format does not matter for this test - return createDefaultClient(configuration, MarshallingFormat.JSON); - } -} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/resources/logback-test.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/resources/logback-test.xml deleted file mode 100644 index fe10807e5b..0000000000 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-task-assigning/src/test/resources/logback-test.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - %d{HH:mm:ss.SSS} [%t] %-5p %m%n - - - - - - - - - - - - diff --git a/kie-server-parent/kie-server-tests/pom.xml b/kie-server-parent/kie-server-tests/pom.xml index f904bda669..96b159ef67 100644 --- a/kie-server-parent/kie-server-tests/pom.xml +++ b/kie-server-parent/kie-server-tests/pom.xml @@ -85,7 +85,6 @@ kie-server-integ-tests-common kie-server-integ-tests-drools kie-server-integ-tests-jbpm - kie-server-integ-tests-optaplanner kie-server-integ-tests-all kie-server-integ-tests-controller kie-server-integ-tests-policy @@ -94,7 +93,6 @@ kie-server-integ-tests-dmn kie-server-integ-tests-scenario-simulation kie-server-integ-tests-custom-extension - kie-server-integ-tests-task-assigning kie-server-integ-tests-dmn-pmml kie-server-integ-tests-dmn-pmml-trusty kie-server-integ-tests-pmml @@ -118,11 +116,6 @@ kie-server-integ-tests-jbpm ${version.org.kie} - - org.kie.server - kie-server-integ-tests-optaplanner - ${version.org.kie} - org.kie.server kie-server-integ-tests-dmn @@ -1383,10 +1376,7 @@ false false false - false false - false - false false false false diff --git a/kie-server-parent/kie-server-tests/src/test/filtered-resources/application.properties b/kie-server-parent/kie-server-tests/src/test/filtered-resources/application.properties index d6f5d719b9..75b569a3d5 100644 --- a/kie-server-parent/kie-server-tests/src/test/filtered-resources/application.properties +++ b/kie-server-parent/kie-server-tests/src/test/filtered-resources/application.properties @@ -22,7 +22,6 @@ kieserver.dmn.enabled=${kieserver.dmn.enabled} kieserver.jbpm.enabled=${kieserver.jbpm.enabled} kieserver.jbpmui.enabled=${kieserver.jbpmui.enabled} kieserver.casemgmt.enabled=${kieserver.casemgmt.enabled} -kieserver.optaplanner.enabled=${kieserver.optaplanner.enabled} kieserver.swagger.enabled=${kieserver.swagger.enabled} kieserver.prometheus.enabled=${kieserver.prometheus.enabled} kieserver.scenariosimulation.enabled=${kieserver.scenariosimulation.enabled} @@ -44,4 +43,4 @@ spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl #transaction manager configuration -spring.jta.narayana.transaction-manager-id=1 \ No newline at end of file +spring.jta.narayana.transaction-manager-id=1 diff --git a/kie-server-parent/kie-server-wars/kie-server/pom.xml b/kie-server-parent/kie-server-wars/kie-server/pom.xml index b96b3ea337..4090bd8e73 100644 --- a/kie-server-parent/kie-server-wars/kie-server/pom.xml +++ b/kie-server-parent/kie-server-wars/kie-server/pom.xml @@ -118,16 +118,6 @@ - - org.kie.server - kie-server-services-optaplanner - - - org.javassist - javassist - - - org.kie.server kie-server-services-dmn @@ -166,20 +156,6 @@ org.kie.server kie-server-rest-jbpm-ui - - org.kie.server - kie-server-rest-optaplanner - - - org.javassist - javassist - - - jakarta.activation - jakarta.activation-api - - - org.kie.server kie-server-rest-dmn @@ -229,32 +205,6 @@ kie-server-controller-websocket-common - - - org.kie.server - kie-server-services-task-assigning-core - - - org.kie.server - kie-server-services-task-assigning-planning - - - org.kie.server - kie-server-services-task-assigning-runtime - - - org.kie.server - kie-server-services-task-assigning-user-system-api - - - org.kie.server - kie-server-services-task-assigning-user-system-simple - - - org.kie.server - kie-server-rest-task-assigning-runtime - - org.jbpm jbpm-services-ejb-timer diff --git a/kie-server-parent/kie-server-wars/kie-server/src/main/assembly/assembly-ee7-container.xml b/kie-server-parent/kie-server-wars/kie-server/src/main/assembly/assembly-ee7-container.xml index 41d775f059..2da10a66fe 100644 --- a/kie-server-parent/kie-server-wars/kie-server/src/main/assembly/assembly-ee7-container.xml +++ b/kie-server-parent/kie-server-wars/kie-server/src/main/assembly/assembly-ee7-container.xml @@ -46,7 +46,6 @@ org.kie.server:kie-server-services-jbpm org.kie.server:kie-server-services-jbpm-ui org.kie.server:kie-server-services-case-mgmt - org.kie.server:kie-server-services-optaplanner org.kie.server:kie-server-services-dmn org.kie.server:kie-server-services-swagger org.kie.server:kie-server-services-kafka @@ -57,7 +56,6 @@ org.kie.server:kie-server-rest-drools org.kie.server:kie-server-rest-jbpm org.kie.server:kie-server-rest-jbpm-ui - org.kie.server:kie-server-rest-optaplanner org.kie.server:kie-server-rest-dmn org.kie.server:kie-server-rest-swagger org.kie.server:kie-server-rest-prometheus @@ -70,13 +68,6 @@ org.kie.server:kie-server-controller-websocket-client org.kie.server:kie-server-controller-websocket-common - kie-server-services-task-assigning-core - kie-server-services-task-assigning-planning - kie-server-services-task-assigning-runtime - kie-server-services-task-assigning-user-system-api - kie-server-services-task-assigning-user-system-simple - kie-server-rest-task-assigning-runtime - org.jbpm:jbpm-services-ejb-timer org.slf4j:slf4j-jdk14 diff --git a/kie-server-parent/kie-server-wars/kie-server/src/main/assembly/assembly-ee8-container.xml b/kie-server-parent/kie-server-wars/kie-server/src/main/assembly/assembly-ee8-container.xml index 45701c4e0e..e2161333d4 100644 --- a/kie-server-parent/kie-server-wars/kie-server/src/main/assembly/assembly-ee8-container.xml +++ b/kie-server-parent/kie-server-wars/kie-server/src/main/assembly/assembly-ee8-container.xml @@ -42,7 +42,6 @@ org.kie.server:kie-server-services-jbpm org.kie.server:kie-server-services-jbpm-ui org.kie.server:kie-server-services-case-mgmt - org.kie.server:kie-server-services-optaplanner org.kie.server:kie-server-services-dmn org.kie.server:kie-server-services-swagger org.kie.server:kie-server-services-kafka @@ -53,7 +52,6 @@ org.kie.server:kie-server-rest-drools org.kie.server:kie-server-rest-jbpm org.kie.server:kie-server-rest-jbpm-ui - org.kie.server:kie-server-rest-optaplanner org.kie.server:kie-server-rest-dmn org.kie.server:kie-server-rest-swagger org.kie.server:kie-server-rest-prometheus @@ -66,13 +64,6 @@ org.kie.server:kie-server-controller-websocket-client org.kie.server:kie-server-controller-websocket-common - kie-server-services-task-assigning-core - kie-server-services-task-assigning-planning - kie-server-services-task-assigning-runtime - kie-server-services-task-assigning-user-system-api - kie-server-services-task-assigning-user-system-simple - kie-server-rest-task-assigning-runtime - org.kie.server:kie-server-services-openshift org.jbpm:jbpm-services-ejb-timer diff --git a/kie-server-parent/kie-server-wars/kie-server/src/main/assembly/assembly-servlet-container.xml b/kie-server-parent/kie-server-wars/kie-server/src/main/assembly/assembly-servlet-container.xml index 964fc1797f..7571e04672 100644 --- a/kie-server-parent/kie-server-wars/kie-server/src/main/assembly/assembly-servlet-container.xml +++ b/kie-server-parent/kie-server-wars/kie-server/src/main/assembly/assembly-servlet-container.xml @@ -45,7 +45,6 @@ org.kie.server:kie-server-services-jbpm org.kie.server:kie-server-services-jbpm-ui org.kie.server:kie-server-services-case-mgmt - org.kie.server:kie-server-services-optaplanner org.kie.server:kie-server-services-dmn org.kie.server:kie-server-services-swagger org.kie.server:kie-server-services-kafka @@ -56,7 +55,6 @@ org.kie.server:kie-server-rest-jbpm org.kie.server:kie-server-rest-jbpm-ui org.kie.server:kie-server-rest-case-mgmt - org.kie.server:kie-server-rest-optaplanner org.kie.server:kie-server-rest-dmn org.kie.server:kie-server-rest-swagger org.kie.server:kie-server-rest-prometheus @@ -68,13 +66,6 @@ org.kie.server:kie-server-controller-websocket-client org.kie.server:kie-server-controller-websocket-common - kie-server-services-task-assigning-core - kie-server-services-task-assigning-planning - kie-server-services-task-assigning-runtime - kie-server-services-task-assigning-user-system-api - kie-server-services-task-assigning-user-system-simple - kie-server-rest-task-assigning-runtime - org.slf4j:slf4j-jdk14 org.hibernate.common:hibernate-commons-annotations diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-optaplanner/.gitignore b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-optaplanner/.gitignore deleted file mode 100644 index 0b600edf21..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-optaplanner/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -/target -/local -*.tlog - -# Eclipse, Netbeans and IntelliJ files -/.* -!.gitignore -/nbproject -/*.ipr -/*.iws -*.iml -.classpath -.project -.settings -.idea -target - -# Repository wide ignore mac DS_Store files -.DS_Store diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-optaplanner/pom.xml b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-optaplanner/pom.xml deleted file mode 100644 index 06f5bbf5b8..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-optaplanner/pom.xml +++ /dev/null @@ -1,136 +0,0 @@ - - 4.0.0 - - org.kie - kie-spring-boot-autoconfiguration - 7.75.0-SNAPSHOT - - kie-server-spring-boot-autoconfiguration-optaplanner - KIE :: Spring :: Boot :: KIE Server Auto Configuration :: OptaPlanner - OptaPlanner KIE Server SpringBoot Auto Configuration - - - - org.springframework.boot - spring-boot - - - commons-logging - commons-logging - - - - - org.springframework.boot - spring-boot-autoconfigure - - - - org.kie.server - kie-server-api - - - org.kie.server - kie-server-services-common - - - jakarta.servlet - jakarta.servlet-api - - - jakarta.ws.rs - jakarta.ws.rs-api - - - aopalliance - aopalliance - - - org.jboss.resteasy - resteasy-jackson-provider - - - org.jboss.resteasy - resteasy-jaxrs - - - org.jboss.resteasy - resteasy-jaxb-provider - - - org.slf4j - jcl-over-slf4j - - - jakarta.el - jakarta.el-api - - - - - org.springframework - spring-context - - - - org.kie - kie-server-spring-boot-autoconfiguration - - - org.kie - kie-server-spring-boot-autoconfiguration-drools - - - io.netty - netty-buffer - - - io.netty - netty-transport-native-kqueue - - - io.netty - netty-codec-http - - - io.netty - netty-handler - - - io.netty - netty-codec - - - io.netty - netty-transport-native-epoll - - - io.netty - netty-common - - - io.netty - netty-transport - - - io.netty - netty-transport-native-unix-common - - - io.netty - netty-resolver - - - - - - - org.kie.server - kie-server-services-optaplanner - - - org.kie.server - kie-server-rest-optaplanner - - - diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-optaplanner/src/main/java/org/kie/server/springboot/autoconfiguration/optaplanner/OptaPlannerKieServerAutoConfiguration.java b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-optaplanner/src/main/java/org/kie/server/springboot/autoconfiguration/optaplanner/OptaPlannerKieServerAutoConfiguration.java deleted file mode 100644 index e8a4bcfe5e..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-optaplanner/src/main/java/org/kie/server/springboot/autoconfiguration/optaplanner/OptaPlannerKieServerAutoConfiguration.java +++ /dev/null @@ -1,51 +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.springboot.autoconfiguration.optaplanner; - -import org.kie.server.services.api.KieServerExtension; -import org.kie.server.services.impl.KieServerImpl; -import org.kie.server.services.optaplanner.OptaplannerKieServerExtension; -import org.kie.server.springboot.autoconfiguration.KieServerProperties; -import org.kie.server.springboot.autoconfiguration.drools.DroolsKieServerAutoConfiguration; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ConditionalOnClass({KieServerImpl.class}) -@AutoConfigureAfter({DroolsKieServerAutoConfiguration.class}) -@EnableConfigurationProperties(KieServerProperties.class) -public class OptaPlannerKieServerAutoConfiguration { - - private KieServerProperties properties; - - public OptaPlannerKieServerAutoConfiguration(KieServerProperties properties) { - this.properties = properties; - } - - @Bean - @ConditionalOnMissingBean(name = "optaplannerServerExtension") - @ConditionalOnProperty(name = "kieserver.optaplanner.enabled") - public KieServerExtension optaplannerServerExtension() { - - return new OptaplannerKieServerExtension(); - } -} diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-optaplanner/src/main/resources/META-INF/spring.factories b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-optaplanner/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 08228c55fe..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-optaplanner/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.kie.server.springboot.autoconfiguration.optaplanner.OptaPlannerKieServerAutoConfiguration \ No newline at end of file diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/.gitignore b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/.gitignore deleted file mode 100644 index 0b600edf21..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -/target -/local -*.tlog - -# Eclipse, Netbeans and IntelliJ files -/.* -!.gitignore -/nbproject -/*.ipr -/*.iws -*.iml -.classpath -.project -.settings -.idea -target - -# Repository wide ignore mac DS_Store files -.DS_Store diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/pom.xml b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/pom.xml deleted file mode 100644 index aee10b887a..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/pom.xml +++ /dev/null @@ -1,109 +0,0 @@ - - 4.0.0 - - org.kie - kie-spring-boot-autoconfiguration - 7.75.0-SNAPSHOT - - kie-server-spring-boot-autoconfiguration-task-assigning-planning - KIE :: Spring :: Boot :: KIE Server Auto Configuration :: TaskAssigningPlanning - TaskAssigningPlanning KIE Server SpringBoot Auto Configuration - - - - org.springframework.boot - spring-boot - - - commons-logging - commons-logging - - - - - org.springframework.boot - spring-boot-autoconfigure - - - - org.kie.server - kie-server-api - - - org.kie.server - kie-server-services-common - - - jakarta.servlet - jakarta.servlet-api - - - jakarta.ws.rs - jakarta.ws.rs-api - - - aopalliance - aopalliance - - - org.jboss.resteasy - resteasy-jackson-provider - - - org.jboss.resteasy - resteasy-jaxrs - - - org.jboss.resteasy - resteasy-jaxb-provider - - - org.slf4j - jcl-over-slf4j - - - jakarta.el - jakarta.el-api - - - - - org.springframework - spring-context - - - - org.kie - kie-server-spring-boot-autoconfiguration - - - - org.apache.commons - commons-lang3 - - - - - org.kie.server - kie-server-services-task-assigning-user-system-simple - - - org.kie.server - kie-server-services-task-assigning-core - - - org.kie.server - kie-server-services-task-assigning-planning - - - jakarta.ws.rs - jakarta.ws.rs-api - - - org.slf4j - jcl-over-slf4j - - - - - diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/main/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPlanningKieServerAutoConfiguration.java b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/main/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPlanningKieServerAutoConfiguration.java deleted file mode 100644 index a3812b1b52..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/main/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPlanningKieServerAutoConfiguration.java +++ /dev/null @@ -1,161 +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.springboot.autoconfiguration.taskassigning; - -import java.util.HashMap; -import java.util.Map; - -import org.kie.server.services.api.KieServerExtension; -import org.kie.server.services.impl.KieServerImpl; -import org.kie.server.services.taskassigning.core.model.ModelConstants; -import org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtension; -import org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemService; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.event.ContextClosedEvent; -import org.springframework.context.event.EventListener; - -import static org.apache.commons.lang3.StringUtils.isNotEmpty; -import static org.kie.server.api.KieServerConstants.KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_ALIAS; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_PWD; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_PWD; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_TIMEOUT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_URL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_USER; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PUBLISH_WINDOW_SIZE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_RUNTIME_DELEGATE_PAGE_SIZE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONFIG_RESOURCE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_ARTIFACT_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_GROUP_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_VERSION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_MOVE_THREAD_BUFFER_SIZE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_MOVE_THREAD_COUNT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_THREAD_FACTORY_CLASS; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SYNC_QUERIES_SHIFT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USERS_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ARTIFACT_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_GROUP_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_VERSION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_NAME; - -@Configuration -@ConditionalOnClass({KieServerImpl.class}) -@EnableConfigurationProperties({TaskAssigningPlanningProperties.class}) -public class TaskAssigningPlanningKieServerAutoConfiguration { - - private TaskAssigningPlanningProperties properties; - private Map restorableProperties = new HashMap<>(); - - public TaskAssigningPlanningKieServerAutoConfiguration(TaskAssigningPlanningProperties properties) { - this.properties = properties; - } - - @Bean - @ConditionalOnMissingBean(name = "taskAssigningPlanningServerExtension") - @ConditionalOnProperty(name = "kieserver.taskAssigning.planning.enabled") - public KieServerExtension taskAssigningPlanningServerExtension() { - initProperties(); - return new TaskAssigningPlanningKieServerExtension(); - } - - @EventListener - public void handleContextRefreshEvent(ContextClosedEvent evt) { - restoreProperties(); - } - - private void initProperties() { - restorableProperties.put(KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED, System.getProperty(KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED)); - System.setProperty(KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED, Boolean.FALSE.toString()); - - setIfConfigured(TASK_ASSIGNING_PROCESS_RUNTIME_URL, properties.getProcessRuntime().getUrl()); - setIfConfigured(TASK_ASSIGNING_PROCESS_RUNTIME_USER, properties.getProcessRuntime().getUser()); - setIfConfigured(TASK_ASSIGNING_PROCESS_RUNTIME_PWD, properties.getProcessRuntime().getPwd()); - if (properties.getProcessRuntime().getTimeout() > 0) { - setIfConfigured(TASK_ASSIGNING_PROCESS_RUNTIME_TIMEOUT, Integer.toString(properties.getProcessRuntime().getTimeout())); - } - - setIfConfigured(TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_ALIAS, properties.getProcessRuntime().getKey().getAlias()); - setIfConfigured(TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_PWD, properties.getProcessRuntime().getKey().getPwd()); - - setIfConfigured(TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER, properties.getProcessRuntime().getTargetUser()); - if (properties.getPublishWindowSize() > 0) { - setIfConfigured(TASK_ASSIGNING_PUBLISH_WINDOW_SIZE, Integer.toString(properties.getPublishWindowSize())); - } - - setIfConfigured(ModelConstants.PLANNING_USER_ID_PROPERTY, properties.getCore().getModel().getPlanningUserId()); - - setIfConfigured(TASK_ASSIGNING_SYNC_INTERVAL, properties.getSolutionSyncInterval()); - setIfConfigured(TASK_ASSIGNING_SYNC_QUERIES_SHIFT, properties.getSolutionSyncQueriesShift()); - setIfConfigured(TASK_ASSIGNING_USERS_SYNC_INTERVAL, properties.getUsersSyncInterval()); - setIfConfigured(TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION, properties.getWaitForImprovedSolutionDuration()); - setIfConfigured(TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION, properties.getImproveSolutionOnBackgroundDuration()); - - setIfConfigured(TASK_ASSIGNING_SOLVER_CONFIG_RESOURCE, properties.getSolver().getConfigResource()); - setIfConfigured(TASK_ASSIGNING_SOLVER_MOVE_THREAD_COUNT, properties.getSolver().getMoveThreadCount()); - if (properties.getSolver().getMoveThreadBufferSize() > 1) { - setIfConfigured(TASK_ASSIGNING_SOLVER_MOVE_THREAD_BUFFER_SIZE, Integer.toString(properties.getSolver().getMoveThreadBufferSize())); - } - setIfConfigured(TASK_ASSIGNING_SOLVER_THREAD_FACTORY_CLASS, properties.getSolver().getThreadFactoryClass()); - - setIfConfigured(TASK_ASSIGNING_SOLVER_CONTAINER_ID, properties.getSolver().getContainer().getId()); - setIfConfigured(TASK_ASSIGNING_SOLVER_CONTAINER_GROUP_ID, properties.getSolver().getContainer().getGroupId()); - setIfConfigured(TASK_ASSIGNING_SOLVER_CONTAINER_ARTIFACT_ID, properties.getSolver().getContainer().getArtifactId()); - setIfConfigured(TASK_ASSIGNING_SOLVER_CONTAINER_VERSION, properties.getSolver().getContainer().getVersion()); - - setIfConfigured(TASK_ASSIGNING_USER_SYSTEM_NAME, properties.getUserSystem().getName()); - setIfConfigured(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ID, properties.getUserSystem().getContainer().getId()); - setIfConfigured(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_GROUP_ID, properties.getUserSystem().getContainer().getGroupId()); - setIfConfigured(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ARTIFACT_ID, properties.getUserSystem().getContainer().getArtifactId()); - setIfConfigured(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_VERSION, properties.getUserSystem().getContainer().getVersion()); - - setIfConfigured(SimpleUserSystemService.USERS_FILE, properties.getUserSystem().getSimple().getUsers()); - setIfConfigured(SimpleUserSystemService.SKILLS_FILE, properties.getUserSystem().getSimple().getSkills()); - setIfConfigured(SimpleUserSystemService.AFFINITIES_FILE, properties.getUserSystem().getSimple().getAffinities()); - - if (properties.getRuntimeDelegate().getPageSize() > 1) { - setIfConfigured(TASK_ASSIGNING_RUNTIME_DELEGATE_PAGE_SIZE, Integer.toString(properties.getRuntimeDelegate().getPageSize())); - } - } - - private void setIfConfigured(String propertyName, String value) { - if (isNotEmpty(value)) { - restorableProperties.put(propertyName, System.getProperty(propertyName)); - System.getProperties().setProperty(propertyName, value); - } - } - - private void restoreProperties() { - restorableProperties.forEach((property, value) -> { - if (value != null) { - System.setProperty(property, value); - } else { - System.clearProperty(property); - } - }); - } -} diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/main/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPlanningProperties.java b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/main/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPlanningProperties.java deleted file mode 100644 index 3343b827b8..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/main/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPlanningProperties.java +++ /dev/null @@ -1,407 +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.springboot.autoconfiguration.taskassigning; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -@ConfigurationProperties(prefix = "taskassigning") -public class TaskAssigningPlanningProperties { - - private ProcessRuntime processRuntime = new ProcessRuntime(); - - private Solver solver = new Solver(); - - private UserSystem userSystem = new UserSystem(); - - private Core core = new Core(); - - private int publishWindowSize; - - private String solutionSyncInterval; - - private String solutionSyncQueriesShift; - - private String usersSyncInterval; - - private String waitForImprovedSolutionDuration; - - private String improveSolutionOnBackgroundDuration; - - private RuntimeDelegate runtimeDelegate = new RuntimeDelegate(); - - public int getPublishWindowSize() { - return publishWindowSize; - } - - public void setPublishWindowSize(int publishWindowSize) { - this.publishWindowSize = publishWindowSize; - } - - public ProcessRuntime getProcessRuntime() { - return processRuntime; - } - - public String getSolutionSyncInterval() { - return solutionSyncInterval; - } - - public void setSolutionSyncInterval(String solutionSyncInterval) { - this.solutionSyncInterval = solutionSyncInterval; - } - - public void setProcessRuntime(ProcessRuntime processRuntime) { - this.processRuntime = processRuntime; - } - - public String getSolutionSyncQueriesShift() { - return solutionSyncQueriesShift; - } - - public void setSolutionSyncQueriesShift(String solutionSyncQueriesShift) { - this.solutionSyncQueriesShift = solutionSyncQueriesShift; - } - - public String getUsersSyncInterval() { - return usersSyncInterval; - } - - public void setUsersSyncInterval(String usersSyncInterval) { - this.usersSyncInterval = usersSyncInterval; - } - - public String getWaitForImprovedSolutionDuration() { - return waitForImprovedSolutionDuration; - } - - public void setWaitForImprovedSolutionDuration(String waitForImprovedSolutionDuration) { - this.waitForImprovedSolutionDuration = waitForImprovedSolutionDuration; - } - - public String getImproveSolutionOnBackgroundDuration() { - return improveSolutionOnBackgroundDuration; - } - - public void setImproveSolutionOnBackgroundDuration(String improveSolutionOnBackgroundDuration) { - this.improveSolutionOnBackgroundDuration = improveSolutionOnBackgroundDuration; - } - - public Solver getSolver() { - return solver; - } - - public void setSolver(Solver solver) { - this.solver = solver; - } - - public UserSystem getUserSystem() { - return userSystem; - } - - public void setUserSystem(UserSystem userSystem) { - this.userSystem = userSystem; - } - - public Core getCore() { - return core; - } - - public void setCore(Core core) { - this.core = core; - } - - public RuntimeDelegate getRuntimeDelegate() { - return runtimeDelegate; - } - - public void setRuntimeDelegate(RuntimeDelegate runtimeDelegate) { - this.runtimeDelegate = runtimeDelegate; - } - - public class ProcessRuntime { - - private String url; - private String user; - private String pwd; - private int timeout; - private String targetUser; - private Key key = new Key(); - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getUser() { - return user; - } - - public void setUser(String user) { - this.user = user; - } - - public String getPwd() { - return pwd; - } - - public void setPwd(String pwd) { - this.pwd = pwd; - } - - public int getTimeout() { - return timeout; - } - - public void setTimeout(int timeout) { - this.timeout = timeout; - } - - public String getTargetUser() { - return targetUser; - } - - public void setTargetUser(String targetUser) { - this.targetUser = targetUser; - } - - public Key getKey() { - return key; - } - - public void setKey(Key key) { - this.key = key; - } - } - - public class Key { - - private String alias; - private String pwd; - - public String getAlias() { - return alias; - } - - public void setAlias(String alias) { - this.alias = alias; - } - - public String getPwd() { - return pwd; - } - - public void setPwd(String pwd) { - this.pwd = pwd; - } - } - - public class Solver { - - private String configResource; - - private String moveThreadCount; - - private int moveThreadBufferSize; - - private String threadFactoryClass; - - private Container container = new Container(); - - public String getConfigResource() { - return configResource; - } - - public void setConfigResource(String configResource) { - this.configResource = configResource; - } - - public String getMoveThreadCount() { - return moveThreadCount; - } - - public void setMoveThreadCount(String moveThreadCount) { - this.moveThreadCount = moveThreadCount; - } - - public int getMoveThreadBufferSize() { - return moveThreadBufferSize; - } - - public void setMoveThreadBufferSize(int moveThreadBufferSize) { - this.moveThreadBufferSize = moveThreadBufferSize; - } - - public String getThreadFactoryClass() { - return threadFactoryClass; - } - - public void setThreadFactoryClass(String threadFactoryClass) { - this.threadFactoryClass = threadFactoryClass; - } - - public Container getContainer() { - return container; - } - - public void setContainer(Container container) { - this.container = container; - } - } - - public class Container { - - private String id; - private String groupId; - private String artifactId; - private String version; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getGroupId() { - return groupId; - } - - public void setGroupId(String groupId) { - this.groupId = groupId; - } - - public String getArtifactId() { - return artifactId; - } - - public void setArtifactId(String artifactId) { - this.artifactId = artifactId; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - } - - public class Simple { - - private String users; - private String skills; - private String affinities; - - public String getUsers() { - return users; - } - - public void setUsers(String users) { - this.users = users; - } - - public String getSkills() { - return skills; - } - - public void setSkills(String skills) { - this.skills = skills; - } - - public String getAffinities() { - return affinities; - } - - public void setAffinities(String affinities) { - this.affinities = affinities; - } - } - - public class UserSystem { - - private String name; - private Container container = new Container(); - private Simple simple = new Simple(); - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Container getContainer() { - return container; - } - - public void setContainer(Container container) { - this.container = container; - } - - public Simple getSimple() { - return simple; - } - - public void setSimple(Simple simple) { - this.simple = simple; - } - } - - public class Core { - - private Model model = new Model(); - - public Model getModel() { - return model; - } - - public void setModel(Model model) { - this.model = model; - } - } - - public class Model { - - private String planningUserId; - - public String getPlanningUserId() { - return planningUserId; - } - - public void setPlanningUserId(String planningUserId) { - this.planningUserId = planningUserId; - } - } - - public class RuntimeDelegate { - - private int pageSize; - - public int getPageSize() { - return pageSize; - } - - public void setPageSize(int pageSize) { - this.pageSize = pageSize; - } - } -} diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/main/resources/META-INF/spring.factories b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 13d7f7bf10..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.kie.server.springboot.autoconfiguration.taskassigning.TaskAssigningPlanningKieServerAutoConfiguration \ No newline at end of file diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/test/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPlanningKieServerAutoConfigurationTest.java b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/test/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPlanningKieServerAutoConfigurationTest.java deleted file mode 100644 index 9105559002..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/test/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPlanningKieServerAutoConfigurationTest.java +++ /dev/null @@ -1,185 +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.springboot.autoconfiguration.taskassigning; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import org.apache.commons.lang3.tuple.Pair; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.kie.server.services.taskassigning.planning.TaskAssigningPlanningKieServerExtension; -import org.springframework.context.event.ContextClosedEvent; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.kie.server.api.KieServerConstants.KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED; -import static org.kie.server.services.taskassigning.core.model.ModelConstants.PLANNING_USER_ID_PROPERTY; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_ALIAS; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_PWD; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_PWD; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_TIMEOUT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_URL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PROCESS_RUNTIME_USER; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_PUBLISH_WINDOW_SIZE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_RUNTIME_DELEGATE_PAGE_SIZE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONFIG_RESOURCE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_ARTIFACT_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_GROUP_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_CONTAINER_VERSION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_MOVE_THREAD_BUFFER_SIZE; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_MOVE_THREAD_COUNT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SOLVER_THREAD_FACTORY_CLASS; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_SYNC_QUERIES_SHIFT; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USERS_SYNC_INTERVAL; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ARTIFACT_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_GROUP_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ID; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_CONTAINER_VERSION; -import static org.kie.server.services.taskassigning.planning.TaskAssigningConstants.TASK_ASSIGNING_USER_SYSTEM_NAME; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemService.AFFINITIES_FILE; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemService.SKILLS_FILE; -import static org.kie.server.services.taskassigning.user.system.simple.SimpleUserSystemService.USERS_FILE; -import static org.kie.server.springboot.autoconfiguration.taskassigning.TaskAssigningPlanningPropertiesTest.newTaskAssigningProperties; -import static org.mockito.Mockito.mock; - -public class TaskAssigningPlanningKieServerAutoConfigurationTest { - - private TaskAssigningPlanningKieServerAutoConfiguration configuration; - private TaskAssigningPlanningProperties properties; - - private static final String[] TASK_ASSIGNING_PROPERTIES = new String[]{ - KIE_TASK_ASSIGNING_PLANNING_EXT_DISABLED, - TASK_ASSIGNING_PROCESS_RUNTIME_URL, - TASK_ASSIGNING_PROCESS_RUNTIME_USER, - TASK_ASSIGNING_PROCESS_RUNTIME_PWD, - TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_ALIAS, - TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_PWD, - TASK_ASSIGNING_PROCESS_RUNTIME_TIMEOUT, - TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER, - TASK_ASSIGNING_PUBLISH_WINDOW_SIZE, - PLANNING_USER_ID_PROPERTY, - TASK_ASSIGNING_SYNC_INTERVAL, - TASK_ASSIGNING_SYNC_QUERIES_SHIFT, - TASK_ASSIGNING_USERS_SYNC_INTERVAL, - TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION, - TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION, - TASK_ASSIGNING_SOLVER_CONFIG_RESOURCE, - TASK_ASSIGNING_SOLVER_MOVE_THREAD_COUNT, - TASK_ASSIGNING_SOLVER_MOVE_THREAD_BUFFER_SIZE, - TASK_ASSIGNING_SOLVER_THREAD_FACTORY_CLASS, - TASK_ASSIGNING_SOLVER_CONTAINER_ID, - TASK_ASSIGNING_SOLVER_CONTAINER_GROUP_ID, - TASK_ASSIGNING_SOLVER_CONTAINER_ARTIFACT_ID, - TASK_ASSIGNING_SOLVER_CONTAINER_VERSION, - TASK_ASSIGNING_USER_SYSTEM_NAME, - TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ID, - TASK_ASSIGNING_USER_SYSTEM_CONTAINER_GROUP_ID, - TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ARTIFACT_ID, - TASK_ASSIGNING_USER_SYSTEM_CONTAINER_VERSION, - USERS_FILE, - SKILLS_FILE, - AFFINITIES_FILE, - TASK_ASSIGNING_RUNTIME_DELEGATE_PAGE_SIZE}; - - @Before - public void setUp() { - this.properties = newTaskAssigningProperties(); - this.configuration = new TaskAssigningPlanningKieServerAutoConfiguration(properties); - } - - @After - public void cleanUp() { - clearSystemProperties(TASK_ASSIGNING_PROPERTIES); - } - - @Test - public void taskAssigningPlanningServerExtension() { - List> previousValues = buildPreviousValues(TASK_ASSIGNING_PROPERTIES); - setSystemSystemProperties(previousValues); - - TaskAssigningPlanningKieServerExtension extension = (TaskAssigningPlanningKieServerExtension) configuration.taskAssigningPlanningServerExtension(); - assertTrue(extension.isActive()); - - assertSystemProperty(TASK_ASSIGNING_PROCESS_RUNTIME_URL, properties.getProcessRuntime().getUrl()); - assertSystemProperty(TASK_ASSIGNING_PROCESS_RUNTIME_USER, properties.getProcessRuntime().getUser()); - assertSystemProperty(TASK_ASSIGNING_PROCESS_RUNTIME_PWD, properties.getProcessRuntime().getPwd()); - assertSystemProperty(TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_ALIAS, properties.getProcessRuntime().getKey().getAlias()); - assertSystemProperty(TASK_ASSIGNING_KEY_STORE_PROCESS_RUNTIME_PWD, properties.getProcessRuntime().getKey().getPwd()); - assertSystemProperty(TASK_ASSIGNING_PROCESS_RUNTIME_TIMEOUT, Integer.toString(properties.getProcessRuntime().getTimeout())); - assertSystemProperty(TASK_ASSIGNING_PROCESS_RUNTIME_TARGET_USER, properties.getProcessRuntime().getTargetUser()); - assertSystemProperty(TASK_ASSIGNING_PUBLISH_WINDOW_SIZE, Integer.toString(properties.getPublishWindowSize())); - assertSystemProperty(PLANNING_USER_ID_PROPERTY, properties.getCore().getModel().getPlanningUserId()); - - assertSystemProperty(TASK_ASSIGNING_SYNC_INTERVAL, properties.getSolutionSyncInterval()); - assertSystemProperty(TASK_ASSIGNING_SYNC_QUERIES_SHIFT, properties.getSolutionSyncQueriesShift()); - assertSystemProperty(TASK_ASSIGNING_USERS_SYNC_INTERVAL, properties.getUsersSyncInterval()); - assertSystemProperty(TASK_ASSIGNING_WAIT_FOR_IMPROVED_SOLUTION_DURATION, properties.getWaitForImprovedSolutionDuration()); - assertSystemProperty(TASK_ASSIGNING_IMPROVE_SOLUTION_ON_BACKGROUND_DURATION, properties.getImproveSolutionOnBackgroundDuration()); - - assertSystemProperty(TASK_ASSIGNING_SOLVER_CONFIG_RESOURCE, properties.getSolver().getConfigResource()); - assertSystemProperty(TASK_ASSIGNING_SOLVER_MOVE_THREAD_COUNT, properties.getSolver().getMoveThreadCount()); - assertSystemProperty(TASK_ASSIGNING_SOLVER_MOVE_THREAD_BUFFER_SIZE, Integer.toString(properties.getSolver().getMoveThreadBufferSize())); - assertSystemProperty(TASK_ASSIGNING_SOLVER_THREAD_FACTORY_CLASS, properties.getSolver().getThreadFactoryClass()); - - assertSystemProperty(TASK_ASSIGNING_SOLVER_CONTAINER_ID, properties.getSolver().getContainer().getId()); - assertSystemProperty(TASK_ASSIGNING_SOLVER_CONTAINER_GROUP_ID, properties.getSolver().getContainer().getGroupId()); - assertSystemProperty(TASK_ASSIGNING_SOLVER_CONTAINER_ARTIFACT_ID, properties.getSolver().getContainer().getArtifactId()); - assertSystemProperty(TASK_ASSIGNING_SOLVER_CONTAINER_VERSION, properties.getSolver().getContainer().getVersion()); - - assertSystemProperty(TASK_ASSIGNING_USER_SYSTEM_NAME, properties.getUserSystem().getName()); - assertSystemProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ID, properties.getUserSystem().getContainer().getId()); - assertSystemProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_GROUP_ID, properties.getUserSystem().getContainer().getGroupId()); - assertSystemProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_ARTIFACT_ID, properties.getUserSystem().getContainer().getArtifactId()); - assertSystemProperty(TASK_ASSIGNING_USER_SYSTEM_CONTAINER_VERSION, properties.getUserSystem().getContainer().getVersion()); - - assertSystemProperty(USERS_FILE, properties.getUserSystem().getSimple().getUsers()); - assertSystemProperty(SKILLS_FILE, properties.getUserSystem().getSimple().getSkills()); - assertSystemProperty(AFFINITIES_FILE, properties.getUserSystem().getSimple().getAffinities()); - - assertSystemProperty(TASK_ASSIGNING_RUNTIME_DELEGATE_PAGE_SIZE, Integer.toString(properties.getRuntimeDelegate().getPageSize())); - - configuration.handleContextRefreshEvent(mock(ContextClosedEvent.class)); - - previousValues.forEach(previousValue -> assertSystemProperty(previousValue.getKey(), previousValue.getValue())); - } - - private void assertSystemProperty(String propertyName, String value) { - assertEquals(value, System.getProperty(propertyName)); - } - - private void clearSystemProperties(String... propertyNames) { - Arrays.stream(propertyNames).forEach(System::clearProperty); - } - - private void setSystemSystemProperties(List> propertyValues) { - propertyValues.forEach(propertyValue -> System.setProperty(propertyValue.getKey(), propertyValue.getValue())); - } - - private List> buildPreviousValues(String... propertyNames) { - return Arrays.stream(propertyNames) - .map(propertyName -> Pair.of(propertyName, propertyName + "_GENERATED_VALUE")) - .collect(Collectors.toList()); - } -} diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/test/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPlanningPropertiesTest.java b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/test/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPlanningPropertiesTest.java deleted file mode 100644 index ad680ed32c..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-planning/src/test/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPlanningPropertiesTest.java +++ /dev/null @@ -1,174 +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.springboot.autoconfiguration.taskassigning; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class TaskAssigningPlanningPropertiesTest { - - public static final String PROCESS_RUNTIME_URL = "PROCESS_RUNTIME_URL"; - - public static final String PROCESS_RUNTIME_USER = "PROCESS_RUNTIME_USER"; - - public static final String PROCESS_RUNTIME_PWD = "PROCESS_RUNTIME_PWD"; - - public static final String PROCESS_RUNTIME_KEY_ALIAS = "PROCESS_RUNTIME_KEY_ALIAS"; - - public static final String PROCESS_RUNTIME_KEY_PWD = "PROCESS_RUNTIME_KEY_PWD"; - - public static final int PROCESS_RUNTIME_TIMEOUT = 12; - - public static final String PROCESS_RUNTIME_TARGET_USER = "PROCESS_RUNTIME_TARGET_USER"; - - public static final int PUBLISH_WINDOW_SIZE = 34; - - public static final String SOLUTION_SYNC_INTERVAL = "SYNC_INTERVAL"; - - public static final String SOLUTION_SYNC_QUERIES_SHIFT = "SOLUTION_SYNC_QUERIES_SHIFT"; - - public static final String USERS_SYNC_INTERVAL = "USERS_SYNC_INTERVAL"; - - public static final String WAIT_FOR_IMPROVED_SOLUTION_DURATION = "WAIT_FOR_IMPROVED_SOLUTION_DURATION"; - - public static final String IMPROVE_SOLUTION_ON_BACKGROUND_DURATION = "IMPROVE_SOLUTION_ON_BACKGROUND_DURATION"; - - public static final String SOLVER_CONFIG_RESOURCE = "SOLVER_CONFIG_RESOURCE"; - - public static final String SOLVER_MOVE_THREAD_COUNT = "SOLVER_MOVE_THREAD_COUNT"; - - public static final int SOLVER_MOVE_THREAD_BUFFER_SIZE = 56; - - public static final String SOLVER_THREAD_FACTORY_CLASS = "SOLVER_THREAD_FACTORY_CLASS"; - - public static final String SOLVER_CONTAINER_ID = "SOLVER_CONTAINER_ID"; - - public static final String SOLVER_CONTAINER_GROUP_ID = "SOLVER_CONTAINER_GROUP_ID"; - - public static final String SOLVER_CONTAINER_ARTIFACT_ID = "SOLVER_CONTAINER_ARTIFACT_ID"; - - public static final String SOLVER_CONTAINER_VERSION = "SOLVER_CONTAINER_VERSION"; - - public static final String USER_SYSTEM_NAME = "SOLVER_CONTAINER_VERSION"; - - public static final String USER_SYSTEM_CONTAINER_ID = "USER_SYSTEM_CONTAINER_ID"; - - public static final String USER_SYSTEM_CONTAINER_GROUP_ID = "USER_SYSTEM_CONTAINER_GROUP_ID"; - - public static final String USER_SYSTEM_CONTAINER_ARTIFACT_ID = "USER_SYSTEM_CONTAINER_ARTIFACT_ID"; - - public static final String USER_SYSTEM_CONTAINER_VERSION = "USER_SYSTEM_CONTAINER_VERSION"; - - public static final String PLANNING_USER_ID = "PLANNING_USER_ID"; - - public static final String USER_SYSTEM_SIMPLE_USERS = "USER_SYSTEM_SIMPLE_USERS"; - - public static final String USER_SYSTEM_SIMPLE_SKILLS = "USER_SYSTEM_SIMPLE_SKILLS"; - - public static final String USER_SYSTEM_SIMPLE_AFFINITIES = "USER_SYSTEM_SIMPLE_AFFINITIES"; - - public static final int RUNTIME_DELEGATE_PAGE_SIZE = 78; - - public static TaskAssigningPlanningProperties newTaskAssigningProperties() { - TaskAssigningPlanningProperties properties = new TaskAssigningPlanningProperties(); - properties.getSolver().setConfigResource(SOLVER_CONFIG_RESOURCE); - properties.getSolver().setMoveThreadCount(SOLVER_MOVE_THREAD_COUNT); - properties.getSolver().setMoveThreadBufferSize(SOLVER_MOVE_THREAD_BUFFER_SIZE); - properties.getSolver().setThreadFactoryClass(SOLVER_THREAD_FACTORY_CLASS); - - properties.getSolver().getContainer().setId(SOLVER_CONTAINER_ID); - properties.getSolver().getContainer().setGroupId(SOLVER_CONTAINER_GROUP_ID); - properties.getSolver().getContainer().setArtifactId(SOLVER_CONTAINER_ARTIFACT_ID); - properties.getSolver().getContainer().setVersion(SOLVER_CONTAINER_VERSION); - - properties.getCore().getModel().setPlanningUserId(PLANNING_USER_ID); - - properties.getProcessRuntime().setUrl(PROCESS_RUNTIME_URL); - properties.getProcessRuntime().setUser(PROCESS_RUNTIME_USER); - properties.getProcessRuntime().setPwd(PROCESS_RUNTIME_PWD); - properties.getProcessRuntime().setTimeout(PROCESS_RUNTIME_TIMEOUT); - properties.getProcessRuntime().setTargetUser(PROCESS_RUNTIME_TARGET_USER); - properties.getProcessRuntime().getKey().setAlias(PROCESS_RUNTIME_KEY_ALIAS); - properties.getProcessRuntime().getKey().setPwd(PROCESS_RUNTIME_KEY_PWD); - - properties.setPublishWindowSize(PUBLISH_WINDOW_SIZE); - properties.setSolutionSyncInterval(SOLUTION_SYNC_INTERVAL); - properties.setSolutionSyncQueriesShift(SOLUTION_SYNC_QUERIES_SHIFT); - properties.setUsersSyncInterval(USERS_SYNC_INTERVAL); - properties.setWaitForImprovedSolutionDuration(WAIT_FOR_IMPROVED_SOLUTION_DURATION); - properties.setImproveSolutionOnBackgroundDuration(IMPROVE_SOLUTION_ON_BACKGROUND_DURATION); - - properties.getUserSystem().setName(USER_SYSTEM_NAME); - properties.getUserSystem().getContainer().setId(USER_SYSTEM_CONTAINER_ID); - properties.getUserSystem().getContainer().setGroupId(USER_SYSTEM_CONTAINER_GROUP_ID); - properties.getUserSystem().getContainer().setArtifactId(USER_SYSTEM_CONTAINER_ARTIFACT_ID); - properties.getUserSystem().getContainer().setVersion(USER_SYSTEM_CONTAINER_VERSION); - - properties.getUserSystem().getSimple().setUsers(USER_SYSTEM_SIMPLE_USERS); - properties.getUserSystem().getSimple().setSkills(USER_SYSTEM_SIMPLE_SKILLS); - properties.getUserSystem().getSimple().setAffinities(USER_SYSTEM_SIMPLE_AFFINITIES); - - properties.getRuntimeDelegate().setPageSize(RUNTIME_DELEGATE_PAGE_SIZE); - - return properties; - } - - @Test - public void getters() { - TaskAssigningPlanningProperties properties = newTaskAssigningProperties(); - - assertEquals(SOLVER_CONFIG_RESOURCE, properties.getSolver().getConfigResource()); - assertEquals(SOLVER_MOVE_THREAD_COUNT, properties.getSolver().getMoveThreadCount()); - assertEquals(SOLVER_MOVE_THREAD_BUFFER_SIZE, properties.getSolver().getMoveThreadBufferSize()); - assertEquals(SOLVER_THREAD_FACTORY_CLASS, properties.getSolver().getThreadFactoryClass()); - - assertEquals(SOLVER_CONTAINER_ID, properties.getSolver().getContainer().getId()); - assertEquals(SOLVER_CONTAINER_GROUP_ID, properties.getSolver().getContainer().getGroupId()); - assertEquals(SOLVER_CONTAINER_ARTIFACT_ID, properties.getSolver().getContainer().getArtifactId()); - assertEquals(SOLVER_CONTAINER_VERSION, properties.getSolver().getContainer().getVersion()); - - assertEquals(PLANNING_USER_ID, properties.getCore().getModel().getPlanningUserId()); - - assertEquals(PROCESS_RUNTIME_URL, properties.getProcessRuntime().getUrl()); - assertEquals(PROCESS_RUNTIME_USER, properties.getProcessRuntime().getUser()); - assertEquals(PROCESS_RUNTIME_PWD, properties.getProcessRuntime().getPwd()); - assertEquals(PROCESS_RUNTIME_TIMEOUT, properties.getProcessRuntime().getTimeout()); - assertEquals(PROCESS_RUNTIME_TARGET_USER, properties.getProcessRuntime().getTargetUser()); - assertEquals(PROCESS_RUNTIME_KEY_ALIAS, properties.getProcessRuntime().getKey().getAlias()); - assertEquals(PROCESS_RUNTIME_KEY_PWD, properties.getProcessRuntime().getKey().getPwd()); - - assertEquals(PUBLISH_WINDOW_SIZE, properties.getPublishWindowSize()); - assertEquals(SOLUTION_SYNC_INTERVAL, properties.getSolutionSyncInterval()); - assertEquals(SOLUTION_SYNC_QUERIES_SHIFT, properties.getSolutionSyncQueriesShift()); - assertEquals(USERS_SYNC_INTERVAL, properties.getUsersSyncInterval()); - assertEquals(WAIT_FOR_IMPROVED_SOLUTION_DURATION, properties.getWaitForImprovedSolutionDuration()); - assertEquals(IMPROVE_SOLUTION_ON_BACKGROUND_DURATION, properties.getImproveSolutionOnBackgroundDuration()); - - assertEquals(USER_SYSTEM_NAME, properties.getUserSystem().getName()); - assertEquals(USER_SYSTEM_CONTAINER_ID, properties.getUserSystem().getContainer().getId()); - assertEquals(USER_SYSTEM_CONTAINER_GROUP_ID, properties.getUserSystem().getContainer().getGroupId()); - assertEquals(USER_SYSTEM_CONTAINER_ARTIFACT_ID, properties.getUserSystem().getContainer().getArtifactId()); - assertEquals(USER_SYSTEM_CONTAINER_VERSION, properties.getUserSystem().getContainer().getVersion()); - - assertEquals(USER_SYSTEM_SIMPLE_USERS, properties.getUserSystem().getSimple().getUsers()); - assertEquals(USER_SYSTEM_SIMPLE_SKILLS, properties.getUserSystem().getSimple().getSkills()); - assertEquals(USER_SYSTEM_SIMPLE_AFFINITIES, properties.getUserSystem().getSimple().getAffinities()); - - assertEquals(RUNTIME_DELEGATE_PAGE_SIZE, properties.getRuntimeDelegate().getPageSize()); - } -} diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/.gitignore b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/.gitignore deleted file mode 100644 index 0b600edf21..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -/target -/local -*.tlog - -# Eclipse, Netbeans and IntelliJ files -/.* -!.gitignore -/nbproject -/*.ipr -/*.iws -*.iml -.classpath -.project -.settings -.idea -target - -# Repository wide ignore mac DS_Store files -.DS_Store diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/pom.xml b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/pom.xml deleted file mode 100644 index c97e5c2d42..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/pom.xml +++ /dev/null @@ -1,110 +0,0 @@ - - 4.0.0 - - org.kie - kie-spring-boot-autoconfiguration - 7.75.0-SNAPSHOT - - kie-server-spring-boot-autoconfiguration-task-assigning-runtime - KIE :: Spring :: Boot :: KIE Server Auto Configuration :: TaskAssigningRuntime - TaskAssigningRuntime KIE Server SpringBoot Auto Configuration - - - - org.springframework.boot - spring-boot - - - commons-logging - commons-logging - - - - - org.springframework.boot - spring-boot-autoconfigure - - - - org.kie.server - kie-server-api - - - jakarta.activation - jakarta.activation-api - - - - - org.kie.server - kie-server-services-common - - - jakarta.servlet - jakarta.servlet-api - - - jakarta.ws.rs - jakarta.ws.rs-api - - - aopalliance - aopalliance - - - org.jboss.resteasy - resteasy-jackson-provider - - - org.jboss.resteasy - resteasy-jaxrs - - - org.jboss.resteasy - resteasy-jaxb-provider - - - org.slf4j - jcl-over-slf4j - - - jakarta.el - jakarta.el-api - - - - - org.springframework - spring-context - - - - org.kie - kie-server-spring-boot-autoconfiguration - - - org.kie - kie-server-spring-boot-autoconfiguration-jbpm - - - - - org.kie.server - kie-server-services-task-assigning-runtime - - - org.kie.server - kie-server-rest-task-assigning-runtime - - - jakarta.ws.rs - jakarta.ws.rs-api - - - - - org.slf4j - slf4j-api - - - diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/main/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPersistenceUnitPostProcessor.java b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/main/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPersistenceUnitPostProcessor.java deleted file mode 100644 index 7c089ee303..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/main/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPersistenceUnitPostProcessor.java +++ /dev/null @@ -1,36 +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.springboot.autoconfiguration.taskassigning; - -import org.jbpm.springboot.persistence.JBPMPersistenceUnitPostProcessor; -import org.kie.server.services.taskassigning.runtime.persistence.PlanningTaskImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo; - -public class TaskAssigningPersistenceUnitPostProcessor implements JBPMPersistenceUnitPostProcessor { - - private static final Logger LOGGER = LoggerFactory.getLogger(TaskAssigningPersistenceUnitPostProcessor.class); - - @Override - public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) { - LOGGER.debug("Adding the task assigning entities to the current jBPM persistent unit: {}.", pui.getPersistenceUnitName()); - pui.getManagedClassNames().add(PlanningTaskImpl.class.getName()); - LOGGER.debug("Task assigning entities where successfully added."); - } -} - diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/main/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningRuntimeKieServerAutoConfiguration.java b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/main/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningRuntimeKieServerAutoConfiguration.java deleted file mode 100644 index 7c6043e52a..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/main/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningRuntimeKieServerAutoConfiguration.java +++ /dev/null @@ -1,67 +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.springboot.autoconfiguration.taskassigning; - -import org.kie.server.services.api.KieServerExtension; -import org.kie.server.services.impl.KieServerImpl; -import org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtension; -import org.kie.server.springboot.autoconfiguration.jbpm.JBPMKieServerAutoConfiguration; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.event.ContextClosedEvent; -import org.springframework.context.event.EventListener; - -import static org.kie.server.api.KieServerConstants.KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED; - -@Configuration -@ConditionalOnClass({KieServerImpl.class}) -@AutoConfigureAfter({JBPMKieServerAutoConfiguration.class}) -public class TaskAssigningRuntimeKieServerAutoConfiguration { - - private static final String KIE_SERVER_TASK_ASSIGNING_RUNTIME_ENABLED = "kieserver.taskAssigning.runtime.enabled"; - - private String runtimeDisabledValue = null; - - @Bean - @ConditionalOnMissingBean(name = "taskAssigningRuntimeServerExtension") - @ConditionalOnProperty(name = KIE_SERVER_TASK_ASSIGNING_RUNTIME_ENABLED) - public KieServerExtension taskAssigningRuntimeServerExtension() { - runtimeDisabledValue = System.getProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED); - System.setProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED, Boolean.FALSE.toString()); - return new TaskAssigningRuntimeKieServerExtension(); - } - - @Bean - @ConditionalOnMissingBean(name = "taskAssigningPersistenceUnitPostProcessor") - @ConditionalOnProperty(name = KIE_SERVER_TASK_ASSIGNING_RUNTIME_ENABLED) - public TaskAssigningPersistenceUnitPostProcessor taskAssigningPersistenceUnitPostProcessor() { - return new TaskAssigningPersistenceUnitPostProcessor(); - } - - @EventListener - public void handleContextRefreshEvent(ContextClosedEvent evt) { - if (runtimeDisabledValue != null) { - System.setProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED, runtimeDisabledValue); - } else { - System.clearProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED); - } - } -} \ No newline at end of file diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/main/resources/META-INF/spring.factories b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/main/resources/META-INF/spring.factories deleted file mode 100644 index b0e949db5f..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.kie.server.springboot.autoconfiguration.taskassigning.TaskAssigningRuntimeKieServerAutoConfiguration \ No newline at end of file diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/test/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPersistenceUnitPostProcessorTest.java b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/test/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPersistenceUnitPostProcessorTest.java deleted file mode 100644 index 9e729fa0ba..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/test/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningPersistenceUnitPostProcessorTest.java +++ /dev/null @@ -1,35 +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.springboot.autoconfiguration.taskassigning; - -import org.junit.Test; -import org.kie.server.services.taskassigning.runtime.persistence.PlanningTaskImpl; -import org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo; - -import static org.junit.Assert.assertTrue; - -public class TaskAssigningPersistenceUnitPostProcessorTest { - - @Test - public void postProcessPersistenceUnitInfo() { - MutablePersistenceUnitInfo persistenceUnitInfo = new MutablePersistenceUnitInfo(); - TaskAssigningPersistenceUnitPostProcessor processor = new TaskAssigningPersistenceUnitPostProcessor(); - processor.postProcessPersistenceUnitInfo(persistenceUnitInfo); - assertTrue("Class: " + PlanningTaskImpl.class.getName() + " is expected to have been added as managed class.", - persistenceUnitInfo.getManagedClassNames().contains(PlanningTaskImpl.class.getName())); - } -} diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/test/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningRuntimeKieServerAutoConfigurationTest.java b/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/test/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningRuntimeKieServerAutoConfigurationTest.java deleted file mode 100644 index 9a6b8eeca0..0000000000 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/kie-server-spring-boot-autoconfiguration-task-assigning-runtime/src/test/java/org/kie/server/springboot/autoconfiguration/taskassigning/TaskAssigningRuntimeKieServerAutoConfigurationTest.java +++ /dev/null @@ -1,60 +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.springboot.autoconfiguration.taskassigning; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.kie.server.services.taskassigning.runtime.TaskAssigningRuntimeKieServerExtension; -import org.springframework.context.event.ContextClosedEvent; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.kie.server.api.KieServerConstants.KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED; -import static org.mockito.Mockito.mock; - -public class TaskAssigningRuntimeKieServerAutoConfigurationTest { - - private TaskAssigningRuntimeKieServerAutoConfiguration configuration; - - private static final String KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED_PREVIOUS_VALUE = "KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED_PREVIOUS_VALUE"; - - @Before - public void setUp() { - configuration = new TaskAssigningRuntimeKieServerAutoConfiguration(); - } - - @After - public void cleanUp() { - System.clearProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED_PREVIOUS_VALUE); - } - - @Test - public void taskAssigningRuntimeServerExtension() { - System.setProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED, KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED_PREVIOUS_VALUE); - TaskAssigningRuntimeKieServerExtension extension = (TaskAssigningRuntimeKieServerExtension) configuration.taskAssigningRuntimeServerExtension(); - assertTrue(extension.isActive()); - configuration.handleContextRefreshEvent(mock(ContextClosedEvent.class)); - assertEquals(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED_PREVIOUS_VALUE, System.getProperty(KIE_TASK_ASSIGNING_RUNTIME_EXT_DISABLED)); - } - - @Test - public void taskAssigningPersistenceUnitPostProcessor() { - assertNotNull(configuration.taskAssigningPersistenceUnitPostProcessor()); - } -} diff --git a/kie-spring-boot/kie-spring-boot-autoconfiguration/pom.xml b/kie-spring-boot/kie-spring-boot-autoconfiguration/pom.xml index 1df90fae59..9f870fed8c 100644 --- a/kie-spring-boot/kie-spring-boot-autoconfiguration/pom.xml +++ b/kie-spring-boot/kie-spring-boot-autoconfiguration/pom.xml @@ -17,10 +17,7 @@ kie-server-spring-boot-autoconfiguration kie-server-spring-boot-autoconfiguration-drools kie-server-spring-boot-autoconfiguration-jbpm - kie-server-spring-boot-autoconfiguration-optaplanner - kie-server-spring-boot-autoconfiguration-task-assigning-runtime - kie-server-spring-boot-autoconfiguration-task-assigning-planning kie-server-spring-boot-autoconfiguration-audit-replication - \ No newline at end of file + diff --git a/kie-spring-boot/kie-spring-boot-samples/keycloak-kie-server-spring-boot-sample/src/main/resources/application.properties b/kie-spring-boot/kie-spring-boot-samples/keycloak-kie-server-spring-boot-sample/src/main/resources/application.properties index ad6aba0759..3557aa13f7 100644 --- a/kie-spring-boot/kie-spring-boot-samples/keycloak-kie-server-spring-boot-sample/src/main/resources/application.properties +++ b/kie-spring-boot/kie-spring-boot-samples/keycloak-kie-server-spring-boot-sample/src/main/resources/application.properties @@ -22,7 +22,6 @@ kieserver.dmn.enabled=true kieserver.jbpm.enabled=true kieserver.jbpmui.enabled=true kieserver.casemgmt.enabled=true -kieserver.optaplanner.enabled=true kieserver.scenariosimulation.enabled=true # only required for jBPM diff --git a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-integ-tests-sample/src/main/resources/application.properties b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-integ-tests-sample/src/main/resources/application.properties index 0b39d43a61..1a52001229 100644 --- a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-integ-tests-sample/src/main/resources/application.properties +++ b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-integ-tests-sample/src/main/resources/application.properties @@ -23,7 +23,6 @@ kieserver.dmn.enabled=true kieserver.jbpm.enabled=true kieserver.jbpmui.enabled=true kieserver.casemgmt.enabled=true -kieserver.optaplanner.enabled=true kieserver.prometheus.enabled=true kieserver.scenariosimulation.enabled=true @@ -44,4 +43,4 @@ spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl #transaction manager configuration -spring.jta.narayana.transaction-manager-id=1 \ No newline at end of file +spring.jta.narayana.transaction-manager-id=1 diff --git a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-kafka-sample/README.md b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-kafka-sample/README.md index b73d2ddd63..2cbc5d88de 100644 --- a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-kafka-sample/README.md +++ b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-kafka-sample/README.md @@ -16,7 +16,6 @@ kieserver.dmn.enabled=false kieserver.jbpm.enabled=true kieserver.jbpmui.enabled=true kieserver.casemgmt.enabled=true -kieserver.optaplanner.enabled=false kieserver.prometheus.enabled=false kieserver.scenariosimulation.enabled=false ``` diff --git a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-kafka-sample/src/main/resources/application.properties b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-kafka-sample/src/main/resources/application.properties index 576d067e9c..486a1e6a00 100644 --- a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-kafka-sample/src/main/resources/application.properties +++ b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-kafka-sample/src/main/resources/application.properties @@ -23,7 +23,6 @@ kieserver.dmn.enabled=true kieserver.jbpm.enabled=true kieserver.jbpmui.enabled=true kieserver.casemgmt.enabled=true -kieserver.optaplanner.enabled=true kieserver.scenariosimulation.enabled=true # only required for jBPM @@ -43,4 +42,4 @@ spring.jpa.properties.hibernate.hbm2ddl.auto=update spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl #transaction manager configuration -spring.jta.narayana.transaction-manager-id=1 \ No newline at end of file +spring.jta.narayana.transaction-manager-id=1 diff --git a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/README.md b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/README.md index a42d60cc2d..18b83c8b89 100644 --- a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/README.md +++ b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/README.md @@ -3,7 +3,7 @@ KIE Server with all capabilities KIE Server SpringBoot sample application that uses Spring Security for securing access to KIE Server resources. This is a complete (fully featured KIE Server - includes all capabilities) KIE Server that can be used to leverage -business process management, rules management and planning solutions in single runtime. +business process management and rules management solutions in single runtime. How to configure it ------------------------------ @@ -17,7 +17,6 @@ kieserver.dmn.enabled=true kieserver.jbpm.enabled=true kieserver.jbpmui.enabled=true kieserver.casemgmt.enabled=true -kieserver.optaplanner.enabled=true kieserver.prometheus.enabled=true kieserver.scenariosimulation.enabled=true ``` diff --git a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/main/resources/application.properties b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/main/resources/application.properties index 576d067e9c..486a1e6a00 100644 --- a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/main/resources/application.properties +++ b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/main/resources/application.properties @@ -23,7 +23,6 @@ kieserver.dmn.enabled=true kieserver.jbpm.enabled=true kieserver.jbpmui.enabled=true kieserver.casemgmt.enabled=true -kieserver.optaplanner.enabled=true kieserver.scenariosimulation.enabled=true # only required for jBPM @@ -43,4 +42,4 @@ spring.jpa.properties.hibernate.hbm2ddl.auto=update spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl #transaction manager configuration -spring.jta.narayana.transaction-manager-id=1 \ No newline at end of file +spring.jta.narayana.transaction-manager-id=1 diff --git a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/java/org/kie/server/springboot/samples/TaskAssigningKieServerTest.java b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/java/org/kie/server/springboot/samples/TaskAssigningKieServerTest.java deleted file mode 100644 index e3268fb0f9..0000000000 --- a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/java/org/kie/server/springboot/samples/TaskAssigningKieServerTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.kie.server.springboot.samples; - -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.kie.server.services.api.KieServer; -import org.kie.server.services.api.KieServerExtension; -import org.kie.server.services.impl.KieServerImpl; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.springframework.test.annotation.DirtiesContext.ClassMode.AFTER_CLASS; - -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest(classes = {KieServerApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@TestPropertySource(locations = "classpath:application-task-assigning-test.properties") -@DirtiesContext(classMode= AFTER_CLASS) -public class TaskAssigningKieServerTest { - - private static final String TASK_ASSIGNING_RUNTIME = "TaskAssigningRuntime"; - private static final String TASK_ASSIGNING_PLANNING = "TaskAssigningPlanning"; - - @Autowired - private KieServer kieServer; - - @Test - public void taskAssigningExtensionsStarted() { - Map extensions = ((KieServerImpl) kieServer).getServerExtensions().stream() - .collect(Collectors.toMap(KieServerExtension::getExtensionName, Function.identity())); - assertExtensionInitialized(extensions, TASK_ASSIGNING_RUNTIME); - assertExtensionInitialized(extensions, TASK_ASSIGNING_PLANNING); - } - - private void assertExtensionInitialized(Map extensions, String extensionName) { - KieServerExtension extension = extensions.get(extensionName); - assertNotNull("Extension " + extensionName + " was not found in current server", extension); - assertTrue("Extension " + extensionName + " is expected to be active", extension.isActive()); - assertTrue("Extension " + extensionName + " is expected to be initialized", extension.isInitialized()); - } -} diff --git a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/resources/application-rules.properties b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/resources/application-rules.properties index 3496a85751..56a8b83343 100644 --- a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/resources/application-rules.properties +++ b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/resources/application-rules.properties @@ -9,5 +9,4 @@ kieserver.dmn.enabled=true kieserver.jbpm.enabled=false kieserver.jbpmui.enabled=false kieserver.casemgmt.enabled=false -kieserver.optaplanner.enabled=true -kieserver.scenariosimulation.enabled=true \ No newline at end of file +kieserver.scenariosimulation.enabled=true diff --git a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/resources/application-task-assigning-test.properties b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/resources/application-task-assigning-test.properties deleted file mode 100644 index 08be7866a1..0000000000 --- a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/resources/application-task-assigning-test.properties +++ /dev/null @@ -1,31 +0,0 @@ -# -# https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties -# -#server configuration -server.port=8090 - -#hibernate configuration -spring.jpa.properties.hibernate.hbm2ddl.auto=create -spring.jpa.properties.hibernate.show_sql=false - -kieserver.drools.enabled=false -kieserver.dmn.enabled=false -kieserver.jbpmui.enabled=false -kieserver.casemgmt.enabled=false -kieserver.optaplanner.enabled=false -kieserver.scenariosimulation.enabled=false - -kieserver.jbpm.enabled=true -kieserver.taskAssigning.runtime.enabled=true -kieserver.taskAssigning.planning.enabled=true - -taskassigning.processRuntime.user=administrator -taskassigning.processRuntime.pwd=usetheforce123@ -taskassigning.processRuntime.url=http://localhost:8090/rest/server -taskassigning.processRuntime.targetUser=administrator -taskassigning.core.model.planningUserId=administrator -taskassigning.publishWindowSize=2 -taskassigning.solutionSyncInterval=PT1S - -taskassigning.userSystem.name=SimpleUserSystemService -taskassigning.userSystem.simple.users=src/test/resources/roles.properties \ No newline at end of file diff --git a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/resources/roles.properties b/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/resources/roles.properties deleted file mode 100644 index 0ec95e4c90..0000000000 --- a/kie-spring-boot/kie-spring-boot-samples/kie-server-spring-boot-sample/src/test/resources/roles.properties +++ /dev/null @@ -1,2 +0,0 @@ -# used by the TaskAssigningKieServerTest -katy=HR \ No newline at end of file diff --git a/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter-optaplanner/.gitignore b/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter-optaplanner/.gitignore deleted file mode 100644 index 0b600edf21..0000000000 --- a/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter-optaplanner/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -/target -/local -*.tlog - -# Eclipse, Netbeans and IntelliJ files -/.* -!.gitignore -/nbproject -/*.ipr -/*.iws -*.iml -.classpath -.project -.settings -.idea -target - -# Repository wide ignore mac DS_Store files -.DS_Store diff --git a/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter-optaplanner/README.md b/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter-optaplanner/README.md deleted file mode 100644 index c5cfcb2035..0000000000 --- a/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter-optaplanner/README.md +++ /dev/null @@ -1,82 +0,0 @@ -KIE Server OptaPlanner Spring Boot Starter -======================================== -Spring Boot starter that configures completely KIE Server with BRM and DMN and Planner capabilities. - - -How to configure it ------------------------------- - -Complete configuration is done via application.properties file (or its yaml equivalent). - - -KIE Server dedicated configuration is prefixed with kieserver and allows to configure - -- context path for REST endpoints, location, server name and id and list of controllers (optionally) - -``` -kieserver.serverId=SpringBoot -kieserver.serverName=KIE Server SpringBoot -kieserver.restContextPath=/rest -kieserver.location=http://localhost:8080/rest/server -#kieserver.controllers= -``` - -All KIE server extensions are disabled by default so you need to enabled them explicitly to make them available as REST endpoints - -``` -kieserver.drools.enabled=true -kieserver.dmn.enabled=true -kieserver.optaplanner.enabled=true -kieserver.scenariosimulation.enabled=true -``` - -Additional configuration properties that might be relevant (depending on application needs) can be found at https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties - -Starter comes with out of the box Spring Security setup that allows configures two users - -- kieserver/kieserver1! - that is standard user that will be used to connect to controller -- john/john@pwd1 - application user to quickly try it out - -That's enough to quickly try it out but for more advanced use cases one would have to provide their own setup. It can be given by providing a Configuration class named kieServerSecurity as shown below. - -``` -@Configuration("kieServerSecurity") -@EnableWebSecurity -public class DefaultWebSecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(HttpSecurity http) throws Exception { - http - .csrf().disable() - .authorizeRequests() - .anyRequest().authenticated() - .and() - .httpBasic(); - } - - @Autowired - public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { - // configure it the way you need it - } -} -``` - -this will then override default setup and allow to plug in to your user/group repository for authentication and authorization. - - -How to use it ------------------------------- - -Best and easiest way is to use Spring Initializr (https://start.spring.io) and generate project with following starters - -- Planning Server -- security - - -Update application.properties to configure data base and you can directly start the application with: - -``` -mvn clean spring-boot:run -``` - - diff --git a/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter-optaplanner/pom.xml b/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter-optaplanner/pom.xml deleted file mode 100644 index cdff4386a9..0000000000 --- a/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter-optaplanner/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - 4.0.0 - - org.kie - kie-spring-boot-starters - 7.75.0-SNAPSHOT - - kie-server-spring-boot-starter-optaplanner - - - KIE Server :: Spring :: Boot :: Starter :: OptaPlanner - OptaPlanner - KIE Server SpringBoot Starter - - - - org.springframework.boot - spring-boot-starter-web - - - org.apache.cxf - cxf-spring-boot-starter-jaxrs - - - - org.kie - kie-server-spring-boot-autoconfiguration - - - org.kie - kie-server-spring-boot-autoconfiguration-drools - - - org.kie - kie-server-spring-boot-autoconfiguration-optaplanner - - - - - - - org.springframework.boot - spring-boot-maven-plugin - ${version.org.springframework.boot} - - - - - diff --git a/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter/README.md b/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter/README.md index a25136653a..e5bbaace33 100644 --- a/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter/README.md +++ b/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter/README.md @@ -23,7 +23,6 @@ In case you don't need to have all capabilities consider using other starters th - Rules and Decisions KIE Server (Drools, DMN) - kie-server-spring-boot-starter-drools - Rules and Decisions, Process and Cases KIE Server (Drools, DMN, jBPM, Case mgmt) - kie-server-spring-boot-starter-jbpm -- Planning KIE Server (Optaplanner) - kie-server-spring-boot-starter-optaplanner How to configure it ------------------------------ @@ -84,7 +83,6 @@ kieserver.dmn.enabled=true kieserver.jbpm.enabled=true kieserver.jbpmui.enabled=true kieserver.casemgmt.enabled=true -kieserver.optaplanner.enabled=true kieserver.prometheus.enabled=true kieserver.scenariosimulation.enabled=true ``` diff --git a/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter/pom.xml b/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter/pom.xml index d7e4711d2a..1157af3eb1 100644 --- a/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter/pom.xml +++ b/kie-spring-boot/kie-spring-boot-starters/kie-server-spring-boot-starter/pom.xml @@ -73,18 +73,6 @@ - - org.kie - kie-server-spring-boot-autoconfiguration-optaplanner - - - org.kie - kie-server-spring-boot-autoconfiguration-task-assigning-runtime - - - org.kie - kie-server-spring-boot-autoconfiguration-task-assigning-planning - diff --git a/kie-spring-boot/kie-spring-boot-starters/pom.xml b/kie-spring-boot/kie-spring-boot-starters/pom.xml index f64c6e906e..686e0cd2ff 100644 --- a/kie-spring-boot/kie-spring-boot-starters/pom.xml +++ b/kie-spring-boot/kie-spring-boot-starters/pom.xml @@ -28,7 +28,6 @@ kie-server-spring-boot-starter kie-server-spring-boot-starter-drools kie-server-spring-boot-starter-jbpm - kie-server-spring-boot-starter-optaplanner diff --git a/kie-spring-boot/pom.xml b/kie-spring-boot/pom.xml index 8394a1254d..d50f44382c 100644 --- a/kie-spring-boot/pom.xml +++ b/kie-spring-boot/pom.xml @@ -113,21 +113,6 @@ kie-server-spring-boot-autoconfiguration-jbpm ${project.version} - - org.kie - kie-server-spring-boot-autoconfiguration-optaplanner - ${project.version} - - - org.kie - kie-server-spring-boot-autoconfiguration-task-assigning-runtime - ${project.version} - - - org.kie - kie-server-spring-boot-autoconfiguration-task-assigning-planning - ${project.version} - diff --git a/kie-takari-plugin/pom.xml b/kie-takari-plugin/pom.xml index cd91d0944a..5303dad228 100644 --- a/kie-takari-plugin/pom.xml +++ b/kie-takari-plugin/pom.xml @@ -207,11 +207,6 @@ drools-workbench-models-guided-scorecard runtime - - org.optaplanner - optaplanner-core - runtime - org.kie kie-dmn-core diff --git a/optaplanner-workbench-models/.gitignore b/optaplanner-workbench-models/.gitignore deleted file mode 100644 index 222af0cf11..0000000000 --- a/optaplanner-workbench-models/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -/target -/local - -# Eclipse, Netbeans and IntelliJ files -/.* -!.gitignore -/nbproject -/*.ipr -/*.iws -/*.iml diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/.gitignore b/optaplanner-workbench-models/optaplanner-workbench-models-core/.gitignore deleted file mode 100644 index 7cb608a8af..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -/target -/local - -# Eclipse, Netbeans and IntelliJ files -/.* -/**/.* -!.gitignore -/nbproject -/*.ipr -/*.iws -/*.iml diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/pom.xml b/optaplanner-workbench-models/optaplanner-workbench-models-core/pom.xml deleted file mode 100644 index b15979dbc0..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/pom.xml +++ /dev/null @@ -1,118 +0,0 @@ - - - - 4.0.0 - - org.optaplanner - optaplanner-workbench-models - 7.75.0-SNAPSHOT - - - optaplanner-workbench-models-core - jar - - OptaPlanner core GWT wrapper for OptaPlanner Workbench - - OptaPlanner solves planning problems. - This lightweight, embeddable planning engine implements powerful and scalable algorithms - to optimize business resource scheduling and planning. - - This module wraps OptaPlanner core classes used by OptaPlanner Workbench. - - - - org.optaplanner.workbench.models.core - - - - - - org.jboss.errai.bom - errai-internal-bom - ${version.org.jboss.errai} - pom - import - - - - - - - - org.jboss.errai - errai-codegen - - - - org.optaplanner - optaplanner-core - - - org.jboss.errai - errai-marshalling - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack - generate-resources - - unpack-dependencies - - - org.optaplanner - optaplanner-core - sources - ${project.build.directory}/core-dependencies - true - true - - - - - - - - - - ${project.build.directory}/core-dependencies - - org/optaplanner/core/api/score/AbstractScore.java - org/optaplanner/core/api/score/AbstractBendableScore.java - org/optaplanner/core/api/score/FeasibilityScore.java - org/optaplanner/core/api/score/Score.java - org/optaplanner/core/api/score/buildin/bendable/BendableScore.java - org/optaplanner/core/api/score/buildin/bendablebigdecimal/BendableBigDecimalScore.java - org/optaplanner/core/api/score/buildin/bendablelong/BendableLongScore.java - org/optaplanner/core/api/score/buildin/hardmediumsoft/HardMediumSoftScore.java - org/optaplanner/core/api/score/buildin/hardmediumsoftbigdecimal/HardMediumSoftBigDecimalScore.java - org/optaplanner/core/api/score/buildin/hardmediumsoftlong/HardMediumSoftLongScore.java - org/optaplanner/core/api/score/buildin/hardsoft/HardSoftScore.java - org/optaplanner/core/api/score/buildin/hardsoftbigdecimal/HardSoftBigDecimalScore.java - org/optaplanner/core/api/score/buildin/hardsoftdouble/HardSoftDoubleScore.java - org/optaplanner/core/api/score/buildin/hardsoftlong/HardSoftLongScore.java - org/optaplanner/core/api/score/buildin/simple/SimpleScore.java - org/optaplanner/core/api/score/buildin/simplebigdecimal/SimpleBigDecimalScore.java - org/optaplanner/core/api/score/buildin/simpledouble/SimpleDoubleScore.java - org/optaplanner/core/api/score/buildin/simplelong/SimpleLongScore.java - org/optaplanner/core/config/constructionheuristic/ConstructionHeuristicType.java - org/optaplanner/core/config/heuristic/selector/entity/EntitySorterManner.java - org/optaplanner/core/config/heuristic/selector/value/ValueSorterManner.java - org/optaplanner/core/config/localsearch/LocalSearchType.java - - - - src/main/resources - - - - - diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/BendableBigDecimalScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/BendableBigDecimalScoreMapper.java deleted file mode 100644 index 8b9b3a94d1..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/BendableBigDecimalScoreMapper.java +++ /dev/null @@ -1,61 +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.optaplanner.workbench.models.core.marshalling; - -import java.math.BigDecimal; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.bendablebigdecimal.BendableBigDecimalScore; - -@CustomMapping(BendableBigDecimalScore.class) -public class BendableBigDecimalScoreMapper extends MappingDefinition { - - public BendableBigDecimalScoreMapper() throws NoSuchMethodException { - super(BendableBigDecimalScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(BendableBigDecimalScore.class.getMethod("valueOfUninitialized", - int.class, - BigDecimal[].class, - BigDecimal[].class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("hardScores", - 1, - BigDecimal[].class); - factoryMapping.mapParmToIndex("softScores", - 2, - BigDecimal[].class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("hardScores", - BigDecimal[].class, - "getHardScores")); - addMemberMapping(new ReadMapping("softScores", - BigDecimal[].class, - "getSoftScores")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/BendableLongScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/BendableLongScoreMapper.java deleted file mode 100644 index 8e3d1d1a25..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/BendableLongScoreMapper.java +++ /dev/null @@ -1,59 +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.optaplanner.workbench.models.core.marshalling; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.bendablelong.BendableLongScore; - -@CustomMapping(BendableLongScore.class) -public class BendableLongScoreMapper extends MappingDefinition { - - public BendableLongScoreMapper() throws NoSuchMethodException { - super(BendableLongScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(BendableLongScore.class.getMethod("valueOfUninitialized", - int.class, - long[].class, - long[].class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("hardScores", - 1, - long[].class); - factoryMapping.mapParmToIndex("softScores", - 2, - long[].class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("hardScores", - long[].class, - "getHardScores")); - addMemberMapping(new ReadMapping("softScores", - long[].class, - "getSoftScores")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/BendableScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/BendableScoreMapper.java deleted file mode 100644 index 8e7744fdb9..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/BendableScoreMapper.java +++ /dev/null @@ -1,59 +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.optaplanner.workbench.models.core.marshalling; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.bendable.BendableScore; - -@CustomMapping(BendableScore.class) -public class BendableScoreMapper extends MappingDefinition { - - public BendableScoreMapper() throws NoSuchMethodException { - super(BendableScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(BendableScore.class.getMethod("valueOfUninitialized", - int.class, - int[].class, - int[].class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("hardScores", - 1, - int[].class); - factoryMapping.mapParmToIndex("softScores", - 2, - int[].class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("hardScores", - int[].class, - "getHardScores")); - addMemberMapping(new ReadMapping("softScores", - int[].class, - "getSoftScores")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardMediumSoftBigDecimalScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardMediumSoftBigDecimalScoreMapper.java deleted file mode 100644 index a1cb17ee2e..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardMediumSoftBigDecimalScoreMapper.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2017 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.optaplanner.workbench.models.core.marshalling; - -import java.math.BigDecimal; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.hardmediumsoftbigdecimal.HardMediumSoftBigDecimalScore; - -@CustomMapping(HardMediumSoftBigDecimalScore.class) -public class HardMediumSoftBigDecimalScoreMapper extends MappingDefinition { - - public HardMediumSoftBigDecimalScoreMapper() throws NoSuchMethodException { - super(HardMediumSoftBigDecimalScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(HardMediumSoftBigDecimalScore.class.getMethod("valueOfUninitialized", - int.class, - BigDecimal.class, - BigDecimal.class, - BigDecimal.class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("hardScore", - 1, - BigDecimal.class); - factoryMapping.mapParmToIndex("mediumScore", - 2, - BigDecimal.class); - factoryMapping.mapParmToIndex("softScore", - 3, - BigDecimal.class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("hardScore", - BigDecimal.class, - "getHardScore")); - addMemberMapping(new ReadMapping("mediumScore", - BigDecimal.class, - "getMediumScore")); - addMemberMapping(new ReadMapping("softScore", - BigDecimal.class, - "getSoftScore")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardMediumSoftLongScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardMediumSoftLongScoreMapper.java deleted file mode 100644 index d5d0bb75bb..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardMediumSoftLongScoreMapper.java +++ /dev/null @@ -1,66 +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.optaplanner.workbench.models.core.marshalling; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.hardmediumsoftlong.HardMediumSoftLongScore; - -@CustomMapping(HardMediumSoftLongScore.class) -public class HardMediumSoftLongScoreMapper extends MappingDefinition { - - public HardMediumSoftLongScoreMapper() throws NoSuchMethodException { - super(HardMediumSoftLongScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(HardMediumSoftLongScore.class.getMethod("valueOfUninitialized", - int.class, - long.class, - long.class, - long.class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("hardScore", - 1, - long.class); - factoryMapping.mapParmToIndex("mediumScore", - 2, - long.class); - factoryMapping.mapParmToIndex("softScore", - 3, - long.class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("hardScore", - long.class, - "getHardScore")); - addMemberMapping(new ReadMapping("mediumScore", - long.class, - "getMediumScore")); - addMemberMapping(new ReadMapping("softScore", - long.class, - "getSoftScore")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardMediumSoftScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardMediumSoftScoreMapper.java deleted file mode 100644 index d41370122f..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardMediumSoftScoreMapper.java +++ /dev/null @@ -1,66 +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.optaplanner.workbench.models.core.marshalling; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.hardmediumsoft.HardMediumSoftScore; - -@CustomMapping(HardMediumSoftScore.class) -public class HardMediumSoftScoreMapper extends MappingDefinition { - - public HardMediumSoftScoreMapper() throws NoSuchMethodException { - super(HardMediumSoftScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(HardMediumSoftScore.class.getMethod("valueOfUninitialized", - int.class, - int.class, - int.class, - int.class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("hardScore", - 1, - int.class); - factoryMapping.mapParmToIndex("mediumScore", - 2, - int.class); - factoryMapping.mapParmToIndex("softScore", - 3, - int.class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("hardScore", - int.class, - "getHardScore")); - addMemberMapping(new ReadMapping("mediumScore", - int.class, - "getMediumScore")); - addMemberMapping(new ReadMapping("softScore", - int.class, - "getSoftScore")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardSoftBigDecimalScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardSoftBigDecimalScoreMapper.java deleted file mode 100644 index 508031a4e8..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardSoftBigDecimalScoreMapper.java +++ /dev/null @@ -1,61 +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.optaplanner.workbench.models.core.marshalling; - -import java.math.BigDecimal; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.hardsoftbigdecimal.HardSoftBigDecimalScore; - -@CustomMapping(HardSoftBigDecimalScore.class) -public class HardSoftBigDecimalScoreMapper extends MappingDefinition { - - public HardSoftBigDecimalScoreMapper() throws NoSuchMethodException { - super(HardSoftBigDecimalScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(HardSoftBigDecimalScore.class.getMethod("valueOfUninitialized", - int.class, - BigDecimal.class, - BigDecimal.class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("hardScore", - 1, - BigDecimal.class); - factoryMapping.mapParmToIndex("softScore", - 2, - BigDecimal.class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("hardScore", - BigDecimal.class, - "getHardScore")); - addMemberMapping(new ReadMapping("softScore", - BigDecimal.class, - "getSoftScore")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardSoftDoubleScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardSoftDoubleScoreMapper.java deleted file mode 100644 index a25b5bc0f6..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardSoftDoubleScoreMapper.java +++ /dev/null @@ -1,59 +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.optaplanner.workbench.models.core.marshalling; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.hardsoftdouble.HardSoftDoubleScore; - -@CustomMapping(HardSoftDoubleScore.class) -public class HardSoftDoubleScoreMapper extends MappingDefinition { - - public HardSoftDoubleScoreMapper() throws NoSuchMethodException { - super(HardSoftDoubleScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(HardSoftDoubleScore.class.getMethod("valueOfUninitialized", - int.class, - double.class, - double.class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("hardScore", - 1, - double.class); - factoryMapping.mapParmToIndex("softScore", - 2, - double.class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("hardScore", - double.class, - "getHardScore")); - addMemberMapping(new ReadMapping("softScore", - double.class, - "getSoftScore")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardSoftLongScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardSoftLongScoreMapper.java deleted file mode 100644 index 8d86000d27..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardSoftLongScoreMapper.java +++ /dev/null @@ -1,59 +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.optaplanner.workbench.models.core.marshalling; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.hardsoftlong.HardSoftLongScore; - -@CustomMapping(HardSoftLongScore.class) -public class HardSoftLongScoreMapper extends MappingDefinition { - - public HardSoftLongScoreMapper() throws NoSuchMethodException { - super(HardSoftLongScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(HardSoftLongScore.class.getMethod("valueOfUninitialized", - int.class, - long.class, - long.class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("hardScore", - 1, - long.class); - factoryMapping.mapParmToIndex("softScore", - 2, - long.class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("hardScore", - long.class, - "getHardScore")); - addMemberMapping(new ReadMapping("softScore", - long.class, - "getSoftScore")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardSoftScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardSoftScoreMapper.java deleted file mode 100644 index b9da3123fe..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/HardSoftScoreMapper.java +++ /dev/null @@ -1,59 +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.optaplanner.workbench.models.core.marshalling; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore; - -@CustomMapping(HardSoftScore.class) -public class HardSoftScoreMapper extends MappingDefinition { - - public HardSoftScoreMapper() throws NoSuchMethodException { - super(HardSoftScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(HardSoftScore.class.getMethod("valueOfUninitialized", - int.class, - int.class, - int.class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("hardScore", - 1, - int.class); - factoryMapping.mapParmToIndex("softScore", - 2, - int.class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("hardScore", - int.class, - "getHardScore")); - addMemberMapping(new ReadMapping("softScore", - int.class, - "getSoftScore")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/SimpleBigDecimalScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/SimpleBigDecimalScoreMapper.java deleted file mode 100644 index 818e3a9f7f..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/SimpleBigDecimalScoreMapper.java +++ /dev/null @@ -1,54 +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.optaplanner.workbench.models.core.marshalling; - -import java.math.BigDecimal; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.simplebigdecimal.SimpleBigDecimalScore; - -@CustomMapping(SimpleBigDecimalScore.class) -public class SimpleBigDecimalScoreMapper extends MappingDefinition { - - public SimpleBigDecimalScoreMapper() throws NoSuchMethodException { - super(SimpleBigDecimalScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(SimpleBigDecimalScore.class.getMethod("valueOfUninitialized", - int.class, - BigDecimal.class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("score", - 1, - BigDecimal.class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("score", - BigDecimal.class, - "getScore")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/SimpleDoubleScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/SimpleDoubleScoreMapper.java deleted file mode 100644 index 22bf1d57bf..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/SimpleDoubleScoreMapper.java +++ /dev/null @@ -1,52 +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.optaplanner.workbench.models.core.marshalling; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.simpledouble.SimpleDoubleScore; - -@CustomMapping(SimpleDoubleScore.class) -public class SimpleDoubleScoreMapper extends MappingDefinition { - - public SimpleDoubleScoreMapper() throws NoSuchMethodException { - super(SimpleDoubleScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(SimpleDoubleScore.class.getMethod("valueOfUninitialized", - int.class, - double.class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("score", - 1, - double.class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("score", - double.class, - "getScore")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/SimpleLongScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/SimpleLongScoreMapper.java deleted file mode 100644 index aafd95968a..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/SimpleLongScoreMapper.java +++ /dev/null @@ -1,52 +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.optaplanner.workbench.models.core.marshalling; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.simplelong.SimpleLongScore; - -@CustomMapping(SimpleLongScore.class) -public class SimpleLongScoreMapper extends MappingDefinition { - - public SimpleLongScoreMapper() throws NoSuchMethodException { - super(SimpleLongScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(SimpleLongScore.class.getMethod("valueOfUninitialized", - int.class, - long.class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("score", - 1, - long.class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("score", - long.class, - "getScore")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/SimpleScoreMapper.java b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/SimpleScoreMapper.java deleted file mode 100644 index 2bb92403d6..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/java/org/optaplanner/workbench/models/core/marshalling/SimpleScoreMapper.java +++ /dev/null @@ -1,52 +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.optaplanner.workbench.models.core.marshalling; - -import org.jboss.errai.codegen.meta.impl.java.JavaReflectionMethod; -import org.jboss.errai.marshalling.rebind.api.CustomMapping; -import org.jboss.errai.marshalling.rebind.api.model.MappingDefinition; -import org.jboss.errai.marshalling.rebind.api.model.impl.ReadMapping; -import org.jboss.errai.marshalling.rebind.api.model.impl.SimpleFactoryMapping; -import org.optaplanner.core.api.score.buildin.simple.SimpleScore; - -@CustomMapping(SimpleScore.class) -public class SimpleScoreMapper extends MappingDefinition { - - public SimpleScoreMapper() throws NoSuchMethodException { - super(SimpleScore.class); - - SimpleFactoryMapping factoryMapping = new SimpleFactoryMapping(); - factoryMapping.setMethod(new JavaReflectionMethod(SimpleScore.class.getMethod("valueOfUninitialized", - int.class, - int.class))); - factoryMapping.mapParmToIndex("initScore", - 0, - int.class); - factoryMapping.mapParmToIndex("score", - 1, - int.class); - - setInstantiationMapping(factoryMapping); - - addMemberMapping(new ReadMapping("initScore", - int.class, - "getInitScore")); - addMemberMapping(new ReadMapping("score", - int.class, - "getScore")); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/resources/META-INF/ErraiApp.properties b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/resources/META-INF/ErraiApp.properties deleted file mode 100644 index df03a6f588..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/resources/META-INF/ErraiApp.properties +++ /dev/null @@ -1,50 +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. -# - -# ErraiApp.properties -# -# Do not remove, even if empty! -# - -# This is a marker file. When it is detected inside a JAR or at the -# top of any classpath, the subdirectories are scanned for deployable -# components. As such, all Errai application modules in a project -# should contain an ErraiApp.properties at the root of all classpaths -# that you wish to be scanned. -# -# There are also some configuration options that can be set in this -# file, although it is rarely necessary. See the documentation at -# https://docs.jboss.org/author/display/ERRAI/ErraiApp.properties -# for details. - -errai.marshalling.serializableTypes=org.optaplanner.core.api.score.buildin.bendable.BendableScore \ - org.optaplanner.core.api.score.buildin.bendablebigdecimal.BendableBigDecimalScore \ - org.optaplanner.core.api.score.buildin.bendablelong.BendableLongScore \ - org.optaplanner.core.api.score.buildin.hardmediumsoft.HardMediumSoftScore \ - org.optaplanner.core.api.score.buildin.hardmediumsoftbigdecimal.HardMediumSoftBigDecimalScore \ - org.optaplanner.core.api.score.buildin.hardmediumsoftlong.HardMediumSoftLongScore \ - org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore \ - org.optaplanner.core.api.score.buildin.hardsoftbigdecimal.HardSoftBigDecimalScore \ - org.optaplanner.core.api.score.buildin.hardsoftdouble.HardSoftDoubleScore \ - org.optaplanner.core.api.score.buildin.hardsoftlong.HardSoftLongScore \ - org.optaplanner.core.api.score.buildin.simple.SimpleScore \ - org.optaplanner.core.api.score.buildin.simplebigdecimal.SimpleBigDecimalScore \ - org.optaplanner.core.api.score.buildin.simpledouble.SimpleDoubleScore \ - org.optaplanner.core.api.score.buildin.simplelong.SimpleLongScore \ - org.optaplanner.core.config.constructionheuristic.ConstructionHeuristicType \ - org.optaplanner.core.config.heuristic.selector.entity.EntitySorterManner \ - org.optaplanner.core.config.heuristic.selector.value.ValueSorterManner \ - org.optaplanner.core.config.localsearch.LocalSearchType diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/resources/OptaPlannerWorkbenchCoreAPISourcePaths.gwt.xml b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/resources/OptaPlannerWorkbenchCoreAPISourcePaths.gwt.xml deleted file mode 100644 index bd4062373e..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/resources/OptaPlannerWorkbenchCoreAPISourcePaths.gwt.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/resources/org/optaplanner/workbench/models/core/OptaPlannerWorkbenchCoreAPI.gwt.xml b/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/resources/org/optaplanner/workbench/models/core/OptaPlannerWorkbenchCoreAPI.gwt.xml deleted file mode 100644 index 740bd791db..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-core/src/main/resources/org/optaplanner/workbench/models/core/OptaPlannerWorkbenchCoreAPI.gwt.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/.gitignore b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/.gitignore deleted file mode 100644 index 222af0cf11..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -/target -/local - -# Eclipse, Netbeans and IntelliJ files -/.* -!.gitignore -/nbproject -/*.ipr -/*.iws -/*.iml diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/pom.xml b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/pom.xml deleted file mode 100644 index fc10bed4fd..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - 4.0.0 - - org.optaplanner - optaplanner-workbench-models - 7.75.0-SNAPSHOT - - - optaplanner-workbench-models-datamodel-api - jar - - Drools data model API implementations for OptaPlanner Workbench - - OptaPlanner solves planning problems. - This lightweight, embeddable planning engine implements powerful and scalable algorithms - to optimize business resource scheduling and planning. - - This module provides OptaPlanner implementations of Drools data model interfaces used by OptaPlanner Workbench. - - - - org.optaplanner.workbench.models.datamodel - - - - - org.drools - drools-workbench-models-datamodel-api - - - org.kie.soup - kie-soup-project-datamodel-api - - - - diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/AbstractActionBendableConstraintMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/AbstractActionBendableConstraintMatch.java deleted file mode 100644 index b5947361b4..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/AbstractActionBendableConstraintMatch.java +++ /dev/null @@ -1,65 +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.optaplanner.workbench.models.datamodel.rule; - -public abstract class AbstractActionBendableConstraintMatch extends AbstractActionConstraintMatch { - - protected int position; - - public AbstractActionBendableConstraintMatch() { - } - - public AbstractActionBendableConstraintMatch(final String constraintMatch, - final int position) { - super(constraintMatch); - this.position = position; - } - - public int getPosition() { - return position; - } - - public void setPosition(int position) { - this.position = position; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - if (!super.equals(o)) { - return false; - } - - AbstractActionBendableConstraintMatch that = (AbstractActionBendableConstraintMatch) o; - - return position == that.position; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = ~~result; - result = 31 * result + position; - result = ~~result; - return result; - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/AbstractActionConstraintMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/AbstractActionConstraintMatch.java deleted file mode 100644 index 04968a60cf..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/AbstractActionConstraintMatch.java +++ /dev/null @@ -1,75 +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.optaplanner.workbench.models.datamodel.rule; - -import java.util.Collection; -import java.util.function.Function; - -import org.drools.workbench.models.datamodel.rule.InterpolationVariable; -import org.drools.workbench.models.datamodel.rule.TemplateAware; -import org.optaplanner.workbench.models.datamodel.util.TemplateUtils; - -public abstract class AbstractActionConstraintMatch implements ActionConstraintMatch, - TemplateAware { - - private String constraintMatch; - - public AbstractActionConstraintMatch() { - } - - public AbstractActionConstraintMatch(final String constraintMatch) { - this.constraintMatch = constraintMatch; - } - - public String getConstraintMatch() { - return constraintMatch; - } - - public void setConstraintMatch(String constraintMatch) { - this.constraintMatch = constraintMatch; - } - - @Override - public Collection extractInterpolationVariables() { - return TemplateUtils.extractInterpolationVariables(getConstraintMatch()); - } - - @Override - public void substituteTemplateVariables(Function keyToValueFunction) { - setConstraintMatch(TemplateUtils.substituteTemplateVariable(getConstraintMatch(), - keyToValueFunction)); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - AbstractActionConstraintMatch that = (AbstractActionConstraintMatch) o; - - return constraintMatch != null ? constraintMatch.equals(that.constraintMatch) : that.constraintMatch == null; - } - - @Override - public int hashCode() { - return constraintMatch != null ? constraintMatch.hashCode() : 0; - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/AbstractActionMultiConstraintBendableMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/AbstractActionMultiConstraintBendableMatch.java deleted file mode 100644 index 2fda430efb..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/AbstractActionMultiConstraintBendableMatch.java +++ /dev/null @@ -1,115 +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.optaplanner.workbench.models.datamodel.rule; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.function.Function; - -import org.drools.workbench.models.datamodel.rule.InterpolationVariable; -import org.drools.workbench.models.datamodel.rule.TemplateAware; -import org.optaplanner.workbench.models.datamodel.util.TemplateUtils; - -public abstract class AbstractActionMultiConstraintBendableMatch implements ActionConstraintMatch, - TemplateAware { - - private List actionBendableHardConstraintMatches; - - private List actionBendableSoftConstraintMatches; - - public AbstractActionMultiConstraintBendableMatch() { - } - - public AbstractActionMultiConstraintBendableMatch(final List actionBendableHardConstraintMatches, - final List actionBendableSoftConstraintMatches) { - this.actionBendableHardConstraintMatches = actionBendableHardConstraintMatches; - this.actionBendableSoftConstraintMatches = actionBendableSoftConstraintMatches; - } - - public List getActionBendableHardConstraintMatches() { - return actionBendableHardConstraintMatches; - } - - public void setActionBendableHardConstraintMatches(List actionBendableHardConstraintMatches) { - this.actionBendableHardConstraintMatches = actionBendableHardConstraintMatches; - } - - public List getActionBendableSoftConstraintMatches() { - return actionBendableSoftConstraintMatches; - } - - public void setActionBendableSoftConstraintMatches(List actionBendableSoftConstraintMatches) { - this.actionBendableSoftConstraintMatches = actionBendableSoftConstraintMatches; - } - - @Override - public Collection extractInterpolationVariables() { - List interpolationVariableList = new ArrayList<>(); - if (getActionBendableHardConstraintMatches() != null) { - for (ActionBendableHardConstraintMatch hardConstraintMatch : getActionBendableHardConstraintMatches()) { - interpolationVariableList.addAll(TemplateUtils.extractInterpolationVariables(hardConstraintMatch.getConstraintMatch())); - } - } - if (getActionBendableSoftConstraintMatches() != null) { - for (ActionBendableSoftConstraintMatch softConstraintMatch : getActionBendableSoftConstraintMatches()) { - interpolationVariableList.addAll(TemplateUtils.extractInterpolationVariables(softConstraintMatch.getConstraintMatch())); - } - } - return interpolationVariableList; - } - - @Override - public void substituteTemplateVariables(Function keyToValueFunction) { - if (getActionBendableHardConstraintMatches() != null) { - for (ActionBendableHardConstraintMatch hardConstraintMatch : getActionBendableHardConstraintMatches()) { - hardConstraintMatch.substituteTemplateVariables(keyToValueFunction); - } - } - if (getActionBendableSoftConstraintMatches() != null) { - for (ActionBendableSoftConstraintMatch softConstraintMatch : getActionBendableSoftConstraintMatches()) { - softConstraintMatch.substituteTemplateVariables(keyToValueFunction); - } - } - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - AbstractActionMultiConstraintBendableMatch that = (AbstractActionMultiConstraintBendableMatch) o; - - if (actionBendableHardConstraintMatches != null ? !actionBendableHardConstraintMatches.equals(that.actionBendableHardConstraintMatches) : that.actionBendableHardConstraintMatches != null) { - return false; - } - return actionBendableSoftConstraintMatches != null ? actionBendableSoftConstraintMatches.equals(that.actionBendableSoftConstraintMatches) : that.actionBendableSoftConstraintMatches == null; - } - - @Override - public int hashCode() { - int result = actionBendableHardConstraintMatches != null ? actionBendableHardConstraintMatches.hashCode() : 0; - result = ~~result; - result = 31 * result + (actionBendableSoftConstraintMatches != null ? actionBendableSoftConstraintMatches.hashCode() : 0); - result = ~~result; - return result; - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionBendableHardConstraintMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionBendableHardConstraintMatch.java deleted file mode 100644 index 12e7032431..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionBendableHardConstraintMatch.java +++ /dev/null @@ -1,73 +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.optaplanner.workbench.models.datamodel.rule; - -import org.drools.workbench.models.datamodel.rule.TemplateAware; - -public class ActionBendableHardConstraintMatch extends AbstractActionBendableConstraintMatch { - - public ActionBendableHardConstraintMatch() { - } - - public ActionBendableHardConstraintMatch(final int position, - final String constraintMatch) { - super(constraintMatch, - position); - } - - @Override - public TemplateAware cloneTemplateAware() { - return new ActionBendableHardConstraintMatch(getPosition(), - getConstraintMatch()); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - if (!super.equals(o)) { - return false; - } - - ActionBendableHardConstraintMatch that = (ActionBendableHardConstraintMatch) o; - - return position == that.position; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = ~~result; - result = 31 * result + position; - result = ~~result; - return result; - } - - @Override - public String getStringRepresentation() { - return new StringBuilder() - .append("scoreHolder.addHardConstraintMatch(kcontext, ") - .append(getPosition()) - .append(", ") - .append(getConstraintMatch()) - .append(")").toString(); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionBendableSoftConstraintMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionBendableSoftConstraintMatch.java deleted file mode 100644 index 757e432d26..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionBendableSoftConstraintMatch.java +++ /dev/null @@ -1,73 +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.optaplanner.workbench.models.datamodel.rule; - -import org.drools.workbench.models.datamodel.rule.TemplateAware; - -public class ActionBendableSoftConstraintMatch extends AbstractActionBendableConstraintMatch { - - public ActionBendableSoftConstraintMatch() { - } - - public ActionBendableSoftConstraintMatch(final int position, - final String constraintMatch) { - super(constraintMatch, - position); - } - - @Override - public TemplateAware cloneTemplateAware() { - return new ActionBendableSoftConstraintMatch(getPosition(), - getConstraintMatch()); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - if (!super.equals(o)) { - return false; - } - - ActionBendableSoftConstraintMatch that = (ActionBendableSoftConstraintMatch) o; - - return position == that.position; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = ~~result; - result = 31 * result + position; - result = ~~result; - return result; - } - - @Override - public String getStringRepresentation() { - return new StringBuilder() - .append("scoreHolder.addSoftConstraintMatch(kcontext, ") - .append(getPosition()) - .append(", ") - .append(getConstraintMatch()) - .append(")").toString(); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionConstraintMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionConstraintMatch.java deleted file mode 100644 index a06e1a5ec1..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionConstraintMatch.java +++ /dev/null @@ -1,23 +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.optaplanner.workbench.models.datamodel.rule; - -import org.drools.workbench.models.datamodel.rule.PluggableIAction; - -public interface ActionConstraintMatch extends PluggableIAction { - -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionHardConstraintMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionHardConstraintMatch.java deleted file mode 100644 index 4818d3d246..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionHardConstraintMatch.java +++ /dev/null @@ -1,41 +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.optaplanner.workbench.models.datamodel.rule; - -import org.drools.workbench.models.datamodel.rule.TemplateAware; - -public class ActionHardConstraintMatch extends AbstractActionConstraintMatch { - - public ActionHardConstraintMatch() { - } - - public ActionHardConstraintMatch(final String constraintMatch) { - super(constraintMatch); - } - - @Override - public TemplateAware cloneTemplateAware() { - return new ActionHardConstraintMatch(getConstraintMatch()); - } - - @Override - public String getStringRepresentation() { - return new StringBuilder() - .append("scoreHolder.addHardConstraintMatch(kcontext, ") - .append(getConstraintMatch()) - .append(")").toString(); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMediumConstraintMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMediumConstraintMatch.java deleted file mode 100644 index ee50bace12..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMediumConstraintMatch.java +++ /dev/null @@ -1,42 +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.optaplanner.workbench.models.datamodel.rule; - -import org.drools.workbench.models.datamodel.rule.TemplateAware; - -public class ActionMediumConstraintMatch extends AbstractActionConstraintMatch { - - public ActionMediumConstraintMatch() { - } - - public ActionMediumConstraintMatch(final String constraintMatch) { - super(constraintMatch); - } - - @Override - public TemplateAware cloneTemplateAware() { - return new ActionMediumConstraintMatch(getConstraintMatch()); - } - - @Override - public String getStringRepresentation() { - return new StringBuilder() - .append("scoreHolder.addMediumConstraintMatch(kcontext, ") - .append(getConstraintMatch()) - .append(")").toString(); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintBendableBigDecimalMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintBendableBigDecimalMatch.java deleted file mode 100644 index 2f592e488b..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintBendableBigDecimalMatch.java +++ /dev/null @@ -1,50 +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.optaplanner.workbench.models.datamodel.rule; - -import java.util.List; -import java.util.stream.Collectors; - -import org.drools.workbench.models.datamodel.rule.TemplateAware; - -public class ActionMultiConstraintBendableBigDecimalMatch extends AbstractActionMultiConstraintBendableMatch { - - public ActionMultiConstraintBendableBigDecimalMatch() { - } - - public ActionMultiConstraintBendableBigDecimalMatch(final List actionBendableHardConstraintMatches, - final List actionBendableSoftConstraintMatches) { - super(actionBendableHardConstraintMatches, - actionBendableSoftConstraintMatches); - } - - @Override - public TemplateAware cloneTemplateAware() { - return new ActionMultiConstraintBendableBigDecimalMatch(getActionBendableHardConstraintMatches().stream().map(m -> (ActionBendableHardConstraintMatch) m.cloneTemplateAware()).collect(Collectors.toList()), - getActionBendableSoftConstraintMatches().stream().map(m -> (ActionBendableSoftConstraintMatch) m.cloneTemplateAware()).collect(Collectors.toList())); - } - - @Override - public String getStringRepresentation() { - return new StringBuilder() - .append("scoreHolder.addMultiConstraintMatch(kcontext, new java.math.BigDecimal[] {") - .append(getActionBendableHardConstraintMatches().stream().map(m -> m.getConstraintMatch()).collect(Collectors.joining(", "))) - .append("}, new java.math.BigDecimal[] {") - .append(getActionBendableSoftConstraintMatches().stream().map(m -> m.getConstraintMatch()).collect(Collectors.joining(", "))) - .append("})").toString(); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintBendableLongMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintBendableLongMatch.java deleted file mode 100644 index f7667368c6..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintBendableLongMatch.java +++ /dev/null @@ -1,50 +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.optaplanner.workbench.models.datamodel.rule; - -import java.util.List; -import java.util.stream.Collectors; - -import org.drools.workbench.models.datamodel.rule.TemplateAware; - -public class ActionMultiConstraintBendableLongMatch extends AbstractActionMultiConstraintBendableMatch { - - public ActionMultiConstraintBendableLongMatch() { - } - - public ActionMultiConstraintBendableLongMatch(final List actionBendableHardConstraintMatches, - final List actionBendableSoftConstraintMatches) { - super(actionBendableHardConstraintMatches, - actionBendableSoftConstraintMatches); - } - - @Override - public TemplateAware cloneTemplateAware() { - return new ActionMultiConstraintBendableLongMatch(getActionBendableHardConstraintMatches().stream().map(m -> (ActionBendableHardConstraintMatch) m.cloneTemplateAware()).collect(Collectors.toList()), - getActionBendableSoftConstraintMatches().stream().map(m -> (ActionBendableSoftConstraintMatch) m.cloneTemplateAware()).collect(Collectors.toList())); - } - - @Override - public String getStringRepresentation() { - return new StringBuilder() - .append("scoreHolder.addMultiConstraintMatch(kcontext, new long[] {") - .append(getActionBendableHardConstraintMatches().stream().map(m -> m.getConstraintMatch()).collect(Collectors.joining(", "))) - .append("}, new long[] {") - .append(getActionBendableSoftConstraintMatches().stream().map(m -> m.getConstraintMatch()).collect(Collectors.joining(", "))) - .append("})").toString(); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintBendableMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintBendableMatch.java deleted file mode 100644 index ee769422e0..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintBendableMatch.java +++ /dev/null @@ -1,50 +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.optaplanner.workbench.models.datamodel.rule; - -import java.util.List; -import java.util.stream.Collectors; - -import org.drools.workbench.models.datamodel.rule.TemplateAware; - -public class ActionMultiConstraintBendableMatch extends AbstractActionMultiConstraintBendableMatch { - - public ActionMultiConstraintBendableMatch() { - } - - public ActionMultiConstraintBendableMatch(final List actionBendableHardConstraintMatches, - final List actionBendableSoftConstraintMatches) { - super(actionBendableHardConstraintMatches, - actionBendableSoftConstraintMatches); - } - - @Override - public TemplateAware cloneTemplateAware() { - return new ActionMultiConstraintBendableMatch(getActionBendableHardConstraintMatches().stream().map(m -> (ActionBendableHardConstraintMatch) m.cloneTemplateAware()).collect(Collectors.toList()), - getActionBendableSoftConstraintMatches().stream().map(m -> (ActionBendableSoftConstraintMatch) m.cloneTemplateAware()).collect(Collectors.toList())); - } - - @Override - public String getStringRepresentation() { - return new StringBuilder() - .append("scoreHolder.addMultiConstraintMatch(kcontext, new int[] {") - .append(getActionBendableHardConstraintMatches().stream().map(m -> m.getConstraintMatch()).collect(Collectors.joining(", "))) - .append("}, new int[] {") - .append(getActionBendableSoftConstraintMatches().stream().map(m -> m.getConstraintMatch()).collect(Collectors.joining(", "))) - .append("})").toString(); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintHardMediumSoftMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintHardMediumSoftMatch.java deleted file mode 100644 index 0a2316d7e6..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintHardMediumSoftMatch.java +++ /dev/null @@ -1,137 +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.optaplanner.workbench.models.datamodel.rule; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.function.Function; - -import org.drools.workbench.models.datamodel.rule.InterpolationVariable; -import org.drools.workbench.models.datamodel.rule.TemplateAware; -import org.optaplanner.workbench.models.datamodel.util.TemplateUtils; - -public class ActionMultiConstraintHardMediumSoftMatch implements ActionConstraintMatch, - TemplateAware { - - private ActionHardConstraintMatch actionHardConstraintMatch; - - private ActionMediumConstraintMatch actionMediumConstraintMatch; - - private ActionSoftConstraintMatch actionSoftConstraintMatch; - - public ActionMultiConstraintHardMediumSoftMatch() { - } - - public ActionMultiConstraintHardMediumSoftMatch(final ActionHardConstraintMatch actionHardConstraintMatch, - final ActionMediumConstraintMatch actionMediumConstraintMatch, - final ActionSoftConstraintMatch actionSoftConstraintMatch) { - this.actionHardConstraintMatch = actionHardConstraintMatch; - this.actionMediumConstraintMatch = actionMediumConstraintMatch; - this.actionSoftConstraintMatch = actionSoftConstraintMatch; - } - - public ActionHardConstraintMatch getActionHardConstraintMatch() { - return actionHardConstraintMatch; - } - - public void setActionHardConstraintMatch(ActionHardConstraintMatch actionHardConstraintMatch) { - this.actionHardConstraintMatch = actionHardConstraintMatch; - } - - public ActionMediumConstraintMatch getActionMediumConstraintMatch() { - return actionMediumConstraintMatch; - } - - public void setActionMediumConstraintMatch(ActionMediumConstraintMatch actionMediumConstraintMatch) { - this.actionMediumConstraintMatch = actionMediumConstraintMatch; - } - - public ActionSoftConstraintMatch getActionSoftConstraintMatch() { - return actionSoftConstraintMatch; - } - - public void setActionSoftConstraintMatch(ActionSoftConstraintMatch actionSoftConstraintMatch) { - this.actionSoftConstraintMatch = actionSoftConstraintMatch; - } - - @Override - public Collection extractInterpolationVariables() { - List interpolationVariableList = new ArrayList<>(); - interpolationVariableList.addAll(TemplateUtils.extractInterpolationVariables(getActionHardConstraintMatch().getConstraintMatch())); - interpolationVariableList.addAll(TemplateUtils.extractInterpolationVariables(getActionMediumConstraintMatch().getConstraintMatch())); - interpolationVariableList.addAll(TemplateUtils.extractInterpolationVariables(getActionSoftConstraintMatch().getConstraintMatch())); - return interpolationVariableList; - } - - @Override - public void substituteTemplateVariables(final Function keyToValueFunction) { - getActionHardConstraintMatch().substituteTemplateVariables(keyToValueFunction); - getActionMediumConstraintMatch().substituteTemplateVariables(keyToValueFunction); - getActionSoftConstraintMatch().substituteTemplateVariables(keyToValueFunction); - } - - @Override - public TemplateAware cloneTemplateAware() { - return new ActionMultiConstraintHardMediumSoftMatch(new ActionHardConstraintMatch(getActionHardConstraintMatch().getConstraintMatch()), - new ActionMediumConstraintMatch(getActionMediumConstraintMatch().getConstraintMatch()), - new ActionSoftConstraintMatch(getActionSoftConstraintMatch().getConstraintMatch())); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - ActionMultiConstraintHardMediumSoftMatch that = (ActionMultiConstraintHardMediumSoftMatch) o; - - if (actionHardConstraintMatch != null ? !actionHardConstraintMatch.equals(that.actionHardConstraintMatch) : that.actionHardConstraintMatch != null) { - return false; - } - if (actionMediumConstraintMatch != null ? !actionMediumConstraintMatch.equals(that.actionMediumConstraintMatch) : that.actionMediumConstraintMatch != null) { - return false; - } - return actionSoftConstraintMatch != null ? actionSoftConstraintMatch.equals(that.actionSoftConstraintMatch) : that.actionSoftConstraintMatch == null; - } - - @Override - public int hashCode() { - int result = actionHardConstraintMatch != null ? actionHardConstraintMatch.hashCode() : 0; - result = ~~result; - result = 31 * result + (actionMediumConstraintMatch != null ? actionMediumConstraintMatch.hashCode() : 0); - result = ~~result; - result = 31 * result + (actionSoftConstraintMatch != null ? actionSoftConstraintMatch.hashCode() : 0); - result = ~~result; - return result; - } - - @Override - public String getStringRepresentation() { - return new StringBuilder() - .append("scoreHolder.addMultiConstraintMatch(kcontext, ") - .append(getActionHardConstraintMatch().getConstraintMatch()) - .append(", ") - .append(getActionMediumConstraintMatch().getConstraintMatch()) - .append(", ") - .append(getActionSoftConstraintMatch().getConstraintMatch()) - .append(")").toString(); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintHardSoftMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintHardSoftMatch.java deleted file mode 100644 index fb6036092b..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionMultiConstraintHardSoftMatch.java +++ /dev/null @@ -1,107 +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.optaplanner.workbench.models.datamodel.rule; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.function.Function; - -import org.drools.workbench.models.datamodel.rule.InterpolationVariable; -import org.drools.workbench.models.datamodel.rule.TemplateAware; -import org.optaplanner.workbench.models.datamodel.util.TemplateUtils; - -public class ActionMultiConstraintHardSoftMatch implements ActionConstraintMatch, - TemplateAware { - - private ActionHardConstraintMatch actionHardConstraintMatch; - - private ActionSoftConstraintMatch actionSoftConstraintMatch; - - public ActionMultiConstraintHardSoftMatch() { - } - - public ActionMultiConstraintHardSoftMatch(final ActionHardConstraintMatch actionHardConstraintMatch, - final ActionSoftConstraintMatch actionSoftConstraintMatch) { - this.actionHardConstraintMatch = actionHardConstraintMatch; - this.actionSoftConstraintMatch = actionSoftConstraintMatch; - } - - public ActionHardConstraintMatch getActionHardConstraintMatch() { - return actionHardConstraintMatch; - } - - public ActionSoftConstraintMatch getActionSoftConstraintMatch() { - return actionSoftConstraintMatch; - } - - @Override - public Collection extractInterpolationVariables() { - List interpolationVariableList = new ArrayList<>(); - interpolationVariableList.addAll(TemplateUtils.extractInterpolationVariables(getActionHardConstraintMatch().getConstraintMatch())); - interpolationVariableList.addAll(TemplateUtils.extractInterpolationVariables(getActionSoftConstraintMatch().getConstraintMatch())); - return interpolationVariableList; - } - - @Override - public void substituteTemplateVariables(final Function keyToValueFunction) { - getActionHardConstraintMatch().substituteTemplateVariables(keyToValueFunction); - getActionSoftConstraintMatch().substituteTemplateVariables(keyToValueFunction); - } - - @Override - public TemplateAware cloneTemplateAware() { - return new ActionMultiConstraintHardSoftMatch(new ActionHardConstraintMatch(getActionHardConstraintMatch().getConstraintMatch()), - new ActionSoftConstraintMatch(getActionSoftConstraintMatch().getConstraintMatch())); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - ActionMultiConstraintHardSoftMatch that = (ActionMultiConstraintHardSoftMatch) o; - - if (actionHardConstraintMatch != null ? !actionHardConstraintMatch.equals(that.actionHardConstraintMatch) : that.actionHardConstraintMatch != null) { - return false; - } - return actionSoftConstraintMatch != null ? actionSoftConstraintMatch.equals(that.actionSoftConstraintMatch) : that.actionSoftConstraintMatch == null; - } - - @Override - public int hashCode() { - int result = actionHardConstraintMatch != null ? actionHardConstraintMatch.hashCode() : 0; - result = ~~result; - result = 31 * result + (actionSoftConstraintMatch != null ? actionSoftConstraintMatch.hashCode() : 0); - result = ~~result; - return result; - } - - @Override - public String getStringRepresentation() { - return new StringBuilder() - .append("scoreHolder.addMultiConstraintMatch(kcontext, ") - .append(getActionHardConstraintMatch().getConstraintMatch()) - .append(", ") - .append(getActionSoftConstraintMatch().getConstraintMatch()) - .append(")").toString(); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionSimpleConstraintMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionSimpleConstraintMatch.java deleted file mode 100644 index b61672f5e6..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionSimpleConstraintMatch.java +++ /dev/null @@ -1,42 +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.optaplanner.workbench.models.datamodel.rule; - -import org.drools.workbench.models.datamodel.rule.TemplateAware; - -public class ActionSimpleConstraintMatch extends AbstractActionConstraintMatch { - - public ActionSimpleConstraintMatch() { - } - - public ActionSimpleConstraintMatch(final String constraintMatch) { - super(constraintMatch); - } - - @Override - public TemplateAware cloneTemplateAware() { - return new ActionSimpleConstraintMatch(getConstraintMatch()); - } - - @Override - public String getStringRepresentation() { - return new StringBuilder() - .append("scoreHolder.addConstraintMatch(kcontext, ") - .append(getConstraintMatch()) - .append(")").toString(); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionSoftConstraintMatch.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionSoftConstraintMatch.java deleted file mode 100644 index f26c6db2c6..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/rule/ActionSoftConstraintMatch.java +++ /dev/null @@ -1,42 +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.optaplanner.workbench.models.datamodel.rule; - -import org.drools.workbench.models.datamodel.rule.TemplateAware; - -public class ActionSoftConstraintMatch extends AbstractActionConstraintMatch { - - public ActionSoftConstraintMatch() { - } - - public ActionSoftConstraintMatch(final String constraintMatch) { - super(constraintMatch); - } - - @Override - public TemplateAware cloneTemplateAware() { - return new ActionSoftConstraintMatch(getConstraintMatch()); - } - - @Override - public String getStringRepresentation() { - return new StringBuilder() - .append("scoreHolder.addSoftConstraintMatch(kcontext, ") - .append(getConstraintMatch()) - .append(")").toString(); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/util/TemplateUtils.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/util/TemplateUtils.java deleted file mode 100644 index 5631b1e51e..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/java/org/optaplanner/workbench/models/datamodel/util/TemplateUtils.java +++ /dev/null @@ -1,86 +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.optaplanner.workbench.models.datamodel.util; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.function.Function; - -import org.drools.workbench.models.datamodel.rule.InterpolationVariable; -import org.kie.soup.project.datamodel.oracle.DataType; - -public final class TemplateUtils { - - private TemplateUtils() { - } - - public static Collection extractInterpolationVariables(final String text) { - if (text == null || text.length() == 0) { - return Collections.emptyList(); - } - List interpolationVariableList = new ArrayList<>(); - int pos = 0; - while ((pos = text.indexOf("@{", - pos)) != -1) { - int end = text.indexOf('}', - pos + 2); - if (end != -1) { - String varName = text.substring(pos + 2, - end); - pos = end + 1; - InterpolationVariable var = new InterpolationVariable(varName, - DataType.TYPE_OBJECT); - interpolationVariableList.add(var); - } else { - break; - } - } - return interpolationVariableList; - } - - public static String substituteTemplateVariable(final String text, - final Function keyToValueFunction) { - if (text == null || text.isEmpty()) { - return text; - } - - StringBuilder resultBuilder = new StringBuilder(text); - - int pos; - while ((pos = resultBuilder.indexOf("@{")) != -1) { - int end = resultBuilder.indexOf("}", - pos + 2); - if (end != -1) { - final String varName = resultBuilder.substring(pos + 2, - end); - final String value = keyToValueFunction.apply(varName); - if (value == null) { - return text; - } - resultBuilder.replace(pos, - end + 1, - value); - } else { - break; - } - } - - return resultBuilder.toString(); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/resources/META-INF/ErraiApp.properties b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/resources/META-INF/ErraiApp.properties deleted file mode 100644 index ac9a26b9ad..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/resources/META-INF/ErraiApp.properties +++ /dev/null @@ -1,42 +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. -# - -# ErraiApp.properties -# -# Do not remove, even if empty! -# - -# This is a marker file. When it is detected inside a JAR or at the -# top of any classpath, the subdirectories are scanned for deployable -# components. As such, all Errai application modules in a project -# should contain an ErraiApp.properties at the root of all classpaths -# that you wish to be scanned. -# -# There are also some configuration options that can be set in this -# file, although it is rarely necessary. See the documentation at -# https://docs.jboss.org/author/display/ERRAI/ErraiApp.properties -# for details. -errai.marshalling.serializableTypes=org.optaplanner.workbench.models.datamodel.rule.ActionBendableHardConstraintMatch \ - org.optaplanner.workbench.models.datamodel.rule.ActionBendableSoftConstraintMatch \ - org.optaplanner.workbench.models.datamodel.rule.ActionHardConstraintMatch \ - org.optaplanner.workbench.models.datamodel.rule.ActionMediumConstraintMatch \ - org.optaplanner.workbench.models.datamodel.rule.ActionMultiConstraintBendableBigDecimalMatch \ - org.optaplanner.workbench.models.datamodel.rule.ActionMultiConstraintBendableLongMatch \ - org.optaplanner.workbench.models.datamodel.rule.ActionMultiConstraintBendableMatch \ - org.optaplanner.workbench.models.datamodel.rule.ActionMultiConstraintHardMediumSoftMatch \ - org.optaplanner.workbench.models.datamodel.rule.ActionMultiConstraintHardSoftMatch \ - org.optaplanner.workbench.models.datamodel.rule.ActionSimpleConstraintMatch \ - org.optaplanner.workbench.models.datamodel.rule.ActionSoftConstraintMatch \ No newline at end of file diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/resources/org/optaplanner/workbench/models/datamodel/OptaplannerWorkbenchDataModelAPI.gwt.xml b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/resources/org/optaplanner/workbench/models/datamodel/OptaplannerWorkbenchDataModelAPI.gwt.xml deleted file mode 100644 index 29a8167744..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/main/resources/org/optaplanner/workbench/models/datamodel/OptaplannerWorkbenchDataModelAPI.gwt.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/test/java/org/optaplanner/workbench/models/datamodel/rule/ActionConstraintMatchTest.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/test/java/org/optaplanner/workbench/models/datamodel/rule/ActionConstraintMatchTest.java deleted file mode 100644 index 985e8fe387..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/test/java/org/optaplanner/workbench/models/datamodel/rule/ActionConstraintMatchTest.java +++ /dev/null @@ -1,625 +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.optaplanner.workbench.models.datamodel.rule; - -import org.drools.workbench.models.datamodel.rule.IAction; -import org.drools.workbench.models.datamodel.rule.InterpolationVariable; -import org.junit.Test; -import org.kie.soup.project.datamodel.oracle.DataType; - -import java.util.Arrays; -import java.util.Collection; -import java.util.function.Function; - -import static org.junit.Assert.*; - -public class ActionConstraintMatchTest { - - @Test - public void extractInterpolationVariablesActionHardConstraintMatch() { - ActionHardConstraintMatch constraintMatch = new ActionHardConstraintMatch("foo bar @{var1}"); - - extractInterpolationVariablesAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void extractInterpolationVariablesActionSoftConstraintMatch() { - ActionSoftConstraintMatch constraintMatch = new ActionSoftConstraintMatch("foo bar @{var1}"); - - extractInterpolationVariablesAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void extractInterpolationVariablesActionMediumConstraintMatch() { - ActionMediumConstraintMatch constraintMatch = new ActionMediumConstraintMatch("foo bar @{var1}"); - - extractInterpolationVariablesAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void extractInterpolationVariablesActionSimpleConstraintMatch() { - ActionSimpleConstraintMatch constraintMatch = new ActionSimpleConstraintMatch("foo bar @{var1}"); - - extractInterpolationVariablesAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void extractInterpolationVariablesActionBendableHardConstraintMatch() { - ActionBendableHardConstraintMatch constraintMatch = new ActionBendableHardConstraintMatch(0, - "foo bar @{var1}"); - - extractInterpolationVariablesAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void extractInterpolationVariablesActionBendableSoftConstraintMatch() { - ActionBendableSoftConstraintMatch constraintMatch = new ActionBendableSoftConstraintMatch(0, - "foo bar @{var1}"); - - extractInterpolationVariablesAbstractActionConstraintMatch(constraintMatch); - } - - private void extractInterpolationVariablesAbstractActionConstraintMatch(final AbstractActionConstraintMatch constraintMatch) { - Collection interpolationVariables = constraintMatch.extractInterpolationVariables(); - - assertEquals(1, - interpolationVariables.size()); - assertTrue(interpolationVariables.contains(new InterpolationVariable("var1", - DataType.TYPE_OBJECT))); - } - - @Test - public void extractInterpolationVariablesActionMultiConstraintHardSoftMatch() { - ActionHardConstraintMatch hardConstraintMatch = new ActionHardConstraintMatch("foo bar @{var1}"); - ActionSoftConstraintMatch softConstraintMatch = new ActionSoftConstraintMatch("foo bar @{var2}"); - - ActionMultiConstraintHardSoftMatch multiConstraintHardSoftMatch = new ActionMultiConstraintHardSoftMatch(hardConstraintMatch, - softConstraintMatch); - - Collection interpolationVariables = multiConstraintHardSoftMatch.extractInterpolationVariables(); - - assertEquals(2, - interpolationVariables.size()); - assertTrue(interpolationVariables.contains(new InterpolationVariable("var1", - DataType.TYPE_OBJECT))); - assertTrue(interpolationVariables.contains(new InterpolationVariable("var2", - DataType.TYPE_OBJECT))); - } - - @Test - public void extractInterpolationVariablesActionMultiConstraintHardMediumSoftMatch() { - ActionHardConstraintMatch hardConstraintMatch = new ActionHardConstraintMatch("foo bar @{var1}"); - ActionMediumConstraintMatch mediumConstraintMatch = new ActionMediumConstraintMatch("foo bar @{var2}"); - ActionSoftConstraintMatch softConstraintMatch = new ActionSoftConstraintMatch("foo bar @{var3}"); - - ActionMultiConstraintHardMediumSoftMatch multiConstraintHardSoftMatch = new ActionMultiConstraintHardMediumSoftMatch(hardConstraintMatch, - mediumConstraintMatch, - softConstraintMatch); - - Collection interpolationVariables = multiConstraintHardSoftMatch.extractInterpolationVariables(); - - assertEquals(3, - interpolationVariables.size()); - assertTrue(interpolationVariables.contains(new InterpolationVariable("var1", - DataType.TYPE_OBJECT))); - assertTrue(interpolationVariables.contains(new InterpolationVariable("var2", - DataType.TYPE_OBJECT))); - assertTrue(interpolationVariables.contains(new InterpolationVariable("var3", - DataType.TYPE_OBJECT))); - } - - @Test - public void extractInterpolationVariablesActionMultiConstraintBendableMatch() { - ActionBendableHardConstraintMatch bendableHardConstraintMatch = new ActionBendableHardConstraintMatch(0, - "foo bar @{var1}"); - ActionBendableSoftConstraintMatch bendableSoftConstraintMatch = new ActionBendableSoftConstraintMatch(0, - "foo bar @{var2}"); - - ActionMultiConstraintBendableMatch multiConstraintBendableMatch = new ActionMultiConstraintBendableMatch(Arrays.asList(bendableHardConstraintMatch), - Arrays.asList(bendableSoftConstraintMatch)); - - extractInterpolationVariablesAbstractActionMultiConstraintBendableMatch(multiConstraintBendableMatch); - } - - @Test - public void extractInterpolationVariablesActionMultiConstraintBendableLongMatch() { - ActionBendableHardConstraintMatch bendableHardConstraintMatch = new ActionBendableHardConstraintMatch(0, - "foo bar @{var1}"); - ActionBendableSoftConstraintMatch bendableSoftConstraintMatch = new ActionBendableSoftConstraintMatch(0, - "foo bar @{var2}"); - - ActionMultiConstraintBendableLongMatch multiConstraintBendableMatch = new ActionMultiConstraintBendableLongMatch(Arrays.asList(bendableHardConstraintMatch), - Arrays.asList(bendableSoftConstraintMatch)); - - extractInterpolationVariablesAbstractActionMultiConstraintBendableMatch(multiConstraintBendableMatch); - } - - @Test - public void extractInterpolationVariablesActionMultiConstraintBendableBigDecimalMatch() { - ActionBendableHardConstraintMatch bendableHardConstraintMatch = new ActionBendableHardConstraintMatch(0, - "foo bar @{var1}"); - ActionBendableSoftConstraintMatch bendableSoftConstraintMatch = new ActionBendableSoftConstraintMatch(0, - "foo bar @{var2}"); - - ActionMultiConstraintBendableBigDecimalMatch multiConstraintBendableMatch = new ActionMultiConstraintBendableBigDecimalMatch(Arrays.asList(bendableHardConstraintMatch), - Arrays.asList(bendableSoftConstraintMatch)); - - extractInterpolationVariablesAbstractActionMultiConstraintBendableMatch(multiConstraintBendableMatch); - } - - private void extractInterpolationVariablesAbstractActionMultiConstraintBendableMatch(final AbstractActionMultiConstraintBendableMatch constraintMatch) { - Collection interpolationVariables = constraintMatch.extractInterpolationVariables(); - - assertEquals(2, - interpolationVariables.size()); - assertTrue(interpolationVariables.contains(new InterpolationVariable("var1", - DataType.TYPE_OBJECT))); - assertTrue(interpolationVariables.contains(new InterpolationVariable("var2", - DataType.TYPE_OBJECT))); - } - - @Test - public void substituteTemplateVariablesActionHardConstraintMatch() { - ActionHardConstraintMatch constraintMatch = new ActionHardConstraintMatch("foo bar @{var1}"); - - substituteTemplateVariablesAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void substituteTemplateVariablesActionSoftConstraintMatch() { - ActionSoftConstraintMatch constraintMatch = new ActionSoftConstraintMatch("foo bar @{var1}"); - - substituteTemplateVariablesAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void substituteTemplateVariablesActionMediumConstraintMatch() { - ActionMediumConstraintMatch constraintMatch = new ActionMediumConstraintMatch("foo bar @{var1}"); - - substituteTemplateVariablesAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void substituteTemplateVariablesActionSimpleConstraintMatch() { - ActionSimpleConstraintMatch constraintMatch = new ActionSimpleConstraintMatch("foo bar @{var1}"); - - constraintMatch.substituteTemplateVariables(getKeyToValueFunction()); - - substituteTemplateVariablesAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void substituteTemplateVariablesActionBendableHardConstraintMatch() { - ActionBendableHardConstraintMatch constraintMatch = new ActionBendableHardConstraintMatch(0, - "foo bar @{var1}"); - - substituteTemplateVariablesAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void substituteTemplateVariablesActionBendableSoftConstraintMatch() { - ActionBendableSoftConstraintMatch constraintMatch = new ActionBendableSoftConstraintMatch(0, - "foo bar @{var1}"); - - substituteTemplateVariablesAbstractActionConstraintMatch(constraintMatch); - } - - private void substituteTemplateVariablesAbstractActionConstraintMatch(final AbstractActionConstraintMatch constraintMatch) { - constraintMatch.substituteTemplateVariables(getKeyToValueFunction()); - - assertEquals("foo bar val1", - constraintMatch.getConstraintMatch()); - } - - @Test - public void substituteTemplateVariablesActionMultiConstraintHardSoftMatch() { - ActionHardConstraintMatch hardConstraintMatch = new ActionHardConstraintMatch("foo bar @{var1}"); - ActionSoftConstraintMatch softConstraintMatch = new ActionSoftConstraintMatch("foo bar @{var2}"); - - ActionMultiConstraintHardSoftMatch multiConstraintHardSoftMatch = new ActionMultiConstraintHardSoftMatch(hardConstraintMatch, - softConstraintMatch); - - multiConstraintHardSoftMatch.substituteTemplateVariables(getKeyToValueFunction()); - - assertEquals("foo bar val1", - multiConstraintHardSoftMatch.getActionHardConstraintMatch().getConstraintMatch()); - assertEquals("foo bar val2", - multiConstraintHardSoftMatch.getActionSoftConstraintMatch().getConstraintMatch()); - } - - @Test - public void substituteTemplateVariablesActionMultiConstraintHardMediumSoftMatch() { - ActionHardConstraintMatch hardConstraintMatch = new ActionHardConstraintMatch("foo bar @{var1}"); - ActionMediumConstraintMatch mediumConstraintMatch = new ActionMediumConstraintMatch("foo bar @{var2}"); - ActionSoftConstraintMatch softConstraintMatch = new ActionSoftConstraintMatch("foo bar @{var3}"); - - ActionMultiConstraintHardMediumSoftMatch multiConstraintHardSoftMatch = new ActionMultiConstraintHardMediumSoftMatch(hardConstraintMatch, - mediumConstraintMatch, - softConstraintMatch); - - multiConstraintHardSoftMatch.substituteTemplateVariables(getKeyToValueFunction()); - - assertEquals("foo bar val1", - multiConstraintHardSoftMatch.getActionHardConstraintMatch().getConstraintMatch()); - assertEquals("foo bar val2", - multiConstraintHardSoftMatch.getActionMediumConstraintMatch().getConstraintMatch()); - assertEquals("foo bar val3", - multiConstraintHardSoftMatch.getActionSoftConstraintMatch().getConstraintMatch()); - } - - @Test - public void substituteTemplateVariablesActionMultiConstraintBendableMatch() { - ActionBendableHardConstraintMatch bendableHardConstraintMatch = new ActionBendableHardConstraintMatch(0, - "foo bar @{var1}"); - ActionBendableSoftConstraintMatch bendableSoftConstraintMatch = new ActionBendableSoftConstraintMatch(0, - "foo bar @{var2}"); - - ActionMultiConstraintBendableMatch multiConstraintBendableMatch = new ActionMultiConstraintBendableMatch(Arrays.asList(bendableHardConstraintMatch), - Arrays.asList(bendableSoftConstraintMatch)); - - substituteTemplateVariablesAbstractActionMultiConstraintBendableMatch(multiConstraintBendableMatch); - } - - @Test - public void substituteTemplateVariablesActionMultiConstraintBendableLongMatch() { - ActionBendableHardConstraintMatch bendableHardConstraintMatch = new ActionBendableHardConstraintMatch(0, - "foo bar @{var1}"); - ActionBendableSoftConstraintMatch bendableSoftConstraintMatch = new ActionBendableSoftConstraintMatch(0, - "foo bar @{var2}"); - - ActionMultiConstraintBendableLongMatch multiConstraintBendableMatch = new ActionMultiConstraintBendableLongMatch(Arrays.asList(bendableHardConstraintMatch), - Arrays.asList(bendableSoftConstraintMatch)); - - substituteTemplateVariablesAbstractActionMultiConstraintBendableMatch(multiConstraintBendableMatch); - } - - @Test - public void substituteTemplateVariablesActionMultiConstraintBendableBigDecimalMatch() { - ActionBendableHardConstraintMatch bendableHardConstraintMatch = new ActionBendableHardConstraintMatch(0, - "foo bar @{var1}"); - ActionBendableSoftConstraintMatch bendableSoftConstraintMatch = new ActionBendableSoftConstraintMatch(0, - "foo bar @{var2}"); - - ActionMultiConstraintBendableBigDecimalMatch multiConstraintBendableMatch = new ActionMultiConstraintBendableBigDecimalMatch(Arrays.asList(bendableHardConstraintMatch), - Arrays.asList(bendableSoftConstraintMatch)); - - substituteTemplateVariablesAbstractActionMultiConstraintBendableMatch(multiConstraintBendableMatch); - } - - private void substituteTemplateVariablesAbstractActionMultiConstraintBendableMatch(final AbstractActionMultiConstraintBendableMatch constraintMatch) { - constraintMatch.substituteTemplateVariables(getKeyToValueFunction()); - - assertNotNull(constraintMatch.getActionBendableHardConstraintMatches()); - assertEquals("foo bar val1", - constraintMatch.getActionBendableHardConstraintMatches().get(0).getConstraintMatch()); - - assertNotNull(constraintMatch.getActionBendableSoftConstraintMatches()); - assertEquals("foo bar val2", - constraintMatch.getActionBendableSoftConstraintMatches().get(0).getConstraintMatch()); - } - - private Function getKeyToValueFunction() { - return s -> { - switch (s) { - case "var1": - return "val1"; - case "var2": - return "val2"; - case "var3": - return "val3"; - default: - throw new IllegalArgumentException("Undefined variable " + s); - } - }; - } - - @Test - public void cloneIActionBendableHardConstraintMatchPlugin() { - ActionBendableHardConstraintMatch constraintMatch = new ActionBendableHardConstraintMatch(0, - "test"); - - cloneIActionAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void cloneIActionBendableSoftConstraintMatchPlugin() { - ActionBendableSoftConstraintMatch constraintMatch = new ActionBendableSoftConstraintMatch(0, - "test"); - cloneIActionAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void cloneIActionHardConstraintMatchPlugin() { - ActionHardConstraintMatch constraintMatch = new ActionHardConstraintMatch("test"); - - cloneIActionAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void cloneIActionSoftConstraintMatchPlugin() { - ActionSoftConstraintMatch constraintMatch = new ActionSoftConstraintMatch("test"); - - cloneIActionAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void cloneIActionMediumConstraintMatchPlugin() { - ActionMediumConstraintMatch constraintMatch = new ActionMediumConstraintMatch("test"); - - cloneIActionAbstractActionConstraintMatch(constraintMatch); - } - - @Test - public void cloneIActionSimpleConstraintMatchPlugin() { - ActionSimpleConstraintMatch constraintMatch = new ActionSimpleConstraintMatch("test"); - - cloneIActionAbstractActionConstraintMatch(constraintMatch); - } - - private void cloneIActionAbstractActionConstraintMatch(final AbstractActionConstraintMatch constraintMatch) { - IAction constraintMatchClone = (IAction) constraintMatch.cloneTemplateAware(); - - assertNotNull(constraintMatchClone); - assertNotSame(constraintMatchClone, - constraintMatch); - - assertEquals("test", - constraintMatch.getConstraintMatch()); - } - - @Test - public void cloneIActionMultiConstraintBendableBigDecimalMatch() { - ActionBendableHardConstraintMatch bendableHardConstraintMatch = new ActionBendableHardConstraintMatch(0, - "hard"); - ActionBendableSoftConstraintMatch bendableSoftConstraintMatch = new ActionBendableSoftConstraintMatch(0, - "soft"); - - ActionMultiConstraintBendableBigDecimalMatch constraintMatch = new ActionMultiConstraintBendableBigDecimalMatch(Arrays.asList(bendableHardConstraintMatch), - Arrays.asList(bendableSoftConstraintMatch)); - - cloneIActionAbstractActionMultiConstraintBendableMatch(constraintMatch); - } - - @Test - public void cloneIActionMultiConstraintBendableLongMatch() { - ActionBendableHardConstraintMatch bendableHardConstraintMatch = new ActionBendableHardConstraintMatch(0, - "hard"); - ActionBendableSoftConstraintMatch bendableSoftConstraintMatch = new ActionBendableSoftConstraintMatch(0, - "soft"); - - ActionMultiConstraintBendableLongMatch constraintMatch = new ActionMultiConstraintBendableLongMatch(Arrays.asList(bendableHardConstraintMatch), - Arrays.asList(bendableSoftConstraintMatch)); - - cloneIActionAbstractActionMultiConstraintBendableMatch(constraintMatch); - } - - @Test - public void cloneIActionMultiConstraintBendableMatch() { - ActionBendableHardConstraintMatch bendableHardConstraintMatch = new ActionBendableHardConstraintMatch(0, - "hard"); - ActionBendableSoftConstraintMatch bendableSoftConstraintMatch = new ActionBendableSoftConstraintMatch(0, - "soft"); - - ActionMultiConstraintBendableMatch constraintMatch = new ActionMultiConstraintBendableMatch(Arrays.asList(bendableHardConstraintMatch), - Arrays.asList(bendableSoftConstraintMatch)); - - cloneIActionAbstractActionMultiConstraintBendableMatch(constraintMatch); - } - - private void cloneIActionAbstractActionMultiConstraintBendableMatch(final AbstractActionMultiConstraintBendableMatch constraintMatch) { - IAction constraintMatchClone = (IAction) constraintMatch.cloneTemplateAware(); - - assertNotNull(constraintMatchClone); - assertNotSame(constraintMatchClone, - constraintMatch); - - assertNotNull(constraintMatch.getActionBendableHardConstraintMatches()); - assertNotNull(constraintMatch.getActionBendableSoftConstraintMatches()); - - assertEquals("hard", - constraintMatch.getActionBendableHardConstraintMatches().get(0).getConstraintMatch()); - assertEquals("soft", - constraintMatch.getActionBendableSoftConstraintMatches().get(0).getConstraintMatch()); - } - - @Test - public void cloneIActionMultiConstraintHardMediumSoftMatch() { - ActionHardConstraintMatch hardConstraintMatch = new ActionHardConstraintMatch("hard"); - ActionMediumConstraintMatch mediumConstraintMatch = new ActionMediumConstraintMatch("medium"); - ActionSoftConstraintMatch softConstraintMatch = new ActionSoftConstraintMatch("soft"); - - ActionMultiConstraintHardMediumSoftMatch constraintMatch = new ActionMultiConstraintHardMediumSoftMatch(hardConstraintMatch, - mediumConstraintMatch, - softConstraintMatch); - - IAction constraintMatchClone = (IAction) constraintMatch.cloneTemplateAware(); - - assertNotNull(constraintMatchClone); - assertNotSame(constraintMatchClone, - constraintMatch); - - assertNotNull(constraintMatch.getActionHardConstraintMatch()); - assertNotNull(constraintMatch.getActionMediumConstraintMatch()); - assertNotNull(constraintMatch.getActionSoftConstraintMatch()); - - assertEquals("hard", - constraintMatch.getActionHardConstraintMatch().getConstraintMatch()); - assertEquals("medium", - constraintMatch.getActionMediumConstraintMatch().getConstraintMatch()); - assertEquals("soft", - constraintMatch.getActionSoftConstraintMatch().getConstraintMatch()); - } - - @Test - public void cloneIActionMultiConstraintHardSoftMatch() { - ActionHardConstraintMatch hardConstraintMatch = new ActionHardConstraintMatch("hard"); - ActionSoftConstraintMatch softConstraintMatch = new ActionSoftConstraintMatch("soft"); - - ActionMultiConstraintHardSoftMatch constraintMatch = new ActionMultiConstraintHardSoftMatch(hardConstraintMatch, - softConstraintMatch); - - IAction constraintMatchClone = (IAction) constraintMatch.cloneTemplateAware(); - - assertNotNull(constraintMatchClone); - assertNotSame(constraintMatchClone, - constraintMatch); - - assertNotNull(constraintMatch.getActionHardConstraintMatch()); - assertNotNull(constraintMatch.getActionSoftConstraintMatch()); - - assertEquals("hard", - constraintMatch.getActionHardConstraintMatch().getConstraintMatch()); - assertEquals("soft", - constraintMatch.getActionSoftConstraintMatch().getConstraintMatch()); - } - - @Test - public void marshalActionSoftConstraintMatch() { - ActionSoftConstraintMatch action = new ActionSoftConstraintMatch("-1"); - - String marshaledAction = action.getStringRepresentation(); - - assertEquals("scoreHolder.addSoftConstraintMatch(kcontext, -1)", - marshaledAction); - } - - @Test - public void marshalActionBendableSoftConstraintMatch() { - ActionBendableSoftConstraintMatch action = new ActionBendableSoftConstraintMatch(1, - "-1"); - - String marshaledAction = action.getStringRepresentation(); - - assertEquals("scoreHolder.addSoftConstraintMatch(kcontext, 1, -1)", - marshaledAction); - } - - @Test - public void marshalActionMediumConstraintMatch() { - ActionMediumConstraintMatch action = new ActionMediumConstraintMatch("-1"); - - String marshaledAction = action.getStringRepresentation(); - - assertEquals("scoreHolder.addMediumConstraintMatch(kcontext, -1)", - marshaledAction); - } - - @Test - public void marshalActionMultiConstraintHardSoftMatch() { - ActionMultiConstraintHardSoftMatch action = new ActionMultiConstraintHardSoftMatch(new ActionHardConstraintMatch("-1"), - new ActionSoftConstraintMatch("-2")); - - String marshaledAction = action.getStringRepresentation(); - - assertEquals("scoreHolder.addMultiConstraintMatch(kcontext, -1, -2)", - marshaledAction); - } - - @Test - public void marshalActionMultiConstraintHardMediumSoftMatch() { - ActionMultiConstraintHardMediumSoftMatch action = new ActionMultiConstraintHardMediumSoftMatch(new ActionHardConstraintMatch("-1"), - new ActionMediumConstraintMatch("-2"), - new ActionSoftConstraintMatch("-3")); - - String marshaledAction = action.getStringRepresentation(); - - assertEquals("scoreHolder.addMultiConstraintMatch(kcontext, -1, -2, -3)", - marshaledAction); - } - - @Test - public void marshalActionMultiConstraintBendableMatch() { - ActionMultiConstraintBendableMatch action = new ActionMultiConstraintBendableMatch(Arrays.asList(new ActionBendableHardConstraintMatch(0, - "-1"), - new ActionBendableHardConstraintMatch(1, - "-2")), - Arrays.asList(new ActionBendableSoftConstraintMatch(0, - "-3"), - new ActionBendableSoftConstraintMatch(1, - "-4"))); - - String marshaledAction = action.getStringRepresentation(); - - assertEquals("scoreHolder.addMultiConstraintMatch(kcontext, new int[] {-1, -2}, new int[] {-3, -4})", - marshaledAction); - } - - @Test - public void marshalActionMultiConstraintBendableLongMatch() { - ActionMultiConstraintBendableLongMatch action = new ActionMultiConstraintBendableLongMatch(Arrays.asList(new ActionBendableHardConstraintMatch(0, - "-1l"), - new ActionBendableHardConstraintMatch(1, - "-2l")), - Arrays.asList(new ActionBendableSoftConstraintMatch(0, - "-3l"), - new ActionBendableSoftConstraintMatch(1, - "-4l"))); - - String marshaledAction = action.getStringRepresentation(); - - assertEquals("scoreHolder.addMultiConstraintMatch(kcontext, new long[] {-1l, -2l}, new long[] {-3l, -4l})", - marshaledAction); - } - - @Test - public void marshalActionMultiConstraintBendableBigDecimalMatch() { - ActionMultiConstraintBendableBigDecimalMatch action = new ActionMultiConstraintBendableBigDecimalMatch(Arrays.asList(new ActionBendableHardConstraintMatch(0, - "new java.math.BigDecimal(-1)"), - new ActionBendableHardConstraintMatch(1, - "new java.math.BigDecimal(-2)")), - Arrays.asList(new ActionBendableSoftConstraintMatch(0, - "new java.math.BigDecimal(-3)"), - new ActionBendableSoftConstraintMatch(1, - "new java.math.BigDecimal(-4)"))); - - String marshaledAction = action.getStringRepresentation(); - - assertEquals("scoreHolder.addMultiConstraintMatch(kcontext, new java.math.BigDecimal[] {new java.math.BigDecimal(-1), new java.math.BigDecimal(-2)}, new java.math.BigDecimal[] {new java.math.BigDecimal(-3), new java.math.BigDecimal(-4)})", - marshaledAction); - } - - @Test - public void marshalActionSimpleConstraintMatch() { - ActionSimpleConstraintMatch action = new ActionSimpleConstraintMatch("-1"); - - String marshaledAction = action.getStringRepresentation(); - - assertEquals("scoreHolder.addConstraintMatch(kcontext, -1)", - marshaledAction); - } - - @Test - public void marshalActionHardConstraintMatch() { - ActionHardConstraintMatch action = new ActionHardConstraintMatch("-1"); - - String marshaledAction = action.getStringRepresentation(); - - assertEquals("scoreHolder.addHardConstraintMatch(kcontext, -1)", - marshaledAction); - } - - @Test - public void marshalActionBendableHardConstraintMatch() { - ActionBendableHardConstraintMatch action = new ActionBendableHardConstraintMatch(1, - "-1"); - - String marshaledAction = action.getStringRepresentation(); - - assertEquals("scoreHolder.addHardConstraintMatch(kcontext, 1, -1)", - marshaledAction); - } -} diff --git a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/test/java/org/optaplanner/workbench/models/datamodel/util/TemplateUtilsTest.java b/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/test/java/org/optaplanner/workbench/models/datamodel/util/TemplateUtilsTest.java deleted file mode 100644 index e89fd60aeb..0000000000 --- a/optaplanner-workbench-models/optaplanner-workbench-models-datamodel-api/src/test/java/org/optaplanner/workbench/models/datamodel/util/TemplateUtilsTest.java +++ /dev/null @@ -1,83 +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.optaplanner.workbench.models.datamodel.util; - -import java.util.Collection; -import java.util.function.Function; - -import org.drools.workbench.models.datamodel.rule.InterpolationVariable; -import org.junit.Test; -import org.kie.soup.project.datamodel.oracle.DataType; - -import static org.junit.Assert.*; - -public class TemplateUtilsTest { - - @Test - public void extractInterpolationVariablesContainsVariables() { - String string = "foo bar @{var1} baz @{var2}"; - - Collection interpolationVariables = TemplateUtils.extractInterpolationVariables(string); - - assertEquals(2, - interpolationVariables.size()); - assertTrue(interpolationVariables.contains(new InterpolationVariable("var1", - DataType.TYPE_OBJECT))); - assertTrue(interpolationVariables.contains(new InterpolationVariable("var2", - DataType.TYPE_OBJECT))); - } - - @Test - public void extractInterpolationVariablesBrokenPattern() { - String string = "foo @{zzz bar baz @"; - - Collection interpolationVariables = TemplateUtils.extractInterpolationVariables(string); - - assertTrue(interpolationVariables.isEmpty()); - } - - @Test - public void extractInterpolationVariablesNoVariables() { - String string = "foo bar baz"; - - Collection interpolationVariables = TemplateUtils.extractInterpolationVariables(string); - - assertTrue(interpolationVariables.isEmpty()); - } - - @Test - public void substituteTemplateKey() { - String string = "foo bar @{var1} baz @{var2}"; - - Function keyToValueFunction = s -> { - switch (s) { - case "var1": - return "val1"; - case "var2": - return "val2"; - default: - throw new IllegalArgumentException("Undefined variable " + s); - } - }; - - String result = TemplateUtils.substituteTemplateVariable(string, - keyToValueFunction); - - assertEquals("foo bar val1 baz val2", - result); - } -} diff --git a/optaplanner-workbench-models/pom.xml b/optaplanner-workbench-models/pom.xml deleted file mode 100644 index 39c9781881..0000000000 --- a/optaplanner-workbench-models/pom.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - 4.0.0 - - org.drools - droolsjbpm-integration - 7.75.0-SNAPSHOT - - - org.optaplanner - optaplanner-workbench-models - pom - - OptaPlanner Workbench models - This module contains OptaPlanner Workbench integration modules. - - - optaplanner-workbench-models-core - optaplanner-workbench-models-datamodel-api - - - diff --git a/pom.xml b/pom.xml index ce0dc4d154..69520b88c6 100644 --- a/pom.xml +++ b/pom.xml @@ -66,8 +66,7 @@ kie-plugins-testing kie-spring-boot camel-container-tests - optaplanner-workbench-models - + @@ -78,13 +77,6 @@ pom import - - org.optaplanner - optaplanner-bom - ${version.org.kie} - pom - import - org.jbpm jbpm-bom