/******************************************************************************* * * 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.pu.events; import org.openspaces.admin.gsc.GridServiceContainer; import org.openspaces.admin.pu.ProcessingUnit; import org.openspaces.admin.pu.ProcessingUnitInstance; import org.openspaces.admin.pu.ProvisionStatus; /** * An event raised when a processing unit instance {@link ProvisionStatus} has changed. * * @see org.openspaces.admin.pu.ProcessingUnit#getProcessingUnitInstanceProvisionStatusChanged() * @see org.openspaces.admin.pu.ProcessingUnits#getProcessingUnitInstanceProvisionStatusChanged() * * @since 8.0.6 * @author moran */ public class ProcessingUnitInstanceProvisionStatusChangedEvent { private final ProcessingUnit processingUnit; private final String processingUnitInstanceName; private final ProvisionStatus previousStatus; private final ProvisionStatus newStatus; private final String gscServiceId; private GridServiceContainer cachedGridServiceContainer; //may be null on pending private ProcessingUnitInstance cachedProcessingUnitInstance; //may be null on pending/failure public ProcessingUnitInstanceProvisionStatusChangedEvent(ProcessingUnit processingUnit, String processingUnitInstanceName, ProvisionStatus previousStatus, ProvisionStatus newStatus, GridServiceContainer gridServiceContainer, ProcessingUnitInstance processingUnitInstance) { this.processingUnit = processingUnit; this.processingUnitInstanceName = processingUnitInstanceName; this.previousStatus = previousStatus; this.newStatus = newStatus; this.cachedGridServiceContainer = gridServiceContainer; this.cachedProcessingUnitInstance = processingUnitInstance; this.gscServiceId = null; } public ProcessingUnitInstanceProvisionStatusChangedEvent(ProcessingUnit processingUnit, String processingUnitInstanceName, ProvisionStatus previousStatus, ProvisionStatus newStatus, String gscServiceId) { this.processingUnit = processingUnit; this.processingUnitInstanceName = processingUnitInstanceName; this.previousStatus = previousStatus; this.newStatus = newStatus; this.gscServiceId = gscServiceId; this.cachedGridServiceContainer = null; this.cachedProcessingUnitInstance = null; } /** * @return The processing unit this event refers to. */ public ProcessingUnit getProcessingUnit() { return processingUnit; } /** * @return The processing unit instance name this event refers to. * @see ProcessingUnitInstance#getProcessingUnitInstanceName(). */ public String getProcessingUnitInstanceName() { return processingUnitInstanceName; } /** * @return The previous provision status or <code>null</code> if not status was recorded. */ public ProvisionStatus getPreviousStatus() { return previousStatus; } /** * @return The current (new) provision status for the specified processing unit instance. */ public ProvisionStatus getNewStatus() { return newStatus; } /** * For {@link ProvisionStatus#ATTEMPT} - returns the {@link GridServiceContainer} a processing unit instance is instantiating on. May be <code>null</code> if not yet discovered. * For {@link ProvisionStatus#SUCCESS} - returns the {@link GridServiceContainer} a processing unit instance has successfully instantiated on. May be <code>null</code> if not yet discovered. * For {@link ProvisionStatus#FAILURE} - returns the {@link GridServiceContainer} a processing unit instance has failed to instantiate on. May be <code>null</code> if no longer available. * For {@link ProvisionStatus#PENDING} - returns <code>null</code>. * * @return The Grid Service Container this provision change refers to. May be <code>null</code>. */ public GridServiceContainer getGridServiceContainer() { if (cachedGridServiceContainer == null && gscServiceId != null) { cachedGridServiceContainer = processingUnit.getAdmin().getGridServiceContainers().getContainerByUID(gscServiceId); } return cachedGridServiceContainer; } /** * For {@link ProvisionStatus#ATTEMPT} - returns <code>null</code> until the processing unit instance is discovered and added. * For {@link ProvisionStatus#SUCCESS} - returns the {@link ProcessingUnitInstance} that has successfully instantiated. May be <code>null</code> if not yet discovered. * For {@link ProvisionStatus#FAILURE} - returns <code>null</code>. * For {@link ProvisionStatus#PENDING} - returns <code>null</code>. * * @return The Processing Unit Instance (extracted by name) this provision change refers to. May be <code>null</code>. */ public ProcessingUnitInstance getProcessingUnitInstance() { if (cachedProcessingUnitInstance == null) { for (ProcessingUnitInstance instance : processingUnit.getInstances()) { if (processingUnitInstanceName.equals(instance.getProcessingUnitInstanceName())) { cachedProcessingUnitInstance = instance; return instance; } } } return cachedProcessingUnitInstance; } }