package peal.composite; import java.util.Objects; import peal.DeploymentException; import peal.EngineService; import peal.ProcessModelService; import peal.identifier.EngineId; import peal.identifier.ProcessModelId; import peal.observer.EngineState; import peal.packages.DeploymentPackage; import peal.packages.ProcessModelPackage; public class CompositeServiceImpl implements CompositeService{ private final EngineService engineService; private final ProcessModelService processModelService; public CompositeServiceImpl(EngineService engineService, ProcessModelService processModelService) { this.engineService = Objects.requireNonNull(engineService); this.processModelService = Objects.requireNonNull(processModelService); } @Override public ProcessModelId makeAvailable(EngineId engineId, ProcessModelPackage processModelPackage) throws DeploymentException { if(engineService.getState(engineId) == EngineState.NOT_INSTALLED) { engineService.install(engineId); } if(engineService.getState(engineId) == EngineState.INSTALLED) { engineService.start(engineId); } DeploymentPackage deploymentPackage = processModelService.makeDeployable(engineId, processModelPackage); return processModelService.deploy(engineId, deploymentPackage); } @Override public void makeUnavailable(ProcessModelId processModelId) { processModelService.undeploy(processModelId); if(processModelService.getDeployedProcessModels().isEmpty()) { engineService.stop(processModelId); engineService.uninstall(processModelId); } } }