package org.opennaas.extensions.vcpe.capability.builder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.opennaas.core.resources.ResourceException;
import org.opennaas.core.resources.action.IAction;
import org.opennaas.core.resources.action.IActionSet;
import org.opennaas.core.resources.capability.AbstractCapability;
import org.opennaas.core.resources.capability.CapabilityException;
import org.opennaas.core.resources.descriptor.CapabilityDescriptor;
import org.opennaas.extensions.vcpe.Activator;
import org.opennaas.extensions.vcpe.capability.builder.builders.IVCPENetworkBuilder;
import org.opennaas.extensions.vcpe.capability.builder.builders.VCPENetworkBuilderFactory;
import org.opennaas.extensions.vcpe.model.VCPENetworkModel;
public class VCPENetworkBuilderCapability extends AbstractCapability implements IVCPENetworkBuilderCapability {
public static final String CAPABILITY_TYPE = "vcpenet_builder";
private Log log = LogFactory.getLog(VCPENetworkBuilderCapability.class);
private String resourceId;
/**
* @param descriptor
* @param resourceId
*/
public VCPENetworkBuilderCapability(CapabilityDescriptor descriptor, String resourceId) {
super(descriptor);
this.resourceId = resourceId;
}
/*
* (non-Javadoc)
*
* @see org.opennaas.core.resources.capability.AbstractCapability#activate()
*/
@Override
public void activate() throws CapabilityException {
registerService(Activator.getContext(), CAPABILITY_TYPE, getResourceType(), getResourceName(), IVCPENetworkBuilderCapability.class.getName());
setState(State.ACTIVE);
}
/*
* (non-Javadoc)
*
* @see org.opennaas.core.resources.capability.AbstractCapability#deactivate()
*/
@Override
public void deactivate() throws CapabilityException {
setState(State.INACTIVE);
registration.unregister();
super.deactivate();
}
/*
* (non-Javadoc)
*
* @see org.opennaas.core.resources.capability.ICapability#getCapabilityName()
*/
@Override
public String getCapabilityName() {
return CAPABILITY_TYPE;
}
/*
* (non-Javadoc)
*
* @see org.opennaas.core.resources.capability.AbstractCapability#queueAction(org.opennaas.core.resources.action.IAction)
*/
@Override
public void queueAction(IAction action) throws CapabilityException {
throw new UnsupportedOperationException();
}
/*
* (non-Javadoc)
*
* @see org.opennaas.core.resources.capability.AbstractCapability#getActionSet()
*/
@Override
public IActionSet getActionSet() throws CapabilityException {
throw new UnsupportedOperationException();
}
/*
* (non-Javadoc)
*
* @see
* org.opennaas.extensions.vcpe.capability.builder.IVCPENetworkBuilderCapability#buildVCPENetwork(org.opennaas.extensions.vcpe.model.VCPENetworkModel
* )
*/
@Override
public VCPENetworkModel buildVCPENetwork(VCPENetworkModel desiredScenario) throws CapabilityException {
log.info("Build a VCPENetwork with template: " + desiredScenario.getTemplateType());
try {
if (((VCPENetworkModel) resource.getModel()).isCreated()) {
throw new CapabilityException("VCPE already created");
}
IVCPENetworkBuilder builder = VCPENetworkBuilderFactory.getBuilder(desiredScenario.getTemplateType());
return builder.build(resource, desiredScenario);
} catch (ResourceException e) {
throw new CapabilityException(e);
}
}
/*
* (non-Javadoc)
*
* @see org.opennaas.extensions.vcpe.capability.builder.IVCPENetworkBuilderCapability#destroyVCPENetwork()
*/
@Override
public void destroyVCPENetwork() throws CapabilityException {
log.info("Destroy a VCPENetwork");
try {
if (!((VCPENetworkModel) resource.getModel()).isCreated()) {
throw new CapabilityException("VCPE has not been created");
}
VCPENetworkModel model = (VCPENetworkModel) resource.getModel();
IVCPENetworkBuilder builder = VCPENetworkBuilderFactory.getBuilder(model.getTemplateType());
builder.destroy(resource, model);
} catch (ResourceException e) {
throw new CapabilityException(e);
}
}
}