StreamEventParser API
Custom parser converts a domain Quote object into an internal Joule StreamEvent
Objective
A StreamEventParser converts domain-specific objects, such as a Quote, into the required Joule StreamEvent object ready for processing.
Example
The example demonstrates a custom implementation of the StreamEventParser interface, specifically designed to convert a Quote object into a StreamEvent.
@JsonRootName(value = "quote parser")
public class QuoteToStreamEventParser implements StreamEventParser {
public QuoteToStreamEventParser() {
// Required
}
@Override
public Collection<StreamEvent> translate(Object o) throws TranslationException {
Collection<StreamEvent> events = null;
if(o instanceof Quote){
Quote quote = (Quote) o;
StreamEvent event = new StreamEvent("quote");
event.setEventTime(quote.time());
event.addValue("symbol", quote.symbol());
event.addValue("bid", quote.bid());
event.addValue("ask", quote.ask());
event.addValue("volatility", quote.volatility());
event.addValue("volume", quote.volume());
event.addValue("date", quote.date());
events = Collections.singletonList( event);
}
return events;
}
}Class: StreamEventParser
All implementations must provide a concrete implement of the translate method.
/**
* Parse passed byte array to collection of {@link StreamEvent}s
*
* @param payload byte array to translate
* @return collection of stream events
* @throws TranslationException is thrown when a translation failure occurs
*/
Collection<StreamEvent> translate(Object payload) throws TranslationException;
Parser Annotation
The class annotation defines the parser DSL element, indicating the parser's role in converting Quote objects. It aids in custom serialisation settings. This is required.
Constructor
The constructor is required but does not contain any specific logic for this example.
Translate method
The core method that converts the input object into a collection of StreamEvent objects.
This example the method checks if the input object is an instance of Quote. If not, it returns null, indicating non-valid conversion.
Otherwise, the quote attributes are mapped in to a single StreamEvent which is then placed in to a Collections.singletonList() and returned as a collection, as required by the method's signature.
@Override
public Collection<StreamEvent> translate(Object o) throws TranslationException {
Collection<StreamEvent> events = null;
if(o instanceof Quote){
...
}
}Last updated
Was this helpful?