refactor progress reporting from dependency on org.eclipse.core.runtime.IProgressMonitor (FELIX-1509)


git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@981796 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/sigil/common/core/sigil.properties b/sigil/common/core/sigil.properties
index 4d52aab..801ce44 100644
--- a/sigil/common/core/sigil.properties
+++ b/sigil/common/core/sigil.properties
@@ -15,7 +15,8 @@
 	org.apache.felix.sigil.common.config*, \
 	org.apache.felix.sigil.common.core*, \
 	org.apache.felix.sigil.common.model*, \
-	org.apache.felix.sigil.common.repository*,
+	org.apache.felix.sigil.common.repository*, \
+	org.apache.felix.sigil.common.progress*,
 
 -resources: \
 	profiles, \
@@ -40,6 +41,7 @@
 	org.apache.felix.sigil.common.model.eclipse, \
 	org.apache.felix.sigil.common.model.osgi, \
 	org.apache.felix.sigil.common.repository, \
+	org.apache.felix.sigil.common.progress, \
 
 -imports: \
 	aQute.lib.osgi;resolve=compile, \
@@ -53,12 +55,8 @@
 	org.apache.felix.sigil.common.model.osgi, \
 	org.apache.felix.sigil.common.osgi, \
 	org.apache.felix.sigil.common.repository, \
-	org.eclipse.core.runtime, \
 	org.osgi.framework, \
 
--requires: \
-	org.eclipse.equinox.common;version=3.4.0, \
-
 header;Bundle-ActivationPolicy: lazy
 
 # end
diff --git a/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/license/LicensePolicy.java b/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/license/LicensePolicy.java
index d393b0a..06eefd3 100644
--- a/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/license/LicensePolicy.java
+++ b/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/license/LicensePolicy.java
@@ -21,7 +21,7 @@
 
 import org.apache.felix.sigil.common.core.licence.ILicensePolicy;
 import org.apache.felix.sigil.common.model.eclipse.ISigilBundle;
-import org.eclipse.core.runtime.IProgressMonitor;
+import org.apache.felix.sigil.common.progress.IProgress;
 
 public class LicensePolicy implements ILicensePolicy
 {
@@ -50,7 +50,7 @@
 
     }
 
-    public void save(IProgressMonitor monitor)
+    public void save(IProgress progress)
     {
         // TODO Auto-generated method stub
 
diff --git a/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/model/eclipse/SigilBundle.java b/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/model/eclipse/SigilBundle.java
index 98d1146..a5f5a4c 100644
--- a/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/model/eclipse/SigilBundle.java
+++ b/sigil/common/core/src/org/apache/felix/sigil/common/core/internal/model/eclipse/SigilBundle.java
@@ -43,8 +43,7 @@
 import org.apache.felix.sigil.common.model.osgi.IBundleModelElement;
 import org.apache.felix.sigil.common.model.osgi.IPackageExport;
 import org.apache.felix.sigil.common.model.osgi.IPackageImport;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.SubMonitor;
+import org.apache.felix.sigil.common.progress.IProgress;
 import org.osgi.framework.Version;
 
 /**
@@ -74,17 +73,17 @@
         packages = new String[0];
     }
 
-    public void synchronize(IProgressMonitor monitor) throws IOException
+    public void synchronize(IProgress progress) throws IOException
     {
-        SubMonitor progress = SubMonitor.convert(monitor, 100);
-        progress.subTask("Synchronizing " + bundle.getSymbolicName() + " binary");
+        progress = progress.newTask(100);
+        progress.report("Synchronizing " + bundle.getSymbolicName() + " binary");
         sync(location, bundle.getUpdateLocation(), progress.newChild(45));
 
         if (bundle.getSourceLocation() != null)
         {
             try
             {
-                progress.subTask("Synchronizing " + bundle.getSymbolicName() + " source");
+                progress.report("Synchronizing " + bundle.getSymbolicName() + " source");
                 sync(sourcePathLocation, bundle.getSourceLocation(),
                     progress.newChild(45));
             }
@@ -99,7 +98,7 @@
         {
             try
             {
-                progress.subTask("Synchronizing " + bundle.getSymbolicName() + " licence");
+                progress.report("Synchronizing " + bundle.getSymbolicName() + " licence");
                 sync(licencePathLocation, bundle.getLicenseURI(), progress.newChild(10));
             }
             catch (IOException e)
@@ -133,7 +132,7 @@
         return location == null || location.exists();
     }
 
-    private static void sync(File local, URI remote, IProgressMonitor monitor)
+    private static void sync(File local, URI remote, IProgress progress)
         throws IOException
     {
         try
@@ -146,7 +145,8 @@
                     URLConnection connection = url.openConnection();
                     int contentLength = connection.getContentLength();
 
-                    monitor.beginTask("Downloading from " + url.getHost(), contentLength);
+                    progress = progress.newTask(contentLength);
+                    progress.report("Downloading from " + url.getHost());
 
                     InputStream in = null;
                     OutputStream out = null;
@@ -162,7 +162,7 @@
                         in = conn.getInputStream();
                         local.getParentFile().mkdirs();
                         out = new FileOutputStream(local);
-                        stream(in, out, monitor);
+                        stream(in, out, progress);
                     }
                     finally
                     {
@@ -174,7 +174,7 @@
                         {
                             out.close();
                         }
-                        monitor.done();
+                        progress.done();
                     }
                 }
             }
@@ -186,13 +186,13 @@
         }
     }
 
-    private static void stream(InputStream in, OutputStream out, IProgressMonitor monitor)
+    private static void stream(InputStream in, OutputStream out, IProgress progress)
         throws IOException
     {
         byte[] b = new byte[1024];
         for (;;)
         {
-            if (monitor.isCanceled())
+            if (progress.isCanceled())
             {
                 throw new InterruptedIOException("User canceled download");
             }
@@ -200,7 +200,7 @@
             if (r == -1)
                 break;
             out.write(b, 0, r);
-            monitor.worked(r);
+            progress.worked(r);
         }
 
         out.flush();
diff --git a/sigil/common/core/src/org/apache/felix/sigil/common/core/licence/ILicensePolicy.java b/sigil/common/core/src/org/apache/felix/sigil/common/core/licence/ILicensePolicy.java
index eefef3c..450e6f0 100644
--- a/sigil/common/core/src/org/apache/felix/sigil/common/core/licence/ILicensePolicy.java
+++ b/sigil/common/core/src/org/apache/felix/sigil/common/core/licence/ILicensePolicy.java
@@ -20,7 +20,7 @@
 package org.apache.felix.sigil.common.core.licence;
 
 import org.apache.felix.sigil.common.model.eclipse.ISigilBundle;
-import org.eclipse.core.runtime.IProgressMonitor;
+import org.apache.felix.sigil.common.progress.IProgress;
 
 public interface ILicensePolicy
 {
@@ -30,5 +30,5 @@
 
     boolean accept(ISigilBundle bundle);
 
-    void save(IProgressMonitor monitor);
+    void save(IProgress progress);
 }
diff --git a/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/BundleResolver.java b/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/BundleResolver.java
index b7c8bf8..7028461 100644
--- a/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/BundleResolver.java
+++ b/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/BundleResolver.java
@@ -42,6 +42,7 @@
 import org.apache.felix.sigil.common.model.osgi.IPackageExport;
 import org.apache.felix.sigil.common.model.osgi.IPackageImport;
 import org.apache.felix.sigil.common.model.osgi.IRequiredBundle;
+import org.apache.felix.sigil.common.progress.IProgress;
 import org.apache.felix.sigil.common.repository.IBundleRepository;
 import org.apache.felix.sigil.common.repository.IBundleResolver;
 import org.apache.felix.sigil.common.repository.IRepositoryManager;
@@ -49,8 +50,6 @@
 import org.apache.felix.sigil.common.repository.IResolutionMonitor;
 import org.apache.felix.sigil.common.repository.ResolutionConfig;
 import org.apache.felix.sigil.common.repository.ResolutionException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.SubMonitor;
 import org.osgi.framework.Version;
 
 public class BundleResolver implements IBundleResolver
@@ -279,14 +278,14 @@
             return true;
         }
 
-        public void synchronize(IProgressMonitor monitor)
+        public void synchronize(IProgress progress)
         {
             Set<ISigilBundle> bundles = getBundles();
-            SubMonitor progress = SubMonitor.convert(monitor, bundles.size());
+            progress = progress.newTask(bundles.size());
 
             for (ISigilBundle b : bundles)
             {
-                if (monitor.isCanceled())
+                if (progress.isCanceled())
                 {
                     break;
                 }
diff --git a/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/ProgressWrapper.java b/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/ProgressWrapper.java
deleted file mode 100644
index e1db339..0000000
--- a/sigil/common/core/src/org/apache/felix/sigil/common/core/repository/ProgressWrapper.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *   http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.felix.sigil.common.core.repository;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.apache.felix.sigil.common.repository.IResolutionMonitor;
-
-public class ProgressWrapper implements IProgressMonitor
-{
-
-    private IResolutionMonitor monitor;
-
-    public ProgressWrapper(IResolutionMonitor monitor)
-    {
-        this.monitor = monitor;
-    }
-
-    public boolean isCanceled()
-    {
-        return monitor.isCanceled();
-    }
-
-    public void beginTask(String name, int totalWork)
-    {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void done()
-    {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void internalWorked(double work)
-    {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void setCanceled(boolean value)
-    {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void setTaskName(String name)
-    {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void subTask(String name)
-    {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void worked(int work)
-    {
-        // TODO Auto-generated method stub
-
-    }
-}
diff --git a/sigil/common/core/src/org/apache/felix/sigil/common/model/eclipse/ISigilBundle.java b/sigil/common/core/src/org/apache/felix/sigil/common/model/eclipse/ISigilBundle.java
index 5dcde31..a597ac9 100644
--- a/sigil/common/core/src/org/apache/felix/sigil/common/model/eclipse/ISigilBundle.java
+++ b/sigil/common/core/src/org/apache/felix/sigil/common/model/eclipse/ISigilBundle.java
@@ -23,13 +23,13 @@
 import java.io.IOException;
 import java.util.Collection;
 
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.apache.felix.sigil.common.config.Resource;
 import org.apache.felix.sigil.common.model.ICompoundModelElement;
 import org.apache.felix.sigil.common.model.osgi.IBundleModelElement;
 import org.apache.felix.sigil.common.model.osgi.IPackageExport;
 import org.apache.felix.sigil.common.model.osgi.IPackageImport;
 import org.apache.felix.sigil.common.model.osgi.IVersionedModelElement;
+import org.apache.felix.sigil.common.progress.IProgress;
 
 /**
  * @author dave
@@ -37,7 +37,7 @@
  */
 public interface ISigilBundle extends ICompoundModelElement, IVersionedModelElement
 {
-    void synchronize(IProgressMonitor monitor) throws IOException;
+    void synchronize(IProgress progress) throws IOException;
 
     boolean isSynchronized();
 
diff --git a/sigil/common/core/src/org/apache/felix/sigil/common/progress/IProgress.java b/sigil/common/core/src/org/apache/felix/sigil/common/progress/IProgress.java
new file mode 100644
index 0000000..93a8dc1
--- /dev/null
+++ b/sigil/common/core/src/org/apache/felix/sigil/common/progress/IProgress.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.felix.sigil.common.progress;
+
+/**
+ * @author dave
+ *
+ */
+public interface IProgress
+{
+
+    /**
+     * @return
+     */
+    boolean isCanceled();
+
+    /**
+     * @param totalWork
+     * @return
+     */
+    IProgress newChild(int totalWork);
+    
+    /**
+     * @param name
+     * @param totalWork
+     * @return
+     */
+    IProgress newTask(int totalWork);
+    
+    /**
+     * @param msg
+     */
+    void report(String msg);
+
+    /**
+     * @param work
+     */
+    void worked(int work);
+
+    /**
+     * 
+     */
+    void done();
+
+}
diff --git a/sigil/common/core/src/org/apache/felix/sigil/common/repository/IResolution.java b/sigil/common/core/src/org/apache/felix/sigil/common/repository/IResolution.java
index 9a63899..f9b053f 100644
--- a/sigil/common/core/src/org/apache/felix/sigil/common/repository/IResolution.java
+++ b/sigil/common/core/src/org/apache/felix/sigil/common/repository/IResolution.java
@@ -22,9 +22,9 @@
 import java.util.List;
 import java.util.Set;
 
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.apache.felix.sigil.common.model.IModelElement;
 import org.apache.felix.sigil.common.model.eclipse.ISigilBundle;
+import org.apache.felix.sigil.common.progress.IProgress;
 
 public interface IResolution
 {
@@ -34,7 +34,7 @@
 
     List<IModelElement> getMatchedRequirements(ISigilBundle bundle);
 
-    void synchronize(IProgressMonitor monitor);
+    void synchronize(IProgress progress);
 
     boolean isSynchronized();
 }
diff --git a/sigil/eclipse/core/sigil.properties b/sigil/eclipse/core/sigil.properties
index defecb4..e9689e1 100644
--- a/sigil/eclipse/core/sigil.properties
+++ b/sigil/eclipse/core/sigil.properties
@@ -25,6 +25,7 @@
 	org.apache.felix.sigil.eclipse.model.repository, \
 	org.apache.felix.sigil.eclipse.model.util, \
 	org.apache.felix.sigil.eclipse.preferences, \
+	org.apache.felix.sigil.eclipse.repository, \
 
 -imports: \
 	org.apache.commons.lang, \
@@ -37,6 +38,7 @@
 	org.apache.felix.sigil.common.model.eclipse, \
 	org.apache.felix.sigil.common.model.osgi, \
 	org.apache.felix.sigil.common.osgi, \
+	org.apache.felix.sigil.common.progress;version=0.9.0, \
 	org.apache.felix.sigil.common.repository, \
 	org.apache.felix.sigil.eclipse, \
 	org.apache.felix.sigil.eclipse.install, \
diff --git a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/model/project/SigilModelRoot.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/model/project/SigilModelRoot.java
index 7188cfe..a588a40 100644
--- a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/model/project/SigilModelRoot.java
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/model/project/SigilModelRoot.java
@@ -37,10 +37,11 @@
 import org.apache.felix.sigil.common.repository.IResolution;
 import org.apache.felix.sigil.common.repository.ResolutionConfig;
 import org.apache.felix.sigil.common.repository.ResolutionException;
-import org.apache.felix.sigil.common.repository.ResolutionMonitorAdapter;
 import org.apache.felix.sigil.eclipse.SigilCore;
 import org.apache.felix.sigil.eclipse.model.project.ISigilModelRoot;
 import org.apache.felix.sigil.eclipse.model.project.ISigilProjectModel;
+import org.apache.felix.sigil.eclipse.progress.ProgressAdapter;
+import org.apache.felix.sigil.eclipse.repository.ResolutionMonitorAdapter;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
@@ -186,7 +187,7 @@
             IBundleResolver resolver = SigilCore.getRepositoryManager(sigil).getBundleResolver();
             IResolution resolution = resolver.resolve(element, config,
                 new ResolutionMonitorAdapter(monitor));
-            resolution.synchronize(monitor);
+            resolution.synchronize(new ProgressAdapter(monitor));
             return resolution.getBundles();
         }
         catch (ResolutionException e)
diff --git a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/model/project/SigilProject.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/model/project/SigilProject.java
index 6efbe9a..aadb284 100644
--- a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/model/project/SigilProject.java
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/model/project/SigilProject.java
@@ -48,12 +48,13 @@
 import org.apache.felix.sigil.common.repository.IResolution;
 import org.apache.felix.sigil.common.repository.ResolutionConfig;
 import org.apache.felix.sigil.common.repository.ResolutionException;
-import org.apache.felix.sigil.common.repository.ResolutionMonitorAdapter;
 import org.apache.felix.sigil.eclipse.PathUtil;
 import org.apache.felix.sigil.eclipse.SigilCore;
 import org.apache.felix.sigil.eclipse.job.ThreadProgressMonitor;
 import org.apache.felix.sigil.eclipse.model.project.ISigilProjectModel;
 import org.apache.felix.sigil.eclipse.model.util.JavaHelper;
+import org.apache.felix.sigil.eclipse.progress.ProgressAdapter;
+import org.apache.felix.sigil.eclipse.repository.ResolutionMonitorAdapter;
 import org.apache.felix.sigil.utils.GlobCompiler;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
@@ -195,7 +196,7 @@
             // pull remote bundles from repositories to be added to classpath
             if (!resolution.isSynchronized())
             {
-                resolution.synchronize(progress.newChild(80));
+                resolution.synchronize(new ProgressAdapter(progress.newChild(80)));
             }
         }
         catch (ResolutionException e)
diff --git a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/model/util/JavaHelper.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/model/util/JavaHelper.java
index c01c9d2..fe34711 100644
--- a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/model/util/JavaHelper.java
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/model/util/JavaHelper.java
@@ -54,10 +54,11 @@
 import org.apache.felix.sigil.common.repository.IResolution;
 import org.apache.felix.sigil.common.repository.ResolutionConfig;
 import org.apache.felix.sigil.common.repository.ResolutionException;
-import org.apache.felix.sigil.common.repository.ResolutionMonitorAdapter;
 import org.apache.felix.sigil.eclipse.PathUtil;
 import org.apache.felix.sigil.eclipse.SigilCore;
 import org.apache.felix.sigil.eclipse.model.project.ISigilProjectModel;
+import org.apache.felix.sigil.eclipse.progress.ProgressAdapter;
+import org.apache.felix.sigil.eclipse.repository.ResolutionMonitorAdapter;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
@@ -416,7 +417,7 @@
         {
             if (other == null)
             {
-                provider.synchronize(monitor);
+                provider.synchronize(new ProgressAdapter(monitor));
                 return newBundleEntry(provider, rules, attrs, false);
             }
             else
diff --git a/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/progress/ProgressAdapter.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/progress/ProgressAdapter.java
new file mode 100644
index 0000000..06216d0
--- /dev/null
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/progress/ProgressAdapter.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.felix.sigil.eclipse.progress;
+
+import org.apache.felix.sigil.common.progress.IProgress;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.SubMonitor;
+
+/**
+ * @author dave
+ *
+ */
+public class ProgressAdapter implements IProgress
+{
+    
+    private final IProgressMonitor monitor;
+    private final SubMonitor sub;
+
+    public ProgressAdapter(IProgressMonitor monitor) {
+        this.monitor = monitor;
+        sub = SubMonitor.convert(monitor);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.felix.sigil.common.progress.IProgress#done()
+     */
+    public void done()
+    {
+        monitor.done();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.felix.sigil.common.progress.IProgress#isCanceled()
+     */
+    public boolean isCanceled()
+    {
+        return monitor.isCanceled();
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.felix.sigil.common.progress.IProgress#newChild(int)
+     */
+    public IProgress newChild(int totalWork)
+    {
+        return new ProgressAdapter(sub.newChild(totalWork));
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.felix.sigil.common.progress.IProgress#newTask(int)
+     */
+    public IProgress newTask(int totalWork)
+    {
+        SubMonitor sub = SubMonitor.convert(monitor);
+        return new ProgressAdapter(sub);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.felix.sigil.common.progress.IProgress#worked(int)
+     */
+    public void worked(int work)
+    {
+        monitor.worked(work);
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.felix.sigil.common.progress.IProgress#report(java.lang.String)
+     */
+    public void report(String msg)
+    {
+        sub.subTask(msg);
+    }
+
+}
diff --git a/sigil/common/core/src/org/apache/felix/sigil/common/repository/ResolutionMonitorAdapter.java b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/repository/ResolutionMonitorAdapter.java
similarity index 92%
rename from sigil/common/core/src/org/apache/felix/sigil/common/repository/ResolutionMonitorAdapter.java
rename to sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/repository/ResolutionMonitorAdapter.java
index 9e5db18..916c275 100644
--- a/sigil/common/core/src/org/apache/felix/sigil/common/repository/ResolutionMonitorAdapter.java
+++ b/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/repository/ResolutionMonitorAdapter.java
@@ -17,11 +17,12 @@
  * under the License.
  */
 
-package org.apache.felix.sigil.common.repository;
+package org.apache.felix.sigil.eclipse.repository;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.apache.felix.sigil.common.model.IModelElement;
 import org.apache.felix.sigil.common.model.eclipse.ISigilBundle;
+import org.apache.felix.sigil.common.repository.IResolutionMonitor;
 
 public class ResolutionMonitorAdapter implements IResolutionMonitor
 {
diff --git a/sigil/eclipse/ui/sigil.properties b/sigil/eclipse/ui/sigil.properties
index 5b6f3e2..a3e57e9 100644
--- a/sigil/eclipse/ui/sigil.properties
+++ b/sigil/eclipse/ui/sigil.properties
@@ -39,6 +39,7 @@
 	org.apache.felix.sigil.eclipse.model.repository, \
 	org.apache.felix.sigil.eclipse.model.util, \
 	org.apache.felix.sigil.eclipse.preferences, \
+	org.apache.felix.sigil.eclipse.repository;version=0.9.0, \
 	org.apache.felix.sigil.eclipse.ui, \
 	org.apache.felix.sigil.eclipse.ui.actions, \
 	org.apache.felix.sigil.eclipse.ui.util, \
diff --git a/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/internal/views/resolution/BundleResolverView.java b/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/internal/views/resolution/BundleResolverView.java
index 8cf101a..ad954c5 100644
--- a/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/internal/views/resolution/BundleResolverView.java
+++ b/sigil/eclipse/ui/src/org/apache/felix/sigil/eclipse/ui/internal/views/resolution/BundleResolverView.java
@@ -31,9 +31,9 @@
 import org.apache.felix.sigil.common.repository.IResolutionMonitor;
 import org.apache.felix.sigil.common.repository.ResolutionConfig;
 import org.apache.felix.sigil.common.repository.ResolutionException;
-import org.apache.felix.sigil.common.repository.ResolutionMonitorAdapter;
 import org.apache.felix.sigil.eclipse.SigilCore;
 import org.apache.felix.sigil.eclipse.model.project.ISigilProjectModel;
+import org.apache.felix.sigil.eclipse.repository.ResolutionMonitorAdapter;
 import org.apache.felix.sigil.eclipse.ui.SigilUI;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;