IviServiceHostConfig

data class IviServiceHostConfig(val serviceHostBuilderName: String, val implementationModule: ModuleReference, val interfaces: List<IviServiceInterfaceConfig>, val dependencies: IviServiceDependencies = IviServiceDependencies(), val requiresMainProcess: Boolean = false, val tags: List<String> = emptyList(), val subPackageName: String? = null) : Serializable

Defines the implementation and the IVI service interfaces of an IVI service host.

The configuration contains:

  • serviceHostBuilderName: The name of the service host builder class that must be formatted in PascalCase and must have the "ServiceHostBuilder" suffix. The suffix is mandatory to allow the configuration to be found easier when searching the code base.

  • implementationModule: The module that implements the service host and contains the builder class.

  • interfaces: The service interface of the service host.

  • dependencies: The service interface dependencies of the service host implementation.

  • requiresMainProcess: Indicates the implementation needs to be executed in the same process as the main application.

  • tags: Optional tags.

  • subPackageName: Optional sub package. If not null, this value is appended to the ModuleReference.packageName of the implementationModule property with a period in between.

Reference to <ServiceHostBuilderName> class

The serviceHostBuilderName, implementationModule and subPackageName properties are used to refer to the builder class of the service host. The builder class is expected to be defined with the fully qualified class name: <package-of-implementationModule>[.<subPackageName>].<ServiceHostBuilderName>. The builder class needs to implement the IviServiceHostBuilder interface and must have a constructor without parameters.

Example

A builder class in a module with the name "platform_framework_functionaltest_ipc_exampleserviceplugin":

package com.tomtom.ivi.platform.framework.functionaltest.ipc.exampleserviceplugin

...

class ExampleServiceHostBuilder : IviServiceHostBuilder() {
override fun build(iviServiceHostContext: IviServiceHostContext) =
SimpleIviServiceHost(
listOf(
TestExampleService(iviServiceHostContext),
...
)
)
}

This corresponds to the following IviServiceHostConfig:

IviServiceHostConfig(
serviceHostBuilderName = "ExampleServiceHostBuilder",
implementationModule = ModuleReference(
groupName = "com.tomtom.ivi.platform"
moduleName = "platform_framework_functionaltest_ipc_exampleserviceplugin"
packageName = "com.tomtom.ivi.platform.framework.functionaltest.ipc.exampleserviceplugin"
)
...
)

The ModuleReference class is open for extension. If some parts of the module reference parameters can be derived, define and use a subclass to simplify the configuration. For instance, an IviPlatformModuleReference, subclass of ModuleReference, can derive the package name from the module name for all TomTom Digital Cockpit platform modules.

As such the above example can be simplified to:

IviServiceHostConfig(
serviceHostBuilderName = "ExampleServiceHostBuilder",
implementationModule = IviPlatformModuleReference(
"platform_framework_functionaltest_ipc_exampleserviceplugin"
)
...
)

Service host interfaces

The service interface implemented by the service host needs to be configured to allow the service host to be registered. A service host needs to have at least one interface.

Example

val exampleServiceHost = IviServiceHostConfig(
serviceHostBuilderName = "ExampleServiceHostBuilder",
...
interfaces = listOf(
IviServiceInterfaceConfig(
serviceName = "ExampleService",
serviceApiModule = IviPlatformModuleReference(
"platform_framework_functionaltest_ipc_exampleserviceapi"
)
),
...
),
...
)

This defines that the ExampleServiceHostBuilder builds a host that implements the com.tomtom.ivi.platform.framework.functionaltest.ipc.exampleserviceapi.ExampleService interface. The package name here is derived from the module name.

To register a discoverable service interface (a service interface annotated with the IviDiscoverableService annotation), the IviServiceInterfaceConfig.serviceId needs to be defined.

Dependencies

A service host implementation can require other IVI service interfaces to be registered. The dependencies property can be used to define those interface. This allows misconfiguration to be detected at build time.

Optional tags

A host config can have one or more tags. The tags can be used to selectively configure the deployment of hosts based on the tag. See IviServiceHostMatcher.

Constructors

Link copied to clipboard
fun IviServiceHostConfig(serviceHostBuilderName: String, implementationModule: ModuleReference, interfaces: List<IviServiceInterfaceConfig>, dependencies: IviServiceDependencies = IviServiceDependencies(), requiresMainProcess: Boolean = false, tags: List<String> = emptyList(), subPackageName: String? = null)

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
val subPackageName: String? = null
Link copied to clipboard