You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2008/06/21 00:52:46 UTC

svn commit: r670090 - in /directory/studio/trunk: connection-core/src/main/java/org/apache/directory/studio/connection/core/StudioProgressMonitor.java test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/PreparationTest.java

Author: seelmann
Date: Fri Jun 20 15:52:45 2008
New Revision: 670090

URL: http://svn.apache.org/viewvc?rev=670090&view=rev
Log:
Fix for DIRSTUDIO-319: Starting only one job for reporting progress and checking for cancellation, reduces amount of started threads.

Modified:
    directory/studio/trunk/connection-core/src/main/java/org/apache/directory/studio/connection/core/StudioProgressMonitor.java
    directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/PreparationTest.java

Modified: directory/studio/trunk/connection-core/src/main/java/org/apache/directory/studio/connection/core/StudioProgressMonitor.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/connection-core/src/main/java/org/apache/directory/studio/connection/core/StudioProgressMonitor.java?rev=670090&r1=670089&r2=670090&view=diff
==============================================================================
--- directory/studio/trunk/connection-core/src/main/java/org/apache/directory/studio/connection/core/StudioProgressMonitor.java (original)
+++ directory/studio/trunk/connection-core/src/main/java/org/apache/directory/studio/connection/core/StudioProgressMonitor.java Fri Jun 20 15:52:45 2008
@@ -43,16 +43,75 @@
 public class StudioProgressMonitor extends ProgressMonitorWrapper
 {
 
+    /** The job reports progress and checks for cancellation. */
+    private static Job reportProgressAndCheckCancellationJob = new Job(
+        Messages.jobs__progressmonitor_check_cancellation )
+    {
+        protected IStatus run( IProgressMonitor monitor )
+        {
+            while ( true )
+            {
+                for ( Iterator<StudioProgressMonitor> it = monitors.iterator(); it.hasNext(); )
+                {
+                    StudioProgressMonitor spm = it.next();
+
+                    do
+                    {
+                        // check report progress message
+                        if ( !spm.done && spm.reportProgressMessage != null )
+                        {
+                            spm.subTask( spm.reportProgressMessage );
+                            spm.reportProgressMessage = null;
+                        }
+
+                        // check if canceled
+                        if ( spm.isCanceled() )
+                        {
+                            spm.fireCancelRequested();
+                            it.remove();
+                        }
+                        if ( spm.isCanceled() || spm.done )
+                        {
+                            it.remove();
+                        }
+
+                        if ( spm.getWrappedProgressMonitor() != null
+                            && spm.getWrappedProgressMonitor() instanceof StudioProgressMonitor )
+                        {
+                            spm = ( StudioProgressMonitor ) spm.getWrappedProgressMonitor();
+                        }
+                        else
+                        {
+                            spm = null;
+                        }
+                    }
+                    while ( spm != null );
+                }
+
+                try
+                {
+                    Thread.sleep( 1000 );
+                }
+                catch ( InterruptedException e )
+                {
+                }
+            }
+        }
+    };
+    static
+    {
+        reportProgressAndCheckCancellationJob.setSystem( true );
+        reportProgressAndCheckCancellationJob.schedule();
+    }
+
+    private static List<StudioProgressMonitor> monitors = new ArrayList<StudioProgressMonitor>();
+
     private boolean done;
 
     private List<Status> errorStatusList;
 
     private List<CancelListener> cancelListenerList;
 
-    private Job checkCanceledJob;
-
-    private Job reportProgressJob = null;
-
     private String reportProgressMessage = null;
 
 
@@ -65,34 +124,7 @@
     {
         super( monitor );
         this.done = false;
-
-        this.checkCanceledJob = new Job( Messages.jobs__progressmonitor_check_cancellation )
-        {
-            protected IStatus run( IProgressMonitor monitor )
-            {
-                while ( !done )
-                {
-                    if ( isCanceled() )
-                    {
-                        fireCancelRequested();
-                        break;
-                    }
-                    else
-                    {
-                        try
-                        {
-                            Thread.sleep( 1000 );
-                        }
-                        catch ( InterruptedException e )
-                        {
-                        }
-                    }
-                }
-                return Status.OK_STATUS;
-            }
-        };
-        this.checkCanceledJob.setSystem( true );
-        this.checkCanceledJob.schedule();
+        monitors.add( this );
     }
 
 
@@ -175,33 +207,7 @@
      */
     public void reportProgress( String message )
     {
-        synchronized ( this )
-        {
-            if ( !done )
-            {
-                if ( reportProgressJob == null )
-                {
-                    reportProgressJob = new Job( Messages.jobs__progressmonitor_report_progress )
-                    {
-                        protected IStatus run( IProgressMonitor monitor )
-                        {
-                            synchronized ( StudioProgressMonitor.this )
-                            {
-                                if ( !done )
-                                {
-                                    subTask( reportProgressMessage );
-                                }
-                                return Status.OK_STATUS;
-                            }
-                        }
-                    };
-                    reportProgressJob.setSystem( true );
-                }
-
-                reportProgressMessage = message;
-                reportProgressJob.schedule( 1000 );
-            }
-        }
+        reportProgressMessage = message;
     }
 
 
@@ -330,8 +336,8 @@
         }
         return null;
     }
-    
-    
+
+
     /**
      * Resets this status.
      */

Modified: directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/PreparationTest.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/PreparationTest.java?rev=670090&r1=670089&r2=670090&view=diff
==============================================================================
--- directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/PreparationTest.java (original)
+++ directory/studio/trunk/test-integration-ui/src/main/java/org/apache/directory/studio/test/integration/ui/PreparationTest.java Fri Jun 20 15:52:45 2008
@@ -21,10 +21,9 @@
 package org.apache.directory.studio.test.integration.ui;
 
 
+import junit.framework.TestCase;
 import net.sf.swtbot.eclipse.finder.SWTEclipseBot;
 
-import org.apache.directory.server.unit.AbstractServerTest;
-
 
 /**
  * Test preparation.
@@ -32,7 +31,7 @@
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$, $Date$
  */
-public class PreparationTest extends AbstractServerTest
+public class PreparationTest extends TestCase
 {
 
     /**