You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2010/08/30 20:10:27 UTC
svn commit: r990886 - in /cayenne/main/trunk: docs/doc/src/main/resources/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/
framework/cayenne-jd...
Author: aadamchik
Date: Mon Aug 30 18:10:26 2010
New Revision: 990886
URL: http://svn.apache.org/viewvc?rev=990886&view=rev
Log:
CAY-1479 EntitySorter refactoring: make it DI-based, internalize Ashowood lib
* removing extra DB metadata packages from Ashwood import... expression sorting as DbEntities
* trimming down of other Ashwood interfaces that are too generic for our purposes
* everything is generified
Removed:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/dbutil/Column.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/dbutil/DbUtils.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/dbutil/ForeignKey.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/dbutil/PrimaryKey.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/dbutil/Table.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/Algorithm.java
Modified:
cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataPort.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/AshwoodEntitySorter.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/ArcIterator.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DepthFirstSearch.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DepthFirstStampSearch.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/Digraph.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DigraphIteration.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/FilterArcIterator.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/FilterIteration.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/IndegreeTopologicalSort.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/MapDigraph.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/ReversedIteration.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/StrongConnection.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ashwood/AshwoodEntitySorterTest.java
Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Mon Aug 30 18:10:26 2010
@@ -49,6 +49,7 @@ CAY-1446 Remove DataContextFactory, repl
CAY-1447 Switch ROP client to dependency injection
CAY-1474 Straightening CayenneModeler platform-specific builds
CAY-1475 Move cayenne-modeler module out of framework/ and out of the assembly binary
+CAY-1479 EntitySorter refactoring: make it DI-based, internalize Ashowood lib
Bug Fixes Since 3.0:
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataPort.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataPort.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataPort.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataPort.java Mon Aug 30 18:10:26 2010
@@ -102,7 +102,8 @@ public class DataPort {
// sort entities for insertion
List sorted = new ArrayList(entities);
- EntitySorter sorter = new AshwoodEntitySorter(destinationNode.getDataMaps());
+ EntitySorter sorter = new AshwoodEntitySorter();
+ sorter.setDataMaps(destinationNode.getDataMaps());
sorter.sortDbEntities(sorted, false);
if (cleaningDestination) {
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DbGenerator.java Mon Aug 30 18:10:26 2010
@@ -568,7 +568,8 @@ public class DbGenerator {
// sort table list
if (tables.size() > 1) {
- EntitySorter sorter = new AshwoodEntitySorter(Collections.singleton(map));
+ EntitySorter sorter = new AshwoodEntitySorter();
+ sorter.setDataMaps(Collections.singleton(map));
sorter.sortDbEntities(tables, false);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/AshwoodEntitySorter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/AshwoodEntitySorter.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/AshwoodEntitySorter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/AshwoodEntitySorter.java Mon Aug 30 18:10:26 2010
@@ -33,9 +33,6 @@ import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.ObjectId;
import org.apache.cayenne.Persistent;
import org.apache.cayenne.QueryResponse;
-import org.apache.cayenne.ashwood.dbutil.DbUtils;
-import org.apache.cayenne.ashwood.dbutil.ForeignKey;
-import org.apache.cayenne.ashwood.dbutil.Table;
import org.apache.cayenne.ashwood.graph.Digraph;
import org.apache.cayenne.ashwood.graph.IndegreeTopologicalSort;
import org.apache.cayenne.ashwood.graph.MapDigraph;
@@ -62,24 +59,25 @@ import org.apache.commons.collections.co
public class AshwoodEntitySorter implements EntitySorter {
protected Collection<DataMap> dataMaps;
- protected Map<DbEntity, Table> dbEntityToTableMap;
- protected Map<Table, ComponentRecord> components;
+ protected Map<DbEntity, ComponentRecord> components;
protected Map<DbEntity, List<DbRelationship>> reflexiveDbEntities;
- protected TableComparator tableComparator;
protected DbEntityComparator dbEntityComparator;
protected ObjEntityComparator objEntityComparator;
private volatile boolean dirty;
public AshwoodEntitySorter() {
- tableComparator = new TableComparator();
dbEntityComparator = new DbEntityComparator();
objEntityComparator = new ObjEntityComparator();
- dirty = true;
dataMaps = Collections.EMPTY_LIST;
+ dirty = true;
}
+ /**
+ * @deprecated since 3.1. Use {@link #AshwoodEntitySorter()} constructor together with
+ * {@link #setDataMaps(Collection)} instead.
+ */
public AshwoodEntitySorter(Collection<DataMap> dataMaps) {
this();
setDataMaps(dataMaps);
@@ -109,43 +107,80 @@ public class AshwoodEntitySorter impleme
private void doIndexSorter() {
- Collection<Table> tables = new ArrayList<Table>(64);
- dbEntityToTableMap = new HashMap<DbEntity, Table>(64);
- reflexiveDbEntities = new HashMap<DbEntity, List<DbRelationship>>(32);
+ Map<DbEntity, List<DbRelationship>> reflexiveDbEntities = new HashMap<DbEntity, List<DbRelationship>>(
+ 32);
+
+ Digraph<DbEntity, List<DbAttribute>> referentialDigraph = new MapDigraph<DbEntity, List<DbAttribute>>();
+ Map<String, DbEntity> tableMap = new HashMap<String, DbEntity>();
for (DataMap map : dataMaps) {
for (DbEntity entity : map.getDbEntities()) {
- Table table = new Table(entity.getCatalog(), entity.getSchema(), entity
- .getName());
- fillInMetadata(table, entity);
- dbEntityToTableMap.put(entity, table);
- tables.add(table);
+ tableMap.put(entity.getFullyQualifiedName(), entity);
+ referentialDigraph.addVertex(entity);
}
}
- Digraph<Table, List<ForeignKey>> referentialDigraph = new MapDigraph<Table, List<ForeignKey>>();
- DbUtils.buildReferentialDigraph(referentialDigraph, tables);
+ for (DbEntity destination : tableMap.values()) {
+ for (DbRelationship candidate : destination.getRelationships()) {
+ if ((!candidate.isToMany() && !candidate.isToDependentPK())
+ || candidate.isToMasterPK()) {
+ DbEntity origin = (DbEntity) candidate.getTargetEntity();
+ boolean newReflexive = destination.equals(origin);
+
+ for (DbJoin join : candidate.getJoins()) {
+ DbAttribute targetAttribute = join.getTarget();
+ if (targetAttribute.isPrimaryKey()) {
+
+ if (newReflexive) {
+ List<DbRelationship> reflexiveRels = reflexiveDbEntities
+ .get(destination);
+ if (reflexiveRels == null) {
+ reflexiveRels = new ArrayList<DbRelationship>(1);
+ reflexiveDbEntities.put(destination, reflexiveRels);
+ }
+ reflexiveRels.add(candidate);
+ newReflexive = false;
+ }
+
+ List<DbAttribute> fks = referentialDigraph.getArc(
+ origin,
+ destination);
+ if (fks == null) {
+ fks = new ArrayList<DbAttribute>();
+ referentialDigraph.putArc(origin, destination, fks);
+ }
+
+ fks.add(targetAttribute);
+ }
+ }
+ }
+ }
- StrongConnection<Table, List<ForeignKey>> contractor = new StrongConnection<Table, List<ForeignKey>>(
+ }
+
+ StrongConnection<DbEntity, List<DbAttribute>> contractor = new StrongConnection<DbEntity, List<DbAttribute>>(
referentialDigraph);
- Digraph<Collection<Table>, Collection<List<ForeignKey>>> contractedReferentialDigraph = new MapDigraph<Collection<Table>, Collection<List<ForeignKey>>>();
+ Digraph<Collection<DbEntity>, Collection<List<DbAttribute>>> contractedReferentialDigraph = new MapDigraph<Collection<DbEntity>, Collection<List<DbAttribute>>>();
contractor.contract(contractedReferentialDigraph);
- IndegreeTopologicalSort<Collection<Table>> sorter = new IndegreeTopologicalSort<Collection<Table>>(
+ IndegreeTopologicalSort<Collection<DbEntity>> sorter = new IndegreeTopologicalSort<Collection<DbEntity>>(
contractedReferentialDigraph);
- components = new HashMap<Table, ComponentRecord>(contractedReferentialDigraph
- .order());
+ Map<DbEntity, ComponentRecord> components = new HashMap<DbEntity, ComponentRecord>(
+ contractedReferentialDigraph.order());
int componentIndex = 0;
while (sorter.hasNext()) {
- Collection<Table> component = sorter.next();
+ Collection<DbEntity> component = sorter.next();
ComponentRecord rec = new ComponentRecord(componentIndex++, component);
- for (Table table : component) {
+ for (DbEntity table : component) {
components.put(table, rec);
}
}
+
+ this.reflexiveDbEntities = reflexiveDbEntities;
+ this.components = components;
}
/**
@@ -275,44 +310,6 @@ public class AshwoodEntitySorter impleme
}
}
- protected void fillInMetadata(Table table, DbEntity entity) {
- // in this case quite a dummy
- short keySequence = 1;
-
- for (DbRelationship candidate : entity.getRelationships()) {
- if ((!candidate.isToMany() && !candidate.isToDependentPK())
- || candidate.isToMasterPK()) {
- DbEntity target = (DbEntity) candidate.getTargetEntity();
- boolean newReflexive = entity.equals(target);
-
- for (DbJoin join : candidate.getJoins()) {
- DbAttribute targetAttribute = join.getTarget();
- if (targetAttribute.isPrimaryKey()) {
- ForeignKey fk = new ForeignKey();
- fk.setPkTableCatalog(target.getCatalog());
- fk.setPkTableSchema(target.getSchema());
- fk.setPkTableName(target.getName());
- fk.setPkColumnName(targetAttribute.getName());
- fk.setColumnName(join.getSourceName());
- fk.setKeySequence(keySequence++);
- table.addForeignKey(fk);
-
- if (newReflexive) {
- List<DbRelationship> reflexiveRels = reflexiveDbEntities
- .get(entity);
- if (reflexiveRels == null) {
- reflexiveRels = new ArrayList<DbRelationship>(1);
- reflexiveDbEntities.put(entity, reflexiveRels);
- }
- reflexiveRels.add(candidate);
- newReflexive = false;
- }
- }
- }
- }
- }
- }
-
protected Object findReflexiveMaster(
Persistent object,
ObjRelationship toOneRel,
@@ -361,43 +358,24 @@ public class AshwoodEntitySorter impleme
return c;
}
- protected Table getTable(DbEntity dbEntity) {
- return (dbEntity != null) ? dbEntityToTableMap.get(dbEntity) : null;
- }
-
- protected Table getTable(ObjEntity objEntity) {
- return getTable(objEntity.getDbEntity());
- }
-
protected boolean isReflexive(DbEntity metadata) {
return reflexiveDbEntities.containsKey(metadata);
}
- private final class DbEntityComparator implements Comparator<DbEntity> {
-
- public int compare(DbEntity o1, DbEntity o2) {
- if (o1 == o2)
- return 0;
- Table t1 = getTable(o1);
- Table t2 = getTable(o2);
- return tableComparator.compare(t1, t2);
- }
- }
-
private final class ObjEntityComparator implements Comparator<ObjEntity> {
public int compare(ObjEntity o1, ObjEntity o2) {
if (o1 == o2)
return 0;
- Table t1 = getTable(o1);
- Table t2 = getTable(o2);
- return tableComparator.compare(t1, t2);
+ DbEntity t1 = o1.getDbEntity();
+ DbEntity t2 = o2.getDbEntity();
+ return dbEntityComparator.compare(t1, t2);
}
}
- private final class TableComparator implements Comparator<Table> {
+ private final class DbEntityComparator implements Comparator<DbEntity> {
- public int compare(Table t1, Table t2) {
+ public int compare(DbEntity t1, DbEntity t2) {
int result = 0;
if (t1 == t2)
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/ArcIterator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/ArcIterator.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/ArcIterator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/ArcIterator.java Mon Aug 30 18:10:26 2010
@@ -62,6 +62,9 @@ package org.apache.cayenne.ashwood.graph
import java.util.Iterator;
import java.util.NoSuchElementException;
+/**
+ * @since 3.1
+ */
public interface ArcIterator<E, V> extends Iterator<V> {
@SuppressWarnings("all")
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DepthFirstSearch.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DepthFirstSearch.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DepthFirstSearch.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DepthFirstSearch.java Mon Aug 30 18:10:26 2010
@@ -60,26 +60,30 @@
package org.apache.cayenne.ashwood.graph;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.Set;
import org.apache.commons.collections.ArrayStack;
-public class DepthFirstSearch<E> extends Algorithm<E> {
+/**
+ * @since 3.1
+ */
+public class DepthFirstSearch<E> implements Iterator<E> {
- protected DigraphIteration factory;
- protected Object firstVertex;
+ protected DigraphIteration<E, ?> factory;
+ protected E firstVertex;
protected ArrayStack stack = new ArrayStack();
- protected Set seen = new HashSet();
+ protected Set<E> seen = new HashSet<E>();
- public DepthFirstSearch(DigraphIteration factory, Object firstVertex) {
+ public DepthFirstSearch(DigraphIteration<E, ?> factory, E firstVertex) {
this.factory = factory;
this.firstVertex = firstVertex;
stack.push(factory.outgoingIterator(firstVertex));
seen.add(firstVertex);
}
- public void reset(Object newFirstVertex) {
+ public void reset(E newFirstVertex) {
stack.clear();
seen.clear();
firstVertex = newFirstVertex;
@@ -92,15 +96,19 @@ public class DepthFirstSearch<E> extends
}
public E next() {
- ArcIterator i = (ArcIterator) stack.pop();
+ ArcIterator<E, ?> i = (ArcIterator<E, ?>) stack.pop();
Object origin = i.getOrigin();
while (i.hasNext()) {
i.next();
- // origin = i.getOrigin();
- Object dst = i.getDestination();
- if (seen.add(dst))
+ E dst = i.getDestination();
+ if (seen.add(dst)) {
stack.push(factory.outgoingIterator(dst));
+ }
}
return (E) origin;
}
+
+ public void remove() {
+ throw new UnsupportedOperationException("Method remove() not supported.");
+ }
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DepthFirstStampSearch.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DepthFirstStampSearch.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DepthFirstStampSearch.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DepthFirstStampSearch.java Mon Aug 30 18:10:26 2010
@@ -59,103 +59,63 @@
*/
package org.apache.cayenne.ashwood.graph;
-import java.util.Map;
+/**
+ * @since 3.1
+ */
+public class DepthFirstStampSearch<E> extends DepthFirstSearch<E> {
-public class DepthFirstStampSearch extends DepthFirstSearch {
- public static final int UNDEFINED_STAMP = -1;
- public static final int GROW_DEPTH_STAMP = 0;
- public static final int GROW_BREADTH_STAMP = 1;
- public static final int SHRINK_STAMP = 2;
- public static final int LEAF_STAMP = 3;
-
- private int stamp = UNDEFINED_STAMP;
-
- public DepthFirstStampSearch(DigraphIteration factory, Object firstVertex) {
- super(factory, firstVertex);
- }
-
- public int getStamp() {
- return stamp;
- }
-
- public Object next() {
- ArcIterator i = (ArcIterator)stack.peek();
- Object origin = i.getOrigin();
- Object dst = i.getDestination();
- if (dst == null) {
- if (i.hasNext()) {
- i.next();
- dst = i.getDestination();
- } else {
- stack.pop();
- //shrink
- stamp = LEAF_STAMP;
+ public static final int UNDEFINED_STAMP = -1;
+ public static final int GROW_DEPTH_STAMP = 0;
+ public static final int GROW_BREADTH_STAMP = 1;
+ public static final int SHRINK_STAMP = 2;
+ public static final int LEAF_STAMP = 3;
+
+ private int stamp = UNDEFINED_STAMP;
+
+ public DepthFirstStampSearch(DigraphIteration<E, ?> factory, E firstVertex) {
+ super(factory, firstVertex);
+ }
+
+ public int getStamp() {
+ return stamp;
+ }
+
+ @Override
+ public E next() {
+ ArcIterator<E, ?> i = (ArcIterator<E, ?>) stack.peek();
+ E origin = i.getOrigin();
+ E dst = i.getDestination();
+ if (dst == null) {
+ if (i.hasNext()) {
+ i.next();
+ dst = i.getDestination();
+ }
+ else {
+ stack.pop();
+ // shrink
+ stamp = LEAF_STAMP;
+ return origin;
+ }
+ }
+ if (seen.add(dst)) {
+ stack.push(factory.outgoingIterator(dst));
+ // grow depth
+ stamp = GROW_DEPTH_STAMP;
+ if (i.hasNext())
+ i.next();
+ }
+ else {
+ if (i.hasNext()) {
+ i.next();
+ // grow breadth
+ stamp = GROW_BREADTH_STAMP;
+ }
+ else {
+ stack.pop();
+ // shrink
+ stamp = SHRINK_STAMP;
+ }
+ }
return origin;
- }
- }
- if (seen.add(dst)) {
- stack.push(factory.outgoingIterator(dst));
- //grow depth
- stamp = GROW_DEPTH_STAMP;
- if (i.hasNext()) i.next();
- }
- else {
- if (i.hasNext()) {
- i.next();
- //grow breadth
- stamp = GROW_BREADTH_STAMP;
- } else {
- stack.pop();
- //shrink
- stamp = SHRINK_STAMP;
- }
- }
- return origin;
- }
-
- public Map traverse(Map orders) {
- int preOrder = 0;
- int postOrder = 0;
- while (hasNext()) {
- Object vertex = next();
- int stamp = getStamp();
- if (stamp == SHRINK_STAMP) {
- postOrder++;
- OrderPair pair = (OrderPair)orders.get(vertex);
- if (pair == null) {
- preOrder++;
- orders.put(vertex, new OrderPair(preOrder, postOrder));
- } else pair.postOrder = postOrder;
- } else if (stamp == LEAF_STAMP) {
- preOrder++;
- postOrder++;
- orders.put(vertex, new OrderPair(preOrder, postOrder));
- } else if (!orders.containsKey(vertex)) {
- preOrder++;
- orders.put(vertex, new OrderPair(preOrder, -1));
- }
- }
- return orders;
- }
-
- public static class OrderPair {
- private int preOrder;
- private int postOrder;
-
- public OrderPair(int preOrder, int postOrder) {
- this.preOrder = preOrder;
- this.postOrder = postOrder;
- }
-
- public int getPreOrder() {
- return preOrder;
- }
- public int getPostOrder() {
- return postOrder;
- }
-
- public String toString() {
- return "(" + preOrder + ", " + postOrder + ")";
}
- }
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/Digraph.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/Digraph.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/Digraph.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/Digraph.java Mon Aug 30 18:10:26 2010
@@ -61,6 +61,9 @@ package org.apache.cayenne.ashwood.graph
import java.util.Collection;
+/**
+ * @since 3.1
+ */
public interface Digraph<E, V> extends DigraphIteration<E, V> {
boolean addVertex(E vertex);
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DigraphIteration.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DigraphIteration.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DigraphIteration.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/DigraphIteration.java Mon Aug 30 18:10:26 2010
@@ -61,6 +61,9 @@ package org.apache.cayenne.ashwood.graph
import java.util.Iterator;
+/**
+ * @since 3.1
+ */
public interface DigraphIteration<E, V> {
Iterator<E> vertexIterator();
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/FilterArcIterator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/FilterArcIterator.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/FilterArcIterator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/FilterArcIterator.java Mon Aug 30 18:10:26 2010
@@ -62,20 +62,24 @@ package org.apache.cayenne.ashwood.graph
import java.util.NoSuchElementException;
import org.apache.commons.collections.Predicate;
-import org.apache.commons.collections.functors.TruePredicate;
-import org.apache.commons.collections.iterators.AbstractIteratorDecorator;
-public class FilterArcIterator extends AbstractIteratorDecorator implements ArcIterator {
+/**
+ * @since 3.1
+ */
+public class FilterArcIterator<E, V> implements ArcIterator<E, V> {
+ private ArcIterator<E, V> iterator;
private Predicate acceptOrigin, acceptDestination;
private Predicate acceptArc;
- private Object nextArc, nextOrigin, nextDst;
+ private E nextOrigin, nextDst;
+ private V nextArc;
private boolean nextObjectSet = false;
- public FilterArcIterator(ArcIterator iterator, Predicate acceptOrigin,
+ public FilterArcIterator(ArcIterator<E, V> iterator, Predicate acceptOrigin,
Predicate acceptDestination, Predicate acceptArc) {
- super(iterator);
+
+ this.iterator = iterator;
this.acceptOrigin = acceptOrigin;
this.acceptDestination = acceptDestination;
this.acceptArc = acceptArc;
@@ -87,20 +91,11 @@ public class FilterArcIterator extends A
nextDst = null;
}
- public FilterArcIterator(ArcIterator iterator, Predicate acceptVertex,
- Predicate acceptArc) {
- this(iterator, acceptVertex, acceptVertex, acceptArc);
- }
-
- public FilterArcIterator(ArcIterator iterator, Predicate acceptVertex) {
- this(iterator, acceptVertex, acceptVertex, TruePredicate.INSTANCE);
- }
-
- public Object getOrigin() {
+ public E getOrigin() {
return nextOrigin;
}
- public Object getDestination() {
+ public E getDestination() {
return nextDst;
}
@@ -113,7 +108,7 @@ public class FilterArcIterator extends A
}
}
- public Object next() {
+ public V next() {
if (!nextObjectSet) {
if (!setNextObject()) {
throw new NoSuchElementException();
@@ -128,11 +123,11 @@ public class FilterArcIterator extends A
}
private boolean setNextObject() {
- ArcIterator iterator = (ArcIterator) getIterator();
+
while (iterator.hasNext()) {
- Object arc = iterator.next();
- Object origin = iterator.getOrigin();
- Object dst = iterator.getDestination();
+ V arc = iterator.next();
+ E origin = iterator.getOrigin();
+ E dst = iterator.getDestination();
if (acceptOrigin.evaluate(origin)
&& acceptArc.evaluate(arc)
&& acceptDestination.evaluate(dst)) {
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/FilterIteration.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/FilterIteration.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/FilterIteration.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/FilterIteration.java Mon Aug 30 18:10:26 2010
@@ -59,35 +59,57 @@
*/
package org.apache.cayenne.ashwood.graph;
-import java.io.Serializable;
import java.util.Iterator;
import org.apache.commons.collections.IteratorUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.functors.TruePredicate;
-public class FilterIteration implements DigraphIteration, Serializable {
- private DigraphIteration digraph;
- private Predicate acceptVertex;
- private Predicate acceptArc;
-
- public FilterIteration(DigraphIteration digraph, Predicate acceptVertex, Predicate acceptArc) {
- this.digraph = digraph;
- this.acceptVertex = acceptVertex;
- this.acceptArc = acceptArc;
- }
- public Iterator vertexIterator() {
- return IteratorUtils.filteredIterator(digraph.vertexIterator(), acceptVertex);
- }
- public ArcIterator arcIterator() {
- return new FilterArcIterator(digraph.arcIterator(), acceptVertex, acceptVertex, acceptArc);
- }
- public ArcIterator outgoingIterator(Object vertex) {
- if (!acceptVertex.evaluate(vertex)) return ArcIterator.EMPTY_ITERATOR;
- return new FilterArcIterator(digraph.outgoingIterator(vertex), TruePredicate.INSTANCE, acceptVertex, acceptArc);
- }
- public ArcIterator incomingIterator(Object vertex) {
- if (!acceptVertex.evaluate(vertex)) return ArcIterator.EMPTY_ITERATOR;
- return new FilterArcIterator(digraph.incomingIterator(vertex), acceptVertex, TruePredicate.INSTANCE, acceptArc);
- }
+/**
+ * @since 3.1
+ */
+public class FilterIteration<E, V> implements DigraphIteration<E, V> {
+
+ private DigraphIteration<E, V> digraph;
+ private Predicate acceptVertex;
+ private Predicate acceptArc;
+
+ public FilterIteration(DigraphIteration<E, V> digraph, Predicate acceptVertex,
+ Predicate acceptArc) {
+ this.digraph = digraph;
+ this.acceptVertex = acceptVertex;
+ this.acceptArc = acceptArc;
+ }
+
+ public Iterator<E> vertexIterator() {
+ return IteratorUtils.filteredIterator(digraph.vertexIterator(), acceptVertex);
+ }
+
+ public ArcIterator<E, V> arcIterator() {
+ return new FilterArcIterator<E, V>(
+ digraph.arcIterator(),
+ acceptVertex,
+ acceptVertex,
+ acceptArc);
+ }
+
+ public ArcIterator<E, V> outgoingIterator(E vertex) {
+ if (!acceptVertex.evaluate(vertex))
+ return ArcIterator.EMPTY_ITERATOR;
+ return new FilterArcIterator<E, V>(
+ digraph.outgoingIterator(vertex),
+ TruePredicate.INSTANCE,
+ acceptVertex,
+ acceptArc);
+ }
+
+ public ArcIterator<E, V> incomingIterator(E vertex) {
+ if (!acceptVertex.evaluate(vertex))
+ return ArcIterator.EMPTY_ITERATOR;
+ return new FilterArcIterator<E, V>(
+ digraph.incomingIterator(vertex),
+ acceptVertex,
+ TruePredicate.INSTANCE,
+ acceptArc);
+ }
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/IndegreeTopologicalSort.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/IndegreeTopologicalSort.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/IndegreeTopologicalSort.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/IndegreeTopologicalSort.java Mon Aug 30 18:10:26 2010
@@ -66,7 +66,10 @@ import java.util.List;
import java.util.ListIterator;
import java.util.Map;
-public class IndegreeTopologicalSort<E> extends Algorithm<E> {
+/**
+ * @since 3.1
+ */
+public class IndegreeTopologicalSort<E> implements Iterator<E> {
private Digraph<E, ?> digraph;
private List<E> vertices = new LinkedList<E>();
@@ -83,12 +86,10 @@ public class IndegreeTopologicalSort<E>
current = vertices.listIterator();
}
- @Override
public boolean hasNext() {
return !vertices.isEmpty();
}
- @Override
public E next() {
boolean progress = true;
while (hasNext()) {
@@ -118,6 +119,10 @@ public class IndegreeTopologicalSort<E>
}
}
+ public void remove() {
+ throw new UnsupportedOperationException("Method remove() not supported.");
+ }
+
private static class InDegree {
int value;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/MapDigraph.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/MapDigraph.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/MapDigraph.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/MapDigraph.java Mon Aug 30 18:10:26 2010
@@ -65,6 +65,9 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
+/**
+ * @since 3.1
+ */
public class MapDigraph<E, V> implements Digraph<E, V> {
private Map<E, Map<E, V>> graph;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/ReversedIteration.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/ReversedIteration.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/ReversedIteration.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/ReversedIteration.java Mon Aug 30 18:10:26 2010
@@ -59,49 +59,61 @@
*/
package org.apache.cayenne.ashwood.graph;
-import java.io.Serializable;
import java.util.Iterator;
-public class ReversedIteration implements DigraphIteration, Serializable {
- private DigraphIteration wrappedIteration;
+/**
+ * @since 3.1
+ */
+public class ReversedIteration<E, V> implements DigraphIteration<E, V> {
+
+ private DigraphIteration<E, V> wrappedIteration;
- public ReversedIteration(DigraphIteration wrappedIteration) {
- this.wrappedIteration = wrappedIteration;
- }
- public Iterator vertexIterator() {
- return wrappedIteration.vertexIterator();
- }
- public ArcIterator arcIterator() {
- return new ReversedArcIterator(wrappedIteration.arcIterator());
- }
- public ArcIterator outgoingIterator(Object vertex) {
- return new ReversedArcIterator(wrappedIteration.incomingIterator(vertex));
- }
- public ArcIterator incomingIterator(Object vertex) {
- return new ReversedArcIterator(wrappedIteration.outgoingIterator(vertex));
- }
-
- public static class ReversedArcIterator implements ArcIterator {
- private ArcIterator wrappedIterator;
-
- public ReversedArcIterator(ArcIterator wrappedIterator) {
- ReversedArcIterator.this.wrappedIterator = wrappedIterator;
- }
-
- public Object getOrigin() {
- return wrappedIterator.getDestination();
- }
- public Object getDestination() {
- return wrappedIterator.getOrigin();
- }
- public boolean hasNext() {
- return wrappedIterator.hasNext();
+ public ReversedIteration(DigraphIteration<E, V> wrappedIteration) {
+ this.wrappedIteration = wrappedIteration;
}
- public Object next() {
- return wrappedIterator.next();
+
+ public Iterator<E> vertexIterator() {
+ return wrappedIteration.vertexIterator();
+ }
+
+ public ArcIterator<E, V> arcIterator() {
+ return new ReversedArcIterator<E, V>(wrappedIteration.arcIterator());
+ }
+
+ public ArcIterator<E, V> outgoingIterator(E vertex) {
+ return new ReversedArcIterator<E, V>(wrappedIteration.incomingIterator(vertex));
+ }
+
+ public ArcIterator<E, V> incomingIterator(E vertex) {
+ return new ReversedArcIterator<E, V>(wrappedIteration.outgoingIterator(vertex));
}
- public void remove() {
- wrappedIterator.remove();
+
+ public static class ReversedArcIterator<S, T> implements ArcIterator<S, T> {
+
+ private ArcIterator<S, T> wrappedIterator;
+
+ public ReversedArcIterator(ArcIterator<S, T> wrappedIterator) {
+ ReversedArcIterator.this.wrappedIterator = wrappedIterator;
+ }
+
+ public S getOrigin() {
+ return wrappedIterator.getDestination();
+ }
+
+ public S getDestination() {
+ return wrappedIterator.getOrigin();
+ }
+
+ public boolean hasNext() {
+ return wrappedIterator.hasNext();
+ }
+
+ public T next() {
+ return wrappedIterator.next();
+ }
+
+ public void remove() {
+ wrappedIterator.remove();
+ }
}
- }
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/StrongConnection.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/StrongConnection.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/StrongConnection.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/ashwood/graph/StrongConnection.java Mon Aug 30 18:10:26 2010
@@ -73,46 +73,52 @@ import org.apache.commons.collections.Co
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.functors.TruePredicate;
-public class StrongConnection<E, V> extends Algorithm<Collection<E>> {
+/**
+ * @since 3.1
+ */
+public class StrongConnection<E, V> implements Iterator<Collection<E>> {
private DigraphIteration<E, V> digraph;
private DigraphIteration<E, V> reverseDigraph;
private DigraphIteration<E, V> filteredDigraph;
- private DepthFirstStampSearch directDfs;
- private DepthFirstSearch reverseDfs;
- private Set seen = new HashSet();
- private Iterator vertexIterator;
+ private DepthFirstStampSearch<E> directDfs;
+ private DepthFirstSearch<E> reverseDfs;
+ private Set<E> seen = new HashSet<E>();
+ private Iterator<E> vertexIterator;
private ArrayStack dfsStack = new ArrayStack();
private DFSSeenVerticesPredicate reverseDFSFilter = new DFSSeenVerticesPredicate();
public StrongConnection(DigraphIteration<E, V> digraph) {
this.digraph = digraph;
- filteredDigraph = new FilterIteration(
+ filteredDigraph = new FilterIteration<E, V>(
digraph,
new NotSeenPredicate(),
TruePredicate.INSTANCE);
- reverseDigraph = new FilterIteration(
- new ReversedIteration(digraph),
+ reverseDigraph = new FilterIteration<E, V>(
+ new ReversedIteration<E, V>(digraph),
reverseDFSFilter,
TruePredicate.INSTANCE);
vertexIterator = filteredDigraph.vertexIterator();
runDirectDFS();
}
- @Override
public boolean hasNext() {
return !dfsStack.isEmpty();
}
- @Override
public Collection<E> next() {
- Collection component = buildStronglyConnectedComponent();
+ Collection<E> component = buildStronglyConnectedComponent();
if (dfsStack.isEmpty())
runDirectDFS();
return component;
}
- public Digraph<Collection<E>, Collection<V>> contract(Digraph<Collection<E>, Collection<V>> contractedDigraph) {
+ public void remove() {
+ throw new UnsupportedOperationException("Method remove() not supported.");
+ }
+
+ public Digraph<Collection<E>, Collection<V>> contract(
+ Digraph<Collection<E>, Collection<V>> contractedDigraph) {
Collection<Collection<E>> components = new ArrayList<Collection<E>>();
CollectionUtils.addAll(components, this);
@@ -138,7 +144,9 @@ public class StrongConnection<E, V> exte
continue;
Collection<E> destination = memberToComponent.get(dst);
- Collection<V> contractedArc = contractedDigraph.getArc(origin, destination);
+ Collection<V> contractedArc = contractedDigraph.getArc(
+ origin,
+ destination);
if (contractedArc == null) {
contractedArc = Collections.singletonList(arc);
contractedDigraph.putArc(origin, destination, contractedArc);
@@ -159,22 +167,22 @@ public class StrongConnection<E, V> exte
return contractedDigraph;
}
- private Object nextDFSRoot() {
- return (vertexIterator.hasNext() ? vertexIterator.next() : null);
+ private E nextDFSRoot() {
+ return vertexIterator.hasNext() ? vertexIterator.next() : null;
}
private boolean runDirectDFS() {
dfsStack.clear();
reverseDFSFilter.seenVertices.clear();
- Object root = nextDFSRoot();
+ E root = nextDFSRoot();
if (root == null)
return false;
if (directDfs == null)
- directDfs = new DepthFirstStampSearch(filteredDigraph, root);
+ directDfs = new DepthFirstStampSearch<E>(filteredDigraph, root);
else
directDfs.reset(root);
int stamp;
- Object vertex;
+ E vertex;
while (directDfs.hasNext()) {
vertex = directDfs.next();
stamp = directDfs.getStamp();
@@ -190,19 +198,19 @@ public class StrongConnection<E, V> exte
return true;
}
- private Collection buildStronglyConnectedComponent() {
- Object root = dfsStack.pop();
- Collection component = Collections.singletonList(root);
+ private Collection<E> buildStronglyConnectedComponent() {
+ E root = (E) dfsStack.pop();
+ Collection<E> component = Collections.singletonList(root);
boolean singleton = true;
if (reverseDfs == null)
- reverseDfs = new DepthFirstSearch(reverseDigraph, root);
+ reverseDfs = new DepthFirstSearch<E>(reverseDigraph, root);
else
reverseDfs.reset(root);
while (reverseDfs.hasNext()) {
- Object vertex = reverseDfs.next();
+ E vertex = reverseDfs.next();
if (vertex != root) {
if (singleton) {
- Collection tmp = component;
+ Collection<E> tmp = component;
component = new ArrayList<E>();
component.addAll(tmp);
singleton = false;
@@ -217,7 +225,7 @@ public class StrongConnection<E, V> exte
private class DFSSeenVerticesPredicate implements Predicate {
- private Set seenVertices = new HashSet();
+ private Set<E> seenVertices = new HashSet<E>();
public boolean evaluate(Object vertex) {
return seenVertices.contains(vertex);
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ashwood/AshwoodEntitySorterTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ashwood/AshwoodEntitySorterTest.java?rev=990886&r1=990885&r2=990886&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ashwood/AshwoodEntitySorterTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/ashwood/AshwoodEntitySorterTest.java Mon Aug 30 18:10:26 2010
@@ -22,7 +22,6 @@ package org.apache.cayenne.ashwood;
import java.util.Collections;
import java.util.List;
-import org.apache.cayenne.ashwood.AshwoodEntitySorter;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.query.SelectQuery;
import org.apache.cayenne.testdo.relationship.ReflexiveAndToOne;
@@ -30,19 +29,18 @@ import org.apache.cayenne.unit.Relations
public class AshwoodEntitySorterTest extends RelationshipCase {
- protected AshwoodEntitySorter sorter;
-
@Override
protected void setUp() throws Exception {
super.setUp();
-
deleteTestData();
- sorter = new AshwoodEntitySorter(getDomain().getDataMaps());
}
public void testSortObjectsForEntityReflexiveWithFaults() throws Exception {
createTestData("testSortObjectsForEntityDeletedWithFaults");
+ AshwoodEntitySorter sorter = new AshwoodEntitySorter();
+ sorter.setDataMaps(getDomain().getDataMaps());
+
ObjEntity entity = getDomain().getEntityResolver().lookupObjEntity(
ReflexiveAndToOne.class);