Class MultiConnectorServiceWrapper

java.lang.Object
de.iip_ecosphere.platform.services.environment.AbstractService
de.iip_ecosphere.platform.services.environment.MultiConnectorServiceWrapper
All Implemented Interfaces:
ParameterConfigurerProvider, Service, ServiceBase
Direct Known Subclasses:
MockingMultiConnectorServiceWrapper

public class MultiConnectorServiceWrapper extends AbstractService
Wraps multiple connector instances into a service. Implicitly reacts on parameter "inPath" and "outPath" as string to override dynamically the configured data path into the connector data.
Author:
Holger Eichelberger, SSE
  • Field Details

    • CLASS_COMPARATOR

      private static final Comparator<Class<?>> CLASS_COMPARATOR
    • inConnectors

      private Map<Class<?>,de.iip_ecosphere.platform.connectors.Connector<?,?,?,?>> inConnectors
    • outConnectors

      private Map<Class<?>,de.iip_ecosphere.platform.connectors.Connector<?,?,?,?>> outConnectors
    • connParamSupplier

      private Supplier<de.iip_ecosphere.platform.connectors.ConnectorParameter> connParamSupplier
    • paramConfigurers

      private Map<String,ParameterConfigurer<?>> paramConfigurers
    • outPath

      private String outPath
    • inPath

      private String inPath
    • sharedSpace

      private de.iip_ecosphere.platform.connectors.model.SharedSpace sharedSpace
  • Constructor Details

    • MultiConnectorServiceWrapper

      public MultiConnectorServiceWrapper(YamlService yaml, Supplier<de.iip_ecosphere.platform.connectors.ConnectorParameter> connParamSupplier)
      Creates a service wrapper instance.
      Parameters:
      yaml - the service information as read from YAML
      connParamSupplier - the connector parameter supplier for connecting the underlying connector
  • Method Details

    • addConnector

      public void addConnector(de.iip_ecosphere.platform.connectors.Connector<?,?,?,?> connector)
      Adds a connector. Already registered connectors will be overwritten. Creates/enables a shared connector space if available.
      Parameters:
      connector - the connector to register (may be null, ignored)
    • isEmpty

      public boolean isEmpty()
      Returns whether any connectors were added.
      Returns:
      true for empty, false else
    • getEventHandlingConnector

      public <CI> de.iip_ecosphere.platform.connectors.events.EventHandlingConnector getEventHandlingConnector(Class<CI> ciCls)
      Returns the event handling connector for the given (app) connector input type.
      Type Parameters:
      CI - the (app) connector input type
      Parameters:
      ciCls - the (app) connector input type class
      Returns:
      the connector, may be null for none
    • getConnectors

      protected Collection<de.iip_ecosphere.platform.connectors.Connector<?,?,?,?>> getConnectors()
      Returns all connectors.
      Returns:
      the connectors (in a stable sequence)
    • resolve

      protected static Class<?> resolve(Class<?> cls)
      Resolves cls to the declared type.
      Parameters:
      cls - the class to resolve
      Returns:
      the resolved class
    • getActualConnectorOutputType

      protected static <CO> Class<? extends CO> getActualConnectorOutputType(Class<CO> connectorOutType)
      Returns the actual connector output type.
      Type Parameters:
      CO - the declared connector output type
      Parameters:
      connectorOutType - the connector output type
      Returns:
      the actual output type
    • send

      public <CI> void send(Class<CI> cls, CI data)
      Calls Connector.write(Object) on data and handles the respective exception potentially thrown by the underlying connector.
      Parameters:
      data - the data to write
    • setReceptionCallback

      public <CO> void setReceptionCallback(de.iip_ecosphere.platform.transport.connectors.ReceptionCallback<CO> callback)
      Attaches a reception callback to this connector. The callback is called upon a reception. Handles the respective exception potentially thrown by the underlying connector.
      Parameters:
      callback - the callback to attach
    • setState

      public void setState(ServiceState state) throws ExecutionException
      Description copied from class: AbstractService
      Changes the state. [R133c]
      Specified by:
      setState in interface ServiceBase
      Overrides:
      setState in class AbstractService
      Parameters:
      state - the new state
      Throws:
      ExecutionException - if changing the state fails for some reason
      See Also:
    • doSetState

      protected void doSetState(ServiceState state) throws ExecutionException
      Changes the state by calling AbstractService.setState(ServiceState). Introduced, so that super functionality is made available to super-classes as-is.
      Parameters:
      state - the new state
      Throws:
      ExecutionException - if changing the state fails for some reason
    • migrate

      public void migrate(String resourceId) throws ExecutionException
      Description copied from interface: Service
      Migrates a service. However, it may be required to migrate/move the containing artifact. [adaptation]
      Parameters:
      resourceId - the target resource id, e.g., a device
      Throws:
      ExecutionException - if migration fails
    • update

      public void update(URI location) throws ExecutionException
      Description copied from interface: Service
      Updates the service by the service in the given location. This operation is responsible for stopping the running service (if needed), replacing it, starting the new service.
      Parameters:
      location - the location of the new service, e.g., an URL
      Throws:
      ExecutionException - if the given service cannot be updated for some reason, e.g., because the replacement service is not an evolved version of the running service
    • switchTo

      public void switchTo(String targetId) throws ExecutionException
      Description copied from interface: Service
      Switches to an interface-compatible service. This method cares for stopping the old service, performing a handover if adequate, starting the target service. [adaptation]
      Parameters:
      targetId - the id of the target service
      Throws:
      ExecutionException - if switching the service cannot be performed for some reason
    • enablePolling

      public void enablePolling(boolean enablePolling)
      Enable/disable polling (does not influence the polling timer).
      Parameters:
      enablePolling - whether polling shall enabled
      See Also:
    • enableNotifications

      public void enableNotifications(boolean enableNotifications)
      Enables/disables notifications/polling at all.
      Parameters:
      enableNotifications - enable or disable notifications
    • getParameterConfigurer

      public ParameterConfigurer<?> getParameterConfigurer(String paramName)
      Description copied from interface: ParameterConfigurerProvider
      Returns the parameter configurer for a given parameter. We need this generic approach to ease code generation and initial setting of parameter values.
      Parameters:
      paramName - the name of the parameter
      Returns:
      the associated parameter configurer or null if there is none
    • getParameterNames

      public Set<String> getParameterNames()
      Description copied from interface: ParameterConfigurerProvider
      The set of parameter names.
      Returns:
      the parameter names, may be null for none
    • setInPath

      private void setInPath(String inPath)
      Changes inPath.
      Parameters:
      inPath - the in path (ignored if null or empty)
    • setOutPath

      private void setOutPath(String outPath)
      Changes outPath.
      Parameters:
      outPath - the out path (ignored if null or empty)
    • getOutPath

      public String getOutPath(String cfgPath)
      Returns the (eventually re-configured) data access path within the protocol.
      Parameters:
      cfgPath - the configured path from the model
      Returns:
      the path to use, may be cfgPath
    • getInPath

      public String getInPath(String cfgPath)
      Returns the (eventually re-configured) data access path within the protocol.
      Parameters:
      cfgPath - the configured path from the model
      Returns:
      the path to use, may be cfgPath