package org.opennaas.extensions.powernet.capability.mgt;
/*
* #%L
* OpenNaaS :: Power Net Resource
* %%
* Copyright (C) 2007 - 2014 FundaciĆ³ Privada i2CAT, Internet i InnovaciĆ³ a Catalunya
* %%
* 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.
* #L%
*/
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.gim.controller.GIMController;
import org.opennaas.extensions.gim.controller.ModelElementNotFoundException;
import org.opennaas.extensions.gim.model.core.entities.GIModel;
import org.opennaas.extensions.gim.model.core.entities.PowerConsumer;
import org.opennaas.extensions.gim.model.core.entities.PowerDelivery;
import org.opennaas.extensions.gim.model.core.entities.PowerSupply;
import org.opennaas.extensions.gim.model.core.entities.sockets.PowerReceptor;
import org.opennaas.extensions.gim.model.core.entities.sockets.PowerSource;
import org.opennaas.extensions.gim.model.energy.Energy;
import org.opennaas.extensions.gim.model.energy.EnergyClass;
import org.opennaas.extensions.gim.model.energy.EnergyType;
import org.opennaas.extensions.gim.model.load.RatedLoad;
import org.opennaas.extensions.powernet.Activator;
public class PowerNetManagementCapability extends AbstractCapability implements IPowerNetManagementCapability {
public static String CAPABILITY_TYPE = "powernet_mgt";
Log log = LogFactory.getLog(PowerNetManagementCapability.class);
private String resourceId = "";
public PowerNetManagementCapability(CapabilityDescriptor descriptor, String resourceId) {
super(descriptor);
this.resourceId = resourceId;
log.debug("Built new PowerNetManagement Capability");
}
@Override
public void activate() throws CapabilityException {
registerService(Activator.getContext(), CAPABILITY_TYPE, getResourceType(), getResourceName(), IPowerNetManagementCapability.class.getName());
super.activate();
}
@Override
public void deactivate() throws CapabilityException {
unregisterService();
super.deactivate();
}
@Override
public String getCapabilityName() {
return CAPABILITY_TYPE;
}
@Override
public void queueAction(IAction action) throws CapabilityException {
// TODO Auto-generated method stub
}
@Override
public IActionSet getActionSet() throws CapabilityException {
// TODO Auto-generated method stub
return null;
}
// IPowerNetManagementCapability IMPLEMENTATION
@Override
public String createPowerSupply(String id) {
PowerSupply supply = new PowerSupply();
supply.setId(id);
supply.setPowerDeliveries(new ArrayList<PowerDelivery>());
supply.setPowerSources(new ArrayList<PowerSource>());
((GIModel) resource.getModel()).getSupplies().add(supply);
return supply.getId();
}
@Override
public void deletePowerSupply(String supplyId) throws ModelElementNotFoundException {
PowerSupply supply = getPowerSupply(supplyId);
// disconnect it
for (PowerSource source : supply.getPowerSources()) {
disconnectPowerSource(source);
}
supply.setPowerSources(null);
((GIModel) resource.getModel()).getSupplies().remove(supply);
}
@Override
public PowerSupply getPowerSupply(String supplyId) throws ModelElementNotFoundException {
return GIMController.getPowerSupply((GIModel) resource.getModel(), supplyId);
}
@Override
public String createPowerDelivery(String id) {
PowerDelivery delivery = new PowerDelivery();
delivery.setId(id);
delivery.setPowerConsumers(new ArrayList<PowerConsumer>());
delivery.setPowerSupplies(new ArrayList<PowerSupply>());
delivery.setPowerReceptors(new ArrayList<PowerReceptor>());
delivery.setPowerSources(new ArrayList<PowerSource>());
((GIModel) resource.getModel()).getDeliveries().add(delivery);
return delivery.getId();
}
@Override
public void deletePowerDelivery(String deliveryId) throws ModelElementNotFoundException {
PowerDelivery delivery = getPowerDelivery(deliveryId);
// disconnect its sources
for (PowerSource source : delivery.getPowerSources()) {
disconnectPowerSource(source);
}
delivery.setPowerSources(null);
// disconnect its receptors
for (PowerReceptor receptor : delivery.getPowerReceptors()) {
receptor.setAttachedTo(null);
}
delivery.setPowerReceptors(null);
((GIModel) resource.getModel()).getDeliveries().remove(delivery);
}
@Override
public PowerDelivery getPowerDelivery(String deliveryId) throws ModelElementNotFoundException {
return GIMController.getPowerDelivery((GIModel) resource.getModel(), deliveryId);
}
@Override
public String createPowerConsumer(String id) {
PowerConsumer consumer = new PowerConsumer();
consumer.setId(id);
consumer.setPowerDeliveries(new ArrayList<PowerDelivery>());
consumer.setPowerReceptors(new ArrayList<PowerReceptor>());
((GIModel) resource.getModel()).getConsumers().add(consumer);
return consumer.getId();
}
@Override
public void deletePowerConsumer(String consumerId) throws ModelElementNotFoundException {
PowerConsumer consumer = getPowerConsumer(consumerId);
// disconnect it from deliveries
for (PowerReceptor receptor : consumer.getPowerReceptors()) {
receptor.setAttachedTo(null);
}
consumer.setPowerReceptors(null);
((GIModel) resource.getModel()).getConsumers().remove(consumer);
}
@Override
public PowerConsumer getPowerConsumer(String consumerId) throws ModelElementNotFoundException {
return GIMController.getPowerConsumer((GIModel) resource.getModel(), consumerId);
}
@Override
public void connectSupplyDelivery(String supplyId, String supplySourceId, String deliveryId, String delivertReceptorId)
throws ModelElementNotFoundException {
PowerSupply supply = getPowerSupply(supplyId);
PowerDelivery delivery = getPowerDelivery(deliveryId);
PowerSource source = (PowerSource) GIMController.getSocketById(supply.getPowerSources(), supplySourceId);
PowerReceptor receptor = (PowerReceptor) GIMController.getSocketById(delivery.getPowerReceptors(), delivertReceptorId);
receptor.setAttachedTo(source);
}
@Override
public void connectDeliveryConsumer(String deliveryId, String deliverySourceId, String consumerId, String consumerReceptorId)
throws ModelElementNotFoundException {
PowerConsumer consumer = getPowerConsumer(consumerId);
PowerDelivery delivery = getPowerDelivery(deliveryId);
PowerSource source = (PowerSource) GIMController.getSocketById(delivery.getPowerSources(), deliverySourceId);
PowerReceptor receptor = (PowerReceptor) GIMController.getSocketById(consumer.getPowerReceptors(), consumerReceptorId);
receptor.setAttachedTo(source);
}
@Override
public void disconnectSupplyDelivery(String supplyId, String supplySourceId, String deliveryId, String delivertReceptorId)
throws ModelElementNotFoundException {
PowerSupply supply = getPowerSupply(supplyId);
PowerDelivery delivery = getPowerDelivery(deliveryId);
PowerSource source = (PowerSource) GIMController.getSocketById(supply.getPowerSources(), supplySourceId);
PowerReceptor receptor = (PowerReceptor) GIMController.getSocketById(delivery.getPowerReceptors(), delivertReceptorId);
receptor.setAttachedTo(null);
}
@Override
public void disconnectDeliveryConsumer(String deliveryId, String deliverySourceId, String consumerId, String consumerReceptorId)
throws ModelElementNotFoundException {
PowerConsumer consumer = getPowerConsumer(consumerId);
PowerDelivery delivery = getPowerDelivery(deliveryId);
PowerSource source = (PowerSource) GIMController.getSocketById(delivery.getPowerSources(), deliverySourceId);
PowerReceptor receptor = (PowerReceptor) GIMController.getSocketById(consumer.getPowerReceptors(), consumerReceptorId);
receptor.setAttachedTo(null);
}
@Override
public List<String> getPowerSupplies() {
List<PowerSupply> elements = ((GIModel) resource.getModel()).getSupplies();
List<String> ids = new ArrayList<String>(elements.size());
for (PowerSupply element : elements) {
ids.add(element.getId());
}
return ids;
}
@Override
public List<String> getPowerDeliveries() {
List<PowerDelivery> elements = ((GIModel) resource.getModel()).getDeliveries();
List<String> ids = new ArrayList<String>(elements.size());
for (PowerDelivery element : elements) {
ids.add(element.getId());
}
return ids;
}
@Override
public List<String> getPowerConsumers() {
List<PowerConsumer> elements = ((GIModel) resource.getModel()).getConsumers();
List<String> ids = new ArrayList<String>(elements.size());
for (PowerConsumer element : elements) {
ids.add(element.getId());
}
return ids;
}
private void disconnectPowerSource(PowerSource powerSource) {
// check consumers
for (PowerConsumer consumer : ((GIModel) resource.getModel()).getConsumers()) {
for (PowerReceptor receptor : consumer.getPowerReceptors()) {
if (powerSource.equals(receptor.getAttachedTo()))
receptor.setAttachedTo(null);
}
}
// check deliveries
for (PowerDelivery delivery : ((GIModel) resource.getModel()).getDeliveries()) {
for (PowerReceptor receptor : delivery.getPowerReceptors()) {
if (powerSource.equals(receptor.getAttachedTo()))
receptor.setAttachedTo(null);
}
}
}
@Override
public List<String> getPowerSupplySources(String supplyId) throws ModelElementNotFoundException {
List<PowerSource> sources = getPowerSupply(supplyId).getPowerSources();
List<String> ids = new ArrayList<String>(sources.size());
for (PowerSource source : sources) {
ids.add(source.getId());
}
return ids;
}
@Override
public PowerSource getPowerSupplySource(String supplyId, String sourceId) throws ModelElementNotFoundException {
return (PowerSource) GIMController.getSocketById(getPowerSupply(supplyId).getPowerSources(), sourceId);
}
@Override
public String addPowerSupplySource(String supplyId, String sourceId, PowerSource source) throws ModelElementNotFoundException {
source.setId(sourceId);
getPowerSupply(supplyId).getPowerSources().add(source);
return sourceId;
}
@Override
public void removePowerSupplySource(String supplyId, String sourceId) throws ModelElementNotFoundException {
getPowerSupply(supplyId).getPowerSources().remove(getPowerSupplySource(supplyId, sourceId));
}
@Override
public List<String> getPowerDeliverySources(String deliveryId) throws ModelElementNotFoundException {
List<PowerSource> sources = getPowerDelivery(deliveryId).getPowerSources();
List<String> ids = new ArrayList<String>(sources.size());
for (PowerSource source : sources) {
ids.add(source.getId());
}
return ids;
}
@Override
public PowerSource getPowerDeliverySource(String deliveryId, String sourceId) throws ModelElementNotFoundException {
return (PowerSource) GIMController.getSocketById(getPowerDelivery(deliveryId).getPowerSources(), sourceId);
}
@Override
public String addPowerDeliverySource(String deliveryId, String sourceId, PowerSource source) throws ModelElementNotFoundException {
source.setId(sourceId);
getPowerDelivery(deliveryId).getPowerSources().add(source);
return sourceId;
}
@Override
public void removePowerDeliverySource(String deliveryId, String sourceId) throws ModelElementNotFoundException {
getPowerDelivery(deliveryId).getPowerSources().remove(getPowerDeliverySource(deliveryId, sourceId));
}
@Override
public List<String> getPowerDeliveryReceptors(String deliveryId) throws ModelElementNotFoundException {
List<PowerReceptor> receptors = getPowerDelivery(deliveryId).getPowerReceptors();
List<String> ids = new ArrayList<String>(receptors.size());
for (PowerReceptor receptor : receptors) {
ids.add(receptor.getId());
}
return ids;
}
@Override
public PowerReceptor getPowerDeliveryReceptor(String deliveryId, String receptorId) throws ModelElementNotFoundException {
return (PowerReceptor) GIMController.getSocketById(getPowerDelivery(deliveryId).getPowerReceptors(), receptorId);
}
@Override
public String addPowerDeliveryReceptor(String deliveryId, String receptorId, PowerReceptor receptor) throws ModelElementNotFoundException {
receptor.setId(receptorId);
getPowerDelivery(deliveryId).getPowerReceptors().add(receptor);
return receptorId;
}
@Override
public void removePowerDeliveryReceptor(String deliveryId, String receptorId) throws ModelElementNotFoundException {
getPowerDelivery(deliveryId).getPowerReceptors().remove(getPowerDeliveryReceptor(deliveryId, receptorId));
}
@Override
public List<String> getPowerConsumerReceptors(String consumerId) throws ModelElementNotFoundException {
List<PowerReceptor> receptors = getPowerConsumer(consumerId).getPowerReceptors();
List<String> ids = new ArrayList<String>(receptors.size());
for (PowerReceptor receptor : receptors) {
ids.add(receptor.getId());
}
return ids;
}
@Override
public PowerReceptor getPowerConsumerReceptor(String consumerId, String receptorId) throws ModelElementNotFoundException {
return (PowerReceptor) GIMController.getSocketById(getPowerConsumer(consumerId).getPowerReceptors(), receptorId);
}
@Override
public String addPowerConsumerReceptor(String consumerId, String receptorId, PowerReceptor receptor) throws ModelElementNotFoundException {
receptor.setId(receptorId);
getPowerConsumer(consumerId).getPowerReceptors().add(receptor);
return receptorId;
}
@Override
public void removePowerConsumerReceptor(String consumerId, String receptorId) throws ModelElementNotFoundException {
getPowerConsumer(consumerId).getPowerReceptors().remove(getPowerConsumerReceptor(consumerId, receptorId));
}
@Override
public void setPowerSupplySourceEnergy(String supplyId, String sourceId, String energyName, String energyClass, String energyType,
double co2perUnit, double greenPercentage) throws ModelElementNotFoundException {
setPowerSupplySourceEnergy(supplyId, sourceId, buildEnergy(energyName, energyClass, energyType, co2perUnit, greenPercentage));
}
@Override
public void setPowerSupplySourceEnergy(String supplyId, String sourceId, Energy energy) throws ModelElementNotFoundException {
getPowerSupplySource(supplyId, sourceId).setEnergy(energy);
}
@Override
public void setPowerSupplySourcePrice(String supplyId, String sourceId, double pricePerUnit) throws ModelElementNotFoundException {
getPowerSupplySource(supplyId, sourceId).setPricePerUnit(pricePerUnit);
}
@Override
public void setPowerSupplySourceRatedLoad(String supplyId, String sourceId, double inputVoltage, double inputCurrent, double inputPower,
double inputEnergy) throws ModelElementNotFoundException {
}
@Override
public void setPowerSupplySourceRatedLoad(String supplyId, String sourceId, RatedLoad ratedLoad) throws ModelElementNotFoundException {
getPowerSupplySource(supplyId, sourceId).setRatedLoad(ratedLoad);
}
@Override
public void setPowerDeliverySourceRatedLoad(String deliveryId, String sourceId, double voltage, double current, double power, double energy)
throws ModelElementNotFoundException {
RatedLoad load = new RatedLoad();
load.setVoltage(voltage);
load.setCurrent(current);
load.setPower(power);
load.setEnergy(energy);
setPowerDeliverySourceRatedLoad(deliveryId, sourceId, load);
}
@Override
public void setPowerDeliverySourceRatedLoad(String deliveryId, String sourceId, RatedLoad load) throws ModelElementNotFoundException {
getPowerDeliverySource(deliveryId, sourceId).setRatedLoad(load);
}
@Override
public void setPowerDeliveryReceptorRatedLoad(String deliveryId, String receptorId, RatedLoad load) throws ModelElementNotFoundException {
getPowerDeliveryReceptor(deliveryId, receptorId).setRatedLoad(load);
}
@Override
public void setPowerDeliverySourceEnergy(String deliveryId, String sourceId, String energyName, String energyClass, String energyType,
double co2perUnit, double greenPercentage) throws ModelElementNotFoundException {
setPowerDeliverySourceEnergy(deliveryId, sourceId, buildEnergy(energyName, energyClass, energyType, co2perUnit, greenPercentage));
}
@Override
public void setPowerDeliverySourceEnergy(String deliveryId, String sourceId, Energy energy) throws ModelElementNotFoundException {
getPowerDeliverySource(deliveryId, sourceId).setEnergy(energy);
}
@Override
public void setPowerDeliverySourcePrice(String deliveryId, String sourceId, double pricePerUnit) throws ModelElementNotFoundException {
getPowerDeliverySource(deliveryId, sourceId).setPricePerUnit(pricePerUnit);
}
@Override
public void setPowerConsumerReceptorRatedLoad(String consumerId, String receptorId, RatedLoad load) throws ModelElementNotFoundException {
getPowerConsumerReceptor(consumerId, receptorId).setRatedLoad(load);
}
@Override
public void setPowerDeliveryReceptorRatedLoad(String deliveryId, String receptorId, double voltage, double current, double power, double energy)
throws ModelElementNotFoundException {
setPowerDeliveryReceptorRatedLoad(deliveryId, receptorId, buildRatedLoad(voltage, current, power, energy));
}
@Override
public void setPowerConsumerReceptorRatedLoad(String consumerId, String receptorId, double voltage, double current, double power, double energy)
throws ModelElementNotFoundException {
setPowerConsumerReceptorRatedLoad(consumerId, receptorId, buildRatedLoad(voltage, current, power, energy));
}
private RatedLoad buildRatedLoad(double voltage, double current, double power, double energy) {
RatedLoad load = new RatedLoad();
load.setVoltage(voltage);
load.setCurrent(current);
load.setPower(power);
load.setEnergy(energy);
return load;
}
private Energy buildEnergy(String energyName, String energyClass, String energyType,
double co2perUnit, double greenPercentage) {
return new Energy(EnergyClass.fromString(energyClass), EnergyType.fromString(energyType), co2perUnit, greenPercentage);
}
}