/******************************************************************************* * * Copyright (c) 2012 GigaSpaces Technologies Ltd. All rights reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.openspaces.admin.internal.pu.dependency; import org.openspaces.admin.pu.dependency.ProcessingUnitDependency; public abstract class AbstractProcessingUnitDependenciesConfigurer< T extends ProcessingUnitDependency, IT extends InternalProcessingUnitDependency, S extends ProcessingUnitDetailedDependencies<T>, IS extends InternalProcessingUnitDetailedDependencies<T,IT>> { private final IS dependencies; private final InternalProcessingUnitDependencyFactory<IT> dependencyFactory; public AbstractProcessingUnitDependenciesConfigurer(InternalProcessingUnitDependencyFactory<IT> dependencyFactory, IS dependencies) { this.dependencyFactory = dependencyFactory; this.dependencies = dependencies; } @SuppressWarnings("unchecked") // IS extends S public S create() { return (S)dependencies; } public AbstractProcessingUnitDependenciesConfigurer<T,IT,S,IS> dependsOnMinimumNumberOfDeployedInstances(String requiredProcessingUnitName, int minimumNumberOfDeployedInstances) { IT dependency = createDependency(requiredProcessingUnitName); dependency.setMinimumNumberOfDeployedInstances(minimumNumberOfDeployedInstances); addDependency(dependency); return this; } public AbstractProcessingUnitDependenciesConfigurer<T,IT,S,IS> dependsOnMinimumNumberOfDeployedInstancesPerPartition(String requiredProcessingUnitName, int minimumNumberOfDeployedInstances) { IT dependency = createDependency(requiredProcessingUnitName); dependency.setMinimumNumberOfDeployedInstancesPerPartition(minimumNumberOfDeployedInstances); addDependency(dependency); return this; } public AbstractProcessingUnitDependenciesConfigurer<T,IT,S,IS> dependsOnDeployed(String requiredProcessingUnitName) { IT dependency = createDependency(requiredProcessingUnitName); dependency.setWaitForDeploymentToComplete(true); addDependency(dependency); return this; } protected IT createDependency(String requiredProcessingUnitName) { return dependencyFactory.create(requiredProcessingUnitName); } @SuppressWarnings("unchecked") // IT extends T protected void addDependency(IT dependency) { dependencies.addDependency((T)dependency); } }