package org.opennaas.extensions.pdu.capability;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.opennaas.core.resources.capability.CapabilityException;
import org.opennaas.core.resources.descriptor.CapabilityDescriptor;
import org.opennaas.extensions.gim.controller.capabilities.IPDUPowerManagementController;
import org.opennaas.extensions.gim.model.core.entities.pdu.PDU;
import org.opennaas.extensions.gim.model.core.entities.pdu.PDUPort;
import org.opennaas.extensions.pdu.Activator;
import org.opennaas.extensions.pdu.model.PDUModel;
public class PDUPowerManagementCapability extends AbstractPDUCapability implements IPDUPowerManagementIDsCapability {
private static Log log = LogFactory.getLog(PDUPowerManagementCapability.class);
public static String CAPABILITY_TYPE = "pdu_pw_mgt";
private String resourceId = "";
private IPDUPowerManagementController driver;
public PDUPowerManagementCapability(CapabilityDescriptor descriptor, String resourceId) {
super(descriptor);
this.resourceId = resourceId;
log.debug("Built new PDUPowerManagementCapability Capability");
}
@Override
public void activate() throws CapabilityException {
// try{
// driver = instantiateDriver();
// } catch (Exception e) {
// throw new CapabilityException(e);
// }
registerService(Activator.getContext(), CAPABILITY_TYPE, getResourceType(), getResourceName(),
IPDUPowerManagementIDsCapability.class.getName());
super.activate();
}
@Override
public void deactivate() throws CapabilityException {
driver = null;
unregisterService();
super.deactivate();
}
@Override
public String getCapabilityName() {
return CAPABILITY_TYPE;
}
// IPDUPowerManagementController methods
/**
*
* @return true if power is on, false otherwise.
* @throws Exception
*/
public boolean getPowerStatus(String portId) throws Exception {
return getDriver().getPowerStatus(portId);
}
/**
* Turn on power.
*
* @return
* @throws Exception
*/
public boolean powerOn(String portId) throws Exception {
if (getPowerStatus(portId))
throw new Exception("Already powered on");
return getDriver().powerOn(portId);
}
/**
* Turn off power.
*
* @return
* @throws Exception
*/
public boolean powerOff(String portId) throws Exception {
if (!getPowerStatus(portId))
throw new Exception("Already powered off");
return getDriver().powerOff(portId);
}
private IPDUPowerManagementController getDriver() throws Exception {
// FIXME CAPABILITY SHOULD NOT INSTANTIATE IT'S OWN DRIVER.
if (driver == null)
driver = instantiateDriver();
return driver;
}
// FIXME CAPABILITY SHOULD NOT INSTANTIATE IT'S OWN DRIVER.
private IPDUPowerManagementController instantiateDriver() throws Exception {
String ip = getCapabilityDescriptor().getPropertyValue("pdu.driver.ipaddress");
String deliveryId = getCapabilityDescriptor().getPropertyValue("powernet.delivery.id");
// FIXME PDUDriverInstantiator should be unknown for the capability
// capability should take the driver from an OSGI service.
return PDUDriverInstantiator.create(resourceId, getPowernetId(), deliveryId, ip);
}
private PDU getPdu() {
return ((PDUModel) resource.getModel()).getPdu();
}
@Override
public void resyncModel() throws Exception {
List<PDUPort> pduPorts = getDriver().listPorts();
PDU pdu = getPdu();
pdu.setPowerSources(pduPorts);
}
}