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);
+ }
+ }
+ }
+ }
}