public abstract class ALspLabelStyleCollector extends ALspStyleCollector
This class is used in combination with an ILspStyler
to define the label location details of a group of
objects, in addition to styling. It offers the implementer of ILspStyler
a variety of methods that can be
used to define the location. Users that wish to retrieve the location information for a given object from an
ILspStyler
need to create a custom extension of this class specific to their needs.
An ALspLabelStyleCollector
allows you to configure several labeling aspects:
direct locations
See ILspStyler
for more information. Also note that the ALspStyler
or
TLspStyler
convenience classes can be used to style labels.
ILspStyler
,
ALspLabelStyler
,
ALspStyleCollector
Modifier | Constructor and Description |
---|---|
protected |
ALspLabelStyleCollector(Collection<?> aObjectsToStyle)
Default constructor, the objects to be styled are provided, which allows
the collector to do basic error checking.
|
Modifier and Type | Method and Description |
---|---|
ALspLabelStyleCollector |
algorithm(ILspLabelingAlgorithm aAlgorithm)
Specifies the labeling algorithm to be used for the label(s) part of this
submit() call. |
ALspLabelStyleCollector |
algorithm(ILspLabelingAlgorithmProvider aAlgorithmProvider)
Specifies the labeling algorithm provider to be used for the label(s) part of this
submit() call. |
ALspLabelStyleCollector |
anchorLabel(Object aSublabelID)
Specify the label to anchor a label to.
|
ALspLabelStyleCollector |
anchorLabel(TLspPaintRepresentation aPaintRepresentation,
Object aSublabelID)
Specify the label to anchor a label to.
|
protected void |
destroy()
Cleanup method for label location collector.
|
ALspLabelStyleCollector |
geometry(ALspStyleTargetProvider aStyleTargetProvider)
Specifies an
ALspStyleTargetProvider that should be used to convert objects
into a collection of objects on which the style can be applied. |
ALspLabelStyleCollector |
geometry(ILcdShape aGeometry)
Specifies the geometry
on which the style should be applied.
|
protected ILspLabelingAlgorithmProvider |
getAlgorithmProvider()
Returns the labeling algorithm provider that can be used for the labels part
of this
submit() call. |
protected Object |
getAnchorLabel()
Returns the sublabel ID of the label to anchor a label to for the current set of labels.
|
protected TLspPaintRepresentation |
getAnchorLabelPaintRepresentation()
Returns the paint representation of the label to anchor a label to for the current
set of labels.
|
protected String |
getGroup()
Returns the group ID for the labels part of this
submit() call. |
protected Collection<Object> |
getLabels()
Returns the label sublabel IDs that have been specified for the current set of objects.
|
protected ILspLabelPriorityProvider |
getPriorityProvider()
Returns the priority provider that can be used to query the priority of the labels part
of this
submit() call. |
ALspLabelStyleCollector |
group(String aGroup)
Specifies the declutter group the label(s) should be in.
|
ALspLabelStyleCollector |
hide()
Hides the specified objects.
|
protected boolean |
isAllLabels()
Returns if the style information is specified for all labels of the
objects . |
ALspLabelStyleCollector |
label(Object aSublabelID)
Specifies an object that identifies a label for an object.
|
ALspLabelStyleCollector |
locations(int aShift,
TLspLabelLocationProvider.Location... aLocations)
Specifies a set of fixed locations to be used for the label(s).
|
ALspLabelStyleCollector |
object(Object aObject)
Specifies a single
Object to be styled. |
ALspLabelStyleCollector |
objects(Collection<?> aObjects)
Specifies a collection of objects to be styled.
|
ALspLabelStyleCollector |
priority(ILspLabelPriorityProvider aPriorityProvider)
Specifies a priority provider for the label(s) part of this
submit() call. |
ALspLabelStyleCollector |
priority(int aPriority)
Specifies a fixed priority for the label(s) part of this
submit() call. |
ALspLabelStyleCollector |
style(ALspStyle aStyle)
Applies the style to the specified labels.
|
ALspLabelStyleCollector |
styles(ALspStyle... aStyles)
Applies the given list of styles to the specified labels.
|
ALspLabelStyleCollector |
styles(List<? extends ALspStyle> aStyles)
Applies the given list of styles to the specified labels.
|
void |
submit()
Submits the currently specified objects and location information.
|
protected abstract void |
submitImpl()
This method is called by the
submit() method. |
getObjects, getStyles, getStyleTargetProvider
protected ALspLabelStyleCollector(Collection<?> aObjectsToStyle)
aObjectsToStyle
- The collection of objects for which this style collector will be
used. This has to be the collection of objects that is passed to
ILspStyler.style(Collection, ALspStyleCollector, TLspContext)
protected boolean isAllLabels()
objects
.protected void destroy()
ALspLabelStyler
.destroy
in class ALspStyleCollector
protected Collection<Object> getLabels()
Returns null if the information applies to all labels of the given domain objects.
protected Object getAnchorLabel()
null
if the default anchor can be used.protected TLspPaintRepresentation getAnchorLabelPaintRepresentation()
null
if the 'current' anchor can be used.protected ILspLabelPriorityProvider getPriorityProvider()
submit()
call.null
if none was set.protected String getGroup()
submit()
call.null
if none was set.TLspLabelPlacer
protected ILspLabelingAlgorithmProvider getAlgorithmProvider()
submit()
call.null
if none was set.public ALspLabelStyleCollector geometry(ILcdShape aGeometry)
aGeometry
argument allows you to specify a particular geometry
to which the styling should be applied, that is different from the object
itself.
Example usage:myCollector.object(myObject).geometry(myObjectAsILcdPoint).style(myIconStyle).submit()
For labels, this call specifies a geometry used to calculate the label's position. Use this if the domain object itself is not a shape, or if you need different geometry.
If not set, the domain object itself is used.
Exactly how to geometry is used to determine the label location depends on the algorithm itself.
See also ILspLabelPainter.getAnchorObject
.
geometry
in class ALspStyleCollector
aGeometry
- The geometry to which the styling should be appliedpublic ALspLabelStyleCollector geometry(ALspStyleTargetProvider aStyleTargetProvider)
ALspStyleTargetProvider
that should be used to convert objects
into a collection of objects on which the style can be applied. This method
can be used if multiple objects share the same style.
The ALspStyleTargetProvider
can be used in a number of cases:
myCollector.objects(Arrays.asList(myObject1,myObject2)).geometry(myObjectToPointConverter).style(myIconStyle).submit()
For labels, this call specifies geometry used to calculate the label's position. Use this if the domain object itself is not a shape, or if you need different geometry.
If not set, the domain object itself is used.
Exactly how to geometry is used to determine the label location depends on the algorithm itself.
See also ILspLabelPainter.getAnchorObject
.
If the style target provider returns multiple geometries for a label, only the first ILcdShape
is used.
geometry
in class ALspStyleCollector
aStyleTargetProvider
- The target provider.public ALspLabelStyleCollector hide()
ALspStyleCollector
ALspStyleCollector.object(Object)
or
ALspStyleCollector.objects(Collection)
.
Example usage:myCollector.object(myObject).hide().submit()
hide
in class ALspStyleCollector
public ALspLabelStyleCollector label(Object aSublabelID)
Specifies an object that identifies a label for an object. This is necessary for different labels per domain object.
Notes:
"single"
will be used.A typical usage would be to have a fixed set of different sublabel IDs, for example an
enum
, or a series of integers.
aSublabelID
- The sublabel IDpublic ALspLabelStyleCollector object(Object aObject)
ALspStyleCollector
Object
to be styled. Preferably, this method
should only be used if the given object uses a unique style, that is
different from the style of all other objects.
Example usage:myCollector.object(myILcdPoint).style(myIconStyle).submit()
The object must be an object that is part of the collection that has been
passed as an argument in
ILspStyler.style(Collection, ALspStyleCollector, TLspContext)
.
Specifying other objects after a call to this method will invalidate the
result of this call.object
in class ALspStyleCollector
aObject
- The object to style.public ALspLabelStyleCollector objects(Collection<?> aObjects)
ALspStyleCollector
myCollector.objects(Arrays.asList(myILcdPoint1,myILcdPoint2)).style(myIconStyle).submit()
The objects must all be contained in the collection that has been passed as
an argument in
ILspStyler.style(Collection, ALspStyleCollector, TLspContext)
.
Specifying other objects after a call to this method will invalidate the
result of this call.objects
in class ALspStyleCollector
aObjects
- The objects to style.public ALspLabelStyleCollector style(ALspStyle aStyle)
Applies the style to the specified labels.
Example usage:
myCollector.object( myObject ).label( myLabelID ).style( myTextStyle ).submit()
Specifying other styles after a call to this method will invalidate the result of this call.
Styles that are supported for labels are:
TLspTextStyle
: to get text with a specific font, font color, size, halo etc.ALspLabelTextProviderStyle
: to specify which text to use (default is toString()). See for example TLspDataObjectLabelTextProviderStyle
.TLspIconStyle
: to use custom icons as a label.TLspLabelBoxStyle
: to specify fill color or frames.TLspPinLineStyle
: to draw pins for the labels.TLspLabelOpacityStyle
: to specify a global opacity for the label, or modulation color.TLspLabelPainter
for more information.style
in class ALspStyleCollector
aStyle
- The style to apply.public ALspLabelStyleCollector styles(ALspStyle... aStyles)
Applies the given list of styles to the specified labels.
Example usage:
myCollector.object( myObject ).label( myLabelID ).styles( myTextStyle, myTextProviderStyle ).submit()
Specifying other styles after a call to this method will invalidate the result of this call.
Styles that are supported for labels are:
TLspTextStyle
: to get text with a specific font, font color, size, halo etc.ALspLabelTextProviderStyle
: to specify which text to use (default is toString()). See for example TLspDataObjectLabelTextProviderStyle
.TLspIconStyle
: to use custom icons as a label.TLspLabelBoxStyle
: to specify fill color or frames.TLspPinLineStyle
: to draw pins for the labels.TLspLabelOpacityStyle
: to specify a global opacity for the label, or modulation color.TLspLabelPainter
for more information.styles
in class ALspStyleCollector
aStyles
- The styles to apply.public ALspLabelStyleCollector styles(List<? extends ALspStyle> aStyles)
Applies the given list of styles to the specified labels.
Example usage:
myCollector.object( myObject ).label( myLabelID ).styles( myTextStyle, myTextProviderStyle ).submit()
Specifying other styles after a call to this method will invalidate the result of this call.
Styles that are supported for labels are:
TLspTextStyle
: to get text with a specific font, font color, size, halo etc.ALspLabelTextProviderStyle
: to specify which text to use (default is toString()). See for example TLspDataObjectLabelTextProviderStyle
.TLspIconStyle
: to use custom icons as a label.TLspLabelBoxStyle
: to specify fill color or frames.TLspPinLineStyle
: to draw pins for the labels.TLspLabelOpacityStyle
: to specify a global opacity for the label, or modulation color.TLspLabelPainter
for more information.styles
in class ALspStyleCollector
aStyles
- The styles to apply.public ALspLabelStyleCollector anchorLabel(Object aSublabelID)
Specify the label to anchor a label to. The given Object
is the sublabel ID
for an other label of the same layer, paint representation and domain object. See also
ILspLabelPainter.getAnchorObject
.
If no label with the specified sublabel ID can be found, the label will be anchored to the domain object.
aSublabelID
- The anchor sublabel to use.public ALspLabelStyleCollector anchorLabel(TLspPaintRepresentation aPaintRepresentation, Object aSublabelID)
Specify the label to anchor a label to. The given Object
is the sublabel ID
for an other label of the same layer and domain object, but possibly a different
paint representation. This makes it possible to make labels depend on labels from
other painters. See also ILspLabelPainter.getAnchorObject
.
If no label with the specified sublabel ID can be found, the label will be anchored to the domain object.
aPaintRepresentation
- The paint representation of the anchor.aSublabelID
- The anchor label to use.public ALspLabelStyleCollector priority(int aPriority)
submit()
call.
By default, labels have priority Integer.MAX_VALUE
, low priority.
aPriority
- The desired priority, 0 being highest prioritypublic ALspLabelStyleCollector priority(ILspLabelPriorityProvider aPriorityProvider)
submit()
call.aPriorityProvider
- The priority provider that can specify priorities.public ALspLabelStyleCollector group(String aGroup)
By default, TLspLabelPlacer.DEFAULT_DECLUTTER_GROUP
is used.
aGroup
- The desired declutter groupTLspLabelPlacer
public ALspLabelStyleCollector algorithm(ILspLabelingAlgorithm aAlgorithm)
Specifies the labeling algorithm to be used for the label(s) part of this submit()
call.
By default, an algorithm is used based on the geometry of the domain object.
To avoid having to iterate over all objects in ALspLabelStyler
because of different labeling
algorithms being used for different objects, it is possible to use the algorithm(ILspLabelingAlgorithmProvider)
method instead. That method allows to use 1 instance of ILspLabelingAlgorithmProvider
for all objects.
This algorithm provider can then calculate which algorithm to use for an object.
aAlgorithm
- The algorithm to be usedpublic ALspLabelStyleCollector algorithm(ILspLabelingAlgorithmProvider aAlgorithmProvider)
submit()
call.
By default, an algorithm is used based on the geometry of the domain object.
aAlgorithmProvider
- The algorithm provider to be usedpublic ALspLabelStyleCollector locations(int aShift, TLspLabelLocationProvider.Location... aLocations)
Specifies a set of fixed locations to be used for the label(s).
This method is a convenience method. It is the same as calling
algorithm(new TLspLabelingAlgorithm(new TLspLabelLocationProvider(aShift, aLocations))
.
To avoid having to iterate over all objects in ALspLabelStyler
because of different
locations being used for different objects, it is possible to use the algorithm(ILspLabelingAlgorithmProvider)
method instead. That method allows to use 1 instance of ILspLabelingAlgorithmProvider
for all objects.
This algorithm provider can then calculate which algorithm to use for an object.
aShift
- the amount of pixels the labels must be removed from the object anchor
point.aLocations
- a list of possible locations to place the labels.public void submit()
geometry(com.luciad.shape.ILcdShape)
or algorithm(com.luciad.view.lightspeed.label.algorithm.ILspLabelingAlgorithm)
. This mandatory method
commits and links the location information provided to the domain object(s) and label(s).
Example usage:myCollector.object(myObject).label(1).geometry(myShape1).submit();
myCollector.object(myObject).label(2).geometry(myShape2).submit();
Not calling this method will result in no information being specified at all.
Calling any other method after already having provided objects and/or
information will result in invalidating those previous calls. Also note that subsequent
calls for the same labels override the information previously specified.submit
in class ALspStyleCollector
protected abstract void submitImpl()
submit()
method. Implementers of this
class should not override submit()
directly, but should implement
this method instead.
The information that has been specified before calling submit()
, is
provided through a number of protected getters of this class. After the
call to submit()
, this information will be cleared.submitImpl
in class ALspStyleCollector
ALspStyleCollector.getObjects()
,
ALspStyleCollector.getStyleTargetProvider()
,
ALspStyleCollector.getStyles()