[258649] ServersView2: When switching modes the server state doesn't update
diff --git a/plugins/org.eclipse.wst.server.ui/plugin.xml b/plugins/org.eclipse.wst.server.ui/plugin.xml index 0a67a19..1127a86 100644 --- a/plugins/org.eclipse.wst.server.ui/plugin.xml +++ b/plugins/org.eclipse.wst.server.ui/plugin.xml
@@ -44,7 +44,8 @@ class="org.eclipse.wst.server.ui.internal.cnf.ServersView2" icon="icons/cview16/servers_view.gif" id="org.eclipse.wst.server.ui.ServersView" - name="%viewServers"/> + name="%viewServers"> + </view> </extension> <extension point="org.eclipse.ui.navigator.navigatorContent"> @@ -89,6 +90,13 @@ </contentExtension> </includes> </viewerContentBinding> + <viewer viewerId="org.eclipse.wst.server.ui.ServersView"> + <options> + <property name="org.eclipse.ui.navigator.hideLinkWithEditorAction" + value="true"> + </property> + </options> + </viewer> </extension> <extension point="org.eclipse.ui.perspectiveExtensions">
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerContentProvider.java index 4f7e162..5f463e8 100644 --- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerContentProvider.java +++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerContentProvider.java
@@ -12,46 +12,23 @@ import java.util.*; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jface.viewers.*; -import org.eclipse.swt.widgets.Display; -import org.eclipse.wst.server.core.*; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.wst.server.core.IModule; +import org.eclipse.wst.server.core.IServer; +import org.eclipse.wst.server.core.ServerCore; import org.eclipse.wst.server.core.internal.Server; -import org.eclipse.wst.server.core.internal.UpdateServerJob; -import org.eclipse.wst.server.core.util.PublishAdapter; -import org.eclipse.wst.server.ui.internal.Messages; -import org.eclipse.wst.server.ui.internal.Trace; import org.eclipse.wst.server.ui.internal.view.servers.ModuleServer; import org.eclipse.wst.server.ui.internal.viewers.BaseContentProvider; -public class ServerContentProvider extends BaseContentProvider implements ITreeContentProvider { +public class ServerContentProvider extends BaseContentProvider implements ITreeContentProvider{ + // TODO Angel Says: Need to review if this is needed public static Object INITIALIZING = new Object(); - protected IServerLifecycleListener serverResourceListener; - protected IPublishListener publishListener; - protected IServerListener serverListener; + // TODO Angel Says: Need to review how to port this function into CNF // servers that are currently publishing and starting protected static Set<String> publishing = new HashSet<String>(4); - protected static Set<String> starting = new HashSet<String>(4); - protected boolean animationActive = false; - protected boolean stopAnimation = false; - protected boolean initialized = false; - protected StructuredViewer viewer; - - public ServerContentProvider() { - addListeners(); - } - public Object[] getElements(Object element) { - if( !initialized ) { - deferInitialization(); - return new Object[] {INITIALIZING}; - } - List<IServer> list = new ArrayList<IServer>(); IServer[] servers = ServerCore.getServers(); if (servers != null) { @@ -112,10 +89,8 @@ IModule[] curChildModule = curServer.getChildModules(curModule, null); if (curChildModule != null && curChildModule.length > 0) return true; - return false; } - return false; } if( element instanceof IServer ) { @@ -123,225 +98,4 @@ } return false; } - - public void inputChanged(Viewer aViewer, Object oldInput, Object newInput) { - viewer = (StructuredViewer) aViewer; - } - - public void dispose() { - ServerCore.removeServerLifecycleListener(serverResourceListener); - - // remove listeners from servers - IServer[] servers = ServerCore.getServers(); - if (servers != null) { - int size = servers.length; - for (int i = 0; i < size; i++) { - servers[i].removeServerListener(serverListener); - ((Server) servers[i]).removePublishListener(publishListener); - } - } - } - - // Listeners and refreshing the viewer - protected void addListeners() { - serverResourceListener = new IServerLifecycleListener() { - public void serverAdded(IServer server) { - refreshServer(null); - server.addServerListener(serverListener); - ((Server) server).addPublishListener(publishListener); - } - public void serverChanged(IServer server) { - refreshServer(server); - } - public void serverRemoved(IServer server) { - refreshServer(null); - server.removeServerListener(serverListener); - ((Server) server).removePublishListener(publishListener); - } - }; - ServerCore.addServerLifecycleListener(serverResourceListener); - - publishListener = new PublishAdapter() { - public void publishStarted(IServer server) { - handlePublishChange(server, true); - } - - public void publishFinished(IServer server, IStatus status) { - handlePublishChange(server, false); - } - }; - - serverListener = new IServerListener() { - public void serverChanged(ServerEvent event) { - if (event == null) - return; - - int eventKind = event.getKind(); - IServer server = event.getServer(); - if ((eventKind & ServerEvent.SERVER_CHANGE) != 0) { - // server change event - if ((eventKind & ServerEvent.STATE_CHANGE) != 0) { - refreshServer(server, true); - int state = event.getState(); - String id = server.getId(); - animate(id, state); - } else - refreshServer(server); - } else if ((eventKind & ServerEvent.MODULE_CHANGE) != 0) { - // module change event - if ((eventKind & ServerEvent.STATE_CHANGE) != 0 || (eventKind & ServerEvent.PUBLISH_STATE_CHANGE) != 0) { - refreshServer(server); - } - } - } - }; - - // add listeners to servers - IServer[] servers = ServerCore.getServers(); - if (servers != null) { - int size = servers.length; - for (int i = 0; i < size; i++) { - servers[i].addServerListener(serverListener); - ((Server) servers[i]).addPublishListener(publishListener); - } - } - } - - protected void animate(String serverId, int state){ - if (state == IServer.STATE_STARTING || state == IServer.STATE_STOPPING) { - boolean startThread = false; - synchronized (starting) { - if (!starting.contains(serverId)) { - if (starting.isEmpty()) - startThread = true; - starting.add(serverId); - } - } - if (startThread){ - startThread(); - } - } else { - boolean stopThread = false; - synchronized (starting) { - if (starting.contains(serverId)) { - starting.remove(serverId); - if (starting.isEmpty()) - stopThread = true; - } - } - if (stopThread) - stopThread(); - } - } - - protected void deferInitialization() { - Job job = new Job(Messages.jobInitializingServersView) { - public IStatus run(IProgressMonitor monitor) { - IServer[] servers = ServerCore.getServers(); - int size = servers.length; - for (int i = 0; i < size; i++) { - ((Server)servers[i]).getAllModules().iterator(); - } - - for (int i = 0; i < size; i++) { - IServer server = servers[i]; - if (server.getServerType() != null && server.getServerState() == IServer.STATE_UNKNOWN) { - UpdateServerJob job2 = new UpdateServerJob(server); - job2.schedule(); - } - } - initialized = true; - refreshServer(null); - return Status.OK_STATUS; - } - }; - - job.setSystem(true); - job.setPriority(Job.SHORT); - job.schedule(); - } - - protected void refreshServer(final IServer server) { - refreshServer(server, false); - } - - protected void refreshServer(final IServer server, final boolean resetSelection) { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - try { - if( viewer != null && !viewer.getControl().isDisposed()) { - // This will trigger some animation - viewer.refresh(server); - if( resetSelection ) { - ISelection sel = viewer.getSelection(); - viewer.setSelection(sel); - } - //TODO: Angel says: This doesn't seem to be needed: ServerDecorator.getDefault().redecorate(server); - } - } catch (Exception e) { - // ignore - } - } - }); - } - - protected void handlePublishChange(IServer server, boolean isPublishing) { - String serverId = server.getId(); - if (isPublishing) - publishing.add(serverId); - else - publishing.remove(serverId); - - refreshServer(server); - } - - - /** - * Start the animation thread - */ - protected void startThread() { - if (animationActive) - return; - - stopAnimation = false; - - final Display display = viewer == null ? Display.getDefault() : viewer.getControl().getDisplay(); - final int SLEEP = 200; - final Runnable[] animator = new Runnable[1]; - animator[0] = new Runnable() { - public void run() { - if (!stopAnimation) { - try { - int size = 0; - String[] servers; - synchronized (starting) { - size = starting.size(); - servers = new String[size]; - starting.toArray(servers); - - } - - for (int i = 0; i < size; i++) { - IServer server = ServerCore.findServer(servers[i]); - if (server != null ) { - ServerDecorator.animate(); - viewer.update(server, new String[]{"ICON"}); - } - } - } catch (Exception e) { - Trace.trace(Trace.FINEST, "Error in Servers view animation", e); - } - display.timerExec(SLEEP, animator[0]); - } - } - }; - Display.getDefault().asyncExec(new Runnable() { - public void run() { - display.timerExec(SLEEP, animator[0]); - } - }); - } - - protected void stopThread() { - stopAnimation = true; - }} +}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerLabelProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerLabelProvider.java index a7f17a3..b0a69be 100644 --- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerLabelProvider.java +++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerLabelProvider.java
@@ -29,6 +29,7 @@ */ public ServerLabelProvider() { super(); + //TODO: Angel says: Look at bug# 258184 } public String getText(Object element) { @@ -62,7 +63,7 @@ IServer server = (IServer) element; if (server.getServerType() != null) { image = ImageResource.getImage(server.getServerType().getId()); - // TODO Angel says: Need to discuss about it + // TODO Angel says: Need to fix this // Because we are now grabbing the ServerState the type will not show. It might be best to create a new icon for the state ImageDescriptor imgDescriptor = ServerDecorator.getServerStateImage(server); if (image != null && imgDescriptor != null){
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java index 1160d99..112fed8 100644 --- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java +++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
@@ -22,7 +22,6 @@ import org.eclipse.jface.action.*; import org.eclipse.jface.bindings.TriggerSequence; import org.eclipse.jface.viewers.*; -import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.*; @@ -53,6 +52,7 @@ // dummy action }; + protected IServerLifecycleListener serverResourceListener; protected IPublishListener publishListener; protected IServerListener serverListener; @@ -79,16 +79,13 @@ @Override public void createPartControl(Composite parent) { clipboard = new Clipboard(Display.getCurrent()); - super.createPartControl(parent); - deferInitialization(); } private void deferInitialization() { - TreeItem item = new TreeItem(getCommonViewer().getTree(), SWT.NONE); - item.setText(Messages.viewInitializing); - + // TODO Angel Says: Need to do a final check on this line below. I don't think there is anything else + // that we need from to port from the old Servers View //initializeActions(getCommonViewer()); Job job = new Job(Messages.jobInitializingServersView) { @@ -119,8 +116,6 @@ } protected void deferredInitialize() { - // TODO Angel says: What to do here? - //tableViewer.initialize(); addListener(); // TODO Angel says: is this the best place for this? @@ -184,15 +179,64 @@ else publishing.remove(serverId); - refreshServer(server); + refreshServerState(server); } - protected void refreshServer(IServer server){ - tableViewer.refresh(server); + /** + * @deprecated + * @param server + */ + protected void refreshServer(final IServer server){ + Trace.trace(Trace.FINEST, "Refreshing UI for server="+server); + Display.getDefault().asyncExec(new Runnable() { + public void run() { + IDecoratorManager dm = PlatformUI.getWorkbench().getDecoratorManager(); + dm.update("org.eclipse.wst.server.ui.navigatorDecorator"); + tableViewer.setSelection(tableViewer.getSelection()); + } + }); + } + + protected void refreshServerContent(final IServer server){ + Trace.trace(Trace.FINEST, "Refreshing Content for server="+server); + Display.getDefault().asyncExec(new Runnable() { + public void run() { + tableViewer.refresh(server, true); + } + }); + } + + protected void refreshServerState(final IServer server){ + Trace.trace(Trace.FINEST, "Refreshing UI for server="+server); + Display.getDefault().asyncExec(new Runnable() { + public void run() { + IDecoratorManager dm = PlatformUI.getWorkbench().getDecoratorManager(); + dm.update("org.eclipse.wst.server.ui.navigatorDecorator"); + tableViewer.setSelection(tableViewer.getSelection()); + } + }); } protected void addListener(){ + // To enable the UI updating of servers and its childrens + serverResourceListener = new IServerLifecycleListener() { + public void serverAdded(IServer server) { + addServer(server); + server.addServerListener(serverListener); + ((Server) server).addPublishListener(publishListener); + } + public void serverChanged(IServer server) { + refreshServerContent(server); + } + public void serverRemoved(IServer server) { + removeServer(server); + server.removeServerListener(serverListener); + ((Server) server).removePublishListener(publishListener); + } + }; + ServerCore.addServerLifecycleListener(serverResourceListener); + // To enable the refresh of the State decorator publishListener = new PublishAdapter() { public void publishStarted(IServer server) { handlePublishChange(server, true); @@ -207,13 +251,12 @@ public void serverChanged(ServerEvent event) { if (event == null) return; - + int eventKind = event.getKind(); IServer server = event.getServer(); if ((eventKind & ServerEvent.SERVER_CHANGE) != 0) { // server change event if ((eventKind & ServerEvent.STATE_CHANGE) != 0) { - refreshServer(server); int state = event.getState(); String id = server.getId(); if (state == IServer.STATE_STARTING || state == IServer.STATE_STOPPING) { @@ -239,14 +282,16 @@ if (stopThread) stopThread(); } - } else - refreshServer(server); + refreshServerState(server); + } } else if ((eventKind & ServerEvent.MODULE_CHANGE) != 0) { // module change event if ((eventKind & ServerEvent.STATE_CHANGE) != 0 || (eventKind & ServerEvent.PUBLISH_STATE_CHANGE) != 0) { - refreshServer(server); + refreshServerContent(server); } } + // TODO Angel Says: I don't think we need this + //refreshServer(server); } }; @@ -440,7 +485,6 @@ cm.add(actions[i]); cm.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - return super.createCommonActionGroup(); } @@ -458,6 +502,38 @@ } } + protected void addServer(final IServer server) { + Display.getDefault().asyncExec(new Runnable() { + public void run() { + tableViewer.add(tableViewer.getInput(), server); + } + }); + } + + protected void removeServer(final IServer server) { + Display.getDefault().asyncExec(new Runnable() { + public void run() { + tableViewer.remove(server); + } + }); + } + + @Override + public void dispose() { + ServerCore.removeServerLifecycleListener(serverResourceListener); + + // remove listeners from servers + IServer[] servers = ServerCore.getServers(); + if (servers != null) { + int size = servers.length; + for (int i = 0; i < size; i++) { + servers[i].removeServerListener(serverListener); + ((Server) servers[i]).removePublishListener(publishListener); + } + } + super.dispose(); + } + /** * Start the animation thread */