Package org.jfree.chart.renderer.xy
Class XYBarRenderer
java.lang.Object
org.jfree.chart.renderer.AbstractRenderer
org.jfree.chart.renderer.xy.AbstractXYItemRenderer
org.jfree.chart.renderer.xy.XYBarRenderer
- All Implemented Interfaces:
Serializable,Cloneable,EventListener,AnnotationChangeListener,LegendItemSource,XYItemRenderer,PublicCloneable
- Direct Known Subclasses:
ClusteredXYBarRenderer,StackedXYBarRenderer
public class XYBarRenderer
extends AbstractXYItemRenderer
implements XYItemRenderer, Cloneable, PublicCloneable, Serializable
A renderer that draws bars on an

XYPlot (requires an
IntervalXYDataset). The example shown here is generated by the
XYBarChartDemo1.java program included in the JFreeChart
demo collection:

- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classThe state class used by this renderer. -
Field Summary
Fields inherited from class org.jfree.chart.renderer.AbstractRenderer
DEFAULT_ITEM_LABEL_INSETS, DEFAULT_OUTLINE_PAINT, DEFAULT_OUTLINE_STROKE, DEFAULT_PAINT, DEFAULT_SHAPE, DEFAULT_STROKE, DEFAULT_VALUE_LABEL_FONT, DEFAULT_VALUE_LABEL_PAINT, ZERO -
Constructor Summary
ConstructorsConstructorDescriptionThe default constructor.XYBarRenderer(double margin) Constructs a new renderer. -
Method Summary
Modifier and TypeMethodDescriptionclone()Returns a clone of the renderer.voiddrawItem(Graphics2D g2, XYItemRendererState state, Rectangle2D dataArea, PlotRenderingInfo info, XYPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis, XYDataset dataset, int series, int item, CrosshairState crosshairState, int pass) Draws the visual representation of a single data item.protected voiddrawItemLabel(Graphics2D g, XYDataset dataset, int series, int item, XYPlot plot, XYItemLabelGenerator generator, Rectangle2D bar, boolean negative) Draws an item label.booleanTests this renderer for equality with an arbitrary object.findDomainBounds(XYDataset dataset) Returns the lower and upper bounds (range) of the x-values in the specified dataset.findRangeBounds(XYDataset dataset) Returns the lower and upper bounds (range) of the y-values in the specified dataset.doubleReturns the bar alignment factor.Returns the bar painter.doublegetBase()Returns the base value for the bars.static XYBarPainterReturns the default bar painter.static booleanReturns the default value for theshadowsVisibleflag.Returns the gradient paint transformer (an object used to transform gradient paint objects to fit each bar).Returns the shape used to represent bars in each legend item.getLegendItem(int datasetIndex, int series) Returns a default legend item for the specified series.doubleReturns the margin which is a percentage amount by which the bars are trimmed.Returns the minimum size for the bar to draw a label.Returns the fallback position for negative item labels that don't fit within a bar.Returns the fallback position for positive item labels that don't fit within a bar.booleanReturns the flag that controls whether or not shadows are drawn for the bars.doubleReturns the shadow x-offset.doubleReturns the shadow y-offset.booleanReturns a flag that determines whether the y-interval from the dataset is used to calculate the length of each bar.initialise(Graphics2D g2, Rectangle2D dataArea, XYPlot plot, XYDataset dataset, PlotRenderingInfo info) Initialises the renderer and returns a state object that should be passed to all subsequent calls to the drawItem() method.booleanReturns a flag that controls whether or not bar outlines are drawn.booleanReturnstrueif the label should be aligned to the visible part of the bar.voidsetBarAlignmentFactor(double factor) Sets the bar alignment factor and sends aRendererChangeEventto all registered listeners.voidsetBarPainter(XYBarPainter painter) Sets the bar painter and sends aRendererChangeEventto all registered listeners.voidsetBase(double base) Sets the base value for the bars and sends aRendererChangeEventto all registered listeners.static voidsetDefaultBarPainter(XYBarPainter painter) Sets the default bar painter.static voidsetDefaultShadowsVisible(boolean visible) Sets the default value for the shadows visible flag.voidsetDrawBarOutline(boolean draw) Sets the flag that controls whether or not bar outlines are drawn and sends aRendererChangeEventto all registered listeners.voidsetGradientPaintTransformer(GradientPaintTransformer transformer) Sets the gradient paint transformer and sends aRendererChangeEventto all registered listeners.voidsetLegendBar(Shape bar) Sets the shape used to represent bars in each legend item and sends aRendererChangeEventto all registered listeners.voidsetMargin(double margin) Sets the percentage amount by which the bars are trimmed and sends aRendererChangeEventto all registered listeners.voidsetMinimumLabelSize(Dimension minimumLabelSize) Sets the minimum size for the bar to draw a label.voidSets the fallback position for negative item labels that don't fit within a bar, and sends aRendererChangeEventto all registered listeners.voidSets the fallback position for positive item labels that don't fit within a bar, and sends aRendererChangeEventto all registered listeners.voidsetShadowVisible(boolean visible) Sets the flag that controls whether or not the renderer draws shadows for the bars, and sends aRendererChangeEventto all registered listeners.voidsetShadowXOffset(double offset) Sets the x-offset for the bar shadow and sends aRendererChangeEventto all registered listeners.voidsetShadowYOffset(double offset) Sets the y-offset for the bar shadow and sends aRendererChangeEventto all registered listeners.voidsetShowLabelInsideVisibleBar(boolean showLabelInsideVisibleBar) Sets whether the label should be aligned to the visible part of the bar.
This setting has no effect whenItemLabelAnchor.isInternal()returnsfalse.voidsetUseYInterval(boolean use) Sets the flag that determines whether the y-interval from the dataset is used to calculate the length of each bar, and sends aRendererChangeEventto all registered listeners.Methods inherited from class org.jfree.chart.renderer.xy.AbstractXYItemRenderer
addAnnotation, addAnnotation, addEntity, annotationChanged, beginElementGroup, calculateDomainMarkerTextAnchorPoint, drawAnnotations, drawDomainLine, drawDomainMarker, drawItemLabel, drawRangeLine, drawRangeMarker, fillDomainGridBand, fillRangeGridBand, findDomainBounds, findRangeBounds, getAnnotations, getDefaultItemLabelGenerator, getDefaultToolTipGenerator, getDrawingSupplier, getItemLabelGenerator, getLegendItemLabelGenerator, getLegendItems, getLegendItemToolTipGenerator, getLegendItemURLGenerator, getPassCount, getPlot, getSeriesItemLabelGenerator, getSeriesToolTipGenerator, getToolTipGenerator, getURLGenerator, hashCode, lineTo, moveTo, removeAnnotation, removeAnnotations, setDefaultItemLabelGenerator, setDefaultToolTipGenerator, setLegendItemLabelGenerator, setLegendItemToolTipGenerator, setLegendItemURLGenerator, setPlot, setSeriesItemLabelGenerator, setSeriesToolTipGenerator, setURLGenerator, updateCrosshairValuesMethods inherited from class org.jfree.chart.renderer.AbstractRenderer
addChangeListener, beginElementGroup, calculateLabelAnchorPoint, clearSeriesPaints, clearSeriesStrokes, endElementGroup, fireChangeEvent, getAutoPopulateSeriesFillPaint, getAutoPopulateSeriesOutlinePaint, getAutoPopulateSeriesOutlineStroke, getAutoPopulateSeriesPaint, getAutoPopulateSeriesShape, getAutoPopulateSeriesStroke, getDataBoundsIncludesVisibleSeriesOnly, getDefaultCreateEntities, getDefaultEntityRadius, getDefaultFillPaint, getDefaultItemLabelFont, getDefaultItemLabelPaint, getDefaultItemLabelsVisible, getDefaultLegendShape, getDefaultLegendTextFont, getDefaultLegendTextPaint, getDefaultNegativeItemLabelPosition, getDefaultOutlinePaint, getDefaultOutlineStroke, getDefaultPaint, getDefaultPositiveItemLabelPosition, getDefaultSeriesVisible, getDefaultSeriesVisibleInLegend, getDefaultShape, getDefaultStroke, getItemCreateEntity, getItemFillPaint, getItemLabelAnchorOffset, getItemLabelFont, getItemLabelInsets, getItemLabelPaint, getItemOutlinePaint, getItemOutlineStroke, getItemPaint, getItemShape, getItemStroke, getItemVisible, getLegendShape, getLegendTextFont, getLegendTextPaint, getNegativeItemLabelPosition, getPositiveItemLabelPosition, getSeriesCreateEntities, getSeriesFillPaint, getSeriesItemLabelFont, getSeriesItemLabelPaint, getSeriesNegativeItemLabelPosition, getSeriesOutlinePaint, getSeriesOutlineStroke, getSeriesPaint, getSeriesPositiveItemLabelPosition, getSeriesShape, getSeriesStroke, getSeriesVisible, getSeriesVisibleInLegend, getTreatLegendShapeAsLine, hasListener, isComputeItemLabelContrastColor, isItemLabelVisible, isSeriesItemLabelsVisible, isSeriesVisible, isSeriesVisibleInLegend, lookupLegendShape, lookupLegendTextFont, lookupLegendTextPaint, lookupSeriesFillPaint, lookupSeriesOutlinePaint, lookupSeriesOutlineStroke, lookupSeriesPaint, lookupSeriesShape, lookupSeriesStroke, notifyListeners, removeChangeListener, setAutoPopulateSeriesFillPaint, setAutoPopulateSeriesOutlinePaint, setAutoPopulateSeriesOutlineStroke, setAutoPopulateSeriesPaint, setAutoPopulateSeriesShape, setAutoPopulateSeriesStroke, setComputeItemLabelContrastColor, setDataBoundsIncludesVisibleSeriesOnly, setDefaultCreateEntities, setDefaultCreateEntities, setDefaultEntityRadius, setDefaultFillPaint, setDefaultFillPaint, setDefaultItemLabelFont, setDefaultItemLabelFont, setDefaultItemLabelPaint, setDefaultItemLabelPaint, setDefaultItemLabelsVisible, setDefaultItemLabelsVisible, setDefaultLegendShape, setDefaultLegendTextFont, setDefaultLegendTextPaint, setDefaultNegativeItemLabelPosition, setDefaultNegativeItemLabelPosition, setDefaultOutlinePaint, setDefaultOutlinePaint, setDefaultOutlineStroke, setDefaultOutlineStroke, setDefaultPaint, setDefaultPaint, setDefaultPositiveItemLabelPosition, setDefaultPositiveItemLabelPosition, setDefaultSeriesVisible, setDefaultSeriesVisible, setDefaultSeriesVisibleInLegend, setDefaultSeriesVisibleInLegend, setDefaultShape, setDefaultShape, setDefaultStroke, setDefaultStroke, setItemLabelAnchorOffset, setItemLabelInsets, setLegendShape, setLegendTextFont, setLegendTextPaint, setSeriesCreateEntities, setSeriesCreateEntities, setSeriesFillPaint, setSeriesFillPaint, setSeriesItemLabelFont, setSeriesItemLabelFont, setSeriesItemLabelPaint, setSeriesItemLabelPaint, setSeriesItemLabelsVisible, setSeriesItemLabelsVisible, setSeriesItemLabelsVisible, setSeriesNegativeItemLabelPosition, setSeriesNegativeItemLabelPosition, setSeriesOutlinePaint, setSeriesOutlinePaint, setSeriesOutlineStroke, setSeriesOutlineStroke, setSeriesPaint, setSeriesPaint, setSeriesPositiveItemLabelPosition, setSeriesPositiveItemLabelPosition, setSeriesShape, setSeriesShape, setSeriesStroke, setSeriesStroke, setSeriesVisible, setSeriesVisible, setSeriesVisibleInLegend, setSeriesVisibleInLegend, setTreatLegendShapeAsLineMethods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.jfree.chart.LegendItemSource
getLegendItemsMethods inherited from interface org.jfree.chart.renderer.xy.XYItemRenderer
addAnnotation, addAnnotation, addChangeListener, drawAnnotations, drawDomainLine, drawDomainMarker, drawRangeLine, drawRangeMarker, fillDomainGridBand, fillRangeGridBand, getDefaultCreateEntities, getDefaultFillPaint, getDefaultItemLabelFont, getDefaultItemLabelGenerator, getDefaultItemLabelPaint, getDefaultItemLabelsVisible, getDefaultNegativeItemLabelPosition, getDefaultOutlinePaint, getDefaultOutlineStroke, getDefaultPaint, getDefaultPositiveItemLabelPosition, getDefaultSeriesVisible, getDefaultSeriesVisibleInLegend, getDefaultShape, getDefaultStroke, getDefaultToolTipGenerator, getItemCreateEntity, getItemFillPaint, getItemLabelFont, getItemLabelGenerator, getItemLabelPaint, getItemOutlinePaint, getItemOutlineStroke, getItemPaint, getItemShape, getItemStroke, getItemVisible, getLegendItemLabelGenerator, getNegativeItemLabelPosition, getPassCount, getPlot, getPositiveItemLabelPosition, getSeriesCreateEntities, getSeriesFillPaint, getSeriesItemLabelFont, getSeriesItemLabelGenerator, getSeriesItemLabelPaint, getSeriesNegativeItemLabelPosition, getSeriesOutlinePaint, getSeriesOutlineStroke, getSeriesPaint, getSeriesPositiveItemLabelPosition, getSeriesShape, getSeriesStroke, getSeriesToolTipGenerator, getSeriesVisible, getSeriesVisibleInLegend, getToolTipGenerator, getURLGenerator, isItemLabelVisible, isSeriesItemLabelsVisible, isSeriesVisible, isSeriesVisibleInLegend, removeAnnotation, removeAnnotations, removeChangeListener, setDefaultCreateEntities, setDefaultCreateEntities, setDefaultFillPaint, setDefaultFillPaint, setDefaultItemLabelFont, setDefaultItemLabelGenerator, setDefaultItemLabelPaint, setDefaultItemLabelsVisible, setDefaultItemLabelsVisible, setDefaultNegativeItemLabelPosition, setDefaultNegativeItemLabelPosition, setDefaultOutlinePaint, setDefaultOutlinePaint, setDefaultOutlineStroke, setDefaultOutlineStroke, setDefaultPaint, setDefaultPaint, setDefaultPositiveItemLabelPosition, setDefaultPositiveItemLabelPosition, setDefaultSeriesVisible, setDefaultSeriesVisible, setDefaultSeriesVisibleInLegend, setDefaultSeriesVisibleInLegend, setDefaultShape, setDefaultShape, setDefaultStroke, setDefaultStroke, setDefaultToolTipGenerator, setLegendItemLabelGenerator, setPlot, setSeriesCreateEntities, setSeriesCreateEntities, setSeriesFillPaint, setSeriesFillPaint, setSeriesItemLabelFont, setSeriesItemLabelGenerator, setSeriesItemLabelPaint, setSeriesItemLabelsVisible, setSeriesItemLabelsVisible, setSeriesItemLabelsVisible, setSeriesNegativeItemLabelPosition, setSeriesNegativeItemLabelPosition, setSeriesOutlinePaint, setSeriesOutlinePaint, setSeriesOutlineStroke, setSeriesOutlineStroke, setSeriesPaint, setSeriesPaint, setSeriesPositiveItemLabelPosition, setSeriesPositiveItemLabelPosition, setSeriesShape, setSeriesShape, setSeriesStroke, setSeriesStroke, setSeriesToolTipGenerator, setSeriesVisible, setSeriesVisible, setSeriesVisibleInLegend, setSeriesVisibleInLegend, setURLGenerator
-
Constructor Details
-
XYBarRenderer
public XYBarRenderer()The default constructor. -
XYBarRenderer
Constructs a new renderer.- Parameters:
margin- the percentage amount to trim from the width of each bar.
-
-
Method Details
-
getDefaultBarPainter
Returns the default bar painter.- Returns:
- The default bar painter.
-
setDefaultBarPainter
Sets the default bar painter.- Parameters:
painter- the painter (nullnot permitted).
-
getDefaultShadowsVisible
Returns the default value for theshadowsVisibleflag.- Returns:
- A boolean.
- See Also:
-
setDefaultShadowsVisible
Sets the default value for the shadows visible flag.- Parameters:
visible- the new value for the default.- See Also:
-
getBase
Returns the base value for the bars.- Returns:
- The base value for the bars.
- See Also:
-
setBase
Sets the base value for the bars and sends aRendererChangeEventto all registered listeners. The base value is not used if the dataset's y-interval is being used to determine the bar length.- Parameters:
base- the new base value.- See Also:
-
getUseYInterval
Returns a flag that determines whether the y-interval from the dataset is used to calculate the length of each bar.- Returns:
- A boolean.
- See Also:
-
setUseYInterval
Sets the flag that determines whether the y-interval from the dataset is used to calculate the length of each bar, and sends aRendererChangeEventto all registered listeners.- Parameters:
use- the flag.- See Also:
-
getMargin
Returns the margin which is a percentage amount by which the bars are trimmed.- Returns:
- The margin.
- See Also:
-
setMargin
Sets the percentage amount by which the bars are trimmed and sends aRendererChangeEventto all registered listeners.- Parameters:
margin- the new margin.- See Also:
-
isDrawBarOutline
Returns a flag that controls whether or not bar outlines are drawn.- Returns:
- A boolean.
- See Also:
-
setDrawBarOutline
Sets the flag that controls whether or not bar outlines are drawn and sends aRendererChangeEventto all registered listeners.- Parameters:
draw- the flag.- See Also:
-
getGradientPaintTransformer
Returns the gradient paint transformer (an object used to transform gradient paint objects to fit each bar).- Returns:
- A transformer (
nullpossible). - See Also:
-
setGradientPaintTransformer
Sets the gradient paint transformer and sends aRendererChangeEventto all registered listeners.- Parameters:
transformer- the transformer (nullpermitted).- See Also:
-
getLegendBar
Returns the shape used to represent bars in each legend item.- Returns:
- The shape used to represent bars in each legend item (never
null). - See Also:
-
setLegendBar
Sets the shape used to represent bars in each legend item and sends aRendererChangeEventto all registered listeners.- Parameters:
bar- the bar shape (nullnot permitted).- See Also:
-
getPositiveItemLabelPositionFallback
Returns the fallback position for positive item labels that don't fit within a bar.- Returns:
- The fallback position (
nullpossible). - See Also:
-
setPositiveItemLabelPositionFallback
Sets the fallback position for positive item labels that don't fit within a bar, and sends aRendererChangeEventto all registered listeners.- Parameters:
position- the position (nullpermitted).- See Also:
-
getNegativeItemLabelPositionFallback
Returns the fallback position for negative item labels that don't fit within a bar.- Returns:
- The fallback position (
nullpossible). - See Also:
-
setNegativeItemLabelPositionFallback
Sets the fallback position for negative item labels that don't fit within a bar, and sends aRendererChangeEventto all registered listeners.- Parameters:
position- the position (nullpermitted).- See Also:
-
getBarPainter
Returns the bar painter.- Returns:
- The bar painter (never
null).
-
setBarPainter
Sets the bar painter and sends aRendererChangeEventto all registered listeners.- Parameters:
painter- the painter (nullnot permitted).
-
getShadowsVisible
Returns the flag that controls whether or not shadows are drawn for the bars.- Returns:
- A boolean.
-
setShadowVisible
Sets the flag that controls whether or not the renderer draws shadows for the bars, and sends aRendererChangeEventto all registered listeners.- Parameters:
visible- the new flag value.
-
getShadowXOffset
Returns the shadow x-offset.- Returns:
- The shadow x-offset.
-
setShadowXOffset
Sets the x-offset for the bar shadow and sends aRendererChangeEventto all registered listeners.- Parameters:
offset- the offset.
-
getShadowYOffset
Returns the shadow y-offset.- Returns:
- The shadow y-offset.
-
setShadowYOffset
Sets the y-offset for the bar shadow and sends aRendererChangeEventto all registered listeners.- Parameters:
offset- the offset.
-
getBarAlignmentFactor
Returns the bar alignment factor.- Returns:
- The bar alignment factor.
-
setBarAlignmentFactor
Sets the bar alignment factor and sends aRendererChangeEventto all registered listeners. If the alignment factor is outside the range 0.0 to 1.0, no alignment will be performed by the renderer.- Parameters:
factor- the factor.
-
getMinimumLabelSize
Returns the minimum size for the bar to draw a label.- Returns:
- The minimum size to draw a label.
-
setMinimumLabelSize
Sets the minimum size for the bar to draw a label.- Parameters:
minimumLabelSize- The size
-
isShowLabelInsideVisibleBar
Returnstrueif the label should be aligned to the visible part of the bar.- Returns:
trueif the label should be aligned to the visible part of the bar.- See Also:
-
setShowLabelInsideVisibleBar
Sets whether the label should be aligned to the visible part of the bar.
This setting has no effect whenItemLabelAnchor.isInternal()returnsfalse.- Parameters:
showLabelInsideVisibleBar-trueto align to the visible part.
-
initialise
public XYItemRendererState initialise(Graphics2D g2, Rectangle2D dataArea, XYPlot plot, XYDataset dataset, PlotRenderingInfo info) Initialises the renderer and returns a state object that should be passed to all subsequent calls to the drawItem() method. Here we calculate the Java2D y-coordinate for zero, since all the bars have their bases fixed at zero.- Specified by:
initialisein interfaceXYItemRenderer- Overrides:
initialisein classAbstractXYItemRenderer- Parameters:
g2- the graphics device.dataArea- the area inside the axes.plot- the plot.dataset- the data.info- an optional info collection object to return data back to the caller.- Returns:
- A state object.
-
getLegendItem
Returns a default legend item for the specified series. Subclasses should override this method to generate customised items.- Specified by:
getLegendItemin interfaceXYItemRenderer- Overrides:
getLegendItemin classAbstractXYItemRenderer- Parameters:
datasetIndex- the dataset index (zero-based).series- the series index (zero-based).- Returns:
- A legend item for the series.
-
drawItem
public void drawItem(Graphics2D g2, XYItemRendererState state, Rectangle2D dataArea, PlotRenderingInfo info, XYPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis, XYDataset dataset, int series, int item, CrosshairState crosshairState, int pass) Draws the visual representation of a single data item.- Specified by:
drawItemin interfaceXYItemRenderer- Parameters:
g2- the graphics device.state- the renderer state.dataArea- the area within which the plot is being drawn.info- collects information about the drawing.plot- the plot (can be used to obtain standard color information etc).domainAxis- the domain axis.rangeAxis- the range axis.dataset- the dataset.series- the series index (zero-based).item- the item index (zero-based).crosshairState- crosshair information for the plot (nullpermitted).pass- the pass index.
-
drawItemLabel
protected void drawItemLabel(Graphics2D g, XYDataset dataset, int series, int item, XYPlot plot, XYItemLabelGenerator generator, Rectangle2D bar, boolean negative) Draws an item label. This method is provided as an alternative toAbstractXYItemRenderer.drawItemLabel(Graphics2D, PlotOrientation, XYDataset, int, int, double, double, boolean)so that the bar can be used to calculate the label anchor point.- Parameters:
g- the graphics device.dataset- the dataset.series- the series index.item- the item index.plot- the plot.generator- the label generator (nullpermitted, in which case the method does nothing, just returns).bar- the bar.negative- a flag indicating a negative value.
-
findDomainBounds
Returns the lower and upper bounds (range) of the x-values in the specified dataset. Since this renderer uses the x-interval in the dataset, this is taken into account for the range.- Specified by:
findDomainBoundsin interfaceXYItemRenderer- Overrides:
findDomainBoundsin classAbstractXYItemRenderer- Parameters:
dataset- the dataset (nullpermitted).- Returns:
- The range (
nullif the dataset isnullor empty). - See Also:
-
findRangeBounds
Returns the lower and upper bounds (range) of the y-values in the specified dataset. If the renderer is plotting the y-interval from the dataset, this is taken into account for the range.- Specified by:
findRangeBoundsin interfaceXYItemRenderer- Overrides:
findRangeBoundsin classAbstractXYItemRenderer- Parameters:
dataset- the dataset (nullpermitted).- Returns:
- The range (
nullif the dataset isnullor empty). - See Also:
-
clone
Returns a clone of the renderer.- Specified by:
clonein interfacePublicCloneable- Overrides:
clonein classAbstractXYItemRenderer- Returns:
- A clone.
- Throws:
CloneNotSupportedException- if the renderer cannot be cloned.
-
equals
Tests this renderer for equality with an arbitrary object.- Overrides:
equalsin classAbstractXYItemRenderer- Parameters:
obj- the object to test against (nullpermitted).- Returns:
- A boolean.
-