mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-15 08:41:01 +00:00
5.2 KiB
5.2 KiB
Typical Data Mining Scenarios
[[TOC]]
Adding a new Data Mining Bundle
- Add a new java project bundle according to the Typical Development Scenarios
- Add the necessary dependencies to the
MANIFEST.MFcom.sap.sse(for the string messages)com.sap.sse.dataminingcom.sap.sse.datamining.shared
- Create an
Activatorfor the new data mining bundle and provide aDataMiningBundleServiceto the OSGi-Context (see Registration and Deregistration of Data Mining Bundles for detailed information)- This can be done by extending the
AbstractDataMiningActivatorand implementing it's abstract methods - Or by implementing your own
DataMiningBundleServiceand register it as OSGi-Service
- This can be done by extending the
- Prepare the string messages
- Create the new source folder
resources - Add the package
<string messages package name>toresources - Create empty properties files for each supported language with the name scheme
<string messages base name>_<locale acronym> - Create a
ResourceBundleStringMessagesin theDataMiningBundleService- The
ResourceBundleStringMessagesneeds the resource base name, which should be<string messages package name>/<string messages base name> - A reference to this
ResourceBundleStringMessagesshould be returned by the methodgetStringMessages()
- The
- Create the new source folder
Adding a completely new Data Type
A data type is an elementar unit on which the processing components operate. A data type is normally based on a domain element (like GPSFixMoving or TrackedLegOfCompetitor) and provides contextual information about the domain element (like the name of the regatta or race) via Functions.
Create the necessary Data Types
- Create an interface for the domain element. The naming convention for data type interfaces is
Has<domain element name>Context.- If
TrackedLegOfCompetitorwould be the domain element, then the name of the data type interface should beHasTrackedLegOfCompetitorContext.
- If
- Create a data type interface for the steps from the data source to the domain element
- In the case of the
TrackedLegOfCompetitorthe steps would beRacingEventServiceLeaderboardGroupLeaderboardTrackedRaceTrackedLegTrackedLegOfCompetitor
- This isn't mandatory for the framework to work, but it improves its performance, because it's possible to build a processor chain, that filters after each step.
- In the case of the
- Add the data type interfaces to the
Classesreturn by the methodgetClassesWithMarkedMethods()of theDataMiningBundleService. - Add methods to get the contextual information and annotate them, so that they get registered as functions.
- To get the contextual data of a higher level data type interface annotate the getter for this interface with
@Connector(scanForStatistics=false) - There's currently no parameter support for functions, except for signatures exactly like
(Locale, ResourceBundleStringMessages). - Cycles in the graph of annotated methods aren't supported and would result in an infinite loop during the function registration.
- See Data Mining Functions for detailed information about the annotations.
- To get the contextual data of a higher level data type interface annotate the getter for this interface with
- Implement the data type interfaces. The naming convention for data type classes is
<domain element name>WithContext.- If
TrackedLegOfCompetitorwould be the domain element, then the name of the data type class should beTrackedLegOfCompetitorWithContext.
- If
Implement the Retrieval Processors and define the Retriever Chain
- Add a
DataSourceProviderto theDataMiningBundleService, if it doesn't contain one for the data source of the data type. - Implement a retrieval processor for each data type.
- Retrieval processors should extend
AbstractSimpleRetrievalProcessor - Retrieval processors used by retriever chains need a constructor with the signature
(ExecutorService, Collection<Processor<ResultType, ?>>) - A retrieval processor describes how to get from the input data type (like
RacingEventServiceorTrackedRace) to the result data type (likeTrackedLeg) with the methodretrieveData.
- Retrieval processors should extend
- Create a
DataRetrieverChainDefinitionand add it to theDataMiningBundleService- A retriever chain is created with its methods
startWith,addAfterandendWith, that addClassesof your retrieval processors to the chain. - Each method has a parameter for the
Classof the retrieved data type of the next step and some also have a parameter for theClassof the retrieval processor of the previous step to ensure type safety. - Each method has a parameter for a message key, that is needed for the internationalization of the chain
- The call order of these methods has to match
startWith addAfter* endWithor an exception will be thrown. - Every retrieval processor needs a constructor with the signature
(ExecutorService, Collection<Processor<ResultType, ?>>)or an exception will be thrown - See Defining and building a Data Retriever Chain for examples and more detailed information.
- A retriever chain is created with its methods