Author: stefanegli
Date: Tue May 20 14:42:42 2014
New Revision: 1596272

URL: http://svn.apache.org/r1596272
Log:
SLING-3587 : likely due to a WST bug, no publish is triggered upon 'folder 
change' - to still support this to some extend, added: triggerIncrementalBuild. 
This can be used eg when creating a new node in the content browser

Modified:
    
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java

Modified: 
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java?rev=1596272&r1=1596271&r2=1596272&view=diff
==============================================================================
--- 
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java
 (original)
+++ 
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java
 Tue May 20 14:42:42 2014
@@ -18,6 +18,9 @@ package org.apache.sling.ide.eclipse.cor
 
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
 
 import org.apache.sling.ide.eclipse.core.internal.Activator;
 import org.apache.sling.ide.eclipse.core.internal.SlingLaunchpadServer;
@@ -26,6 +29,7 @@ import org.apache.sling.ide.transport.Re
 import org.apache.sling.ide.transport.RepositoryFactory;
 import org.apache.sling.ide.transport.RepositoryInfo;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
@@ -73,6 +77,34 @@ public abstract class ServerUtil {
         return server;
     }
 
+    private static Set<IServer> getAllServers(IProject project) {
+        IModule module = 
org.eclipse.wst.server.core.ServerUtil.getModule(project);
+        if (module==null) {
+            // if there's no module for a project then there's no IServer for 
sure - which 
+            // is what we need to create a RepositoryInfo
+            return null;
+        }
+        Set<IServer> result = new HashSet<IServer>();
+        IServer defaultServer = ServerCore.getDefaultServer(module);
+        if (defaultServer!=null) {
+            result.add(defaultServer);
+        }
+        
+        IServer[] allServers = ServerCore.getServers();
+        for (int i = 0; i < allServers.length; i++) {
+            IServer aServer = allServers[i];
+            IModule[] allModules = aServer.getModules();
+            for (int j = 0; j < allModules.length; j++) {
+                IModule aMoudle = allModules[j];
+                if (aMoudle.equals(module)) {
+                    result.add(aServer);
+                    break;
+                }
+            }
+        }
+        return result;
+    }
+
     public static Repository getRepository(IServer server, IProgressMonitor 
monitor) throws CoreException {
         RepositoryFactory repository = 
Activator.getDefault().getRepositoryFactory();
         try {
@@ -117,4 +149,27 @@ public abstract class ServerUtil {
     private ServerUtil() {
 
     }
+
+    public static void triggerIncrementalBuild(IResource 
anyResourceInThatProject, IProgressMonitor monitorOrNull) {
+        if (anyResourceInThatProject==null) {
+            throw new IllegalArgumentException("anyResourceInThatProject must 
not be null");
+        }
+        IProject proj = anyResourceInThatProject.getProject();
+        if (proj==null) {
+            throw new IllegalStateException("no project found for 
"+anyResourceInThatProject);
+        }
+        Set<IServer> servers = getAllServers(proj);
+        
+        if (servers!=null) {
+            if (monitorOrNull==null) {
+                monitorOrNull = new NullProgressMonitor();
+            }
+            for (Iterator it = servers.iterator(); it.hasNext();) {
+                IServer aServer = (IServer) it.next();
+                if (aServer!=null) {
+                    aServer.publish(IServer.PUBLISH_INCREMENTAL, 
monitorOrNull);
+                }
+            }
+        }
+    }
 }


Reply via email to