diff options
author | Michael Valenta | 2006-11-27 14:31:51 +0000 |
---|---|---|
committer | Michael Valenta | 2006-11-27 14:31:51 +0000 |
commit | 38ce4c57ad56bf125edbde0e471083535a2f1f84 (patch) | |
tree | 5b7345a1f0af8f2f4e2d0740abc0f07c0be12c02 /examples/org.eclipse.compare.examples.xml | |
parent | c3380c235e7751513372424b3282e5e3ad3fc253 (diff) | |
download | eclipse.platform.team-38ce4c57ad56bf125edbde0e471083535a2f1f84.tar.gz eclipse.platform.team-38ce4c57ad56bf125edbde0e471083535a2f1f84.tar.xz eclipse.platform.team-38ce4c57ad56bf125edbde0e471083535a2f1f84.zip |
Bug 98503 [Algorithms] Comparing zip archives does not scale/appears to hang
Diffstat (limited to 'examples/org.eclipse.compare.examples.xml')
3 files changed, 70 insertions, 109 deletions
diff --git a/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/AbstractMatching.java b/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/AbstractMatching.java index a69790ca6..dda01dd6f 100644 --- a/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/AbstractMatching.java +++ b/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/AbstractMatching.java @@ -251,7 +251,7 @@ public abstract class AbstractMatching { return distance; } - abstract public void match(XMLNode LeftTree, XMLNode RightTree, boolean rightTreeIsAncestor, IProgressMonitor monitor) throws InterruptedException; + abstract public void match(XMLNode LeftTree, XMLNode RightTree, boolean rightTreeIsAncestor, IProgressMonitor monitor); protected int dist(XMLNode x, XMLNode y) { //System.out.println("dist( "+x.getSignature()+" , "+y.getSignature()+")"); diff --git a/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/OrderedMatching.java b/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/OrderedMatching.java index 8f9caba22..325a6ce72 100644 --- a/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/OrderedMatching.java +++ b/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/OrderedMatching.java @@ -117,8 +117,7 @@ public class OrderedMatching extends AbstractMatching { XMLNode LeftTree, XMLNode RightTree, boolean rightTreeIsAncestor, - IProgressMonitor monitor) - throws InterruptedException { + IProgressMonitor monitor) { fNLeft= new Vector(); //numbering LeftTree: Mapping nodes in LeftTree to numbers to be used as array indexes diff --git a/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLStructureViewer.java b/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLStructureViewer.java index 6bb775783..42eb3f967 100644 --- a/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLStructureViewer.java +++ b/examples/org.eclipse.compare.examples.xml/src/org/eclipse/compare/examples/xml/XMLStructureViewer.java @@ -10,37 +10,18 @@ *******************************************************************************/ package org.eclipse.compare.examples.xml; -import java.lang.reflect.InvocationTargetException; import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.HashMap; - -import org.eclipse.compare.CompareConfiguration; -import org.eclipse.compare.CompareViewerSwitchingPane; -import org.eclipse.compare.ITypedElement; -import org.eclipse.compare.structuremergeviewer.DiffNode; -import org.eclipse.compare.structuremergeviewer.ICompareInput; -import org.eclipse.compare.structuremergeviewer.IStructureComparator; -import org.eclipse.compare.structuremergeviewer.StructureDiffViewer; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.ToolBarManager; -import org.eclipse.jface.operation.IRunnableWithProgress; +import java.util.*; + +import org.eclipse.compare.*; +import org.eclipse.compare.structuremergeviewer.*; +import org.eclipse.core.runtime.*; +import org.eclipse.jface.action.*; import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; +import org.eclipse.jface.viewers.*; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Tree; -import org.eclipse.ui.PlatformUI; /** * An XML diff tree viewer that can be configured with a <code>IStructureCreator</code> @@ -241,92 +222,14 @@ public class XMLStructureViewer extends StructureDiffViewer { } - public IRunnableWithProgress getMatchingRunnable( - final XMLNode left, - final XMLNode right, - final XMLNode ancestor) { - return new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) - throws - InvocationTargetException, - InterruptedException, - OperationCanceledException { - if (monitor == null) { - monitor= new NullProgressMonitor(); - } - int totalWork; - if (ancestor != null) - totalWork= 1; - else - totalWork= 3; - monitor.beginTask(XMLCompareMessages.XMLStructureViewer_matching_beginTask, totalWork); - ArrayList ordered= null; - if (!getXMLStructureCreator() - .getIdMap() - .equals(XMLStructureCreator.USE_UNORDERED) - && !getXMLStructureCreator().getIdMap().equals( - XMLStructureCreator.USE_ORDERED)) { - ordered= - (ArrayList) fOrderedElements.get( - getXMLStructureCreator().getIdMap()); - if (ordered == null) - ordered= - (ArrayList) fOrderedElementsInternal.get( - getXMLStructureCreator().getIdMap()); - } - if (getSorter() instanceof XMLSorter) - ((XMLSorter) getSorter()).setOrdered(ordered); - AbstractMatching m= null; - if (getXMLStructureCreator() - .getIdMap() - .equals(XMLStructureCreator.USE_ORDERED)) { - m= new OrderedMatching(); - if (getSorter() instanceof XMLSorter) - ((XMLSorter) getSorter()).setAlwaysOrderSort(true); - } - try { - if (m != null) { - m.match(left, right, false, monitor); - if (ancestor != null) { - m.match( - left, - ancestor, - true, - new SubProgressMonitor(monitor, 1)); - m.match( - right, - ancestor, - true, - new SubProgressMonitor(monitor, 1)); - } - // } catch (InterruptedException e) { - // System.out.println("in run"); - // e.printStackTrace(); - } - } finally { - monitor.done(); - } - } - }; - } - protected void preDiffHook( IStructureComparator ancestor, IStructureComparator left, - IStructureComparator right) { + IStructureComparator right, IProgressMonitor monitor) { // if (!xsc.getIdMap().equals(XMLStructureCreator.USE_ORDERED)) { //TimeoutContext.run(true, TIMEOUT, getControl().getShell(), runnable); if (left != null && right != null) { - try { - PlatformUI.getWorkbench().getProgressService().run(true, true, - //TimeoutContext.run(true, 500, XMLPlugin.getActiveWorkbenchShell(), - getMatchingRunnable( - (XMLNode) left, - (XMLNode) right, - (XMLNode) ancestor)); - } catch (Exception e) { - XMLPlugin.log(e); - } + performMatching((XMLNode)left, (XMLNode)right, (XMLNode)ancestor, monitor); } } @@ -597,4 +500,63 @@ public class XMLStructureViewer extends StructureDiffViewer { contentChanged(); } } + + private void performMatching(final XMLNode left, final XMLNode right, + final XMLNode ancestor, IProgressMonitor monitor) { + if (monitor == null) { + monitor= new NullProgressMonitor(); + } + int totalWork; + if (ancestor != null) + totalWork= 1; + else + totalWork= 3; + monitor.beginTask(XMLCompareMessages.XMLStructureViewer_matching_beginTask, totalWork); + ArrayList ordered= null; + if (!getXMLStructureCreator() + .getIdMap() + .equals(XMLStructureCreator.USE_UNORDERED) + && !getXMLStructureCreator().getIdMap().equals( + XMLStructureCreator.USE_ORDERED)) { + ordered= + (ArrayList) fOrderedElements.get( + getXMLStructureCreator().getIdMap()); + if (ordered == null) + ordered= + (ArrayList) fOrderedElementsInternal.get( + getXMLStructureCreator().getIdMap()); + } + if (getSorter() instanceof XMLSorter) + ((XMLSorter) getSorter()).setOrdered(ordered); + AbstractMatching m= null; + if (getXMLStructureCreator() + .getIdMap() + .equals(XMLStructureCreator.USE_ORDERED)) { + m= new OrderedMatching(); + if (getSorter() instanceof XMLSorter) + ((XMLSorter) getSorter()).setAlwaysOrderSort(true); + } + try { + if (m != null) { + m.match(left, right, false, monitor); + if (ancestor != null) { + m.match( + left, + ancestor, + true, + new SubProgressMonitor(monitor, 1)); + m.match( + right, + ancestor, + true, + new SubProgressMonitor(monitor, 1)); + } + // } catch (InterruptedException e) { + // System.out.println("in run"); + // e.printStackTrace(); + } + } finally { + monitor.done(); + } + } } |