Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Jastram2013-01-31 15:40:39 +0000
committerMichael Jastram2013-01-31 15:40:39 +0000
commitdf1b4ecb2ed592364e137bcb47956b1c4f77d745 (patch)
tree95c960accc82e07a403787c0f7373186be94e9a8
parent8d9543b62493bc1086c02facaba3193b640e9d47 (diff)
downloadorg.eclipse.rmf-df1b4ecb2ed592364e137bcb47956b1c4f77d745.tar.gz
org.eclipse.rmf-df1b4ecb2ed592364e137bcb47956b1c4f77d745.tar.xz
org.eclipse.rmf-df1b4ecb2ed592364e137bcb47956b1c4f77d745.zip
RESOLVED - bug 398986: When opening SpecificationEditor, use a Job to
resolve references https://bugs.eclipse.org/bugs/show_bug.cgi?id=398986
-rw-r--r--org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrAgileGridViewer.java36
1 files changed, 36 insertions, 0 deletions
diff --git a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrAgileGridViewer.java b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrAgileGridViewer.java
index f24626b7..a1d42bb8 100644
--- a/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrAgileGridViewer.java
+++ b/org.eclipse.rmf.reqif10.pror.editor/src/org/eclipse/rmf/reqif10/pror/editor/agilegrid/ProrAgileGridViewer.java
@@ -24,6 +24,10 @@ import org.agilemore.agilegrid.ICellResizeListener;
import org.agilemore.agilegrid.ISelectionChangedListener;
import org.agilemore.agilegrid.SWTX;
import org.agilemore.agilegrid.SelectionChangedEvent;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CompoundCommand;
import org.eclipse.emf.common.notify.Adapter;
@@ -273,6 +277,38 @@ public class ProrAgileGridViewer extends Viewer {
registerSelectionChangedListener();
registerSpecHierarchyListener();
registerSpecRelationListener();
+ resolveSpecObjectReferences();
+ }
+
+ /**
+ * Turns out that it takes a lot of time to resolve the references from
+ * SpecHierarchy to Specification. This is usually done on demand. This is
+ * fine, but prevents fast scrolling the first time. Therefore, we do this
+ * as a background job.
+ */
+ private void resolveSpecObjectReferences() {
+ Job job = new Job("Resolving SpecObject References") {
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ HashSet<SpecHierarchy> specHierarchies = new HashSet<SpecHierarchy>();
+ specHierarchies.addAll(specification.getChildren());
+ monitor.beginTask("Resolving SpecObject References",
+ contentProvider.getRowCount());
+ while (!specHierarchies.isEmpty()) {
+ SpecHierarchy specHierarchy = specHierarchies.iterator()
+ .next();
+ specHierarchies.remove(specHierarchy);
+ specHierarchies.addAll(specHierarchy.getChildren());
+
+ // This actually resolves the reference
+ specHierarchy.getObject();
+ monitor.worked(1);
+ }
+ monitor.done();
+ return Status.OK_STATUS;
+ }
+ };
+ job.schedule();
}
/**

Back to the top