[94617] Publish tasks
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java
index 8b332da..db319b0 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java
@@ -27,11 +27,15 @@
public class PublishOperation2 extends PublishOperation {
protected TomcatServerBehaviour server;
protected IModule module;
+ protected int kind;
+ protected int deltaKind;
- public PublishOperation2(TomcatServerBehaviour server, IModule module) {
- super("Publish to server", "Publish Web modules to Tomcat server");
+ public PublishOperation2(TomcatServerBehaviour server, int kind, IModule module, int deltaKind) {
+ super("Publish to server", "Publish Web module to Tomcat server");
this.server = server;
this.module = module;
+ this.kind = kind;
+ this.deltaKind = deltaKind;
}
public int getOrder() {
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishTask.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishTask.java
index e204b44..799d2ab 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishTask.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishTask.java
@@ -18,10 +18,10 @@
import org.eclipse.wst.server.core.model.PublishTaskDelegate;
public class PublishTask extends PublishTaskDelegate {
- public PublishOperation[] getTasks(IServer server, List modules) {
+ public PublishOperation[] getTasks(IServer server, int kind, List modules, List kindList) {
if (modules == null)
return null;
-
+
TomcatServerBehaviour tomcatServer = (TomcatServerBehaviour) server.loadAdapter(TomcatServerBehaviour.class, null);
List tasks = new ArrayList();
@@ -29,7 +29,8 @@
for (int i = 0; i < size; i++) {
IModule[] module = (IModule[]) modules.get(i);
IModule m = module[module.length - 1];
- tasks.add(new PublishOperation2(tomcatServer, m));
+ Integer in = (Integer) kindList.get(i);
+ tasks.add(new PublishOperation2(tomcatServer, kind, m, in.intValue()));
}
return (PublishOperation[]) tasks.toArray(new PublishOperation[tasks.size()]);
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishTask.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishTask.java
index 3f7a282..50915e3 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishTask.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishTask.java
@@ -45,4 +45,15 @@
* @return a possibly empty array of optional tasks
*/
public PublishOperation[] getTasks(IServer server, List modules);
+
+ /**
+ * Returns the tasks that should be performed during publishing.
+ *
+ * @param server the server
+ * @param modules a list containing IModule arrays
+ * @param kind one of the IServer.PUBLISH_XX constants
+ * @param kindList one of the IServer publish change constants
+ * @return the tasks that should be performed on the server
+ */
+ public PublishOperation[] getTasks(IServer server, int kind, List modules, List kindList);
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java
index 4efa7c3..ec9fbd5 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java
@@ -78,7 +78,24 @@
public PublishOperation[] getTasks(IServer server, List modules) {
try {
Trace.trace(Trace.FINEST, "Task.init " + this);
- return getDelegate().getTasks(server, modules);
+ PublishOperation[] po = getDelegate().getTasks(server, modules);
+ if (po != null)
+ return po;
+ } catch (Exception e) {
+ Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + e.getMessage());
+ }
+ return new PublishOperation[0];
+ }
+
+ /*
+ * @see
+ */
+ public PublishOperation[] getTasks(IServer server, int kind, List modules, List kindList) {
+ try {
+ Trace.trace(Trace.FINEST, "Task.init " + this);
+ PublishOperation[] po = getDelegate().getTasks(server, kind, modules, kindList);
+ if (po != null)
+ return po;
} catch (Exception e) {
Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + e.getMessage());
}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
index 0b9c581..040e54a 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
@@ -103,7 +103,7 @@
// Server listeners
protected transient ServerNotificationManager notificationManager;
-
+
public class AutoPublishThread extends Thread {
public boolean stop;
public int time = 0;
@@ -123,7 +123,7 @@
return;
Trace.trace(Trace.FINEST, "Auto-publish thread publishing " + Server.this);
-
+
PublishServerJob publishJob = new PublishServerJob(Server.this, IServer.PUBLISH_AUTO, false);
publishJob.schedule();
}
@@ -435,18 +435,22 @@
//Trace.trace(Trace.FINEST, "< handleDeployableProjectChange()");
}
+
+ protected void stopAutoPublish() {
+ if (autoPublishThread == null)
+ return;
+
+ autoPublishThread.stop = true;
+ autoPublishThread.interrupt();
+ autoPublishThread = null;
+ }
/**
* Reset automatic publish thread if it is running and start a new
* thread if automatic publishing is currently enabled.
*/
- public void autoPublish() {
- // check for auto-publish
- if (autoPublishThread != null) {
- autoPublishThread.stop = true;
- autoPublishThread.interrupt();
- autoPublishThread = null;
- }
+ protected void autoPublish() {
+ stopAutoPublish();
int time = 0;
if (getAutoPublishSetting() == AUTO_PUBLISH_DEFAULT) {
@@ -686,47 +690,35 @@
}
}
- IStatus status = null;
- try {
- firePublishStarted();
- status = doPublish(kind, monitor);
- } catch (Exception e) {
- status = null; // TODO
- } finally {
- firePublishFinished(status);
- }
+ firePublishStarted();
+ IStatus status = doPublish(kind, monitor);
+ firePublishFinished(status);
return status;
}
protected IStatus doPublish(int kind, IProgressMonitor monitor) {
Trace.trace(Trace.FINEST, "-->-- Publishing to server: " + toString() + " -->--");
+
+ stopAutoPublish();
try {
return getBehaviourDelegate(monitor).publish(kind, monitor);
} catch (Exception e) {
Trace.trace(Trace.SEVERE, "Error calling delegate publish() " + toString(), e);
- return null;
+ return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e);
}
}
-
+
/**
* Returns the publish tasks that have been targetted to this server.
* These tasks should be run during publishing.
*
+ * @param kind one of the IServer.PUBLISH_XX constants
+ * @param moduleList a list of modules
+ * @param kindList one of the IServer publish change constants
* @return a possibly empty array of IOptionalTasks
*/
- public PublishOperation[] getTasks() {
- final List moduleList = new ArrayList();
-
- IModuleVisitor visitor = new IModuleVisitor() {
- public boolean visit(IModule[] module) {
- moduleList.add(module);
- return true;
- }
- };
-
- visit(visitor, null);
-
+ public PublishOperation[] getTasks(int kind, List moduleList, List kindList) {
List tasks = new ArrayList();
String serverTypeId = getServerType().getId();
@@ -737,7 +729,7 @@
for (int i = 0; i < size; i++) {
IPublishTask task = publishTasks[i];
if (task.supportsType(serverTypeId)) {
- PublishOperation[] tasks2 = task.getTasks(this, moduleList);
+ PublishOperation[] tasks2 = task.getTasks(this, kind, moduleList, kindList);
if (tasks2 != null) {
int size2 = tasks2.length;
for (int j = 0; j < size2; j++) {
@@ -1138,7 +1130,7 @@
Trace.trace(Trace.SEVERE, "Error calling delegate stop() " + toString(), t);
}
}
-
+
/**
* @see IServer#start(String, IOperationListener)
*/
@@ -1175,7 +1167,7 @@
boolean alreadyDone;
}
final Timer timer = new Timer();
-
+
Thread thread = new Thread() {
public void run() {
try {
@@ -1195,7 +1187,7 @@
};
thread.setDaemon(true);
thread.start();
-
+
Trace.trace(Trace.FINEST, "synchronousStart 2");
// start the server
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishOperation.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishOperation.java
index 08c4a92..8ec1331 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishOperation.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishOperation.java
@@ -15,7 +15,7 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.wst.server.core.TaskModel;
/**
- * An publish operation that will be executed during publishing.
+ * An operation that will be executed during publishing.
*
* [issue: EY It is not clear to me that when this task will be run. Will the place where the
* task is being run depend on the server, e.g. the TDC tasks for the v6 server should be run
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishTaskDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishTaskDelegate.java
index 5101cbc..2442c3b 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishTaskDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishTaskDelegate.java
@@ -32,5 +32,20 @@
* @param modules a list containing IModule arrays
* @return the tasks that should be performed on the server.
*/
- public abstract PublishOperation[] getTasks(IServer server, List modules);
+ public PublishOperation[] getTasks(IServer server, List modules) {
+ return null;
+ }
+
+ /**
+ * Returns the tasks that should be performed during publishing.
+ *
+ * @param server the server
+ * @param modules a list containing IModule arrays
+ * @param kind one of the IServer.PUBLISH_XX constants.
+ * @param kindList one of the IServer publish change constants.
+ * @return the tasks that should be performed on the server.
+ */
+ public PublishOperation[] getTasks(IServer server, int kind, List modules, List kindList) {
+ return getTasks(server, modules);
+ }
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
index 3f62e60..4f8b961 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
@@ -535,14 +535,13 @@
kindList.add(new Integer(ServerBehaviourDelegate.ADDED));
}
- PublishOperation[] tasks = getTasks();
-
addRemovedModules(moduleList, kindList);
while (moduleList.size() > kindList.size()) {
kindList.add(new Integer(ServerBehaviourDelegate.REMOVED));
}
-
+
+ PublishOperation[] tasks = getTasks(kind, moduleList, kindList);
int size = 2000 + 3500 * moduleList.size() + 500 * tasks.length;
monitor = ProgressUtil.getMonitorFor(monitor);
@@ -670,20 +669,20 @@
*
* Uses 500 ticks plus 3500 ticks per module
*/
- protected void publishModules(int kind, List modules2, List deltaKind, MultiStatus multi, IProgressMonitor monitor) {
- if (modules2 == null)
+ protected void publishModules(int kind, List modules, List deltaKind, MultiStatus multi, IProgressMonitor monitor) {
+ if (modules == null)
return;
-
- int size = modules2.size();
+
+ int size = modules.size();
if (size == 0)
return;
if (monitor.isCanceled())
return;
-
+
// publish modules
for (int i = 0; i < size; i++) {
- IStatus status = publishModule(kind, (IModule[]) modules2.get(i), ((Integer)deltaKind.get(i)).intValue(), ProgressUtil.getSubMonitorFor(monitor, 3000));
+ IStatus status = publishModule(kind, (IModule[]) modules.get(i), ((Integer)deltaKind.get(i)).intValue(), ProgressUtil.getSubMonitorFor(monitor, 3000));
multi.add(status);
}
}
@@ -692,10 +691,13 @@
* Returns the publish tasks that have been targetted to this server.
* These tasks should be run during publishing.
*
+ * @param kind one of the IServer.PUBLISH_XX constants
+ * @param moduleList a list of modules
+ * @param kindList list of one of the IServer publish change constants
* @return a possibly empty array of IOptionalTasks
*/
- protected final PublishOperation[] getTasks() {
- return server.getTasks();
+ protected final PublishOperation[] getTasks(int kind, List moduleList, List kindList) {
+ return server.getTasks(kind, moduleList, kindList);
}
/**