The majority of formats require the same two steps for visualization on a Lightspeed view. To visualize BUFR data:

  1. Decode the data into an ILcdModel using an ILcdModelDecoder.

  2. Create an ILspLayer for the ILcdModel and add it to the ILspView.

//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:

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 TLcdCompositeModelDecoder, initialized with all model decoders available in the service registry.

The model decoder class that is actually responsible for decoding BUFR data is the TLcdBUFRModelDecoder.