protected void addNode(ClassDescriptor d) { nodes.addElement(new CommitOrderDependencyNode(this, d, session)); }
public CommitOrderDependencyNode nodeFor(ClassDescriptor d) { for (Enumeration e = nodes.elements(); e.hasMoreElements();) { CommitOrderDependencyNode n = (CommitOrderDependencyNode)e.nextElement(); if (n.getDescriptor() == d) { return n; } } return null; }
private static int doCompare(Object o1, Object o2) { // I don't care if they're equal, and I want to sort largest first. int first; // I don't care if they're equal, and I want to sort largest first. int second; first = ((CommitOrderDependencyNode)o1).getFinishingTime(); second = ((CommitOrderDependencyNode)o2).getFinishingTime(); if (first >= second) { return 1; } else { return -1; } }
public void visit() { //Visit this node as part of a topological sort int startTime; markInProgress(); startTime = getOwner().getNextTime(); setDiscoveryTime(startTime); for (Enumeration e = getRelatedNodes().elements(); e.hasMoreElements();) { CommitOrderDependencyNode node = (CommitOrderDependencyNode)e.nextElement(); if (node.hasNotBeenVisited()) { node.setPredecessor(this); node.visit(); } if (node.getPredecessor() == null) { node.setPredecessor(this); } } markVisited(); setFinishingTime(getOwner().getNextTime()); }
public void depthFirstSearch() { /* * Traverse the entire graph in breadth-first order. When finished, every node will have a * predecessor which indicates the node that came efore it in the search * It will also have a discovery time (the value of the counter when we first saw it) and * finishingTime (the value of the counter after we've visited all the adjacent nodes). * See Cormen, Leiserson and Rivest, Section 23.3, page 477 for a full explanation of the algorithm */ //Setup for (Enumeration e = getNodes().elements(); e.hasMoreElements();) { CommitOrderDependencyNode node = (CommitOrderDependencyNode)e.nextElement(); node.markNotVisited(); node.setPredecessor(null); } currentTime = 0; //Execution for (Enumeration e = getNodes().elements(); e.hasMoreElements();) { CommitOrderDependencyNode node = (CommitOrderDependencyNode)e.nextElement(); if (node.hasNotBeenVisited()) { node.visit(); } } }
for (Enumeration mappings = getDescriptor().getMappings().elements(); mappings.hasMoreElements();) { DatabaseMapping mapping = (DatabaseMapping)mappings.nextElement(); throw oracle.toplink.essentials.exceptions.DescriptorException.referenceClassNotSpecified(mapping); CommitOrderDependencyNode node = getOwner().nodeFor(ownedClass); Vector ownedNodes = withAllSubclasses(node); throw oracle.toplink.essentials.exceptions.DescriptorException.referenceClassNotSpecified(mapping); CommitOrderDependencyNode ownerNode = getOwner().nodeFor(ownerClass); Vector ownedNodes = withAllSubclasses(this); Helper.addAllToVector(ownerNode.getRelatedNodes(), ownedNodes);
/** * Add all owned classes for each descriptor through checking the mappings. * If I have a foreign mapping with a constraint dependency, then add it * If I'm related to a class, I'm related to all its subclasses and superclasses. * If my superclass is related to a class, I'm related to it. */ public void recordSpecifiedDependencies() { for (Enumeration constraintsEnum = getDescriptor().getConstraintDependencies().elements(); constraintsEnum.hasMoreElements();) { Class ownedClass = (Class)constraintsEnum.nextElement(); CommitOrderDependencyNode node = getOwner().nodeFor(ownedClass); Vector ownedNodes = withAllSubclasses(node); // I could remove duplicates here, but it's not that big a deal. Helper.addAllToVector(relatedNodes, ownedNodes); } }
public Vector withAllSubclasses(CommitOrderDependencyNode node) { Vector results = new Vector(); results.addElement(node); if (node.getDescriptor().hasInheritance()) { InheritancePolicy p = node.getDescriptor().getInheritancePolicy(); // For bug 3019934 replace getChildDescriptors with getAllChildDescriptors. for (Enumeration e = p.getAllChildDescriptors().elements(); e.hasMoreElements();) { results.addElement(getOwner().nodeFor((ClassDescriptor)e.nextElement())); } } return results; } }
public CommitOrderDependencyNode nodeFor(Class c) { for (Enumeration e = nodes.elements(); e.hasMoreElements();) { CommitOrderDependencyNode n = (CommitOrderDependencyNode)e.nextElement(); if (n.getDescriptor().getJavaClass() == c) { return n; } } return null; }
private static int doCompare(CommitOrderDependencyNode o1, CommitOrderDependencyNode o2) { // I don't care if they're equal, and I want to sort largest first. int first; // I don't care if they're equal, and I want to sort largest first. int second; first = o1.getFinishingTime(); second = o2.getFinishingTime(); if (first >= second) { return 1; } else { return -1; } }
public void orderCommits() { depthFirstSearch(); Object[] nodeArray = new Object[nodes.size()]; nodes.copyInto(nodeArray); quicksort(nodeArray); Vector result = new Vector(nodes.size()); for (int i = 0; i < nodes.size(); i++) { CommitOrderDependencyNode node = (CommitOrderDependencyNode)nodeArray[i]; result.addElement(node.getDescriptor()); } this.orderedDescriptors = result; }