Package | Description |
---|---|
org.apache.fop.layoutmgr |
FOP's layout engine.
|
org.apache.fop.layoutmgr.inline |
Layout managers for inline formatting objects and line building.
|
org.apache.fop.layoutmgr.list |
Layout managers for lists.
|
org.apache.fop.layoutmgr.table |
Layout managers for tables.
|
Modifier and Type | Method and Description |
---|---|
static LayoutContext |
LayoutContext.copyOf(LayoutContext copy) |
protected LayoutContext |
AbstractBreaker.createLayoutContext()
Creates the top-level LayoutContext for the breaker operation.
|
protected LayoutContext |
LocalBreaker.createLayoutContext() |
protected LayoutContext |
FlowLayoutManager.makeChildLayoutContext(LayoutContext context)
Overridden to take into account the current page-master's
writing-mode
Creates and initializes a
LayoutContext to pass to the child LM |
protected LayoutContext |
BlockContainerLayoutManager.makeChildLayoutContext(LayoutContext context)
Overridden to handle writing-mode, and different stack limit
setup.
|
protected LayoutContext |
BlockStackingLayoutManager.makeChildLayoutContext(LayoutContext context)
Creates and initializes a
LayoutContext to pass to the child LM |
static LayoutContext |
LayoutContext.newInstance() |
static LayoutContext |
LayoutContext.offspringOf(LayoutContext parent)
Returns a descendant of the given layout context.
|
Modifier and Type | Method and Description |
---|---|
static void |
AreaAdditionUtil.addAreas(AbstractLayoutManager parentLM,
PositionIterator parentIter,
LayoutContext layoutContext)
Creates the child areas for the given layout manager.
|
protected void |
AbstractBreaker.addAreas(org.apache.fop.layoutmgr.PageBreakingAlgorithm alg,
int startPart,
int partCount,
AbstractBreaker.BlockSequence originalList,
AbstractBreaker.BlockSequence effectiveList,
LayoutContext childLC)
Phase 3 of Knuth algorithm: Adds the areas
|
protected void |
PageBreaker.addAreas(org.apache.fop.layoutmgr.PageBreakingAlgorithm alg,
int startPart,
int partCount,
AbstractBreaker.BlockSequence originalList,
AbstractBreaker.BlockSequence effectiveList,
LayoutContext childLC) |
void |
MultiCaseLayoutManager.addAreas(PositionIterator posIter,
LayoutContext context)
Tell the layout manager to add all the child areas implied
by Position objects which will be returned by the
Iterator.
|
void |
FlowLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext)
Tell the layout manager to add all the child areas implied
by Position objects which will be returned by the
Iterator.
|
void |
FootnoteBodyLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext)
Tell the layout manager to add all the child areas implied
by Position objects which will be returned by the
Iterator.
|
void |
RetrieveTableMarkerLayoutManager.addAreas(PositionIterator posIter,
LayoutContext context)
Add the area for this layout manager.
|
void |
FloatContentLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext) |
void |
BlockLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext)
Tell the layout manager to add all the child areas implied
by Position objects which will be returned by the
Iterator.
|
void |
BlockContainerLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext)
Tell the layout manager to add all the child areas implied
by Position objects which will be returned by the
Iterator.
|
protected abstract void |
AbstractBreaker.addAreas(PositionIterator posIter,
LayoutContext context)
Tell the layout manager to add all the child areas implied
by Position objects which will be returned by the
Iterator.
|
void |
AbstractLayoutManager.addAreas(PositionIterator posIter,
LayoutContext context)
Tell the layout manager to add all the child areas implied
by Position objects which will be returned by the
Iterator.
|
void |
LayoutManager.addAreas(PositionIterator posIter,
LayoutContext context)
Tell the layout manager to add all the child areas implied
by Position objects which will be returned by the
Iterator.
|
void |
MultiSwitchLayoutManager.addAreas(PositionIterator posIter,
LayoutContext context) |
protected void |
PageBreaker.addAreas(PositionIterator posIter,
LayoutContext context)
Adds an area to the flow layout manager
|
protected void |
LocalBreaker.addAreas(PositionIterator posIter,
LayoutContext context) |
void |
StaticContentLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext)
Tell the layout manager to add all the child areas implied
by Position objects which will be returned by the
Iterator.
|
protected void |
AbstractBreaker.addAreasForFloats(org.apache.fop.layoutmgr.PageBreakingAlgorithm alg,
int startPart,
int partCount,
AbstractBreaker.BlockSequence originalList,
AbstractBreaker.BlockSequence effectiveList,
LayoutContext childLC,
int lastBreak,
int startElementIndex,
int endElementIndex) |
protected void |
PageBreaker.addAreasForFloats(org.apache.fop.layoutmgr.PageBreakingAlgorithm alg,
int startPart,
int partCount,
AbstractBreaker.BlockSequence originalList,
AbstractBreaker.BlockSequence effectiveList,
LayoutContext childLC,
int lastBreak,
int startElementIndex,
int endElementIndex) |
protected void |
BlockStackingLayoutManager.addFirstVisibleMarks(List<ListElement> elements,
LayoutContext context,
int alignment)
Checks if this LM's first "visible marks" (= borders, padding, spaces) have
already been processed, and if necessary, adds corresponding elements to
the specified list, and updates the given layout context accordingly.
|
protected void |
BlockStackingLayoutManager.addInBetweenBreak(List<ListElement> contentList,
LayoutContext parentLC,
LayoutContext childLC)
Adds a break element to the content list between individual child elements.
|
protected boolean |
BlockStackingLayoutManager.addKnuthElementsForBreakAfter(List returnList,
LayoutContext context)
Creates Knuth elements for break-after and adds them to the return list.
|
protected boolean |
BlockStackingLayoutManager.addKnuthElementsForBreakBefore(List returnList,
LayoutContext context)
Creates Knuth elements for break-before and adds them to the return list.
|
protected void |
BlockStackingLayoutManager.addLastVisibleMarks(List<ListElement> elements,
LayoutContext context,
int alignment)
Adds elements the LM's last/closing marks to the specified list, and
updates the layout context accordingly.
|
protected void |
BlockStackingLayoutManager.addPendingMarks(LayoutContext context)
Adds the unresolved elements for border and padding to a layout context so break
possibilities can be properly constructed.
|
protected boolean |
BlockStackingLayoutManager.breakBeforeServed(LayoutContext context,
List<ListElement> elements)
Check whether there is a break-before condition.
|
static LayoutContext |
LayoutContext.copyOf(LayoutContext copy) |
void |
LayoutContext.copyPendingMarksFrom(LayoutContext source) |
static List<List<KnuthElement>> |
PageBreaker.getFootnoteKnuthElements(FlowLayoutManager flowLM,
LayoutContext context,
List<FootnoteBodyLayoutManager> footnoteBodyLMs) |
protected int |
AbstractBreaker.getNextBlockList(LayoutContext childLC,
int nextSequenceStartsOn)
Gets the next block list (sequence) and adds it to a list of block lists if it's not empty.
|
protected int |
PageBreaker.getNextBlockList(LayoutContext childLC,
int nextSequenceStartsOn)
Gets the next block list (sequence) and adds it to a list of block lists if it's not empty.
|
protected int |
AbstractBreaker.getNextBlockList(LayoutContext childLC,
int nextSequenceStartsOn,
Position positionAtIPDChange,
LayoutManager restartAtLM,
List<ListElement> firstElements)
Gets the next block list (sequence) and adds it to a list of block lists
if it's not empty.
|
protected int |
PageBreaker.getNextBlockList(LayoutContext childLC,
int nextSequenceStartsOn,
Position positionAtIPDChange,
LayoutManager restartLM,
List<ListElement> firstElements)
Gets the next block list (sequence) and adds it to a list of block lists
if it's not empty.
|
protected List<ListElement> |
FlowLayoutManager.getNextChildElements(LayoutManager childLM,
LayoutContext context,
LayoutContext childLC,
int alignment,
Stack<LayoutManager> lmStack,
Position restartPosition,
LayoutManager restartLM)
Overridden to wrap the child positions before returning the list
Gets the next set of child elements for the given childLM.
|
protected List<ListElement> |
BlockStackingLayoutManager.getNextChildElements(LayoutManager childLM,
LayoutContext context,
LayoutContext childLC,
int alignment,
Stack<LayoutManager> lmStack,
Position restartPosition,
LayoutManager restartAtLM)
Gets the next set of child elements for the given childLM.
|
protected List<ListElement> |
BlockLayoutManager.getNextChildElements(LayoutManager childLM,
LayoutContext context,
LayoutContext childLC,
int alignment,
Stack lmStack,
Position restartPosition,
LayoutManager restartAtLM)
Overridden to take into account that the childLM may be the block's
LineLayoutManager . |
List<ListElement> |
FlowLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List |
FootnoteBodyLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment) |
List<KnuthSequence> |
RetrieveTableMarkerLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<ListElement> |
BlockLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<ListElement> |
BlockContainerLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
protected abstract List<ListElement> |
AbstractBreaker.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM
|
List |
AbstractLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List |
LayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<ListElement> |
BlockStackingLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<ListElement> |
MultiSwitchLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment) |
protected List<ListElement> |
PageBreaker.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM
|
protected List<ListElement> |
LocalBreaker.getNextKnuthElements(LayoutContext context,
int alignment) |
List<ListElement> |
StaticContentLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
protected List<ListElement> |
AbstractBreaker.getNextKnuthElements(LayoutContext context,
int alignment,
Position positionAtIPDChange,
LayoutManager restartAtLM)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM
|
protected List<ListElement> |
PageBreaker.getNextKnuthElements(LayoutContext context,
int alignment,
Position positionAtIPDChange,
LayoutManager restartAtLM)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM
|
List<ListElement> |
AbstractBaseLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment,
Stack lmStack,
Position positionAtIPDChange,
LayoutManager restartAtLM)
Returns an updated list of Knuth elements corresponding to this layout
manager, after a change of IPD has been detected.
|
List<ListElement> |
BlockLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment,
Stack lmStack,
Position restartPosition,
LayoutManager restartAtLM)
Returns an updated list of Knuth elements corresponding to this layout
manager, after a change of IPD has been detected.
|
List<ListElement> |
BlockContainerLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment,
Stack lmStack,
Position restartPosition,
LayoutManager restartAtLM)
Returns an updated list of Knuth elements corresponding to this layout
manager, after a change of IPD has been detected.
|
List<ListElement> |
LayoutManager.getNextKnuthElements(LayoutContext context,
int alignment,
Stack lmStack,
Position positionAtIPDChange,
LayoutManager restartAtLM)
Returns an updated list of Knuth elements corresponding to this layout
manager, after a change of IPD has been detected.
|
List<ListElement> |
BlockStackingLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment,
Stack lmStack,
Position restartPosition,
LayoutManager restartAtLM)
Returns an updated list of Knuth elements corresponding to this layout
manager, after a change of IPD has been detected.
|
protected int |
AbstractBreaker.handleFloatLayout(org.apache.fop.layoutmgr.PageBreakingAlgorithm alg,
int optimalPageCount,
AbstractBreaker.BlockSequence blockList,
LayoutContext childLC) |
protected int |
PageBreaker.handleFloatLayout(org.apache.fop.layoutmgr.PageBreakingAlgorithm alg,
int optimalPageCount,
AbstractBreaker.BlockSequence blockList,
LayoutContext childLC) |
protected int |
AbstractBreaker.handleSpanChange(LayoutContext childLC,
int nextSequenceStartsOn)
Handles span changes reported through the
LayoutContext . |
protected int |
PageBreaker.handleSpanChange(LayoutContext childLC,
int nextSequenceStartsOn)
Handles span changes reported through the
LayoutContext . |
protected LayoutContext |
FlowLayoutManager.makeChildLayoutContext(LayoutContext context)
Overridden to take into account the current page-master's
writing-mode
Creates and initializes a
LayoutContext to pass to the child LM |
protected LayoutContext |
BlockContainerLayoutManager.makeChildLayoutContext(LayoutContext context)
Overridden to handle writing-mode, and different stack limit
setup.
|
protected LayoutContext |
BlockStackingLayoutManager.makeChildLayoutContext(LayoutContext context)
Creates and initializes a
LayoutContext to pass to the child LM |
static LayoutContext |
LayoutContext.offspringOf(LayoutContext parent)
Returns a descendant of the given layout context.
|
void |
FloatContentLayoutManager.processAreas(LayoutContext layoutContext)
{Add info}
|
protected void |
AbstractBreaker.updateLayoutContext(LayoutContext context)
Used to update the LayoutContext in subclasses prior to starting a new element list.
|
protected void |
PageBreaker.updateLayoutContext(LayoutContext context)
Used to update the LayoutContext in subclasses prior to starting a new element list.
|
Constructor and Description |
---|
BreakElement(Position position,
int penaltyWidth,
int penaltyValue,
int breakClass,
LayoutContext context)
Constructor for hard breaks.
|
BreakElement(Position position,
int penaltyValue,
int breakClass,
LayoutContext context)
Create a new BreakElement for the given
position , penaltyValue
and breakClass . |
BreakElement(Position position,
int penaltyValue,
LayoutContext context)
Main constructor
|
Modifier and Type | Field and Description |
---|---|
protected LayoutContext |
InlineStackingLayoutManager.childLC
The child layout context
|
Modifier and Type | Method and Description |
---|---|
protected LayoutContext |
InlineStackingLayoutManager.getContext()
Current child layout context
|
Modifier and Type | Method and Description |
---|---|
void |
FootnoteLayoutManager.addAreas(PositionIterator posIter,
LayoutContext context)
Tell the layout manager to add all the child areas implied
by Position objects which will be returned by the
Iterator.
|
void |
LeaderLayoutManager.addAreas(PositionIterator posIter,
LayoutContext context)
Add the area for this layout manager.
|
void |
FloatLayoutManager.addAreas(PositionIterator posIter,
LayoutContext context) |
void |
ContentLayoutManager.addAreas(PositionIterator posIter,
LayoutContext context)
Tell the layout manager to add all the child areas implied
by Position objects which will be returned by the
Iterator.
|
void |
LeafNodeLayoutManager.addAreas(PositionIterator posIter,
LayoutContext context)
Add the area for this layout manager.
|
void |
WrapperLayoutManager.addAreas(PositionIterator posIter,
LayoutContext context)
Add the area for this layout manager.
|
void |
TextLayoutManager.addAreas(PositionIterator posIter,
LayoutContext context)
Generate and add areas to parent area.
|
void |
InlineContainerLayoutManager.addAreas(PositionIterator posIter,
LayoutContext context) |
void |
InlineLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext context)
Generate and add areas to parent area.
|
void |
LineLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext context)
Add the areas with the break points.
|
InlineArea |
LeaderLayoutManager.get(LayoutContext context)
Return the inline area for this leader.
|
InlineArea |
PageNumberLayoutManager.get(LayoutContext context)
get the inline area.
|
InlineArea |
LeafNodeLayoutManager.get(LayoutContext context)
get the inline area.
|
InlineArea |
WrapperLayoutManager.get(LayoutContext context)
get the inline area.
|
protected InlineArea |
PageNumberLayoutManager.getEffectiveArea(LayoutContext layoutContext) |
protected InlineArea |
LeafNodeLayoutManager.getEffectiveArea(LayoutContext layoutContext) |
protected InlineArea |
AbstractGraphicsLayoutManager.getEffectiveArea(LayoutContext layoutContext) |
protected InlineArea |
CharacterLayoutManager.getEffectiveArea(LayoutContext layoutContext) |
protected InlineArea |
AbstractPageNumberCitationLayoutManager.getEffectiveArea(LayoutContext layoutContext) |
List<KnuthSequence> |
FootnoteLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<KnuthSequence> |
LeaderLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
LinkedList<KnuthSequence> |
FloatLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment) |
List<ListElement> |
ContentLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<KnuthSequence> |
LeafNodeLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<KnuthSequence> |
WrapperLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment) |
List<KnuthSequence> |
TextLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<KnuthSequence> |
InlineContainerLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment) |
List<KnuthSequence> |
InlineLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<KnuthSequence> |
AbstractGraphicsLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<ListElement> |
LineLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<KnuthSequence> |
CharacterLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<ListElement> |
LineLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment,
LeafPosition restartPosition)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
protected AlignmentContext |
PageNumberLayoutManager.makeAlignmentContext(LayoutContext context)
Creates a new alignment context or returns the current
alignment context.
|
protected AlignmentContext |
LeafNodeLayoutManager.makeAlignmentContext(LayoutContext context)
Creates a new alignment context or returns the current
alignment context.
|
protected AlignmentContext |
InlineContainerLayoutManager.makeAlignmentContext(LayoutContext context) |
protected AlignmentContext |
AbstractGraphicsLayoutManager.makeAlignmentContext(LayoutContext context)
Creates a new alignment context or returns the current
alignment context.
|
protected AlignmentContext |
AbstractPageNumberCitationLayoutManager.makeAlignmentContext(LayoutContext context)
Creates a new alignment context or returns the current
alignment context.
|
protected void |
LeafNodeLayoutManager.offsetArea(InlineArea area,
LayoutContext context)
Offset this area.
|
void |
FloatLayoutManager.processAreas(LayoutContext context) |
protected void |
InlineStackingLayoutManager.setChildContext(LayoutContext lc)
Set the current child layout context
|
protected void |
LeafNodeLayoutManager.widthAdjustArea(InlineArea area,
LayoutContext context)
Adjust the width of the area when adding.
|
Modifier and Type | Method and Description |
---|---|
void |
ListItemLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext)
Add the areas for the break points.
|
void |
ListBlockLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext)
A list block generates one or more normal block areas whose child areas are
normal block areas returned by the children of fo:list-block.
|
void |
ListItemContentLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext)
Add the areas for the break points.
|
protected void |
ListItemLayoutManager.addFirstVisibleMarks(List<ListElement> elements,
LayoutContext context,
int alignment)
Overridden to unconditionally add elements for space-before.
|
List<ListElement> |
ListItemLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment,
Stack lmStack,
Position restartPosition,
LayoutManager restartAtLM)
Returns an updated list of Knuth elements corresponding to this layout
manager, after a change of IPD has been detected.
|
List<ListElement> |
ListBlockLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment,
Stack lmStack,
Position restartPosition,
LayoutManager restartAtLM)
Returns an updated list of Knuth elements corresponding to this layout
manager, after a change of IPD has been detected.
|
List<ListElement> |
ListItemContentLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment,
Stack lmStack,
Position restartPosition,
LayoutManager restartAtLM)
Returns an updated list of Knuth elements corresponding to this layout
manager, after a change of IPD has been detected.
|
Modifier and Type | Method and Description |
---|---|
void |
TableLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext)
The table area is a reference area that contains areas for
columns, bodies, rows and the contents are in cells.
|
void |
TableAndCaptionLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext)
Add the areas.
|
void |
TableCaptionLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext)
Add the areas to the parent.
|
void |
TableCellLayoutManager.addAreas(PositionIterator parentIter,
LayoutContext layoutContext,
int[] spannedGridRowHeights,
int startRow,
int endRow,
int borderBeforeWhich,
int borderAfterWhich,
boolean firstOnPage,
boolean lastOnPage,
org.apache.fop.layoutmgr.table.RowPainter painter,
int firstRowHeight)
Add the areas for the break points.
|
LinkedList |
TableStepper.getCombinedKnuthElementsForRowGroup(LayoutContext context,
EffRow[] rows,
int bodyType)
Creates the combined element list for a row group.
|
List<ListElement> |
TableLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<ListElement> |
TableCellLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
List<ListElement> |
TableContentLayoutManager.getNextKnuthElements(LayoutContext context,
int alignment)
Get a sequence of KnuthElements representing the content
of the node assigned to the LM.
|
Copyright © 2025 Apache Software Foundation. All rights reserved.