Author: dsavage
Date: Mon Mar 8 17:03:25 2010
New Revision: 920400
URL: http://svn.apache.org/viewvc?rev=920400&view=rev
Log:
Patches for FELIX-2181 - now runs workspace resolve task using a damped delay
to ensure that event storm does not trigger multiple project builds.
Also filter refresh events in workspace repository to ensure that only sigil
projects trigger a repository change event
Modified:
felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/WorkspaceRepository.java
felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/job/ResolveProjectsJob.java
felix/trunk/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/startup/SigilStartup.java
Modified:
felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/WorkspaceRepository.java
URL:
http://svn.apache.org/viewvc/felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/WorkspaceRepository.java?rev=920400&r1=920399&r2=920400&view=diff
==============================================================================
---
felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/WorkspaceRepository.java
(original)
+++
felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/internal/repository/eclipse/WorkspaceRepository.java
Mon Mar 8 17:03:25 2010
@@ -181,8 +181,14 @@
private void handleRefresh(IResourceChangeEvent event)
{
- SigilCore.log("Refreshing workspace repository");
- notifyChange();
+ if ( event.getResource() instanceof IProject ) {
+ IProject project = (IProject) event.getResource();
+ if ( isSigilProject(project) )
+ {
+ SigilCore.log("Refreshing workspace repository");
+ notifyChange();
+ }
+ }
}
Modified:
felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/job/ResolveProjectsJob.java
URL:
http://svn.apache.org/viewvc/felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/job/ResolveProjectsJob.java?rev=920400&r1=920399&r2=920400&view=diff
==============================================================================
---
felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/job/ResolveProjectsJob.java
(original)
+++
felix/trunk/sigil/eclipse/core/src/org/apache/felix/sigil/eclipse/job/ResolveProjectsJob.java
Mon Mar 8 17:03:25 2010
@@ -35,7 +35,7 @@
public class ResolveProjectsJob extends WorkspaceJob
{
- final Collection<ISigilProjectModel> sigilProjects;
+ private final Collection<ISigilProjectModel> sigilProjects;
public ResolveProjectsJob( IWorkspace workspace )
{
Modified:
felix/trunk/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/startup/SigilStartup.java
URL:
http://svn.apache.org/viewvc/felix/trunk/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/startup/SigilStartup.java?rev=920400&r1=920399&r2=920400&view=diff
==============================================================================
---
felix/trunk/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/startup/SigilStartup.java
(original)
+++
felix/trunk/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/startup/SigilStartup.java
Mon Mar 8 17:03:25 2010
@@ -20,12 +20,18 @@
package org.apache.felix.sigil.ui.eclipse.startup;
+import java.util.concurrent.atomic.AtomicInteger;
+
import org.apache.felix.sigil.eclipse.SigilCore;
import org.apache.felix.sigil.eclipse.job.ResolveProjectsJob;
import org.apache.felix.sigil.repository.IRepositoryChangeListener;
import org.apache.felix.sigil.repository.RepositoryChangeEvent;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
+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.ui.IStartup;
@@ -34,15 +40,31 @@
public void earlyStartup()
{
+ final AtomicInteger updateCounter = new AtomicInteger();
+
// Register a repository change listener to re-run the resolver when
repository changes
SigilCore.getGlobalRepositoryManager().addRepositoryChangeListener(
new IRepositoryChangeListener()
{
public void repositoryChanged( RepositoryChangeEvent event )
{
- IWorkspace workspace = ResourcesPlugin.getWorkspace();
- ResolveProjectsJob job = new ResolveProjectsJob( workspace );
- job.setSystem( true );
- job.schedule();
+ final int update = updateCounter.incrementAndGet();
+
+ Job job = new Job("Pending repository update") {
+ @Override
+ protected IStatus run(IProgressMonitor monitor)
+ {
+ if ( update == updateCounter.get() ) {
+ IWorkspace workspace =
ResourcesPlugin.getWorkspace();
+ ResolveProjectsJob job = new ResolveProjectsJob(
workspace );
+ job.setSystem( true );
+ job.schedule();
+ }
+ return Status.OK_STATUS;
+ }
+
+ };
+ job.setSystem(true);
+ job.schedule(100);
}
} );
}