[FOray-commit] SF.net SVN: foray:[12184] trunk/foray
Modular XSL-FO Implementation for Java.
Status: Alpha
Brought to you by:
victormote
|
From: <vic...@us...> - 2021-12-07 17:09:45
|
Revision: 12184
http://sourceforge.net/p/foray/code/12184
Author: victormote
Date: 2021-12-07 17:09:43 +0000 (Tue, 07 Dec 2021)
Log Message:
-----------
Add ability to cast a tree node instance back and forth between an ordered tree node and its native type.
Modified Paths:
--------------
trunk/foray/foray-areatree/src/main/java/org/foray/area/AreaNode4a.java
trunk/foray/foray-common/src/main/java/org/foray/common/data/AbstractOrderedTreeNode.java
trunk/foray/foray-common/src/main/java/org/foray/common/data/OrderedTreeNode.java
trunk/foray/foray-fotree/src/main/java/org/foray/fotree/FoObj.java
trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/obj/Root4a.java
Modified: trunk/foray/foray-areatree/src/main/java/org/foray/area/AreaNode4a.java
===================================================================
--- trunk/foray/foray-areatree/src/main/java/org/foray/area/AreaNode4a.java 2021-12-07 16:11:55 UTC (rev 12183)
+++ trunk/foray/foray-areatree/src/main/java/org/foray/area/AreaNode4a.java 2021-12-07 17:09:43 UTC (rev 12184)
@@ -51,7 +51,8 @@
/**
* Abstract superclass for all nodes in the AreaTree.
*/
-public abstract class AreaNode4a extends AbstractOrderedTreeNode<AreaNode4a> implements AreaNode {
+public abstract class AreaNode4a extends AbstractOrderedTreeNode<AreaNode4a>
+ implements AreaNode, OrderedTreeNode.Convertible<AreaNode4a> {
/**
* Constructor.
@@ -70,18 +71,21 @@
}
@Override
- public AreaNode4a asNodeType() {
+ public AreaNode4a asNativeType() {
return this;
}
+ /**
+ * Casts a native type item as an ordered tree node.
+ * @return The {@code nativeTypeInstance} cast as an ordered tree node.
+ */
+ public OrderedTreeNode<AreaNode4a> asOrderedNode() {
+ return this;
+ }
+
@Override
public abstract AreaNode4a getParent();
- @Override
- public OrderedTreeNode<AreaNode4a> getOrderedParent() {
- return this.getParent();
- }
-
/**
* Sets the parent node.
* @param node The new parent node.
Modified: trunk/foray/foray-common/src/main/java/org/foray/common/data/AbstractOrderedTreeNode.java
===================================================================
--- trunk/foray/foray-common/src/main/java/org/foray/common/data/AbstractOrderedTreeNode.java 2021-12-07 16:11:55 UTC (rev 12183)
+++ trunk/foray/foray-common/src/main/java/org/foray/common/data/AbstractOrderedTreeNode.java 2021-12-07 17:09:43 UTC (rev 12184)
@@ -40,8 +40,18 @@
* Many of the methods in this class were liberated from that class.</p>
* @param <T> The type of node.
*/
-public abstract class AbstractOrderedTreeNode<T> implements OrderedTreeNode<T> {
+public abstract class AbstractOrderedTreeNode<T extends OrderedTreeNode.Convertible<T>>
+ implements OrderedTreeNode<T> {
+ @Override
+ public OrderedTreeNode<T> getParentAsOrderedNode() {
+ final T parent = getParent();
+ if (parent == null) {
+ return null;
+ }
+ return parent.asOrderedNode();
+ }
+
/**
* Returns an iterator that will iterate the descendant nodes of this node
* in post-traversal (depth-first) order.
@@ -66,7 +76,7 @@
}
@Override
- public int getIndex(final T node) {
+ public int getChildIndex(final OrderedTreeNode<T> node) {
if (getChildren() == null) {
return -1;
}
@@ -157,7 +167,7 @@
return currentNode;
}
// Go up a level and see if the parent has any siblings
- currentNode = this.getOrderedParent();
+ currentNode = getParent().asOrderedNode();
}
// Current node is null; we are at the root of the tree.
return null;
@@ -178,7 +188,7 @@
/* If there are no siblings, then the parent's children are all
* processed, and the parent is the next node. If that happens to be
* null, then we are done, and null is what should be returned. */
- return this.getOrderedParent();
+ return getParent().asOrderedNode();
}
@Override
@@ -201,7 +211,7 @@
@Override
public OrderedTreeNode<T> getNextLeaf() {
- final OrderedTreeNode<T> myParent = getOrderedParent();
+ final OrderedTreeNode<T> myParent = getParentAsOrderedNode();
if (myParent == null) {
return null;
}
@@ -216,7 +226,7 @@
@Override
public OrderedTreeNode<T> getPreviousLeaf() {
- final OrderedTreeNode<T> myParent = getOrderedParent();
+ final OrderedTreeNode<T> myParent = getParentAsOrderedNode();
if (myParent == null) {
return null;
}
@@ -239,7 +249,7 @@
if (ancestor == anotherNode) {
return true;
}
- } while ((ancestor = ancestor.getOrderedParent()) != null);
+ } while ((ancestor = ancestor.getParentAsOrderedNode()) != null);
return false;
}
@@ -302,7 +312,7 @@
// Go up the tree until the nodes are at the same level
while (diff > 0) {
- node1 = node1.getOrderedParent();
+ node1 = node1.getParent().asOrderedNode();
diff--;
}
@@ -315,8 +325,8 @@
if (node1 == node2) {
return node1;
}
- node1 = node1.getOrderedParent();
- node2 = node2.getOrderedParent();
+ node1 = node1.getParent().asOrderedNode();
+ node2 = node2.getParent().asOrderedNode();
} while (node1 != null);
/* Only need to check one -- they're at the same level so if one is
* null, so is the other one. */
@@ -332,7 +342,7 @@
public int getLevel() {
int levels = 0;
OrderedTreeNode<T> ancestor = this;
- while ((ancestor = ancestor.getOrderedParent()) != null) {
+ while ((ancestor = ancestor.getParent().asOrderedNode()) != null) {
levels++;
}
return levels;
Modified: trunk/foray/foray-common/src/main/java/org/foray/common/data/OrderedTreeNode.java
===================================================================
--- trunk/foray/foray-common/src/main/java/org/foray/common/data/OrderedTreeNode.java 2021-12-07 16:11:55 UTC (rev 12183)
+++ trunk/foray/foray-common/src/main/java/org/foray/common/data/OrderedTreeNode.java 2021-12-07 17:09:43 UTC (rev 12184)
@@ -41,11 +41,24 @@
public interface OrderedTreeNode<T> {
/**
- * Casts the node as its native type.
- * @return This, cast as its native type.
+ * Interface for types that are able to convert back and forth between a native type and a node in the ordered tree.
+ * @param <T> The type of node.
*/
- T asNodeType();
+ public interface Convertible<T> {
+ /**
+ * Casts the node as its native type.
+ * @return This, cast as its native type.
+ */
+ T asNativeType();
+ /**
+ * Casts a native type item as an ordered tree node.
+ * @return The {@code nativeTypeInstance} cast as an ordered tree node.
+ */
+ OrderedTreeNode<T> asOrderedNode();
+
+ }
+
/**
* Returns the parent of this.
* @return The parent node.
@@ -53,6 +66,12 @@
T getParent();
/**
+ * Returns the parent of this, cast as an ordered tree node.
+ * @return The parent node.
+ */
+ OrderedTreeNode<T> getParentAsOrderedNode();
+
+ /**
* Returns the number of children this contains.
* @return The number of children.
*/
@@ -70,7 +89,7 @@
* @param node The node whose index should be returned.
* @return The index of {@code node} if found, or -1 if not.
*/
- int getIndex(T node);
+ int getChildIndex(OrderedTreeNode<T> node);
/**
* Returns true if the receiver is a leaf.
@@ -79,12 +98,6 @@
boolean isLeaf();
/**
- * Returns the parent of this node, cast as an OrderedTreeNode.
- * @return The parent of this node.
- */
- OrderedTreeNode<T> getOrderedParent();
-
- /**
* Returns the List of this node's parent's children, which includes this node.
* @return The List of this node's parent's children.
*/
Modified: trunk/foray/foray-fotree/src/main/java/org/foray/fotree/FoObj.java
===================================================================
--- trunk/foray/foray-fotree/src/main/java/org/foray/fotree/FoObj.java 2021-12-07 16:11:55 UTC (rev 12183)
+++ trunk/foray/foray-fotree/src/main/java/org/foray/fotree/FoObj.java 2021-12-07 17:09:43 UTC (rev 12184)
@@ -153,7 +153,8 @@
/**
* Base class for formatting objects.
*/
-public abstract class FoObj extends AbstractOrderedTreeNode<Fo> implements Fo, ParaConfig {
+public abstract class FoObj extends AbstractOrderedTreeNode<FoObj>
+ implements Fo, ParaConfig, OrderedTreeNode.Convertible<FoObj> {
/** A static empty and immutable list of children, suitable for return by
* objects that have no children. */
@@ -193,11 +194,16 @@
}
@Override
- public FoObj asNodeType() {
+ public FoObj asNativeType() {
return this;
}
@Override
+ public OrderedTreeNode<FoObj> asOrderedNode() {
+ return this;
+ }
+
+ @Override
public abstract FoObj getParent();
/**
@@ -214,11 +220,6 @@
}
@Override
- public OrderedTreeNode<Fo> getOrderedParent() {
- return this.getParent();
- }
-
- @Override
public abstract List<? extends FoObj> getChildren();
@Override
@@ -226,6 +227,16 @@
return getChildren().get(childIndex);
}
+ @Override
+ public int getIndex(final Fo node) {
+ if (node instanceof FoObj) {
+ final FoObj fobj = (FoObj) node;
+ return this.asOrderedNode().getChildIndex(fobj);
+ } else {
+ return -1;
+ }
+ }
+
/**
* Return this node's effective parent, cast as an FoObj.
* This differs from the value returned by
Modified: trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/obj/Root4a.java
===================================================================
--- trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/obj/Root4a.java 2021-12-07 16:11:55 UTC (rev 12183)
+++ trunk/foray/foray-fotree/src/main/java/org/foray/fotree/fo/obj/Root4a.java 2021-12-07 17:09:43 UTC (rev 12184)
@@ -35,7 +35,6 @@
import org.foray.fotree.PropertyList;
import org.foray.fotree.axsl.obj.Metadata4a;
-import org.axsl.fo.Fo;
import org.axsl.fo.FoContext;
import org.axsl.fo.FoTreeException;
import org.axsl.fo.ProxyFactory;
@@ -380,7 +379,7 @@
@Override
public void addChild(final FoObj child) throws FoTreeException {
- final OrderedTreeNode<Fo> lastChild = getLastChild();
+ final OrderedTreeNode<FoObj> lastChild = getLastChild();
if (child instanceof LayoutMasterSet4a) {
if (lastChild != null) {
child.throwExceptionInvalidLocation();
@@ -438,7 +437,7 @@
private final class PageSequenceIterator implements Iterator<PageSequence4a> {
/** An iterator over the descendants of our enclosing Root instance. */
- private Iterator<OrderedTreeNode<Fo>> descendantIterator;
+ private Iterator<OrderedTreeNode<FoObj>> descendantIterator;
/** The next PageSequence instance to be returned by this iterator. */
private PageSequence4a nextPageSequence;
@@ -461,7 +460,7 @@
if (! this.descendantIterator.hasNext()) {
return;
}
- final OrderedTreeNode<Fo> node = this.descendantIterator.next();
+ final OrderedTreeNode<FoObj> node = this.descendantIterator.next();
if (node instanceof PageSequence4a) {
this.nextPageSequence = (PageSequence4a) node;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|