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
API
Commits
11114191
Commit
11114191
authored
Aug 11, 2015
by
Björn Richerzhagen
Browse files
SiS: updates of InfoProperties + RequestProperties
SiS: Data callback contains InfoProperties
parent
3f93aecb
Changes
9
Show whitespace changes
Inline
Side-by-side
src/de/tudarmstadt/maki/simonstrator/api/component/monitoring/MonitoringComponent.java
View file @
11114191
...
...
@@ -48,11 +48,13 @@ public interface MonitoringComponent extends HostComponent {
* the {@link SiSType}
* @param request
* additional request properties
* @param resultCallback
* triggered, once the result is available
* @return
*/
public
<
T
>
MonitoringHandle
collectAggregatedObservation
(
AggregationFunction
aggFunction
,
SiSType
<
T
>
type
,
SiSRequest
request
,
Monitoring
State
Callback
state
Callback
);
SiSRequest
request
,
Monitoring
Result
Callback
<
T
>
result
Callback
);
/**
* Requests raw values (i.e., per node) for the given type according to the
...
...
@@ -71,7 +73,7 @@ public interface MonitoringComponent extends HostComponent {
* IDs
*/
public
<
T
>
MonitoringHandle
collectRawObservations
(
SiSType
<
T
>
type
,
SiSRequest
request
,
MonitoringStateCallback
stateCallback
);
SiSRequest
request
);
/**
* Stop collecting
...
...
@@ -84,8 +86,8 @@ public interface MonitoringComponent extends HostComponent {
// marker
}
public
interface
Monitoring
State
Callback
{
public
void
onResult
sReady
(
);
public
interface
Monitoring
Result
Callback
<
T
>
{
public
void
onResult
(
T
result
);
}
}
src/de/tudarmstadt/maki/simonstrator/api/component/sis/SiSComponent.java
View file @
11114191
...
...
@@ -62,15 +62,6 @@ public interface SiSComponent extends HostComponent {
*/
public
SiSInformationConsumer
get
();
/**
* For more complex requests and provider interactions, you might need to
* describe your information. Use the {@link SiSInfoPropertiesFactory} to
* achieve this task.
*
* @return
*/
public
SiSInfoPropertiesFactory
describe
();
/**
* Use this method to test whether the provided {@link INodeID} corresponds
* to our own local node. If nodeID == null, this has to return true!
...
...
src/de/tudarmstadt/maki/simonstrator/api/component/sis/SiSDataCallback.java
View file @
11114191
...
...
@@ -47,4 +47,11 @@ public interface SiSDataCallback<T> {
public
T
getValue
(
SiSProviderHandle
providerHandle
)
throws
InformationNotAvailableException
;
/**
* Description of the data provided via this callback.
*
* @return
*/
public
SiSInfoProperties
getInfoProperties
();
}
src/de/tudarmstadt/maki/simonstrator/api/component/sis/SiSInfoProperties.java
View file @
11114191
...
...
@@ -20,6 +20,9 @@
package
de.tudarmstadt.maki.simonstrator.api.component.sis
;
import
de.tudarmstadt.maki.simonstrator.api.Time
;
/**
* A description object that characterizes a given information in the SiS. This
...
...
@@ -45,6 +48,8 @@ public class SiSInfoProperties implements Cloneable {
private
Class
<?>
sourceComponent
=
null
;
private
long
lastUpdateTimestamp
=
Time
.
getCurrentTime
();
/*
* Here, we should collect some ideas for common description properties.
*/
...
...
@@ -57,6 +62,14 @@ public class SiSInfoProperties implements Cloneable {
* TODO accuracy of the information
*/
public
void
setLastUpdateTimestamp
()
{
this
.
lastUpdateTimestamp
=
Time
.
getCurrentTime
();
}
public
long
getLastUpdateTimestamp
()
{
return
lastUpdateTimestamp
;
}
/**
* Later, we might want to define scopes in a more flexible way?
*
...
...
src/de/tudarmstadt/maki/simonstrator/api/component/sis/SiSInfoPropertiesFactory.java
deleted
100644 → 0
View file @
3f93aecb
/*
* Copyright (c) 2005-2010 KOM – Multimedia Communications Lab
*
* This file is part of Simonstrator.KOM.
*
* Simonstrator.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.tudarmstadt.maki.simonstrator.api.component.sis
;
import
de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInfoProperties.SiSScope
;
/**
* Convenience class that aids in creating {@link SiSInfoProperties} objects for
* a number of common scenarios
*
* @author Bjoern Richerzhagen
*
*/
public
class
SiSInfoPropertiesFactory
{
/**
* {@link SiSInfoProperties} for local data from a given source
*
* @return
*/
public
<
T
>
SiSInfoProperties
localDataFrom
(
Class
<
T
>
source
)
{
SiSInfoProperties
prop
=
new
SiSInfoProperties
();
prop
.
setSourceComponent
(
source
).
setScope
(
SiSScope
.
NODE_LOCAL
);
return
prop
;
}
public
SiSInfoProperties
globalView
()
{
SiSInfoProperties
prop
=
new
SiSInfoProperties
();
prop
.
setScope
(
SiSScope
.
GLOBAL
);
return
prop
;
}
}
src/de/tudarmstadt/maki/simonstrator/api/component/sis/SiSInformationConsumer.java
View file @
11114191
...
...
@@ -167,35 +167,5 @@ public interface SiSInformationConsumer {
public
<
T
>
void
rawObservations
(
SiSType
<
T
>
type
,
SiSRequest
request
,
SiSResultCallback
<
Map
<
INodeID
,
T
>>
callback
);
/**
* Create a plain request object for the given {@link SiSInfoProperties}.
* Use {@link SiSInfoProperties}.NONE in case you do not want to specify the
* information quality.
*
* @param infoProperties
* description of the desired information properties. Use
* {@link SiSInfoProperties}.NONE if you do not want to specify
* these.
*
* @return modifiable request object
*/
public
SiSRequest
newRequest
(
SiSInfoProperties
infoProperties
);
/**
* Create a plain request object for the given {@link SiSInfoProperties}.
* Use {@link SiSInfoProperties}.NONE in case you do not want to specify the
* information quality.
*
* @param infoProperties
* description of the desired information properties. Use
* {@link SiSInfoProperties}.NONE if you do not want to specify
* these.
* @param timeout
*
* @return modifiable request object
*/
public
SiSRequest
newRequest
(
SiSInfoProperties
infoProperties
,
long
timeout
);
}
src/de/tudarmstadt/maki/simonstrator/api/component/sis/SiSInformationProvider.java
View file @
11114191
...
...
@@ -46,12 +46,11 @@ public interface SiSInformationProvider {
*
* @param type
* @param dataCallback
*
@param information
Properties
*
containing the {@link SiSInfo
Properties
}
* @return
*/
public
<
T
>
SiSProviderHandle
localNodeState
(
SiSType
<
T
>
type
,
SiSDataCallback
<
T
>
dataCallback
,
SiSInfoProperties
informationProperties
);
SiSDataCallback
<
T
>
dataCallback
);
/**
* This method denotes that state about another node has been collected. In
...
...
@@ -62,12 +61,11 @@ public interface SiSInformationProvider {
* @param observedNode
* @param type
* @param dataCallback
*
@param information
Properties
*
containing the {@link SiSInfo
Properties
}
* @return
*/
public
<
T
>
SiSProviderHandle
observedNodeState
(
INodeID
observedNode
,
SiSType
<
T
>
type
,
SiSDataCallback
<
T
>
dataCallback
,
SiSInfoProperties
informationProperties
);
SiSType
<
T
>
type
,
SiSDataCallback
<
T
>
dataCallback
);
/**
* Revoke access to the information registered with the provided handle
...
...
src/de/tudarmstadt/maki/simonstrator/api/component/sis/SiSInformationResolver.java
View file @
11114191
...
...
@@ -23,6 +23,7 @@ package de.tudarmstadt.maki.simonstrator.api.component.sis;
import
java.util.Map
;
import
de.tudarmstadt.maki.simonstrator.api.common.graph.INodeID
;
import
de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInformationConsumer.AggregationFunction
;
import
de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInformationProvider.SiSProviderHandle
;
import
de.tudarmstadt.maki.simonstrator.api.component.sis.exception.InformationNotAvailableException
;
import
de.tudarmstadt.maki.simonstrator.api.component.sis.type.SiSType
;
...
...
@@ -62,6 +63,14 @@ public interface SiSInformationResolver {
public
<
T
>
Map
<
INodeID
,
T
>
getAllLocalObservations
(
SiSType
<
T
>
type
,
SiSRequest
request
);
public
<
T
>
void
aggregatedObservation
(
AggregationFunction
aggFunction
,
SiSType
<
T
>
type
,
SiSRequest
request
,
SiSResultCallback
<
T
>
callback
);
public
<
T
>
void
rawObservations
(
SiSType
<
T
>
type
,
SiSRequest
request
,
SiSResultCallback
<
Map
<
INodeID
,
T
>>
callback
);
/**
* Adds a local resolver to the SiS
*
...
...
@@ -69,12 +78,10 @@ public interface SiSInformationResolver {
* (optional, can be null - null meaning: local node)
* @param type
* @param dataCallback
* @param informationProperties
* @return
*/
public
<
T
>
SiSProviderHandle
addObservationProvider
(
INodeID
observedNode
,
SiSType
<
T
>
type
,
SiSDataCallback
<
T
>
dataCallback
,
SiSInfoProperties
informationProperties
);
SiSType
<
T
>
type
,
SiSDataCallback
<
T
>
dataCallback
);
/**
* Removes the local provider with the given handle
...
...
src/de/tudarmstadt/maki/simonstrator/api/component/sis/SiSRequest.java
View file @
11114191
...
...
@@ -20,6 +20,8 @@
package
de.tudarmstadt.maki.simonstrator.api.component.sis
;
import
de.tudarmstadt.maki.simonstrator.api.component.sis.SiSInfoProperties.SiSScope
;
/**
* Properties that are exclusive to requests (e.g., a tolerable timeout,
* thresholds, etc.). This is implemented in the API to ensure compatibility
...
...
@@ -33,34 +35,92 @@ public class SiSRequest implements Cloneable {
/**
* "null" request
*/
public
static
final
SiSRequest
NONE
=
new
SiSRequest
(
SiSInfoProperties
.
NONE
,
0
);
public
static
final
SiSRequest
NONE
=
new
SiSRequest
();
private
long
timeout
=
0
;
private
long
maxInformationAge
=
Long
.
MAX_VALUE
;
private
final
SiSInfoProperties
infoProperties
;
private
SiSScope
scope
=
null
;
private
final
long
timeout
;
private
Class
<?>
sourceComponent
=
null
;
public
SiSRequest
()
{
this
(
0
,
Long
.
MAX_VALUE
,
null
,
null
);
}
public
SiSRequest
(
SiSInfoProperties
infoProperties
,
long
timeout
)
{
this
.
infoProperties
=
infoProperties
;
public
SiSRequest
(
long
timeout
,
long
maxInformationAge
,
SiSScope
scope
,
Class
<?>
sourceComponent
)
{
this
.
timeout
=
timeout
;
this
.
maxInformationAge
=
maxInformationAge
;
this
.
scope
=
scope
;
this
.
sourceComponent
=
sourceComponent
;
}
protected
SiSRequest
(
SiSRequest
request
)
{
// TODO clone
this
.
timeout
=
request
.
timeout
;
this
.
maxInformationAge
=
request
.
maxInformationAge
;
this
.
scope
=
request
.
scope
;
this
.
sourceComponent
=
request
.
sourceComponent
;
}
/**
* If the request has an attached {@link SiSInfoProperties} object, it is
* returned by this method.
*
* @return
{@link SiSInfoProperties} or null.
* @return
*/
public
SiSInfoProperties
getInfoProperties
()
{
return
infoProperties
;
public
long
getTimeout
()
{
return
timeout
;
}
public
long
getMaxInformationAge
()
{
return
maxInformationAge
;
}
/**
* Set the scope of the respective information
*
* @param scope
* @return
*/
public
long
getTimeout
()
{
return
timeout
;
public
SiSRequest
setScope
(
SiSScope
scope
)
{
this
.
scope
=
scope
;
return
this
;
}
/**
* Scope of this request
*
* @return scope or null
*/
public
SiSScope
getScope
()
{
return
scope
;
}
/**
* Optional filter based on the source component(s) of the data (e.g., only
* Bypass-Data). This is NOT limited to HostComponents.
*
* @param component
* interface of the (desired) source component. This supports
* type inheritance - if you specify e.g., PubSubComponent, you
* will get data from any source extending that interface, so
* from BypassPubSubComponent for example.
*
* @return reference to the current properties instance to support chaining
*/
public
<
T
>
SiSRequest
setSourceComponent
(
Class
<
T
>
sourceComponent
)
{
this
.
sourceComponent
=
sourceComponent
;
return
this
;
}
/**
* Source component of this information
*
* @return source component or null
*/
public
Class
<?>
getSourceComponent
()
{
return
sourceComponent
;
}
/*
...
...
@@ -74,13 +134,29 @@ public class SiSRequest implements Cloneable {
@Override
public
SiSRequest
clone
()
{
return
new
SiSRequest
(
infoProperties
.
clone
(),
timeout
);
// TODO add inner request parameters, once they are defined!
return
new
SiSRequest
(
this
);
}
@Override
public
String
toString
()
{
return
"SiSRequest ["
+
infoProperties
+
"]"
;
/**
* Has to return true, if the given src described by
* {@link SiSInfoProperties} satisfies the request.
*
* @param src
* @return
*/
public
boolean
satisfiableBy
(
SiSInfoProperties
src
)
{
if
(
this
.
getScope
()
!=
null
&&
getScope
()
!=
src
.
getScope
())
{
return
false
;
}
if
(
getSourceComponent
()
!=
null
)
{
if
(
src
.
getSourceComponent
()
==
null
)
{
return
false
;
}
if
(!
getSourceComponent
()
.
isAssignableFrom
(
src
.
getSourceComponent
()))
{
return
false
;
}
}
return
true
;
}
}
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