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

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

  2. Create an ILcdGXYLayer for the ILcdModel and add it to the ILcdGXYView.

//First create the model
ILcdModelDecoder decoder =
    new TLcdCompositeModelDecoder(TLcdServiceLoader.getInstance(ILcdModelDecoder.class));
ILcdModel model = decoder.decode(sourceName);

TLcdBUFRGXYLayerFactory layerFactory = new TLcdBUFRGXYLayerFactory();
ILcdGXYLayer layer;
//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) {
  TLcdGXYLayerTreeNode node = new TLcdGXYLayerTreeNode(model);
  for (int i = 0; i < ((ILcdModelContainer) model).modelCount(); i++) {
    ILcdModel childModel = ((ILcdModelContainer) model).getModel(i);
    node.addLayer(layerFactory.createGXYLayer(childModel));
  }
  layer = node;
} else {
  layer = layerFactory.createGXYLayer(model);
}
//Wrap the layer with an async layer wrapper to ensure
//that the view remains responsive while data is being painted
layer = ILcdGXYAsynchronousLayerWrapper.create(layer);

//Add the async layer to the GXY view (an ILcdGXYView)
view.addGXYLayer(layer);

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.