Introduction

This document describes which types of objects are currently supported and used by Lucy's service mechanism out-of-the-box (see ILcyLucyEnv#addService(Object, int) and ILcyLucyEnv#removeService(Object) ). It is structured as follows:

  • The first section provides an overview of all object types which are registered by default, and who typically registers them.
  • When different objects are associated, they are grouped into a holder object, and those holder objects are then registered to the Lucy back-end. Those holder objects are discussed in the second section.
  • The third section discusses the default composite implementations Lucy provides, and how to use them.

Overview

The following list contains all objects which are registered by default as Lucy service, and describes whether:

  • Multiple instances are allowed: if not, it is not allowed to register another instance of the specified class as service to the Lucy back-end. Note that in such case, the service can also be retrieved by calling ILcyLucyEnv#getService(Class) instead of ILcyLucyEnv#getServices(Class).
  • Who typically registers such instances.
  • Who typically uses the registered instances.

When it is allowed to register multiple instances of a class, it is always possible to register your own instance and this instance will be used by Lucy. For example if you have your own ILcdGXYLayerFactory, you can register it to the Lucy back-end and it will be used when Lucy tries to create an ILcdGXYLayer for an ILcdModel (e.g. when using the File | Open action ).

  1. com.luciad.lucy.model.ILcyModelContentTypeProvider:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createModelContentTypeProvider()
    • Used by (for example): the default ILcyGXYLayerOrderManager to determine the model content type of a model.
  2. com.luciad.model.ILcdModelFactory:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createModelFactory()
    • Used by (for example): by the TLcyFormatBarAddOn and TLcyDrawingAddOn to create new models.
  3. com.luciad.lucy.model.TLcyModelDecoderHolder:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createModelDecoders() and the section about the holder objects.
    • Used by (for example): when creating an ILcdModel from a certain source, e.g. when using the File | Open menu item. Consult the "Loading data in Lucy" chapter in the Lucy Developer Guide for more information about data loading.
  4. com.luciad.lucy.model.TLcyModelEncoderHolder:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createModelEncoders() and the section about the holder objects.
    • Used by (for example): when saving a ILcdModel from a certain source, e.g. when using the File | Save menu item.
  5. com.luciad.lucy.gui.customizer.ILcyCustomizerPanelFactory:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createDomainObjectCustomizerPanelFactories(), ALcyFormat#createGXYLayerCustomizerPanelFactories(), ALcyFormat#createModelCustomizerPanelFactories() and ALcyFormat#createModelEncoderCustomizerPanelFactories().
    • Used by (for example): throughout whole Lucy to show GUI panels to modify properties of context objects. A context object is either an instance of the classes in the com.luciad.lucy.util.context package or an instance of the TLcyLspCustomizableStyleContext class. Extended documentation on how to use the ILcyCustomizerPanels can be found in the Lucy developer guide.
  6. com.luciad.lucy.model.TLcyDataSourceHandlerHolder:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createDataSourceHandlers() and the section about the holder objects.
    • Used by (for example): when opening a data source, e.g. through the File | Open menu item. Consult the "Loading data in Lucy" chapter in the Lucy Developer Guide for more information about data loading.
  7. com.luciad.lucy.map.ILcyGXYLayerTypeProvider:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createGXYLayerTypeProvider().
    • Used by (for example): the default ILcyGXYLayerOrderManager to determine the layer type of an ILcdGXYLayer.
  8. com.luciad.lucy.map.TLcyGXYLayerDecoderHolder:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createGXYLayerDecoders() and the section about the holder objects.
    • Used by (for example): applying a previously saved style to an ILcdGXYLayer when opening the layer using the File | Open menu action item.
  9. com.luciad.lucy.map.TLcyGXYLayerEncoderHolder:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createGXYLayerEncoders() and the section about the holder objects.
    • Used by (for example): saving the style of a layer using the File | Save Layer Style menu action item.
  10. com.luciad.lucy.map.asynchronous.ILcyAsynchronousPaintHintProvider:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createAsynchronousPaintHintProvider().
    • Used by (for example): the TLcyAsynchronousPaintAddOn to determine the paint hint for ILcdLayer instances.
  11. com.luciad.lucy.datatransfer.ALcyLayerSelectionTransferHandler:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createGXYLayerSelectionTransferHandlers().
    • Used by (for example): the copy and paste actions for domain objects in Lucy.
    • Warning: there is a limitation on the ALcyLayerSelectionTransferHandler objects that may be registered. Consult the javadoc of TLcyCompositeLayerSelectionTransferHandler for more information on these limitations.
  12. com.luciad.view.gxy.ILcdGXYLayerFactory:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createGXYLayerFactory().
    • Used by (for example): creating an ILcdGXYLayer for an ILcdModel when opening a data source, e.g. through the File | Open menu action.
  13. com.luciad.lucy.map.ILcyLayerStyleProvider:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createGXYLayerStyleProvider().
    • Used by (for example): the copy and paste actions in Lucy when copy-pasting an ILcdLayer.
  14. com.luciad.lucy.gui.formatbar.ALcyFormatBarFactory:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createFormatBarFactory().
    • Used by (for example): the TLcyFormatBarAddOn to create ALcyFormatBar instances.
  15. com.luciad.util.height.ILcdModelHeightProviderFactory:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createModelHeightProviderFactory().
    • Used by (for example): the mouse location panel of the TLcyMapComponent to show the height under the mouse cursor. It is also used in the TEA add-ons to retrieve the height data for the ILcdModels in the view, by the com.luciad.lucy.util.height.TLcyViewHeightProvider and by TLcyVerticalViewAddOn.
  16. com.luciad.util.height.ILcdLayerHeightProviderFactory:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createLayerHeightProviderFactory().
  17. com.luciad.lucy.model.ALcyDefaultModelDescriptorFactory:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createDefaultModelDescriptorFactories().
    • Used by (for example): the TLcyFormatBarAddOn and TLcyDrawingAddOn to create a default model descriptor (and a matching model) to for example start drawing on it.
  18. com.luciad.model.ILcdModelReferenceDecoder:
    • Multiple instances allowed: yes
    • Typically registered by: data formats which do not include information about the coordinate system that is used in their data files and use an additional model reference file (e.g. the SHP data format in the TLcyDefaultDecodersAddOn). The TLcyModelReferenceAddOn also registers an ILcdModelReferenceDecoder which features a GUI allowing the user to choose the ILcdModelReference.
    • Used by (for example): Data formats that could be missing reference information, such as SHP, DGN, DWG, NITF, ... . The ILcdModelReferenceDecoder registered by the TLcyModelReferenceAddOn is for example used when a creating a new drawing layer with a custom model reference..
  19. com.luciad.lucy.realtime.ILcySimulatorModelFactory:
    • Multiple instances allowed: yes
    • Typically registered by: Real-time data formats.
    • Used by (for example): The TLcyPreviewAddOn to create preview layers for ILcdModels.
  20. javax.swing.event.HyperlinkListener:
    • Multiple instances allowed: yes
    • Registered by: the TLcyHyperlinkAddOn.
    • Used by (for example): The TLcyKML22AddOn to resolve hyperlinks in KML balloons.
  21. com.luciad.view.swing.ILcdBalloonContentProvider:
    • Multiple instances allowed: yes
    • Registered by: the data format add-ons. See ALcyFormat#createBalloonContentProviders().
    • Used by (for example): The TLcyKML22AddOn to generate balloons for objects of its domain model.
  22. com.luciad.io.ILcdInputStreamFactory:
    • Multiple instances allowed: yes
    • Registered by: an add-on in an applications that needs custom input streams.
    • Used by (for example): Data formats (ALcyFormat) using an ILcdModelDecoder to load data.
  23. com.luciad.io.ILcdOutputStreamFactory:
    • Multiple instances allowed: yes
    • Registered by: an add-on in an applications that needs custom output streams.
    • Used by (for example): Data formats (ALcyFormat) using an ILcdModelEncoder to save data.
  24. com.luciad.lucy.map.labeling.ILcyGXYLabelPlacementHintProvider
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createLabelPlacementHintProvider().
    • Used by (for example) an ILcdGXYViewLabelPlacer that is used to place labels.
  25. com.luciad.model.ILcdModelReferenceParser
    • Multiple instances allowed: yes
    • Typically registered by: the TLcyModelReferenceAddOn
    • Used by (for example) the WFS add-on to parse the model references returned by a WFS server.
  26. com.luciad.util.measure.ILcdModelMeasureProviderFactory
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createModelMeasureProviderFactory().
    • Used by (for example): the mouse location panel of the TLcyMapComponent to show the data under the mouse cursor.
  27. com.luciad.util.measure.ILcdLayerMeasureProviderFactory
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyFormat#createLayerMeasureProviderFactory().
    • Used by (for example): the mouse location panel of the TLcyMapComponent to show the data under the mouse cursor.
  28. com.luciad.lucy.map.lightspeed.TLcyLspMapManager
    • Multiple instances allowed: no
    • Registered by: the TLcyLspMapAddOn.
    • Used by (for example): it is the Lightspeed equivalent of the TLcyMapManager, and can be used by everybody interested in the creation and removel of ILcyLspMapComponent instances.
  29. com.luciad.view.lightspeed.layer.ILspLayerFactory
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyLspFormat#createLayerFactory().
    • Used by (for example): creating an ILspLayer for an ILcdModel when opening a data source, e.g. through the File | Open menu action.
  30. com.luciad.lucy.map.TLcyLayerStyleCodecHolder:
    • Multiple instances allowed: yes
    • Typically registered by: the data format add-ons. See ALcyLspFormat#createLayerStyleCodecs() and the section about the holder objects.
    • Used by (for example): when saving the style of a layer, e.g. when using File | Save layer style.
  31. com.luciad.lucy.map.lightspeed.ALcyLspStyleRepository:
    • Multiple instances allowed: no
    • Typically registered by: the TLcyLspStyleRepositoryAddOn.
    • Used by (for example): the Lightspeed formats to retrieve the application wide style settings.
  32. com.luciad.lucy.map.cameralinking.ALcyCameraLinkerFactory:
    • Multiple instances allowed: yes
    • Typically registered by: the TLcyLspCameraLinkAddOn.
    • Used by (for example): the TLcyLspCameraLinkAddOn, to create new tracking camera links which link tracking cameras to a set of objects.
  33. com.luciad.format.s52.TLcdS52DisplaySettings:
    • Multiple instances allowed: no
    • Typically registered by: the TLcyS57DecoderAddOn.
    • Used by (for example): all the S-52 layers to update their visualization.
  34. com.luciad.lucy.map.TLcyGenericMapManager
    • Multiple instances allowed: yes
    • Typically registered by: each of the map add-ons (GXY and Lightspeed).
    • Used by (for example): all code which needs access to the map components. An example is a workspace codec delegate which encodes all map components. You can access the map managers as well through the TLcyCombinedMapManager, or by asking a specific instance directly (e.g. getService(TLcyLspMapManager.class).
  35. com.luciad.ogc.ows.model.ILcdOWSTransport
    • Multiple instances allowed: yes
    • Typically registered by: the OGC client add-ons or a custom add-on.
    • Used by (for example): all the OGC clients. The OGC clients use an ILcdOWSTransport to communicate with the server. Plugging in your own instance allows you to for example provide hardcoded credentials for a certain server.
  36. com.luciad.fusion.core.ALfnEnvironment
    • Multiple instances allowed: no
    • Typically registered by: the LuciadFusion Core add-on. See TLcyFusionCoreAddOn#createFusionEnvironment().
    • Used by LuciadFusion layers.
  37. com.luciad.fusion.client.TLfnClientFactory
    • Multiple instances allowed: no
    • Typically registered by: the LuciadFusion Client add-on. See TLcyFusionClientAddOn#createFusionClientFactory().
    • Used to connect to LuciadFusion servers.
  38. com.luciad.fusion.client.ALfnClientEnvironment
    • Multiple instances allowed: no
    • Typically registered by: the LuciadFusion Client add-on. See TLcyFusionClientAddOn#createFusionClientEnvironment().
    • Used to configure a LuciadFusion client.
  39. com.luciad.fusion.tilestore.TLfnTileStoreProvider
    • Multiple instances allowed: no
    • Typically registered by: the LuciadFusion Client add-on. See TLcyFusionClientAddOn#createTileStoreProvider().
    • Used by any add-on to create a Tile Store based on a URL.
  40. com.luciad.lucy.addons.tea.lineofsight.TLcyLOSManager
    • Multiple instances allowed: no
    • Typically registered by: the TLcyLOSAddOn.
    • Used to add line-of-sight coverage to domain objects on Lightspeed maps.
  41. com.luciad.lucy.addons.tea.shapevisibility.TLcyShapeVisibilityManager
    • Multiple instances allowed: no
    • Typically registered by: the TLcyShapeVisibilityAddOn.
    • Used to perform point to shape visibility calculations on a Lightspeed map.

Holder objects

Some of the service objects are associated to other objects. In order to maintain this association, those objects are registered to the back-end grouped into one so called 'holder object'. The table below lists the default holder objects and what they contain.

Note that the holder objects are public classes, so it is possible to register your own holder instance directly at the back-end. They will be picked up and used by Lucy.

Holder object Contains
com.luciad.lucy.model.TLcyDataSourceHandlerHolder
  • ALcyFileTypeDescriptor
  • ALcyDataSourceHandler
com.luciad.lucy.map.TLcyGXYLayerDecoderHolder
  • ALcyFileTypeDescriptor
  • ILcdGXYLayerDecoder
com.luciad.lucy.map.TLcyGXYLayerEncoderHolder
  • ALcyFileTypeDescriptor
  • ILcdGXYLayerEncoder
com.luciad.lucy.model.TLcyModelDecoderHolder
  • ALcyFileTypeDescriptor
  • ILcdModelDecoder
com.luciad.lucy.model.TLcyModelEncoderHolder
  • ALcyFileTypeDescriptor
  • ILcdModelEncoder
com.luciad.lucy.map.TLcyLayerStyleCodecHolder
  • ALcyFileTypeDescriptor
  • ILcyLayerStyleCodec

Composite implementations

For almost all service objects which are registered by default, there exists a composite implementation working on those registered service objects (see the Lucy developer guide for an in-depth explanation of those composite implementations). The available implementations are listed below:

Service object Composite implementation
com.luciad.lucy.model.ILcyModelContentTypeProvider com.luciad.lucy.model.TLcyCompositeModelContentTypeProvider
com.luciad.model.ILcdModelFactory com.luciad.lucy.model.TLcyCompositeModelFactory
com.luciad.lucy.model.TLcyModelDecoderHolder com.luciad.lucy.model.TLcyCompositeModelDecoder
com.luciad.lucy.model.TLcyModelEncoderHolder com.luciad.lucy.model.TLcyCompositeModelEncoder
com.luciad.lucy.gui.customizer.ILcyCustomizerPanelFactory com.luciad.lucy.gui.customizer.TLcyCompositeCustomizerPanelFactory
com.luciad.lucy.model.TLcyDataSourceHandlerHolder com.luciad.lucy.model.TLcyCompositeDataSourceHandler
com.luciad.lucy.map.ILcyGXYLayerTypeProvider com.luciad.lucy.map.TLcyCompositeGXYLayerTypeProvider
com.luciad.lucy.map.TLcyGXYLayerDecoderHolder com.luciad.lucy.map.TLcyCompositeGXYLayerDecoder
com.luciad.lucy.map.TLcyGXYLayerEncoderHolder com.luciad.lucy.map.TLcyCompositeGXYLayerEncoder
com.luciad.lucy.map.asynchronous.ILcyAsynchronousPaintHintProvider com.luciad.lucy.map.asynchronous.TLcyCompositeAsynchronousPaintHintProvider
com.luciad.lucy.datatransfer.ALcyLayerSelectionTransferHandler com.luciad.lucy.datatransfer.TLcyCompositeLayerSelectionTransferHandler
com.luciad.view.gxy.ILcdGXYLayerFactory com.luciad.lucy.map.TLcyCompositeGXYLayerFactory
com.luciad.lucy.map.ILcyLayerStyleProvider com.luciad.lucy.map.TLcyCompositeLayerStyleProvider
com.luciad.lucy.gui.formatbar.ALcyFormatBarFactory com.luciad.lucy.gui.formatbar.TLcyCompositeFormatBarFactory
com.luciad.util.height.ILcdModelHeightProviderFactory com.luciad.lucy.util.height.TLcyCompositeModelHeightProviderFactory
com.luciad.model.ILcdModelReferenceDecoder com.luciad.lucy.model.TLcyCompositeModelReferenceDecoder
com.luciad.lucy.realtime.ILcySimulatorModelFactory com.luciad.lucy.realtime.TLcyCompositeSimulatorModelFactory
javax.swing.event.HyperlinkListener com.luciad.lucy.util.hyperlink.TLcyCompositeHyperlinkListener
com.luciad.view.swing.ILcdBalloonContentProvider com.luciad.lucy.gui.balloon.TLcyCompositeBalloonContentProvider
com.luciad.io.ILcdInputStreamFactory com.luciad.lucy.io.TLcyCompositeInputStreamFactory
com.luciad.io.ILcdOutputStreamFactory com.luciad.lucy.io.TLcyCompositeOutputStreamFactory
com.luciad.lucy.map.labeling.ILcyGXYLabelPlacementHintProvider com.luciad.lucy.map.labeling.TLcyGXYCompositeLabelPlacementHintProvider
com.luciad.model.ILcdModelReferenceParser com.luciad.lucy.model.TLcyCompositeModelReferenceParser
com.luciad.util.measure.ILcdModelMeasureProviderFactory com.luciad.lucy.util.measure.TLcyCompositeModelMeasureProviderFactory
com.luciad.util.measure.ILcdLayerMeasureProviderFactory com.luciad.lucy.util.measure.TLcyCompositeLayerMeasureProviderFactory
com.luciad.view.lightspeed.layer.ILspLayerFactory com.luciad.lucy.map.lightspeed.TLcyLspCompositeLayerFactory
com.luciad.lucy.map.TLcyLayerStyleCodecHolder com.luciad.lucy.map.TLcyCompositeLayerStyleCodec
com.luciad.lucy.map.cameralinking.ALcyCameraLinkerFactory com.luciad.lucy.map.cameralinking.TLcyCompositeCameraLinkerFactory
com.luciad.ogc.ows.model.ILcdOWSTransport com.luciad.lucy.io.TLcyCompositeOWSTransport