package com.aerospike.core.model; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; 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.IStatus; import org.eclipse.ui.IStartup; import com.aerospike.core.CoreActivator; import com.aerospike.core.nature.AerospikeNature; public class StartUp implements IStartup { @Override public void earlyStartup() { IWorkspace workspace = ResourcesPlugin.getWorkspace(); /* * refresh all Aerospike projects in workspace */ IProject[] projects = workspace.getRoot().getProjects(); for (IProject project : projects){ runClusterRefresh(project); } /* * Listen for project open */ IResourceChangeListener listener = new IResourceChangeListener() { public void resourceChanged(IResourceChangeEvent event) { if (event == null || event.getDelta() == null) { return; } try { event.getDelta().accept(new IResourceDeltaVisitor() { public boolean visit(final IResourceDelta delta) throws CoreException { IResource resource = delta.getResource(); if (((resource.getType() & IResource.PROJECT) != 0) && resource.getProject().isOpen() && delta.getKind() == IResourceDelta.CHANGED && ((delta.getFlags() & IResourceDelta.OPEN) != 0)) { IProject project = (IProject)resource; runClusterRefresh(project); } return true; } }); } catch (CoreException e) { CoreActivator.showError(e, "Cluster refresh error"); } } }; workspace.addResourceChangeListener(listener); } private void runClusterRefresh(IProject project){ try { if (project.isOpen() && project.hasNature(AerospikeNature.NATURE_ID)){ //System.out.println("@@@@ " + project.getName()); AsCluster cluster = CoreActivator.getCluster(project); if (cluster == null){ cluster = new AsCluster(project); project.setSessionProperty(CoreActivator.CLUSTER_PROPERTY, cluster); } ClusterRefreshJob job = new ClusterRefreshJob(cluster); job.schedule(1000); } } catch (CoreException e) { CoreActivator.log(IStatus.ERROR, "Cluster refresh error", e); } } }