[386718] Fix propagation of server change events Patch by Vasili Gulevich <vasili.gulevich@xored.com>" Change-Id: I26303a98d9016b0315a01d6cd5f0fda9ffc82fa4 Signed-off-by: Daniel Johnson <danijoh2@cisco.com>
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerEvent.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerEvent.java index ac71a4b..616c788 100644 --- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerEvent.java +++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerEvent.java
@@ -77,6 +77,13 @@ * @see #getKind() */ public static final int MODULE_CHANGE = 0x0020; + + /** + * For event on server saves. + * + * @see #getKind() + * **/ + public static final int ATTRIBUTE_CHANGE = 0x0040; /** * Create a new server event for server change events.
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 940f0ef..0e81122 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
@@ -772,7 +772,7 @@ return; notificationManager.broadcastChange( - new ServerEvent(ServerEvent.SERVER_CHANGE, this, getServerState(), + new ServerEvent(ServerEvent.SERVER_CHANGE | ServerEvent.ATTRIBUTE_CHANGE, this, getServerState(), getServerPublishState(), getServerRestartState())); }
diff --git a/tests/org.eclipse.wst.server.core.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.wst.server.core.tests/META-INF/MANIFEST.MF index d2515a8..c4cf3e8 100644 --- a/tests/org.eclipse.wst.server.core.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.wst.server.core.tests/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: org.eclipse.wst.server.core.tests -Bundle-SymbolicName: org.eclipse.wst.server.core.tests +Bundle-SymbolicName: org.eclipse.wst.server.core.tests;singleton:=true Bundle-Version: 1.1.200.qualifier Bundle-ClassPath: servertests.jar Bundle-Activator: org.eclipse.wst.server.core.tests.TestsPlugin
diff --git a/tests/org.eclipse.wst.server.core.tests/build.properties b/tests/org.eclipse.wst.server.core.tests/build.properties index 0754108..ff5985f 100644 --- a/tests/org.eclipse.wst.server.core.tests/build.properties +++ b/tests/org.eclipse.wst.server.core.tests/build.properties
@@ -15,4 +15,5 @@ bin.includes = servertests.jar,\ test.xml,\ META-INF/,\ - about.html + about.html,\ + plugin.xml
diff --git a/tests/org.eclipse.wst.server.core.tests/plugin.xml b/tests/org.eclipse.wst.server.core.tests/plugin.xml new file mode 100644 index 0000000..60d79b4 --- /dev/null +++ b/tests/org.eclipse.wst.server.core.tests/plugin.xml
@@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?eclipse version="3.4"?> +<plugin> + <extension + point="org.eclipse.wst.server.core.serverTypes"> + <serverType + class="org.eclipse.wst.server.core.tests.internal.EmptyDelegate" + description="Server type without extensions" + id="org.eclipse.wst.server.core.tests.empty" + name="Empty server type" + runtimeTypeId="org.eclipse.wst.server.core.tests.serverType1"> + </serverType> + </extension> + +</plugin>
diff --git a/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/AllTests.java b/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/AllTests.java index e853f5e..64b0e3a 100644 --- a/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/AllTests.java +++ b/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/AllTests.java
@@ -78,6 +78,7 @@ suite.addTestSuite(PublishListenerTestCase.class); suite.addTestSuite(ServerListenerTestCase.class); suite.addTestSuite(ServerEventTestCase.class); + suite.addTestSuite(ServerTestCase.class); suite.addTestSuite(ClientDelegateTestCase.class); suite.addTestSuite(RuntimeLocatorDelegateTestCase.class);
diff --git a/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/ServerTestCase.java b/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/ServerTestCase.java new file mode 100644 index 0000000..9cd3ac8 --- /dev/null +++ b/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/ServerTestCase.java
@@ -0,0 +1,35 @@ +package org.eclipse.wst.server.core.tests; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.wst.server.core.IServer; +import org.eclipse.wst.server.core.IServerListener; +import org.eclipse.wst.server.core.IServerType; +import org.eclipse.wst.server.core.IServerWorkingCopy; +import org.eclipse.wst.server.core.ServerCore; +import org.eclipse.wst.server.core.ServerEvent; + +import junit.framework.TestCase; + +public class ServerTestCase extends TestCase { + public void testServerChangeNotification() throws CoreException { + IServerType type = ServerCore.findServerType("org.eclipse.wst.server.core.tests.empty"); + IServerWorkingCopy workingCopy = type.createServer("test_server", null, null); + IServer saved = workingCopy.saveAll(true, null); + class Listener implements IServerListener { + public volatile boolean hit = false; + public void serverChanged(ServerEvent event) { + hit = true; + } + } + + Listener listener1 = new Listener(); + Listener listener2 = new Listener(); + saved.addServerListener(listener1); + saved.addServerListener(listener2, ServerEvent.SERVER_CHANGE | ServerEvent.ATTRIBUTE_CHANGE); + workingCopy = saved.createWorkingCopy(); + workingCopy.setHost("host"); + workingCopy.saveAll(true, null); + assertTrue(listener1.hit); + assertTrue(listener2.hit); + } +}
diff --git a/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/internal/EmptyDelegate.java b/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/internal/EmptyDelegate.java new file mode 100644 index 0000000..499e277 --- /dev/null +++ b/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/internal/EmptyDelegate.java
@@ -0,0 +1,38 @@ +package org.eclipse.wst.server.core.tests.internal; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.wst.server.core.IModule; +import org.eclipse.wst.server.core.model.ServerDelegate; + +final class EmptyDelegate extends ServerDelegate { + + public EmptyDelegate() { + } + + @Override + public IStatus canModifyModules(IModule[] add, IModule[] remove) { + return new Status(IStatus.ERROR, "org.eclipse.wst.server.core.tests", "No modifications are allowed on this dummy server"); + } + + @Override + public IModule[] getChildModules(IModule[] module) { + return new IModule[0]; + } + + @Override + public IModule[] getRootModules(IModule module) throws CoreException { + return new IModule[0]; + } + + /** Should not be called + * @see {@link #canModifyModules(IModule[], IModule[])} + **/ + @Override + public void modifyModules(IModule[] add, IModule[] remove, IProgressMonitor monitor) throws CoreException { + throw new CoreException(canModifyModules(add, remove)); + } + +}