[117905] Re-add publish listener to API
diff --git a/plugins/org.eclipse.wst.server.core/component.xml b/plugins/org.eclipse.wst.server.core/component.xml
index 45fab15..4f43974 100644
--- a/plugins/org.eclipse.wst.server.core/component.xml
+++ b/plugins/org.eclipse.wst.server.core/component.xml
@@ -7,6 +7,7 @@
<type name="IModuleArtifact" implement="false" subclass="false" instantiate="false"/>
<type name="IModuleType" implement="false" subclass="false" instantiate="false"/>
<!-- <type name="IProjectProperties" implement="false" subclass="false" instantiate="false"/>-->
+ <type name="IPublishListener" subclass="false" instantiate="false"/>
<type name="IRuntime" implement="false" subclass="false" instantiate="false"/>
<type name="IRuntimeLifecycleListener" subclass="false" instantiate="false"/>
<!-- <type name="IRuntimeTargetHandler" implement="false" subclass="false" instantiate="false"/>-->
@@ -48,6 +49,7 @@
<type name="HttpLaunchable"/>
<type name="IStaticWeb"/>
<type name="NullModuleArtifact"/>
+ <type name="PublishAdapter"/>
<type name="ProjectModule"/>
<type name="ProjectModuleFactoryDelegate"/>
<type name="RuntimeLifecycleAdapter"/>
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishListener.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IPublishListener.java
similarity index 94%
rename from plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishListener.java
rename to plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IPublishListener.java
index d67e395..0a52be8 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishListener.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IPublishListener.java
@@ -8,10 +8,9 @@
* Contributors:
* IBM Corporation - Initial API and implementation
**********************************************************************/
-package org.eclipse.wst.server.core.internal;
+package org.eclipse.wst.server.core;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.wst.server.core.IServer;
/**
* A publish listener is used to listen for publishing events from a server.
* The events are typically received in the following order:
@@ -26,6 +25,7 @@
* Publish listeners are added to a server via IServer.addPublishListener().
* </p>
* @see IServer
+ * @since 1.0
*/
public interface IPublishListener {
/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java
index 6a7cf67..071df81 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java
@@ -70,13 +70,8 @@
/**
* An operation listener is used to receive notification back about a
* specific server operation, such as starting or stopping a server.
- *
- * <b>Provisional API:</b> This class/interface is part of an interim API
- * that is still under development and expected to change significantly
- * before reaching stability. It is being made available at this early
- * stage to solicit feedback from pioneering adopters on the understanding
- * that any code that uses this API will almost certainly be broken
- * (repeatedly) as the API evolves.
+ *
+ * @since 1.0
*/
public interface IOperationListener {
/**
@@ -264,6 +259,24 @@
public void removeServerListener(IServerListener listener);
/**
+ * Adds a publish listener to this server.
+ * Has no effect if an identical listener is already registered.
+ *
+ * @param listener the publish listener
+ * @see #removePublishListener(IPublishListener)
+ */
+ public void addPublishListener(IPublishListener listener);
+
+ /**
+ * Removes a publish listener from this server.
+ * Has no effect if the listener is not registered.
+ *
+ * @param listener the publish listener
+ * @see #addPublishListener(IPublishListener)
+ */
+ public void removePublishListener(IPublishListener listener);
+
+ /**
* Returns whether this server is in a state that it can
* be published to.
*
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
index 128846b..f6b9353 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
@@ -78,10 +78,10 @@
*
* @return org.eclipse.wst.server.core.internal.ResourceManager
*/
- private static ResourceManager getResourceManager() {
+ private final static ResourceManager getResourceManager() {
return ResourceManager.getInstance();
}
-
+
/**
* Returns the preference information for the project. The project may not
* be null.
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 432928f..00506fa 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
@@ -267,6 +267,8 @@
/**
* Returns a list of id (String) of preferred publish operations that will not be run
* during publish.
+ *
+ * @return a list of publish operation ids
*/
public List getDisabledPreferredPublishOperationIds() {
return getAttribute(PROP_DISABLED_PERFERRED_TASKS, EMPTY_LIST);
@@ -275,6 +277,8 @@
/**
* Returns a list of id (String) of optional publish operations that are enabled to
* be run during publish.
+ *
+ * @return a list of publish operation ids
*/
public List getEnabledOptionalPublishOperationIds() {
return getAttribute(PROP_ENABLED_OPTIONAL_TASKS, EMPTY_LIST);
@@ -288,7 +292,7 @@
public int getServerState() {
return serverState;
}
-
+
public String getMode() {
return mode;
}
@@ -300,7 +304,7 @@
this.serverState = state;
fireServerStateChangeEvent();
}
-
+
/**
* Add a listener to this server.
*
@@ -312,7 +316,7 @@
Trace.trace(Trace.LISTENERS, "Adding server listener " + listener + " to " + this);
getServerNotificationManager().addListener(listener);
}
-
+
/**
* Add a listener to this server with the given event mask.
*
@@ -395,13 +399,13 @@
moduleState.put(getKey(module), in);
fireServerModuleStateChangeEvent(module);
}
-
+
public void setModulePublishState(IModule[] module, int state) {
if (module == null)
throw new IllegalArgumentException("Module cannot be null");
Integer in = new Integer(state);
modulePublishState.put(getKey(module), in);
- //fireServerModuleStateChangeEvent(module);
+ fireServerModuleStateChangeEvent(module);
}
public void setModuleRestartState(IModule[] module, boolean r) {
@@ -409,7 +413,7 @@
throw new IllegalArgumentException("Module cannot be null");
Boolean b = new Boolean(r);
moduleState.put(getKey(module), b);
- //fireServerModuleStateChangeEvent(module);
+ fireServerModuleStateChangeEvent(module);
}
protected void handleModuleProjectChange(final IModule module) {
@@ -513,7 +517,7 @@
if (state == serverSyncState)
return;
serverSyncState = state;
- //fireConfigurationSyncStateChangeEvent();
+ firePublishStateChange();
}
/**
@@ -604,6 +608,20 @@
/**
* Fire a publish state change event.
*/
+ protected void firePublishStateChange() {
+ Trace.trace(Trace.FINEST, "->- Firing publish state change event ->-");
+
+ if (notificationManager == null || notificationManager.hasListenerEntries())
+ return;
+
+ notificationManager.broadcastChange(
+ new ServerEvent(ServerEvent.SERVER_CHANGE | ServerEvent.PUBLISH_STATE_CHANGE, this, getServerState(),
+ getServerPublishState(), getServerRestartState()));
+ }
+
+ /**
+ * Fire a publish state change event.
+ */
protected void firePublishStateChange(IModule[] module) {
Trace.trace(Trace.FINEST, "->- Firing publish state change event: " + module + " ->-");
@@ -777,18 +795,23 @@
/**
* Returns all publish tasks that have been targetted to this server.
+ *
+ * @param moduleList a list of modules
+ * @return an array of publish operations
*/
public PublishOperation[] getAllTasks(List moduleList) {
String serverTypeId = getServerType().getId();
+ if (serverTypeId == null)
+ return new PublishOperation[0];
+
List tasks = new ArrayList();
-
- // server tasks
+
IPublishTask[] publishTasks = ServerPlugin.getPublishTasks();
if (publishTasks != null) {
int size = publishTasks.length;
for (int i = 0; i < size; i++) {
IPublishTask task = publishTasks[i];
- if (serverTypeId != null && task.supportsType(serverTypeId)) {
+ if (task.supportsType(serverTypeId)) {
PublishOperation[] tasks2 = task.getTasks(this, modules);
tasks.addAll(Arrays.asList(tasks2));
}
@@ -796,7 +819,7 @@
}
Collections.sort(tasks, PUBLISH_OPERATION_COMPARTOR);
-
+
return (PublishOperation[])tasks.toArray(new PublishOperation[tasks.size()]);
}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
index 3b40a98..2fbf188 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
@@ -176,6 +176,7 @@
/**
* Disable the preferred publish operation.
*
+ * @param op a publish operation
* @return true if change is made.
*/
public boolean disablePreferredPublishOperations(PublishOperation op) {
@@ -187,13 +188,14 @@
if (list.contains(opId))
return false;
list.add(opId);
- setAttribute(PROP_DISABLED_PERFERRED_TASKS, (List)list);
+ setAttribute(PROP_DISABLED_PERFERRED_TASKS, list);
return true;
}
/**
* Enable the optional publish operation. Optional publish operation is not ran by default.
*
+ * @param op a publish operation
* @return true if change is made.
*/
public boolean enableOptionalPublishOperations(PublishOperation op) {
@@ -205,7 +207,7 @@
if (list.contains(opId))
return false;
list.add(opId);
- setAttribute(PROP_ENABLED_OPTIONAL_TASKS, (List)list);
+ setAttribute(PROP_ENABLED_OPTIONAL_TASKS, list);
return true;
}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishAdapter.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishAdapter.java
similarity index 76%
rename from plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishAdapter.java
rename to plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishAdapter.java
index 25e72a0..276467b 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishAdapter.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishAdapter.java
@@ -8,21 +8,29 @@
* Contributors:
* IBM Corporation - Initial API and implementation
*******************************************************************************/
-package org.eclipse.wst.server.core.internal;
+package org.eclipse.wst.server.core.util;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.wst.server.core.IPublishListener;
import org.eclipse.wst.server.core.IServer;
/**
* Helper class which implements the IPublishListener interface
* with empty methods.
*
- * @see org.eclipse.wst.server.core.internal.IPublishListener
+ * @see org.eclipse.wst.server.core.IPublishListener
+ * @since 1.0
*/
public class PublishAdapter implements IPublishListener {
+ /**
+ * @see IPublishListener#publishStarted(IServer)
+ */
public void publishStarted(IServer server) {
// do nothing
}
+ /**
+ * @see IPublishListener#publishFinished(IServer, IStatus)
+ */
public void publishFinished(IServer server, IStatus status) {
// do nothing
}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
index ebce850..8abfb27 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
@@ -25,6 +25,7 @@
import org.eclipse.wst.server.core.*;
import org.eclipse.wst.server.core.internal.*;
+import org.eclipse.wst.server.core.util.PublishAdapter;
import org.eclipse.wst.server.ui.ServerUIUtil;
import org.eclipse.wst.server.ui.internal.actions.RunOnServerActionDelegate;
import org.eclipse.wst.server.ui.internal.editor.IServerEditorInput;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Startup.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Startup.java
index 0f2cd25..066ada6 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Startup.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Startup.java
@@ -13,10 +13,9 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.IPublishListener;
import org.eclipse.wst.server.core.internal.IStartup;
-import org.eclipse.wst.server.core.internal.PublishAdapter;
import org.eclipse.wst.server.core.internal.Server;
+import org.eclipse.wst.server.core.util.PublishAdapter;
import org.eclipse.wst.server.ui.internal.audio.Audio;
/**
*
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java
index dbb5dc5..9eedbce 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java
@@ -17,9 +17,8 @@
import org.eclipse.jface.viewers.*;
import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.IPublishListener;
-import org.eclipse.wst.server.core.internal.PublishAdapter;
import org.eclipse.wst.server.core.internal.Server;
+import org.eclipse.wst.server.core.util.PublishAdapter;
import org.eclipse.wst.server.ui.internal.Trace;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.widgets.Display;