Commit de81fe48 authored by Julian Zobel's avatar Julian Zobel 🦄
Browse files

Default resource container for peerfact default resource model

parent ee0c178a
/*
* Copyright (c) 2005-2010 KOM – Multimedia Communications Lab
*
* This file is part of PeerfactSim.KOM.
*
* PeerfactSim.KOM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* PeerfactSim.KOM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PeerfactSim.KOM. If not, see <http://www.gnu.org/licenses/>.
*
*/
package de.tud.kom.p2psim.impl.resourcedistribution;
import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.DistributableResource;
import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.DistributableResource.RESOURCE_TYPE;
public class DefaultResourceContainer implements DistributableResource {
private final RESOURCE_TYPE resourceType;
private final String name;
private final double maxValue;
private double value;
private boolean vital;
public DefaultResourceContainer(RESOURCE_TYPE resourceType, String name, int maxValue, int initialValue, boolean vital) {
this.resourceType = resourceType;
this.name = name;
this.maxValue = maxValue;
this.value = initialValue;
this.vital = vital;
}
@Override
public boolean isEmpty() {
if(value <= 0) return true;
return false;
}
@Override
public RESOURCE_TYPE getResourceType() {
return resourceType;
}
@Override
public void setAmount(double amount) {
if(amount > maxValue)
value = maxValue;
else
value = amount;
}
@Override
public void setPercentagedAmount(double percentage) {
double percentageAmount = maxValue * percentage;
this.setAmount(percentageAmount);
}
@Override
public double getAmount() {
return value;
}
@Override
public double getMaxAmount() {
return maxValue;
}
@Override
public double fill(double amount) {
double newAmount = value + amount;
this.setAmount(newAmount);
return value;
}
@Override
public double extract(double amount) {
if(amount > value) {
setAmount(value - amount);
return amount;
}
else {
double rest = value;
setAmount(0);
return rest;
}
}
}
......@@ -12,14 +12,11 @@ import de.tudarmstadt.maki.simonstrator.api.Monitor;
import de.tudarmstadt.maki.simonstrator.api.Time;
import de.tudarmstadt.maki.simonstrator.api.component.ComponentNotAvailableException;
import de.tudarmstadt.maki.simonstrator.api.component.core.MonitorComponent;
import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.DistributableResourceInventory;
import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.ResourceConsumer;
import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.ResourceConsumptionState;
import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.DistributableResource;
import de.tudarmstadt.maki.simonstrator.api.component.resourcedistribution.DistributableResource.RESOURCE_TYPE;
import de.tudarmstadt.maki.simonstrator.api.component.sensor.resource.ResourceSensor;
import de.tudarmstadt.maki.simonstrator.overlay.resourcedistribution.resources.RefillableResource;
import de.tudarmstadt.maki.simonstrator.overlay.resourcedistribution.resources.ResourceInventory;
import java.util.HashMap;
import java.util.HashSet;
......@@ -28,11 +25,9 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.maven.model.Resource;
public class DefaultResourceModel implements ResourceModel, ResourceSensor, EnergyEventListener {
private SimHost host;
private DistributableResourceInventory resourceInformation;
private Map<RESOURCE_TYPE, DistributableResource> resourceInformation;
private Set<ResourceChangeListener> resourceChangeListeners;
private Map<EnergyComponent, RESOURCE_TYPE> energyComponents = new HashMap<>();
......@@ -40,7 +35,7 @@ public class DefaultResourceModel implements ResourceModel, ResourceSensor, Ener
public DefaultResourceModel(SimHost host) {
this.host = host;
resourceInformation = new DistributableResourceInventory();
resourceInformation = new HashMap<RESOURCE_TYPE, DistributableResource>();
resourceChangeListeners = new HashSet<>();
}
......@@ -68,10 +63,10 @@ public class DefaultResourceModel implements ResourceModel, ResourceSensor, Ener
@Override
public void registerResourceType(RESOURCE_TYPE resourceType, String name, int maxValue, int initialValue, boolean vital) {
if (resourceInformation.hasResourceType(resourceType)) return;
if (resourceInformation.containsKey(resourceType)) return;
DistributableResource resource = new RefillableResource(resourceType, initialValue, maxValue);
resourceInformation.addResource(resource);
DistributableResource resource = new DefaultResourceContainer(resourceType, name, maxValue, initialValue, vital);
resourceInformation.put(resourceType, resource);
}
@Override
......@@ -86,7 +81,7 @@ public class DefaultResourceModel implements ResourceModel, ResourceSensor, Ener
@Override
public void registerComponent(EnergyComponent comp, RESOURCE_TYPE resourceType) {
if (!resourceInformation.hasResourceType(resourceType)) {
if (!resourceInformation.containsKey(resourceType)) {
throw new IllegalArgumentException("Unknown resource " + resourceType.toString());
}
comp.setEnergyEventListener(this);
......@@ -95,7 +90,7 @@ public class DefaultResourceModel implements ResourceModel, ResourceSensor, Ener
@Override
public void fillResourceUnits(RESOURCE_TYPE resourceType, double resourceUnits) {
if (!resourceInformation.hasResourceType(resourceType)) {
if (!resourceInformation.containsKey(resourceType)) {
throw new IllegalArgumentException("Unknown resource " + resourceType.toString());
}
if (resourceUnits < 0) {
......@@ -103,7 +98,7 @@ public class DefaultResourceModel implements ResourceModel, ResourceSensor, Ener
resourceUnits));
}
resourceInformation.getResourceByType(resourceType).fill(resourceUnits);
resourceInformation.get(resourceType).fill(resourceUnits);
}
@Override
......@@ -113,7 +108,7 @@ public class DefaultResourceModel implements ResourceModel, ResourceSensor, Ener
@Override
public void setResourcePercentage(RESOURCE_TYPE resourceType, double resourcePercentage) {
if (!resourceInformation.hasResourceType(resourceType)) {
if (!resourceInformation.containsKey(resourceType)) {
throw new IllegalArgumentException("Unknown resource " + resourceType.toString());
}
......@@ -121,7 +116,7 @@ public class DefaultResourceModel implements ResourceModel, ResourceSensor, Ener
throw new IllegalArgumentException(String.format("Number of resource units must be between 0 and 1, %f given", resourcePercentage));
}
resourceInformation.getResourceByType(resourceType).setPercentagedAmount(resourcePercentage);
resourceInformation.get(resourceType).setPercentagedAmount(resourcePercentage);
}
@Override
......@@ -138,9 +133,9 @@ public class DefaultResourceModel implements ResourceModel, ResourceSensor, Ener
@Override
public List<RESOURCE_TYPE> getResourceTypes() {
List<RESOURCE_TYPE> resourceTypes = new LinkedList<RESOURCE_TYPE>();
for(DistributableResource res : resourceInformation.getListOfResources())
for(RESOURCE_TYPE res : resourceInformation.keySet())
{
resourceTypes.add(res.getResourceType());
resourceTypes.add(res);
}
return resourceTypes;
......@@ -148,26 +143,26 @@ public class DefaultResourceModel implements ResourceModel, ResourceSensor, Ener
@Override
public String getName(RESOURCE_TYPE resourceType) {
if (!resourceInformation.hasResourceType(resourceType)) {
if (!resourceInformation.containsKey(resourceType)) {
return null;
}
return resourceInformation.getResourceByType(resourceType).toString();
return resourceInformation.get(resourceType).toString();
}
@Override
public double getResourceCount(RESOURCE_TYPE resourceType) {
checkExistence(resourceType);
return resourceInformation.getResourceAmountByType(resourceType);
return resourceInformation.get(resourceType).getAmount();
}
@Override
public double getMaxResourceCount(RESOURCE_TYPE resourceType) {
checkExistence(resourceType);
return resourceInformation.getResourceByType(resourceType).getMaxAmount();
return resourceInformation.get(resourceType).getMaxAmount();
}
private void checkExistence(RESOURCE_TYPE resourceType) {
if (!resourceInformation.hasResourceType(resourceType)) {
if (!resourceInformation.containsKey(resourceType)) {
throw new IllegalArgumentException("Unknown resource type " + resourceType);
}
}
......@@ -175,7 +170,7 @@ public class DefaultResourceModel implements ResourceModel, ResourceSensor, Ener
@Override
public void switchedState(EnergyComponent component, EnergyState oldState, EnergyState newState, long
timeSpentInOldState) {
DistributableResource resource = resourceInformation.getResourceByType(energyComponents.get(component));
DistributableResource resource = resourceInformation.get(energyComponents.get(component));
resource.extract((int) (oldState.getEnergyConsumption() *
((double) timeSpentInOldState / (double) Time.SECOND)));
......@@ -191,7 +186,7 @@ public class DefaultResourceModel implements ResourceModel, ResourceSensor, Ener
@Override
public boolean turnOn(EnergyComponent component) {
return !resourceInformation.getResourceByType(energyComponents.get(component)).isEmpty();
return !resourceInformation.get(energyComponents.get(component)).isEmpty();
}
private void notifyListeners(DistributableResource resource, double oldValue) {
......
......@@ -146,7 +146,7 @@ public class ResourceCollectionMovementMonitor implements SimHostComponent, Loca
}
protected void transferResourcesFromDistributor(ResourceDistributor distributor, RESOURCE_TYPE resourceType) {
double resourcesGot = distributor.takeResources(resourceType, consumer.getDemand(resourceType));
double resourcesGot = distributor.takeResources(resourceType, consumer.getDemand());
resourceModel.fillResourceUnits(resourceType, resourcesGot);
if (analyzer != null) {
analyzer.visitedResourceDistributor(consumer.getHost().getId(), distributor.getBeaconID(), resourceType, resourcesGot, Time.getCurrentTime());
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment