/*
* Copyright to the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.rioproject.monitor.service;
import net.jini.id.Uuid;
import org.rioproject.deploy.ServiceBeanInstance;
import org.rioproject.deploy.ServiceProvisionListener;
import org.rioproject.opstring.OperationalStringManager;
import org.rioproject.opstring.ServiceElement;
import java.util.ArrayList;
import java.util.List;
/**
* The ProvisionRequest class provides a container object holding information
* to provision a service.
*
* @author Dennis Reedy
*/
public class ProvisionRequest {
public enum Type {PROVISION, RELOCATE, UNINSTANTIABLE}
/** The ServiceElement */
private ServiceElement sElem;
/** The ServiceProvisionListener */
private final ProvisionListener listener;
/** The OperationalStringManager */
private final OperationalStringManager opStringMgr;
/** Optional remote ServiceProvisionListener */
private ServiceProvisionListener svcProvisionListener;
/** Optional ServiceBeanInstance */
private ServiceBeanInstance instance;
/** Optional Uuid of the ServiceBeanInstantiator to exclude */
private Uuid excludeUuid;
/** Optional Uuid of the ServiceBeanInstantiator to use */
private Uuid requestedUuid;
/** Type of provision request */
private Type type;
/** Needed for creating instance identifiers */
private final InstanceIDManager instanceIDMgr;
//long priority = 0;
/** The time the ProvisionRequest was created */
private final long timestamp;
private final List<String> failureReasons = new ArrayList<String>();
/**
* Create a ProvisionRequest
*
* @param sElem The ServiceElement
* @param listener The ProvisionListener
* @param opStringMgr The OperationalStringManager
* @param instanceIDMgr Create instance identifiers if needed
*/
public ProvisionRequest(ServiceElement sElem,
ProvisionListener listener,
OperationalStringManager opStringMgr,
InstanceIDManager instanceIDMgr) {
this.sElem = sElem;
this.listener = listener;
this.opStringMgr = opStringMgr;
this.instanceIDMgr = instanceIDMgr;
this.type = Type.PROVISION;
timestamp = System.currentTimeMillis();
}
/**
* Create a ProvisionRequest
*
* @param sElem The ServiceElement
* @param listener The ProvisionListener
* @param opStringMgr The OperationalStringManager
* @param instanceIDMgr Create instance identifiers if needed
* @param svcProvisionListener Remote ServiceProvisionListener
* @param instance The ServiceBeanInstance
*/
public ProvisionRequest(ServiceElement sElem,
ProvisionListener listener,
OperationalStringManager opStringMgr,
InstanceIDManager instanceIDMgr,
ServiceProvisionListener svcProvisionListener,
ServiceBeanInstance instance) {
this.sElem = sElem;
this.listener = listener;
this.opStringMgr = opStringMgr;
this.instanceIDMgr = instanceIDMgr;
this.svcProvisionListener = svcProvisionListener;
this.instance = instance;
this.type = Type.PROVISION;
timestamp = System.currentTimeMillis();
}
/**
* Create a ProvisionRequest
*
* @param sElem The ServiceElement
* @param listener The ProvisionListener
* @param opStringMgr The OperationalStringManager
* @param instanceIDMgr Create instance identifiers if needed
* @param svcProvisionListener Remote ServiceProvisionListener
* @param instance The ServiceBeanInstance
* @param excludeUuid The Uuid to exclude when selecting a compute resource
* @param requestedUuid The requested uuid of the ServiceBeanInstantiator to provision the service to
* @param type The ProvisionRequest.Type
*/
public ProvisionRequest(ServiceElement sElem,
ProvisionListener listener,
OperationalStringManager opStringMgr,
InstanceIDManager instanceIDMgr,
/* Optional */
ServiceProvisionListener svcProvisionListener,
ServiceBeanInstance instance,
Uuid excludeUuid,
Uuid requestedUuid,
Type type) {
this(sElem, listener, opStringMgr, instanceIDMgr);
this.svcProvisionListener = svcProvisionListener;
this.instance = instance;
this.excludeUuid = excludeUuid;
this.requestedUuid = requestedUuid;
this.type = type;
}
public Uuid getRequestedUuid() {
return requestedUuid;
}
public Uuid getExcludeUuid() {
return excludeUuid;
}
public ServiceElement getServiceElement() {
return sElem;
}
public void setType(Type type) {
this.type = type;
}
public Type getType() {
return type;
}
public InstanceIDManager getInstanceIDMgr() {
return instanceIDMgr;
}
public void setServiceElement(ServiceElement sElem) {
this.sElem = sElem;
}
public long getTimestamp() {
return timestamp;
}
public void setServiceProvisionListener(ServiceProvisionListener svcProvisionListener) {
this.svcProvisionListener = svcProvisionListener;
}
public ServiceProvisionListener getServiceProvisionListener() {
return svcProvisionListener;
}
public ProvisionListener getListener() {
return listener;
}
public OperationalStringManager getOpStringManager() {
return opStringMgr;
}
public void addFailureReason(String failureReason) {
if(failureReason!=null && !failureReasons.contains(failureReason))
failureReasons.add(failureReason);
}
public void setRequestedUuid(Uuid requestedUuid) {
this.requestedUuid = requestedUuid;
}
public ServiceBeanInstance getInstance() {
return instance;
}
public List<String> getFailureReasons() {
return failureReasons;
}
/**
* Create a copy
*
* @param pr The ProvisionRequest to copy
*
* @return A copy of the ProvisionRequest
*/
public static ProvisionRequest copy(ProvisionRequest pr) {
return(new ProvisionRequest(pr.sElem,
pr.listener,
pr.opStringMgr,
pr.instanceIDMgr,
pr.svcProvisionListener,
pr.instance,
pr.excludeUuid,
pr.requestedUuid,
pr.type));
}
}