[270586] Better delta checks for AntPublisher
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/AntPublisher.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/AntPublisher.java
index 317d85a..a92a22c 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/AntPublisher.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/AntPublisher.java
@@ -38,6 +38,7 @@
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.jdt.launching.IVMInstall;
import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jst.server.core.IEnterpriseApplication;
import org.eclipse.jst.server.core.IWebModule;
import org.eclipse.jst.server.generic.core.internal.CorePlugin;
import org.eclipse.jst.server.generic.core.internal.GenericPublisher;
@@ -50,6 +51,7 @@
import org.eclipse.jst.server.generic.servertype.definition.PublisherData;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IModuleArtifact;
+import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
import org.osgi.framework.Bundle;
@@ -118,10 +120,11 @@
* org.eclipse.core.runtime.IProgressMonitor)
*/
public IStatus[] publish(IModuleArtifact[] resource, IProgressMonitor monitor) {
- if (getModule().length > 1)// only respond to root module calls.
- return null;
- try {
- if (monitor.isCanceled()) return null;
+
+ if (getModule().length > 1 || // only respond to root module calls.
+ !publishNeeded() ||
+ monitor.isCanceled()) return null;
+ try {
assembleModule(monitor);
File file = getCustomBuildFile();
if ( file == null){// no user selected build file use the adapter default.
@@ -135,6 +138,28 @@
}
return null;
}
+ /**
+ * Checks if the Ant publisher actually needs to publish.
+ * For ear modules it also checks if any of the children modules requires publishing.
+ * @return true if ant publisher needs to publish.
+ */
+ private boolean publishNeeded() {
+ if ( getKind() != IServer.PUBLISH_INCREMENTAL && getKind() != IServer.PUBLISH_AUTO )
+ return true;
+ if (getDeltaKind() != ServerBehaviourDelegate.NO_CHANGE )
+ return true;
+ if ( isModuleType(getModule()[0], "jst.ear") ){ //$NON-NLS-1$
+ IEnterpriseApplication earModule = (IEnterpriseApplication)getModule()[0].loadAdapter(IEnterpriseApplication.class, new NullProgressMonitor());
+ IModule[] childModules = earModule.getModules();
+ for (int i = 0; i < childModules.length; i++) {
+ IModule module = childModules[i];
+ IModule[] modules ={getModule()[0], module};
+ if (IServer.PUBLISH_STATE_NONE != this.getServer().getServer().getModulePublishState(modules))
+ return true;
+ }
+ }
+ return false;
+ }
protected void assembleModule(IProgressMonitor monitor) throws CoreException {
long time = System.currentTimeMillis();