Async boot dash local content computation

This commit is contained in:
aboyko
2023-02-06 15:34:33 -05:00
parent fd27a6d755
commit a67344c57e
2 changed files with 18 additions and 4 deletions

View File

@@ -28,7 +28,11 @@ import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jdt.core.IJavaProject;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleEvent;
@@ -111,7 +115,7 @@ public class LocalBootDashModel extends AbstractBootDashModel implements Deletio
super(RunTargets.LOCAL, parent);
this.workspace = context.getWorkspace();
this.localServices = new LocalServicesModel(getViewModel(), this, context.getBootInstallManager().getDefaultInstallExp());
this.refreshState = new LiveExpression<RefreshState>() {
this.refreshState = new LiveExpression<>() {
{
dependsOn(bootAppsRefreshState);
dependsOn(localServices.getRefreshState());
@@ -173,7 +177,7 @@ public class LocalBootDashModel extends AbstractBootDashModel implements Deletio
WorkspaceListener workspaceListener = new WorkspaceListener();
this.openCloseListenerManager = new ProjectChangeListenerManager(workspace, workspaceListener);
this.classpathListenerManager = new ClasspathListenerManager(workspaceListener);
projectExclusion.addListener(projectExclusionListener = new ValueListener<Pattern>() {
projectExclusion.addListener(projectExclusionListener = new ValueListener<>() {
public void gotValue(LiveExpression<Pattern> exp, Pattern value) {
updateElementsFromWorkspace();
}
@@ -287,6 +291,17 @@ public class LocalBootDashModel extends AbstractBootDashModel implements Deletio
}
void updateElementsFromWorkspace() {
new Job("Updating Local Contents for Boot Dashboard") {
@Override
protected IStatus run(IProgressMonitor monitor) {
doUpdateElementsFromWorkspace();
return Status.OK_STATUS;
}
}.schedule();
}
private void doUpdateElementsFromWorkspace() {
LiveSetVariable<BootProjectDashElement> apps = this.applications;
if (apps!=null) {
Set<BootProjectDashElement> newElements = Arrays.stream(this.workspace.getRoot().getProjects())