Package jadex.bridge.service.component
Class RequiredServicesComponentFeature
- java.lang.Object
-
- jadex.bridge.component.impl.AbstractComponentFeature
-
- jadex.bridge.service.component.RequiredServicesComponentFeature
-
- All Implemented Interfaces:
IComponentFeature
,IExternalComponentFeature
,IExternalRequiredServicesFeature
,IInternalRequiredServicesFeature
,IInternalServiceMonitoringFeature
,IRequiredServicesFeature
public class RequiredServicesComponentFeature extends jadex.bridge.component.impl.AbstractComponentFeature implements IRequiredServicesFeature, IInternalServiceMonitoringFeature, IInternalRequiredServicesFeature
Feature for provided services.
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.List<Tuple2<ServiceQuery<?>,SubscriptionIntermediateDelegationFuture<?>>>
delayedremotequeries
protected java.util.Map<java.lang.String,RequiredServiceInfo>
requiredserviceinfos
The required service infos.protected ISearchQueryManagerService
sqms
protected java.util.Set<SubscriptionIntermediateFuture<ServiceCallEvent>>
subscriptions
The current subscriptions.
-
Constructor Summary
Constructors Constructor Description RequiredServicesComponentFeature(IInternalAccess component, ComponentCreationInfo cinfo)
Factory method constructor for instance level.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <T> ISubscriptionIntermediateFuture<T>
addQuery(ServiceQuery<T> query)
Add a service query.<T> ISubscriptionIntermediateFuture<T>
addQuery(ServiceQuery<T> query, long timeout)
Add a query for a declared required service.<T> ISubscriptionIntermediateFuture<T>
addQuery(java.lang.Class<T> type)
Add a query for a declared required service.<T> ISubscriptionIntermediateFuture<T>
addQuery(java.lang.String name)
Add a query for a declared required service.protected void
addRequiredServiceInfos(RequiredServiceInfo[] requiredservices)
Add required services for a given prefix.protected IService
addRequiredServiceProxy(IService service, RequiredServiceInfo info)
protected <T> void
enhanceQuery(ServiceQuery<T> query, boolean multi)
Enhance a query before processing.<T> T
getLocalService(ServiceQuery<T> query)
Search for matching services and provide first result.<T> T
getLocalService(java.lang.Class<T> type)
Resolve a required service of a given type.<T> T
getLocalService(java.lang.String name)
Resolve a declared required service of a given name.<T> T
getLocalService0(java.lang.Class<T> type)
Resolve a required service of a given type.<T> java.util.Collection<T>
getLocalServices(ServiceQuery<T> query)
Search for all matching services.<T> java.util.Collection<T>
getLocalServices(java.lang.Class<T> type)
Resolve a required services of a given type.<T> java.util.Collection<T>
getLocalServices(java.lang.String name)
Resolve a required services of a given name.<T> T
getRawService(java.lang.Class<T> type)
Get a service raw (i.e.<T> java.util.Collection<T>
getRawServices(java.lang.Class<T> type)
Get a service raw (i.e.<T> IFuture<T>
getService(java.lang.Class<T> type)
Resolve a required service of a given type.<T> IFuture<T>
getService(java.lang.String name)
Resolve a declared required service of a given name.ISubscriptionIntermediateFuture<ServiceCallEvent>
getServiceEvents()
Listen to service call events (call, result and commands).protected RequiredServiceInfo
getServiceInfo(java.lang.Class<?> type)
Get the required service info for a type.RequiredServiceInfo
getServiceInfo(java.lang.String name)
Get the required service info for a name.RequiredServiceInfo[]
getServiceInfos()
Get the required services.IService
getServiceProxy(IServiceIdentifier sid, RequiredServiceInfo info)
Create the user-facing object from the received search or query result.<T> ServiceQuery<T>
getServiceQuery(RequiredServiceInfo info)
When searching for declared service -> map required service declaration to service query.ServiceQuery<?>
getServiceQuery(java.lang.String name)
Get a service query for a required service info (as defined in the agent under that name).<T> ITerminableIntermediateFuture<T>
getServices(java.lang.Class<T> type)
Resolve a required services of a given type.<T> ITerminableIntermediateFuture<T>
getServices(java.lang.String name)
Resolve a required services of a given name.boolean
hasUserBody()
Check if the feature potentially executed user code in body.IFuture<java.lang.Void>
init()
Init the required servicesboolean
isMonitoring()
Check if there is someone monitoring.boolean
isRemote(ServiceQuery<?> query)
Check if a query is potentially remote.void
postServiceEvent(ServiceCallEvent event)
Post a service call event.protected java.lang.Object
processResult(java.lang.Object result, RequiredServiceInfo info)
protected ServiceEvent
processServiceEvent(ServiceEvent event, RequiredServiceInfo info)
Create the user-facing object from the received search or query result.<T> T
resolveLocalService(ServiceQuery<T> query, RequiredServiceInfo info)
Search for matching services and provide first result.<T> java.util.Collection<T>
resolveLocalServices(ServiceQuery<T> query, RequiredServiceInfo info)
Search for all matching services.<T> ISubscriptionIntermediateFuture<T>
resolveQuery(ServiceQuery<T> query, RequiredServiceInfo info)
Query for all matching services.<T> ITerminableFuture<T>
resolveService(ServiceQuery<T> query, RequiredServiceInfo info)
Search for matching services and provide first result.<T> ITerminableIntermediateFuture<T>
resolveServices(ServiceQuery<T> query, RequiredServiceInfo info)
Search for all matching services.<T> IFuture<T>
searchService(ServiceQuery<T> query)
Search for matching services and provide first result.<T> IFuture<T>
searchService(ServiceQuery<T> query, long timeout)
Performs a sustained search for a service.<T> ITerminableIntermediateFuture<T>
searchServices(ServiceQuery<T> query)
Search for all matching services.IFuture<java.lang.Void>
shutdown()
Called when the feature is shutdowned.
-
-
-
Field Detail
-
requiredserviceinfos
protected java.util.Map<java.lang.String,RequiredServiceInfo> requiredserviceinfos
The required service infos.
-
subscriptions
protected java.util.Set<SubscriptionIntermediateFuture<ServiceCallEvent>> subscriptions
The current subscriptions.
-
sqms
protected ISearchQueryManagerService sqms
-
delayedremotequeries
protected java.util.List<Tuple2<ServiceQuery<?>,SubscriptionIntermediateDelegationFuture<?>>> delayedremotequeries
-
-
Constructor Detail
-
RequiredServicesComponentFeature
public RequiredServicesComponentFeature(IInternalAccess component, ComponentCreationInfo cinfo)
Factory method constructor for instance level.
-
-
Method Detail
-
init
public IFuture<java.lang.Void> init()
Init the required services- Specified by:
init
in interfaceIComponentFeature
- Overrides:
init
in classjadex.bridge.component.impl.AbstractComponentFeature
-
hasUserBody
public boolean hasUserBody()
Check if the feature potentially executed user code in body. Allows blocking operations in user bodies by using separate steps for each feature. Non-user-body-features are directly executed for speed. If unsure just return true. ;-)- Specified by:
hasUserBody
in interfaceIComponentFeature
- Overrides:
hasUserBody
in classjadex.bridge.component.impl.AbstractComponentFeature
-
shutdown
public IFuture<java.lang.Void> shutdown()
Called when the feature is shutdowned.- Specified by:
shutdown
in interfaceIComponentFeature
- Overrides:
shutdown
in classjadex.bridge.component.impl.AbstractComponentFeature
-
addRequiredServiceInfos
protected void addRequiredServiceInfos(RequiredServiceInfo[] requiredservices)
Add required services for a given prefix.- Parameters:
prefix
- The name prefix to use.required
- services The required services to set.
-
getService
public <T> IFuture<T> getService(java.lang.String name)
Resolve a declared required service of a given name. Asynchronous method for locally as well as remotely available services.- Specified by:
getService
in interfaceIRequiredServicesFeature
- Parameters:
name
- The service name.- Returns:
- The service.
-
getService
public <T> IFuture<T> getService(java.lang.Class<T> type)
Resolve a required service of a given type. Asynchronous method for locally as well as remotely available services.- Specified by:
getService
in interfaceIRequiredServicesFeature
- Parameters:
type
- The service type.- Returns:
- The service.
-
getServices
public <T> ITerminableIntermediateFuture<T> getServices(java.lang.String name)
Resolve a required services of a given name. Asynchronous method for locally as well as remotely available services.- Specified by:
getServices
in interfaceIRequiredServicesFeature
- Parameters:
name
- The services name.- Returns:
- Each service as an intermediate result and a collection of services as final result.
-
getServices
public <T> ITerminableIntermediateFuture<T> getServices(java.lang.Class<T> type)
Resolve a required services of a given type. Asynchronous method for locally as well as remotely available services.- Specified by:
getServices
in interfaceIRequiredServicesFeature
- Parameters:
type
- The services type.- Returns:
- Each service as an intermediate result and a collection of services as final result.
-
getLocalService
public <T> T getLocalService(java.lang.String name)
Resolve a declared required service of a given name. Synchronous method only for locally available services.- Specified by:
getLocalService
in interfaceIRequiredServicesFeature
- Parameters:
name
- The service name.- Returns:
- The service.
-
getLocalService
public <T> T getLocalService(java.lang.Class<T> type)
Resolve a required service of a given type. Synchronous method only for locally available services.- Specified by:
getLocalService
in interfaceIRequiredServicesFeature
- Parameters:
type
- The service type.- Returns:
- The service.
-
getLocalService0
public <T> T getLocalService0(java.lang.Class<T> type)
Resolve a required service of a given type. Synchronous method only for locally available services.- Specified by:
getLocalService0
in interfaceIRequiredServicesFeature
- Parameters:
type
- The service type.- Returns:
- The service.
-
getLocalServices
public <T> java.util.Collection<T> getLocalServices(java.lang.String name)
Resolve a required services of a given name. Synchronous method only for locally available services.- Specified by:
getLocalServices
in interfaceIRequiredServicesFeature
- Parameters:
name
- The services name.- Returns:
- Each service as an intermediate result and a collection of services as final result.
-
getLocalServices
public <T> java.util.Collection<T> getLocalServices(java.lang.Class<T> type)
Resolve a required services of a given type. Synchronous method only for locally available services.- Specified by:
getLocalServices
in interfaceIRequiredServicesFeature
- Parameters:
type
- The services type.- Returns:
- Each service as an intermediate result and a collection of services as final result.
-
searchService
public <T> IFuture<T> searchService(ServiceQuery<T> query)
Search for matching services and provide first result.- Specified by:
searchService
in interfaceIExternalRequiredServicesFeature
- Parameters:
query
- The search query.- Returns:
- Future providing the corresponding service or ServiceNotFoundException when not found.
-
getLocalService
public <T> T getLocalService(ServiceQuery<T> query)
Search for matching services and provide first result. Synchronous method only for locally available services.- Specified by:
getLocalService
in interfaceIRequiredServicesFeature
- Parameters:
query
- The search query.- Returns:
- Future providing the corresponding service or ServiceNotFoundException when not found.
-
searchServices
public <T> ITerminableIntermediateFuture<T> searchServices(ServiceQuery<T> query)
Search for all matching services.- Specified by:
searchServices
in interfaceIExternalRequiredServicesFeature
- Parameters:
query
- The search query.- Returns:
- Future providing the corresponding services or ServiceNotFoundException when not found.
-
getLocalServices
public <T> java.util.Collection<T> getLocalServices(ServiceQuery<T> query)
Search for all matching services. Synchronous method only for locally available services.- Specified by:
getLocalServices
in interfaceIRequiredServicesFeature
- Parameters:
query
- The search query.- Returns:
- Future providing the corresponding services or ServiceNotFoundException when not found.
-
searchService
public <T> IFuture<T> searchService(ServiceQuery<T> query, long timeout)
Performs a sustained search for a service. Attempts to find a service for a maximum duration until timeout occurs.- Specified by:
searchService
in interfaceIRequiredServicesFeature
- Parameters:
query
- The search query.timeout
- Maximum time period to search, -1 for no wait.- Returns:
- Service matching the query, exception if service is not found.
-
addQuery
public <T> ISubscriptionIntermediateFuture<T> addQuery(ServiceQuery<T> query, long timeout)
Add a query for a declared required service. Continuously searches for matching services.- Specified by:
addQuery
in interfaceIRequiredServicesFeature
- Parameters:
name
- The name of the required service declaration.- Returns:
- Future providing the corresponding services as intermediate results.
-
addQuery
public <T> ISubscriptionIntermediateFuture<T> addQuery(java.lang.String name)
Add a query for a declared required service. Continuously searches for matching services.- Specified by:
addQuery
in interfaceIRequiredServicesFeature
- Parameters:
name
- The name of the required service declaration.- Returns:
- Future providing the corresponding services as intermediate results.
-
addQuery
public <T> ISubscriptionIntermediateFuture<T> addQuery(java.lang.Class<T> type)
Add a query for a declared required service. Continuously searches for matching services.- Specified by:
addQuery
in interfaceIRequiredServicesFeature
- Parameters:
type
- The type of the required service declaration.- Returns:
- Future providing the corresponding services as intermediate results.
-
addQuery
public <T> ISubscriptionIntermediateFuture<T> addQuery(ServiceQuery<T> query)
Add a service query. Continuously searches for matching services.- Specified by:
addQuery
in interfaceIExternalRequiredServicesFeature
- Parameters:
query
- The search query.- Returns:
- Future providing the corresponding service or ServiceNotFoundException when not found.
-
getServiceInfos
public RequiredServiceInfo[] getServiceInfos()
Get the required services.- Specified by:
getServiceInfos
in interfaceIInternalRequiredServicesFeature
- Returns:
- The required services.
-
getServiceEvents
public ISubscriptionIntermediateFuture<ServiceCallEvent> getServiceEvents()
Listen to service call events (call, result and commands).- Specified by:
getServiceEvents
in interfaceIInternalServiceMonitoringFeature
-
postServiceEvent
public void postServiceEvent(ServiceCallEvent event)
Post a service call event.- Specified by:
postServiceEvent
in interfaceIInternalServiceMonitoringFeature
-
isMonitoring
public boolean isMonitoring()
Check if there is someone monitoring. To Avoid posting when nobody is listening.- Specified by:
isMonitoring
in interfaceIInternalServiceMonitoringFeature
-
getRawService
public <T> T getRawService(java.lang.Class<T> type)
Get a service raw (i.e. w/o required proxy).- Specified by:
getRawService
in interfaceIInternalRequiredServicesFeature
- Returns:
- null when not found.
-
getRawServices
public <T> java.util.Collection<T> getRawServices(java.lang.Class<T> type)
Get a service raw (i.e. w/o required proxy).- Specified by:
getRawServices
in interfaceIInternalRequiredServicesFeature
-
processResult
protected java.lang.Object processResult(java.lang.Object result, RequiredServiceInfo info)
- Parameters:
result
-info
-- Returns:
-
resolveService
public <T> ITerminableFuture<T> resolveService(ServiceQuery<T> query, RequiredServiceInfo info)
Search for matching services and provide first result.- Specified by:
resolveService
in interfaceIInternalRequiredServicesFeature
- Parameters:
query
- The search query.info
- Used for required service proxy configuration -> null for no proxy.- Returns:
- Future providing the corresponding service or ServiceNotFoundException when not found.
-
resolveLocalService
public <T> T resolveLocalService(ServiceQuery<T> query, RequiredServiceInfo info)
Search for matching services and provide first result. Synchronous method only for locally available services.- Specified by:
resolveLocalService
in interfaceIInternalRequiredServicesFeature
- Parameters:
query
- The search query.info
- Used for required service proxy configuration -> null for no proxy.- Returns:
- Future providing the corresponding service or ServiceNotFoundException when not found.
-
resolveServices
public <T> ITerminableIntermediateFuture<T> resolveServices(ServiceQuery<T> query, RequiredServiceInfo info)
Search for all matching services.- Specified by:
resolveServices
in interfaceIInternalRequiredServicesFeature
- Parameters:
query
- The search query.info
- Used for required service proxy configuration -> null for no proxy.- Returns:
- Future providing the corresponding services or ServiceNotFoundException when not found.
-
resolveLocalServices
public <T> java.util.Collection<T> resolveLocalServices(ServiceQuery<T> query, RequiredServiceInfo info)
Search for all matching services. Synchronous method only for locally available services.- Specified by:
resolveLocalServices
in interfaceIInternalRequiredServicesFeature
- Parameters:
query
- The search query.info
- Used for required service proxy configuration -> null for no proxy.- Returns:
- Future providing the corresponding services or ServiceNotFoundException when not found.
-
resolveQuery
public <T> ISubscriptionIntermediateFuture<T> resolveQuery(ServiceQuery<T> query, RequiredServiceInfo info)
Query for all matching services.- Specified by:
resolveQuery
in interfaceIInternalRequiredServicesFeature
- Parameters:
query
- The search query.info
- Used for required service proxy configuration -> null for no proxy.- Returns:
- Future providing the corresponding services or ServiceNotFoundException when not found.
-
getServiceQuery
public <T> ServiceQuery<T> getServiceQuery(RequiredServiceInfo info)
When searching for declared service -> map required service declaration to service query.
-
getServiceInfo
public RequiredServiceInfo getServiceInfo(java.lang.String name)
Get the required service info for a name.- Specified by:
getServiceInfo
in interfaceIInternalRequiredServicesFeature
- Parameters:
name
- The required service name.
-
getServiceInfo
protected RequiredServiceInfo getServiceInfo(java.lang.Class<?> type)
Get the required service info for a type.- Parameters:
type
- The required service type.
-
processServiceEvent
protected ServiceEvent processServiceEvent(ServiceEvent event, RequiredServiceInfo info)
Create the user-facing object from the received search or query result. Result may be service object, service identifier (local or remote), or event. User object is either event or service (with or without required proxy).
-
getServiceProxy
public IService getServiceProxy(IServiceIdentifier sid, RequiredServiceInfo info)
Create the user-facing object from the received search or query result. Result may be service object, service identifier (local or remote), or event. User object is either event or service (with or without required proxy).- Specified by:
getServiceProxy
in interfaceIRequiredServicesFeature
-
addRequiredServiceProxy
protected IService addRequiredServiceProxy(IService service, RequiredServiceInfo info)
- Parameters:
service
-info
-
-
enhanceQuery
protected <T> void enhanceQuery(ServiceQuery<T> query, boolean multi)
Enhance a query before processing. Does some necessary preprocessing and needs to be called at least once before processing the query.- Parameters:
query
- The query to be enhanced.
-
isRemote
public boolean isRemote(ServiceQuery<?> query)
Check if a query is potentially remote.- Returns:
- True, if scope is set to a remote scope (e.g. global or network).
-
getServiceQuery
public ServiceQuery<?> getServiceQuery(java.lang.String name)
Get a service query for a required service info (as defined in the agent under that name).- Specified by:
getServiceQuery
in interfaceIRequiredServicesFeature
- Parameters:
name
- The name.- Returns:
- The service query.
-
-