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<?>>>delayedremotequeriesprotected java.util.Map<java.lang.String,RequiredServiceInfo>requiredserviceinfosThe required service infos.protected ISearchQueryManagerServicesqmsprotected java.util.Set<SubscriptionIntermediateFuture<ServiceCallEvent>>subscriptionsThe 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 voidaddRequiredServiceInfos(RequiredServiceInfo[] requiredservices)Add required services for a given prefix.protected java.lang.ObjectcreateServiceProxy(java.lang.Object service, RequiredServiceInfo info)Create the user-facing object from the received search or query result.protected <T> voidenhanceQuery(ServiceQuery<T> query, boolean multi)Enhance a query before processing.<T> TgetLocalService(java.lang.Class<T> type)Resolve a required service of a given type.<T> TgetLocalService(java.lang.String name)Resolve a declared required service of a given name.<T> TgetLocalService0(java.lang.Class<T> type)Resolve a required service of a given type.<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> TgetRawService(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 RequiredServiceInfogetServiceInfo(java.lang.Class<?> type)Get the required service info for a type.RequiredServiceInfogetServiceInfo(java.lang.String name)Get the required service info for a name.RequiredServiceInfo[]getServiceInfos()Get the required services.protected <T> ServiceQuery<T>getServiceQuery(RequiredServiceInfo info)When searching for declared service -> map required service declaration to service query.<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.booleanhasUserBody()Check if the feature potentially executed user code in body.IFuture<java.lang.Void>init()Init the required servicesbooleanisMonitoring()Check if there is someone monitoring.booleanisRemote(ServiceQuery<?> query)Check if a query is potentially remote.voidpostServiceEvent(ServiceCallEvent event)Post a service call event.<T> TresolveLocalService(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> TsearchLocalService(ServiceQuery<T> query)Search for matching services and provide first result.<T> java.util.Collection<T>searchLocalServices(ServiceQuery<T> query)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:
initin interfaceIComponentFeature- Overrides:
initin 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:
hasUserBodyin interfaceIComponentFeature- Overrides:
hasUserBodyin classjadex.bridge.component.impl.AbstractComponentFeature
-
shutdown
public IFuture<java.lang.Void> shutdown()
Called when the feature is shutdowned.- Specified by:
shutdownin interfaceIComponentFeature- Overrides:
shutdownin 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:
getServicein 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:
getServicein 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:
getServicesin 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:
getServicesin 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:
getLocalServicein 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:
getLocalServicein 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:
getLocalService0in 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:
getLocalServicesin 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:
getLocalServicesin 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:
searchServicein interfaceIExternalRequiredServicesFeature- Parameters:
query- The search query.- Returns:
- Future providing the corresponding service or ServiceNotFoundException when not found.
-
searchLocalService
public <T> T searchLocalService(ServiceQuery<T> query)
Search for matching services and provide first result. Synchronous method only for locally available services.- Specified by:
searchLocalServicein 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:
searchServicesin interfaceIExternalRequiredServicesFeature- Parameters:
query- The search query.- Returns:
- Future providing the corresponding services or ServiceNotFoundException when not found.
-
searchLocalServices
public <T> java.util.Collection<T> searchLocalServices(ServiceQuery<T> query)
Search for all matching services. Synchronous method only for locally available services.- Specified by:
searchLocalServicesin 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:
searchServicein 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:
addQueryin 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:
addQueryin 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:
addQueryin 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:
addQueryin 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:
getServiceInfosin interfaceIInternalRequiredServicesFeature- Returns:
- The required services.
-
getServiceEvents
public ISubscriptionIntermediateFuture<ServiceCallEvent> getServiceEvents()
Listen to service call events (call, result and commands).- Specified by:
getServiceEventsin interfaceIInternalServiceMonitoringFeature
-
postServiceEvent
public void postServiceEvent(ServiceCallEvent event)
Post a service call event.- Specified by:
postServiceEventin interfaceIInternalServiceMonitoringFeature
-
isMonitoring
public boolean isMonitoring()
Check if there is someone monitoring. To Avoid posting when nobody is listening.- Specified by:
isMonitoringin interfaceIInternalServiceMonitoringFeature
-
getRawService
public <T> T getRawService(java.lang.Class<T> type)
Get a service raw (i.e. w/o required proxy).- Specified by:
getRawServicein 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:
getRawServicesin interfaceIInternalRequiredServicesFeature
-
resolveService
public <T> ITerminableFuture<T> resolveService(ServiceQuery<T> query, RequiredServiceInfo info)
Search for matching services and provide first result.- Specified by:
resolveServicein 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:
resolveLocalServicein 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:
resolveServicesin 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:
resolveLocalServicesin 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:
resolveQueryin 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
protected <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:
getServiceInfoin 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.
-
createServiceProxy
protected java.lang.Object createServiceProxy(java.lang.Object service, 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).
-
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).
-
-