Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2008-12-09 19:25:43 +0000
committerEike Stepper2008-12-09 19:25:43 +0000
commit2e86fdcc8f2d9fd371ada2d221f70ccd5a5af04f (patch)
tree8df17802acdd2e1206bcce76ed0f97bcfede49c6
parent76b1f4fdbf0ae38e8503a23aa54503d3ae940b55 (diff)
downloadcdo-2e86fdcc8f2d9fd371ada2d221f70ccd5a5af04f.tar.gz
cdo-2e86fdcc8f2d9fd371ada2d221f70ccd5a5af04f.tar.xz
cdo-2e86fdcc8f2d9fd371ada2d221f70ccd5a5af04f.zip
[258067] Provide RequestWithMonitoring example
https://bugs.eclipse.org/bugs/show_bug.cgi?id=258067
-rw-r--r--plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/tests/SignalMonitorTest.java2
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/EclipseMonitor.java4
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/Monitor.java8
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/NestedMonitor.java44
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/OMMonitor.java7
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/net4j/signal/IndicationWithMonitoring.java4
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/net4j/signal/RequestWithMonitoring.java6
7 files changed, 48 insertions, 27 deletions
diff --git a/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/tests/SignalMonitorTest.java b/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/tests/SignalMonitorTest.java
index e9af20aba6..5978578a39 100644
--- a/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/tests/SignalMonitorTest.java
+++ b/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/tests/SignalMonitorTest.java
@@ -176,7 +176,7 @@ public class SignalMonitorTest extends AbstractTransportTest
}
@Override
- public void worked(int work)
+ public void worked(double work)
{
super.worked(work);
System.out.println("work: " + getWork());
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/EclipseMonitor.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/EclipseMonitor.java
index 6335750981..ee5258a9e5 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/EclipseMonitor.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/EclipseMonitor.java
@@ -59,10 +59,10 @@ public class EclipseMonitor extends Monitor
}
@Override
- public synchronized void worked(int work) throws MonitorCanceledException
+ public synchronized void worked(double work) throws MonitorCanceledException
{
super.worked(work);
- progressMonitor.worked(work);
+ progressMonitor.internalWorked(work);
}
@Override
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/Monitor.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/Monitor.java
index 3a534f2bc2..2cd802ae42 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/Monitor.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/Monitor.java
@@ -18,7 +18,7 @@ public class Monitor implements OMMonitor
{
private int totalWork;
- private int work;
+ private double work;
private boolean canceled;
@@ -45,7 +45,7 @@ public class Monitor implements OMMonitor
this.totalWork = totalWork;
}
- public synchronized void worked(int work) throws MonitorCanceledException
+ public synchronized void worked(double work) throws MonitorCanceledException
{
checkCanceled();
this.work += work;
@@ -60,7 +60,7 @@ public class Monitor implements OMMonitor
public synchronized void done()
{
checkCanceled();
- int rest = totalWork - work;
+ double rest = totalWork - work;
if (rest > 0)
{
worked(rest);
@@ -72,7 +72,7 @@ public class Monitor implements OMMonitor
return totalWork;
}
- public synchronized int getWork()
+ public synchronized double getWork()
{
return work;
}
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/NestedMonitor.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/NestedMonitor.java
index e957ea4d68..d2794b3e60 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/NestedMonitor.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/NestedMonitor.java
@@ -16,16 +16,22 @@ package org.eclipse.net4j.util.om.monitor;
*/
public class NestedMonitor extends Monitor
{
+ private static final double ZERO = 0.0d;
+
private OMMonitor parent;
private int parentWork;
- private float propagateWork;
+ private double sentToParent;
+
+ private double scale;
+
+ private boolean usedUp;
public NestedMonitor(OMMonitor parent, int parentWork)
{
this.parent = parent;
- this.parentWork = parentWork;
+ this.parentWork = parentWork > 0 ? parentWork : 0;
}
public OMMonitor getParent()
@@ -39,20 +45,32 @@ public class NestedMonitor extends Monitor
}
@Override
- public synchronized void worked(int work) throws MonitorCanceledException
+ public synchronized void begin(int totalWork) throws MonitorCanceledException
{
- super.worked(work);
- float ratio = getWork();
- ratio /= getTotalWork();
- propagateWork += ratio;
+ super.begin(totalWork);
+ scale = totalWork > ZERO ? (double)parentWork / (double)totalWork : ZERO;
+ }
- int parentTicks = (int)Math.floor(propagateWork * getParentWork());
- if (parentTicks > 0)
+ @Override
+ public synchronized void worked(double work) throws MonitorCanceledException
+ {
+ if (!usedUp)
{
- parent.worked(parentTicks);
- float rest = parentTicks;
- rest /= getParentWork();
- propagateWork -= rest;
+ super.worked(work);
+ double realWork = work > ZERO ? scale * work : ZERO;
+ parent.worked(realWork);
+ sentToParent += realWork;
+ if (sentToParent >= parentWork)
+ {
+ usedUp = true;
+ }
}
}
+
+ @Override
+ public synchronized void done()
+ {
+ super.done();
+ sentToParent = ZERO;
+ }
}
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/OMMonitor.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/OMMonitor.java
index bca54034c6..b127388d63 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/OMMonitor.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/monitor/OMMonitor.java
@@ -30,7 +30,10 @@ public interface OMMonitor
*/
public void begin(int totalWork) throws MonitorCanceledException;
- public void worked(int work) throws MonitorCanceledException;
+ /**
+ * @since 2.0
+ */
+ public void worked(double work) throws MonitorCanceledException;
/**
* @since 2.0
@@ -42,7 +45,7 @@ public interface OMMonitor
/**
* @since 2.0
*/
- public int getWork();
+ public double getWork();
/**
* @since 2.0
diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/signal/IndicationWithMonitoring.java b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/signal/IndicationWithMonitoring.java
index ba2fcf697a..8519c722f8 100644
--- a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/signal/IndicationWithMonitoring.java
+++ b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/signal/IndicationWithMonitoring.java
@@ -112,7 +112,7 @@ public abstract class IndicationWithMonitoring extends IndicationWithResponse
if (monitor != null)
{
// Keep sendProgress into the locks... otherwise when interrupt it seems to freeze.
- sendProgress(monitor.getTotalWork(), monitor.getWork());
+ sendProgress(monitor.getTotalWork(), (int)monitor.getWork());
}
}
@@ -211,7 +211,7 @@ public abstract class IndicationWithMonitoring extends IndicationWithResponse
}
@Override
- public synchronized void worked(int work)
+ public synchronized void worked(double work)
{
setLastMonitorAccess();
super.worked(work);
diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/signal/RequestWithMonitoring.java b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/signal/RequestWithMonitoring.java
index 7d00d149ea..4b0a3674e7 100644
--- a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/signal/RequestWithMonitoring.java
+++ b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/signal/RequestWithMonitoring.java
@@ -258,13 +258,13 @@ public abstract class RequestWithMonitoring<RESULT> extends RequestWithConfirmat
}
else
{
- float oldRatio = remoteMonitor.getWork();
+ double oldRatio = remoteMonitor.getWork();
oldRatio /= remoteMonitor.getTotalWork();
- float newRatio = work;
+ double newRatio = work;
newRatio /= totalWork;
- float newWork = newRatio - oldRatio;
+ double newWork = newRatio - oldRatio;
newWork *= remoteMonitor.getTotalWork();
if (newWork >= 1.0)
{

Back to the top