Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Simonstrator
PeerfactSim.KOM
Commits
de81fe48
Commit
de81fe48
authored
Jan 31, 2018
by
Julian Zobel
🦄
Browse files
Default resource container for peerfact default resource model
parent
ee0c178a
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/de/tud/kom/p2psim/impl/resourcedistribution/DefaultResourceContainer.java
0 → 100644
View file @
de81fe48
/*
* 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
;
}
}
}
src/de/tud/kom/p2psim/impl/resourcedistribution/DefaultResourceModel.java
View file @
de81fe48
...
...
@@ -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
DistributableResource
Inventory
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
DistributableResource
Inventory
();
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
R
ef
illable
Resource
(
resourceType
,
initialValue
,
maxValue
);
resourceInformation
.
addR
esource
(
resource
);
DistributableResource
resource
=
new
D
ef
ault
Resource
Container
(
resourceType
,
name
,
maxValue
,
initialValue
,
vital
);
resourceInformation
.
put
(
r
esource
Type
,
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
.
get
ResourceByType
(
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
.
get
ResourceByType
(
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
.
get
ResourceByType
(
resourceType
).
toString
();
return
resourceInformation
.
get
(
resourceType
).
toString
();
}
@Override
public
double
getResourceCount
(
RESOURCE_TYPE
resourceType
)
{
checkExistence
(
resourceType
);
return
resourceInformation
.
get
R
esource
AmountByType
(
resourceType
);
return
resourceInformation
.
get
(
r
esource
Type
).
getAmount
(
);
}
@Override
public
double
getMaxResourceCount
(
RESOURCE_TYPE
resourceType
)
{
checkExistence
(
resourceType
);
return
resourceInformation
.
get
ResourceByType
(
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
.
get
ResourceByType
(
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
.
get
ResourceByType
(
energyComponents
.
get
(
component
)).
isEmpty
();
return
!
resourceInformation
.
get
(
energyComponents
.
get
(
component
)).
isEmpty
();
}
private
void
notifyListeners
(
DistributableResource
resource
,
double
oldValue
)
{
...
...
src/de/tud/kom/p2psim/impl/topology/movement/resourceaware/ResourceCollectionMovementMonitor.java
View file @
de81fe48
...
...
@@ -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
());
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment