package org.opennaas.extensions.pdu.capability;
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.IPowerSupplyController;
import org.opennaas.extensions.gim.model.energy.Energy;
import org.opennaas.extensions.pdu.Activator;
public class PDUPowerSupplyCapability extends AbstractPDUCapability implements IPDUPowerSupplyCapability {
private static Log log = LogFactory.getLog(PDUPowerSupplyCapability.class);
public static String CAPABILITY_TYPE = "pdu_pw_sup";
private String resourceId = "";
private IPowerSupplyController driver;
public PDUPowerSupplyCapability(CapabilityDescriptor descriptor, String resourceId) {
super(descriptor);
this.resourceId = resourceId;
log.debug("Built new PDUPowerSupplyCapability Capability");
}
@Override
public void activate() throws CapabilityException {
// try{
// driver = instantiateDriver();
// } catch (Exception e) {
// throw new CapabilityException(e);
// }
registerService(Activator.getContext(), CAPABILITY_TYPE, getResourceType(), getResourceName(), IPDUPowerSupplyCapability.class.getName());
super.activate();
}
@Override
public void deactivate() throws CapabilityException {
driver = null;
unregisterService();
super.deactivate();
}
@Override
public String getCapabilityName() {
return CAPABILITY_TYPE;
}
// IPowerSupplyController methods
public Energy getAggregatedEnergy() throws Exception {
return getDriver().getAggregatedEnergy();
}
public double getAggregatedPricePerEnergyUnit() throws Exception {
return getDriver().getAggregatedPricePerEnergyUnit();
}
private IPowerSupplyController 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 IPowerSupplyController 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);
}
@Override
public void resyncModel() throws Exception {
// Nothing to do
}
}