All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.optaplanner.examples.cloudbalancing.swingui.realtime.DeleteComputerProblemChange Maven / Gradle / Ivy

Go to download

OptaPlanner solves planning problems. This lightweight, embeddable planning engine implements powerful and scalable algorithms to optimize business resource scheduling and planning. This module contains the examples which demonstrate how to use it in a normal Java application.

There is a newer version: 9.44.0.Final
Show newest version
package org.optaplanner.examples.cloudbalancing.swingui.realtime;

import java.util.ArrayList;

import org.optaplanner.core.api.solver.change.ProblemChange;
import org.optaplanner.core.api.solver.change.ProblemChangeDirector;
import org.optaplanner.examples.cloudbalancing.domain.CloudBalance;
import org.optaplanner.examples.cloudbalancing.domain.CloudComputer;
import org.optaplanner.examples.cloudbalancing.domain.CloudProcess;

public class DeleteComputerProblemChange implements ProblemChange {

    private final CloudComputer computer;

    public DeleteComputerProblemChange(CloudComputer computer) {
        this.computer = computer;
    }

    @Override
    public void doChange(CloudBalance cloudBalance, ProblemChangeDirector problemChangeDirector) {
        problemChangeDirector.lookUpWorkingObject(computer)
                .ifPresentOrElse(workingComputer -> {
                    // First remove the problem fact from all planning entities that use it
                    for (CloudProcess process : cloudBalance.getProcessList()) {
                        if (process.getComputer() == workingComputer) {
                            problemChangeDirector.changeVariable(process, "computer",
                                    workingProcess -> workingProcess.setComputer(null));
                        }
                    }
                    // 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
                    problemChangeDirector.removeProblemFact(workingComputer, computerList::remove);
                }, () -> {
                    // The computer has already been deleted (the UI asked to changed the same computer twice).
                });
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy