The majority of formats require the same two steps for visualization on a Lightspeed view. To visualize BUFR data:
-
Decode the data into an
ILcdModel
using anILcdModelDecoder
. -
Create an
ILspLayer
for theILcdModel
and add it to theILspView
.
//First create the model
ILcdModelDecoder decoder =
new TLcdCompositeModelDecoder(TLcdServiceLoader.getInstance(ILcdModelDecoder.class));
ILcdModel model = decoder.decode(sourceName);
ILspLayer layer = createBUFRLayer(model);
//Add the layer to the Lightspeed view (an ILspView)
view.addLayer(layer);
A decoded BUFR model can be:
-
A single
ILcdModel
-
A model tree structure composed of
ILcdModelContainer
andILcdModel
instances.
The code to create a layer for the decoded model should deal with both scenarios:
/**
* The BUFR model decoder can return a single model or a model tree structure, depending on the file that gets decoded.
* This method uses recursion to deal with both scenarios.
*/
static ILspLayer createBUFRLayer(ILcdModel model) {
//The model decoder returns a model tree node when the file contains multiple messages
//The node itself is just an empty container. We create an empty layer node for that container.
//Then we loop over the child models (=the actual data), and create layers for those as well
if (model instanceof ILcdModelContainer) {
TLspLayerTreeNode node = new TLspLayerTreeNode(model);
for (int i = 0; i < ((ILcdModelContainer) model).modelCount(); i++) {
ILcdModel childModel = ((ILcdModelContainer) model).getModel(i);
node.addLayer(createBUFRLayer(childModel));
}
return node;
} else {
return TLspBUFRLayerBuilder.newBuilder().model(model).build();
}
}
This results in a BUFR layer with default styling.
This code snippet uses the The model decoder class that is actually responsible for decoding BUFR data is the
|