Index: plugin.properties =================================================================== RCS file: /cvsroot/webtools/servertools/plugins/org.eclipse.wst.server.ui/plugin.properties,v retrieving revision 1.39 diff -u -r1.39 plugin.properties --- plugin.properties 26 Feb 2008 19:52:39 -0000 1.39 +++ plugin.properties 3 Nov 2008 19:27:44 -0000 @@ -27,6 +27,7 @@ newServerDescription=Define a new server viewServers=Servers +viewServers_new=Servers (proposed) # --------------- Action Sets (toolbar icon groups) --------------- Index: plugin.xml =================================================================== RCS file: /cvsroot/webtools/servertools/plugins/org.eclipse.wst.server.ui/plugin.xml,v retrieving revision 1.47 diff -u -r1.47 plugin.xml --- plugin.xml 16 Apr 2008 16:33:31 -0000 1.47 +++ plugin.xml 3 Nov 2008 19:27:44 -0000 @@ -37,6 +37,61 @@ category="org.eclipse.wst.server.ui" class="org.eclipse.wst.server.ui.internal.view.servers.ServersView" icon="icons/cview16/servers_view.gif"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -503,5 +558,26 @@ id="org.eclipse.wst.server.ui.launchable.adapter.default" priority="-999999"/> + + + + + + + + + + + + Index: .options =================================================================== RCS file: /cvsroot/webtools/servertools/plugins/org.eclipse.wst.server.ui/.options,v retrieving revision 1.3 diff -u -r1.3 .options --- .options 14 Aug 2006 03:18:48 -0000 1.3 +++ .options 3 Nov 2008 19:27:44 -0000 @@ -7,4 +7,4 @@ org.eclipse.wst.server.ui/extension_point=false # Performance of loading and calling delegates -org.eclipse.wst.server.ui/performance=false \ No newline at end of file +org.eclipse.wst.server.ui/performance=false Index: META-INF/MANIFEST.MF =================================================================== RCS file: /cvsroot/webtools/servertools/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF,v retrieving revision 1.34 diff -u -r1.34 MANIFEST.MF --- META-INF/MANIFEST.MF 7 Oct 2008 14:01:07 -0000 1.34 +++ META-INF/MANIFEST.MF 3 Nov 2008 19:27:44 -0000 @@ -44,6 +44,7 @@ org.eclipse.wst.internet.monitor.core;bundle-version="[1.0.103,2.0.0)", org.eclipse.update.core;bundle-version="[3.2.0,4.0.0)";resolution:=optional, org.eclipse.jface.text;bundle-version="[3.4.0,4.0.0)", - org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,2.0.0)";resolution:=optional + org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,2.0.0)";resolution:=optional, + org.eclipse.ui.navigator;bundle-version="3.3.100" Bundle-ActivationPolicy: lazy;exclude:="org.eclipse.wst.server.ui.internal.webbrowser" Bundle-RequiredExecutionEnvironment: J2SE-1.5 Index: serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableLabelProvider.java =================================================================== RCS file: /cvsroot/webtools/servertools/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableLabelProvider.java,v retrieving revision 1.24 diff -u -r1.24 ServerTableLabelProvider.java --- serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableLabelProvider.java 24 Mar 2008 14:37:53 -0000 1.24 +++ serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableLabelProvider.java 3 Nov 2008 19:27:44 -0000 @@ -10,47 +10,17 @@ *******************************************************************************/ package org.eclipse.wst.server.ui.internal.view.servers; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.swt.graphics.Image; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.wst.server.core.IServer; -import org.eclipse.wst.server.core.IServerType; -import org.eclipse.wst.server.core.internal.Server; -import org.eclipse.wst.server.ui.ServerUICore; -import org.eclipse.wst.server.ui.internal.ImageResource; -import org.eclipse.wst.server.ui.internal.Messages; -import org.eclipse.wst.server.ui.internal.ServerUIPlugin; -import org.eclipse.wst.server.ui.internal.provisional.UIDecoratorManager; +import org.eclipse.wst.server.ui.internal.view.servers.provisional.ServerDecorator; import org.eclipse.wst.server.ui.internal.viewers.BaseCellLabelProvider; import org.eclipse.wst.server.ui.internal.viewers.ServerTreeContentProvider; -import org.eclipse.swt.graphics.Image; /** * Server table label provider. */ public class ServerTableLabelProvider extends BaseCellLabelProvider { - public static final String[] syncState = new String[] { - Messages.viewSyncOkay, - Messages.viewSyncRestart, - Messages.viewSyncPublish, - Messages.viewSyncRestartPublish, - Messages.viewSyncPublishing}; - - public static final String[] syncStateUnmanaged = new String[] { - Messages.viewSyncOkay2, - Messages.viewSyncRestart2, - Messages.viewSyncPublish2, - Messages.viewSyncRestartPublish2, - Messages.viewSyncPublishing2}; - - private static final String[] modulePublishState = new String[] { - "", - Messages.viewSyncOkay, - Messages.viewSyncPublish, - Messages.viewSyncPublish}; - - private int count = 0; - protected IServer defaultServer; /** @@ -60,14 +30,6 @@ super(); } - public void setDefaultServer(IServer ds) { - defaultServer = ds; - } - - public IServer getDefaultServer() { - return defaultServer; - } - public Image getColumnImage(Object element, int columnIndex) { if (element instanceof ServerTreeContentProvider.TreeElement) { if (columnIndex == 0) { @@ -79,67 +41,19 @@ if (element instanceof ModuleServer) { ModuleServer ms = (ModuleServer) element; if (columnIndex == 0) { - //return ServerUICore.getLabelProvider().getImage(ms.module[ms.module.length - 1]); - ILabelProvider labelProvider = ServerUICore.getLabelProvider(); - Image image = labelProvider.getImage(ms.module[ms.module.length - 1]); - labelProvider.dispose(); - if (decorator != null) { - Image dec = decorator.decorateImage(image, ms); - if (dec != null) - return dec; - } - return image; + return ServerDecorator.getModuleImage(ms); } else if (columnIndex == 1) { - if (ms.server == null) - return null; - - /*int state = ms.server.getModuleState(ms.module); - if (state == IServer.STATE_STARTED) - return ImageResource.getImage(ImageResource.IMG_STATE_STARTED); - else if (state == IServer.STATE_STOPPED) - return ImageResource.getImage(ImageResource.IMG_STATE_STOPPED); - */ - return getStateImage(ms.server.getServerType(), ms.server.getModuleState(ms.module), null); + return ServerDecorator.getStateImage(ms.server.getServerType(), ms.server.getModuleState(ms.module), null); } else if (columnIndex == 2) { - IStatus status = ((Server) ms.server).getModuleStatus(ms.module); - if (status != null) { - ISharedImages sharedImages = ServerUIPlugin.getInstance().getWorkbench().getSharedImages(); - if (status.getSeverity() == IStatus.ERROR) - return sharedImages.getImage(ISharedImages.IMG_OBJS_ERROR_TSK); - else if (status.getSeverity() == IStatus.WARNING) - return sharedImages.getImage(ISharedImages.IMG_OBJS_WARN_TSK); - else if (status.getSeverity() == IStatus.INFO) - return sharedImages.getImage(ISharedImages.IMG_OBJS_INFO_TSK); - } + return ServerDecorator.getModuleStatusImage(ms); } return null; } IServer server = (IServer) element; if (columnIndex == 0) { - if (server.getServerType() != null) { - Image image = ImageResource.getImage(server.getServerType().getId()); - /*IStatus status = ((Server) server).getServerStatus(); - if (defaultServer != null && defaultServer.equals(server) || status != null) { - Image decorated = decorator.decorateImage(image, element); - if (decorated != null) - return decorated; - }*/ - //return image; - if (decorator != null) { - Image dec = decorator.decorateImage(image, server); - if (dec != null) - return dec; - } - return image; - } - return null; + return ServerDecorator.getServerImage(server); } else if (columnIndex == 1) { - IServerType serverType = server.getServerType(); - if (serverType == null) - return null; - //if (serverType.getServerStateSet() == IServerType.SERVER_STATE_SET_PUBLISHED) - // return null; - return getServerStateImage(server); + return ServerDecorator.getServerStateImage(server); } else return null; } @@ -157,72 +71,22 @@ if (element instanceof ModuleServer) { ModuleServer ms = (ModuleServer) element; if (columnIndex == 0) { - if (ms.module == null) - return ""; - int size = ms.module.length; - String name = ms.module[size - 1].getName(); - if (decorator != null) { - String dec = decorator.decorateText(name, ms); - if (dec != null) - return dec; - } - return name; + return ServerDecorator.getModuleText(ms); } else if (columnIndex == 1) { - //if (ms.server == null) - // return ""; //return getStateLabel(ms.server.getServerType(), ms.server.getModuleState(ms.module), null); return ""; } else if (columnIndex == 2) { - IStatus status = ((Server) ms.server).getModuleStatus(ms.module); - if (status != null) - return status.getMessage(); - - return modulePublishState[ms.server.getModulePublishState(ms.module)]; + return ServerDecorator.getModuleStatusText(ms); } } + IServer server = (IServer) element; if (columnIndex == 0) return notNull(server.getName()); else if (columnIndex == 1) { - IServerType serverType = server.getServerType(); - if (serverType != null) - return getServerStateLabel(server); - - return ""; + return ServerDecorator.getServerStateLabel(server); } else if (columnIndex == 2) { - IStatus status = ((Server) server).getServerStatus(); - if (status != null) - return status.getMessage(); - - if (server.getServerType() == null) - return ""; - - //if (server.getServerType().hasServerConfiguration() && server.getServerConfiguration() == null) - // return Messages.viewNoConfiguration"); - - if (server.getServerState() == IServer.STATE_UNKNOWN) - return ""; - - String serverId = server.getId(); - if (ServerTableViewer.publishing.contains(serverId)) - return syncState[4]; - - // republish - int i = 0; - if (server.shouldPublish()) { - if (((Server)server).isPublishUnknown()) - return ""; - i += 2; - } - - if (server.shouldRestart()) - i = 1; - - //IServerType serverType = server.getServerType(); - // TODO: state set - //if (serverType.getServerStateSet() == IServerType.SERVER_STATE_SET_MANAGED) - return syncState[i]; - //return syncStateUnmanaged[i]; + return ServerDecorator.getServerStatusLabel(server); } else return "-"; } @@ -237,86 +101,4 @@ return false; } - /** - * Returns an image representing the server's state. - * - * @return org.eclipse.jface.parts.IImage - * @param server org.eclipse.wst.server.core.IServer - */ - protected Image getServerStateImage(IServer server) { - return getStateImage(server.getServerType(), server.getServerState(), server.getMode()); - } - - /** - * Returns an image representing the given state. - * - * @return org.eclipse.jface.parts.IImage - */ - protected Image getStateImage(IServerType serverType, int state, String mode) { - return UIDecoratorManager.getUIDecorator(serverType).getStateImage(state, mode, count); - /*if (state == IServer.STATE_UNKNOWN) - return null; - else if (state == IServer.STATE_STARTING) - return startingImages[count]; - else if (state == IServer.STATE_STOPPING) - return stoppingImages[count]; - else if (state == IServer.STATE_STOPPED) - return ImageResource.getImage(ImageResource.IMG_SERVER_STATE_STOPPED); - else { //if (state == IServer.STATE_STARTED) { - //String mode = server.getMode(); - if (ILaunchManager.DEBUG_MODE.equals(mode)) - return ImageResource.getImage(ImageResource.IMG_SERVER_STATE_STARTED_DEBUG); - else if (ILaunchManager.PROFILE_MODE.equals(mode)) - return ImageResource.getImage(ImageResource.IMG_SERVER_STATE_STARTED_PROFILE); - else - return ImageResource.getImage(ImageResource.IMG_SERVER_STATE_STARTED); - }*/ - } - - /** - * Returns a string representing the server's state. - * - * @return java.lang.String - * @param server org.eclipse.wst.server.core.IServer - */ - protected String getServerStateLabel(IServer server) { - return getStateLabel(server.getServerType(), server.getServerState(), server.getMode()); - } - - /** - * Returns a string representing the given state. - * - * @return java.lang.String - */ - protected String getStateLabel(IServerType serverType, int state, String mode) { - return UIDecoratorManager.getUIDecorator(serverType).getStateLabel(state, mode, count); - /*if (stateSet == IServerType.SERVER_STATE_SET_PUBLISHED) - return ""; - - if (stateSet == IServerType.SERVER_STATE_SET_MANAGED) { - if (state == IServer.STATE_UNKNOWN) - return ""; - else if (state == IServer.STATE_STARTING) - return startingText[count]; - else if (state == IServer.STATE_STOPPING) - return stoppingText[count]; - else if (state == IServer.STATE_STARTED) { - if (ILaunchManager.DEBUG_MODE.equals(mode)) - return Messages.viewStatusStartedDebug"); - else if (ILaunchManager.PROFILE_MODE.equals(mode)) - return Messages.viewStatusStartedProfile"); - else - return Messages.viewStatusStarted"); - } else if (state == IServer.STATE_STOPPED) - return Messages.viewStatusStopped"); - } - - return serverStateUnmanaged[state];*/ - } - - protected void animate() { - count ++; - if (count > 2) - count = 0; - } } \ No newline at end of file Index: serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java =================================================================== RCS file: /cvsroot/webtools/servertools/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java,v retrieving revision 1.42 diff -u -r1.42 ServerTableViewer.java --- serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java 14 Apr 2008 14:08:59 -0000 1.42 +++ serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java 3 Nov 2008 19:27:44 -0000 @@ -10,34 +10,26 @@ *******************************************************************************/ package org.eclipse.wst.server.ui.internal.view.servers; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; +import java.util.*; import java.util.List; -import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.viewers.*; - -import org.eclipse.wst.server.core.*; -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.wst.server.ui.internal.viewers.BaseContentProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Item; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeColumn; -import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.swt.widgets.Widget; +import org.eclipse.swt.widgets.*; import org.eclipse.ui.PlatformUI; +import org.eclipse.wst.server.core.*; +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.wst.server.ui.internal.view.servers.provisional.ServerDecorator; +import org.eclipse.wst.server.ui.internal.viewers.BaseContentProvider; /** * Tree view showing servers and their associations. */ @@ -152,7 +144,7 @@ public void run() { if (!stopAnimation) { try { - labelProvider.animate(); + ServerDecorator.animate(); int size = 0; String[] servers; Index: serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerLabelProvider.java =================================================================== RCS file: serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerLabelProvider.java diff -N serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerLabelProvider.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerLabelProvider.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,78 @@ +/******************************************************************************* + * Copyright (c) 2003, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - Initial API and implementation + *******************************************************************************/ +package org.eclipse.wst.server.ui.internal.view.servers.provisional; + +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.swt.graphics.Image; +import org.eclipse.wst.server.core.IServer; +import org.eclipse.wst.server.ui.ServerUICore; +import org.eclipse.wst.server.ui.internal.ImageResource; +import org.eclipse.wst.server.ui.internal.Messages; +import org.eclipse.wst.server.ui.internal.view.servers.ModuleServer; +/** + * Server table label provider. + */ +public class ServerLabelProvider extends LabelProvider { + + /** + * ServerTableLabelProvider constructor comment. + */ + public ServerLabelProvider() { + super(); + } + + public String getText(Object element) { + if (element instanceof ModuleServer) { + ModuleServer ms = (ModuleServer) element; + if (ms.module == null) + return ""; + int size = ms.module.length; + String name = ms.module[size - 1].getName(); + return name; + } + + if( element instanceof IServer ) { + IServer server = (IServer) element; + return notNull(server.getName()); + } + + if( element == ServerContentProvider.INITIALIZING) + return Messages.viewInitializing; + + return "-"; + } + public Image getImage(Object element) { + Image image = null; + if (element instanceof ModuleServer) { + ModuleServer ms = (ModuleServer) element; + ILabelProvider labelProvider = ServerUICore.getLabelProvider(); + image = labelProvider.getImage(ms.module[ms.module.length - 1]); + labelProvider.dispose(); + } else if( element instanceof IServer ) { + IServer server = (IServer) element; + if (server.getServerType() != null) { + image = ImageResource.getImage(server.getServerType().getId()); + } + } + return image; + } + + protected String notNull(String s) { + if (s == null) + return ""; + return s; + } + + public boolean isLabelProperty(Object element, String property) { + return false; + } +} Index: serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerDecorator.java =================================================================== RCS file: serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerDecorator.java diff -N serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerDecorator.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerDecorator.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,196 @@ +package org.eclipse.wst.server.ui.internal.view.servers.provisional; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.jface.viewers.IDecoration; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ILightweightLabelDecorator; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.LabelProviderChangedEvent; +import org.eclipse.swt.graphics.Image; +import org.eclipse.ui.ISharedImages; +import org.eclipse.wst.server.core.IServer; +import org.eclipse.wst.server.core.IServerType; +import org.eclipse.wst.server.core.internal.Server; +import org.eclipse.wst.server.ui.ServerUICore; +import org.eclipse.wst.server.ui.internal.ImageResource; +import org.eclipse.wst.server.ui.internal.Messages; +import org.eclipse.wst.server.ui.internal.ServerUIPlugin; +import org.eclipse.wst.server.ui.internal.provisional.UIDecoratorManager; +import org.eclipse.wst.server.ui.internal.view.servers.ModuleServer; + +public class ServerDecorator extends LabelProvider implements ILightweightLabelDecorator { + + public static final String[] syncState = new String[] { + Messages.viewSyncOkay, + Messages.viewSyncRestart, + Messages.viewSyncPublish, + Messages.viewSyncRestartPublish, + Messages.viewSyncPublishing}; + + public static final String[] syncStateUnmanaged = new String[] { + Messages.viewSyncOkay2, + Messages.viewSyncRestart2, + Messages.viewSyncPublish2, + Messages.viewSyncRestartPublish2, + Messages.viewSyncPublishing2}; + + public static final String[] modulePublishState = new String[] { + "", + Messages.viewSyncOkay, + Messages.viewSyncPublish, + Messages.viewSyncPublish}; + + private static ServerDecorator instance; + public static ServerDecorator getDefault() { + return instance; + } + + private static int count = 0; + public static void animate() { + count = (count + 1)%3; + } + public static int getCount() { + return count; + } + + public ServerDecorator() { + instance = this; + } + + public void decorate(Object element, IDecoration decoration) { + if( element instanceof IServer ) { + String state = getServerStateLabel((IServer)element); + String status = getServerStatusLabel((IServer)element); + decoration.addSuffix(combine(state, status)); + } else if( element instanceof ModuleServer ) { + String state = getModuleStateText((ModuleServer)element); + String status = getModuleStatusText((ModuleServer)element); + decoration.addSuffix(combine(state, status)); + } + } + + protected String combine(String state, String status) { + if(isEmpty(state) && isEmpty(status)) + return ""; + if( isEmpty(state)) + return " [" + status + "]"; + if( isEmpty(status)) + return " [" + state + "]"; + return " [" + state + ", " + status + "]"; + } + + protected boolean isEmpty(String s) { + return (s == null || "".equals(s)); + } + + public void redecorate(IServer server) { + fireLabelProviderChanged(new LabelProviderChangedEvent(this)); + } + + + + /* + * Utility methods + */ + public static Image getServerImage(IServer server) { + return server == null ? null : + server.getServerType() == null ? null : + ImageResource.getImage(server.getServerType().getId()); + } + + public static String getServerStateLabel(IServer server) { + return server == null ? null : + server.getServerType() == null ? null : + getStateLabel(server.getServerType(), server.getServerState(), server.getMode()); + } + + public static String getStateLabel(IServerType serverType, int state, String mode) { + return serverType == null ? null : + UIDecoratorManager.getUIDecorator(serverType).getStateLabel(state, mode, count); + } + + public static String getServerStatusLabel(IServer server) { + IStatus status = ((Server) server).getServerStatus(); + if (status != null) + return status.getMessage(); + + if (server.getServerType() == null) + return ""; + + if (server.getServerState() == IServer.STATE_UNKNOWN) + return ""; + + String serverId = server.getId(); + if (ServerContentProvider.publishing.contains(serverId)) + return ServerDecorator.syncState[4]; + + // republish + int i = 0; + if (server.shouldPublish()) { + if (((Server)server).isPublishUnknown()) + return ""; + i += 2; + } + + if (server.shouldRestart()) + i = 1; + + return syncState[i]; + } + + public static Image getServerStateImage(IServer server) { + return server == null ? null : + getStateImage(server.getServerType(), server.getServerState(), server.getMode()); + } + + public static Image getStateImage(IServerType serverType, int state, String mode) { + return serverType == null ? null : + UIDecoratorManager.getUIDecorator(serverType).getStateImage(state, mode, getCount()); + } + + public static String getModuleText(ModuleServer ms ) { + if (ms == null || ms.module == null) + return ""; + int size = ms.module.length; + return ms.module[size - 1].getName(); + } + + public static Image getModuleImage(ModuleServer ms) { + if( ms != null ) { + ILabelProvider labelProvider = ServerUICore.getLabelProvider(); + Image image = labelProvider.getImage(ms.module[ms.module.length - 1]); + labelProvider.dispose(); + return image; + } + return null; + } + + public static String getModuleStateText(ModuleServer ms) { + return ""; + } + + public static String getModuleStatusText(ModuleServer ms) { + if( ms != null && ms.server != null && ms.module != null ) { + IStatus status = ((Server) ms.server).getModuleStatus(ms.module); + if (status != null) + return status.getMessage(); + + return modulePublishState[ms.server.getModulePublishState(ms.module)]; + } + return ""; + } + + public static Image getModuleStatusImage(ModuleServer ms) { + IStatus status = ((Server) ms.server).getModuleStatus(ms.module); + if (status != null) { + ISharedImages sharedImages = ServerUIPlugin.getInstance().getWorkbench().getSharedImages(); + if (status.getSeverity() == IStatus.ERROR) + return sharedImages.getImage(ISharedImages.IMG_OBJS_ERROR_TSK); + else if (status.getSeverity() == IStatus.WARNING) + return sharedImages.getImage(ISharedImages.IMG_OBJS_WARN_TSK); + else if (status.getSeverity() == IStatus.INFO) + return sharedImages.getImage(ISharedImages.IMG_OBJS_INFO_TSK); + } + return null; + } +} Index: serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServersView.java =================================================================== RCS file: serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServersView.java diff -N serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServersView.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServersView.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,413 @@ +/******************************************************************************* + * Copyright (c) 2003, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - Initial API and implementation + *******************************************************************************/ +package org.eclipse.wst.server.ui.internal.view.servers.provisional; + +import java.util.Iterator; + +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.debug.core.ILaunchManager; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IContributionManager; +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.bindings.TriggerSequence; +import org.eclipse.jface.viewers.IOpenListener; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.OpenEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.Clipboard; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.TreeItem; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.ActionFactory; +import org.eclipse.ui.keys.IBindingService; +import org.eclipse.ui.navigator.CommonNavigator; +import org.eclipse.ui.navigator.CommonViewer; +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.ServerPort; +import org.eclipse.wst.server.core.internal.Server; +import org.eclipse.wst.server.core.internal.UpdateServerJob; +import org.eclipse.wst.server.core.model.ServerDelegate; +import org.eclipse.wst.server.ui.internal.Messages; +import org.eclipse.wst.server.ui.internal.ServerToolTip; +import org.eclipse.wst.server.ui.internal.ServerUIPlugin; +import org.eclipse.wst.server.ui.internal.Trace; +import org.eclipse.wst.server.ui.internal.actions.NewServerWizardAction; +import org.eclipse.wst.server.ui.internal.view.servers.CopyAction; +import org.eclipse.wst.server.ui.internal.view.servers.DeleteAction; +import org.eclipse.wst.server.ui.internal.view.servers.ModuleServer; +import org.eclipse.wst.server.ui.internal.view.servers.ModuleSloshAction; +import org.eclipse.wst.server.ui.internal.view.servers.MonitorServerPortAction; +import org.eclipse.wst.server.ui.internal.view.servers.OpenAction; +import org.eclipse.wst.server.ui.internal.view.servers.PasteAction; +import org.eclipse.wst.server.ui.internal.view.servers.PropertiesAction; +import org.eclipse.wst.server.ui.internal.view.servers.PublishAction; +import org.eclipse.wst.server.ui.internal.view.servers.PublishCleanAction; +import org.eclipse.wst.server.ui.internal.view.servers.RemoveModuleAction; +import org.eclipse.wst.server.ui.internal.view.servers.RenameAction; +import org.eclipse.wst.server.ui.internal.view.servers.RestartModuleAction; +import org.eclipse.wst.server.ui.internal.view.servers.ShowInConsoleAction; +import org.eclipse.wst.server.ui.internal.view.servers.ShowInDebugAction; +import org.eclipse.wst.server.ui.internal.view.servers.StartAction; +import org.eclipse.wst.server.ui.internal.view.servers.StartModuleAction; +import org.eclipse.wst.server.ui.internal.view.servers.StopAction; +import org.eclipse.wst.server.ui.internal.view.servers.StopModuleAction; +/** + * A view of servers, their modules, and status. + */ +public class ServersView extends CommonNavigator { + + protected CommonViewer tableViewer; + + protected Clipboard clipboard; + + protected Action noneAction = new Action(Messages.dialogMonitorNone) { + // dummy action + }; + + // actions on a server + protected Action[] actions; + protected Action actionModifyModules; + protected Action openAction, showInConsoleAction, showInDebugAction, propertiesAction, monitorPropertiesAction; + protected Action copyAction, pasteAction, deleteAction, renameAction; + + /** + * ServersView constructor comment. + */ + public ServersView() { + super(); + } + + @Override + public void createPartControl(Composite parent) { + super.createPartControl(parent); + + clipboard = new Clipboard(getCommonViewer().getControl().getDisplay()); + + deferInitialization(); + } + + private void deferInitialization() { + TreeItem item = new TreeItem(getCommonViewer().getTree(), SWT.NONE); + item.setText(Messages.viewInitializing); + + initializeActions(getCommonViewer()); + + 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(); + /*while (iterator.hasNext()) { + Module module = (Module) iterator.next(); + module.g + }*/ + } + + + Display.getDefault().asyncExec(new Runnable() { + public void run() { + try { + deferredInitialize(); + } catch (Exception e) { + // ignore - view has already been closed + } + } + }); + return Status.OK_STATUS; + } + }; + + job.setSystem(true); + job.setPriority(Job.SHORT); + job.schedule(); + } + + protected void deferredInitialize() { + // TODO Angel says: What to do here? + //tableViewer.initialize(); + + // TODO Angel says: This probably shouldn't be here + tableViewer = getCommonViewer(); + + tableViewer.addOpenListener(new IOpenListener() { + public void open(OpenEvent event) { + try { + IStructuredSelection sel = (IStructuredSelection) event.getSelection(); + Object data = sel.getFirstElement(); + if (!(data instanceof IServer)) + return; + IServer server = (IServer) data; + ServerUIPlugin.editServer(server); + } catch (Exception e) { + Trace.trace(Trace.SEVERE, "Could not open server", e); + } + } + }); + + MenuManager menuManager = new MenuManager("#PopupMenu"); + menuManager.setRemoveAllWhenShown(true); + final Shell shell = tableViewer.getTree().getShell(); + menuManager.addMenuListener(new IMenuListener() { + public void menuAboutToShow(IMenuManager mgr) { + fillContextMenu(shell, mgr); + } + }); + Menu menu = menuManager.createContextMenu(tableViewer.getTree()); + tableViewer.getTree().setMenu(menu); + getSite().registerContextMenu(menuManager, tableViewer); + getSite().setSelectionProvider(tableViewer); + + //TODO Angel: What to do here? + //initDragAndDrop(); + + // init the tooltip + ServerToolTip toolTip = new ServerToolTip(tableViewer.getTree()); + toolTip.setShift(new Point(10, 3)); + toolTip.setPopupDelay(400); // in ms + toolTip.setHideOnMouseDown(true); + toolTip.activate(); + + if (tableViewer.getTree().getItemCount() > 0) { + Object obj = tableViewer.getTree().getItem(0).getData(); + tableViewer.setSelection(new StructuredSelection(obj)); + } + + Thread thread = new Thread() { + public void run() { + try { + Thread.sleep(5000); + } catch (Exception e) { + // ignore + } + IServer[] servers = ServerCore.getServers(); + int size = servers.length; + for (int i = 0; i < size; i++) { + IServer server = servers[i]; + if (server.getServerType() != null && server.getServerState() == IServer.STATE_UNKNOWN) { + UpdateServerJob job = new UpdateServerJob(server); + job.schedule(); + } + } + } + }; + thread.setDaemon(true); + thread.setPriority(Thread.MIN_PRIORITY + 1); + thread.start(); + } + + + protected void fillContextMenu(Shell shell, IMenuManager menu) { + // get selection but avoid no selection or multiple selection + IServer server = null; + IModule[] module = null; + IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection(); + if (!selection.isEmpty()) { + Iterator iterator = selection.iterator(); + Object obj = iterator.next(); + if (obj instanceof IServer) + server = (IServer) obj; + if (obj instanceof ModuleServer) { + ModuleServer ms = (ModuleServer) obj; + server = ms.server; + module = ms.module; + } + if (iterator.hasNext()) { + server = null; + module = null; + } + } + + // new action + MenuManager newMenu = new MenuManager(Messages.actionNew); + fillNewContextMenu(null, selection, newMenu); + menu.add(newMenu); + + // open action + if (server != null && module == null) { + menu.add(openAction); + + String text = Messages.actionShowIn; + final IWorkbench workbench = PlatformUI.getWorkbench(); + final IBindingService bindingService = (IBindingService) workbench + .getAdapter(IBindingService.class); + final TriggerSequence[] activeBindings = bindingService + .getActiveBindingsFor("org.eclipse.ui.navigate.showInQuickMenu"); + if (activeBindings.length > 0) { + text += "\t" + activeBindings[0].format(); + } + + MenuManager showInMenu = new MenuManager(text); + showInMenu.add(showInConsoleAction); + showInMenu.add(showInDebugAction); + //IActionBars actionBars = getViewSite().getActionBars(); + //actionBars.setGlobalActionHandler("group.show", showInMenu); + menu.add(showInMenu); + menu.add(new Separator()); + } else + menu.add(new Separator()); + + if (server != null) { + if (module == null) { + menu.add(copyAction); + menu.add(pasteAction); + menu.add(deleteAction); + menu.add(renameAction); + } else if (module.length == 1) + menu.add(new RemoveModuleAction(shell, server, module[0])); + menu.add(new Separator()); + } + + if (server != null && module == null) { + // server actions + for (int i = 0; i < actions.length; i++) + menu.add(actions[i]); + + menu.add(new Separator()); + menu.add(actionModifyModules); + + // monitor + if (server.getServerType() != null) { + final MenuManager menuManager = new MenuManager(Messages.actionMonitor); + + final IServer server2 = server; + final Shell shell2 = shell; + menuManager.addMenuListener(new IMenuListener() { + public void menuAboutToShow(IMenuManager manager) { + menuManager.removeAll(); + if (server2.getAdapter(ServerDelegate.class) != null) { + ServerPort[] ports = server2.getServerPorts(null); + if (ports != null) { + int size = ports.length; + for (int i = 0; i < size; i++) { + if (!ports[i].isAdvanced()) + menuManager.add(new MonitorServerPortAction(shell2, server2, ports[i])); + } + } + } + + if (menuManager.isEmpty()) + menuManager.add(noneAction); + + menuManager.add(new Separator()); + menuManager.add(monitorPropertiesAction); + } + }); + + // add an initial menu item so that the menu appears correctly + noneAction.setEnabled(false); + menuManager.add(noneAction); + menu.add(menuManager); + } + } + + if (server != null && module != null) { + menu.add(new Separator()); + menu.add(new StartModuleAction(server, module)); + menu.add(new StopModuleAction(server, module)); + menu.add(new RestartModuleAction(server, module)); + } + + menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end")); + + if (server != null) { + menu.add(new Separator()); + menu.add(propertiesAction); + } + } + + + private static void fillNewContextMenu(Shell shell, ISelection selection, IMenuManager menu) { + IAction newServerAction = new NewServerWizardAction(); + newServerAction.setText(Messages.actionNewServer); + menu.add(newServerAction); + } + + + /** + * Initialize actions + * + * @param provider a selection provider + */ + public void initializeActions(ISelectionProvider provider) { + Shell shell = getSite().getShell(); + IActionBars actionBars = getViewSite().getActionBars(); + + actions = new Action[6]; + // create the start actions + actions[0] = new StartAction(shell, provider, ILaunchManager.DEBUG_MODE); + actionBars.setGlobalActionHandler("org.eclipse.wst.server.debug", actions[0]); + actions[1] = new StartAction(shell, provider, ILaunchManager.RUN_MODE); + actionBars.setGlobalActionHandler("org.eclipse.wst.server.run", actions[1]); + actions[2] = new StartAction(shell, provider, ILaunchManager.PROFILE_MODE); + + // create the stop action + actions[3] = new StopAction(shell, provider); + actionBars.setGlobalActionHandler("org.eclipse.wst.server.stop", actions[3]); + + // create the publish actions + actions[4] = new PublishAction(shell, provider); + actionBars.setGlobalActionHandler("org.eclipse.wst.server.publish", actions[4]); + actions[5] = new PublishCleanAction(shell, provider); + + // create the open action + openAction = new OpenAction(provider); + actionBars.setGlobalActionHandler("org.eclipse.ui.navigator.Open", openAction); + + // create copy, paste, and delete actions + pasteAction = new PasteAction(shell, provider, clipboard); + copyAction = new CopyAction(provider, clipboard, pasteAction); + deleteAction = new DeleteAction(shell, provider); + renameAction = new RenameAction(shell, getCommonViewer(), provider); + actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), copyAction); + actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), pasteAction); + actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), deleteAction); + actionBars.setGlobalActionHandler(ActionFactory.RENAME.getId(), renameAction); + + // create the other actions + actionModifyModules = new ModuleSloshAction(shell, provider); + showInConsoleAction = new ShowInConsoleAction(provider); + showInDebugAction = new ShowInDebugAction(provider); + + // create the properties action + propertiesAction = new PropertiesAction(shell, provider); + actionBars.setGlobalActionHandler(ActionFactory.PROPERTIES.getId(), propertiesAction); + monitorPropertiesAction = new PropertiesAction(shell, "org.eclipse.wst.server.ui.properties.monitor", provider); + + // add toolbar buttons + IContributionManager cm = actionBars.getToolBarManager(); + for (int i = 0; i < actions.length - 1; i++) + cm.add(actions[i]); + + cm.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + } + +} Index: serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerActionProvider.java =================================================================== RCS file: serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerActionProvider.java diff -N serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerActionProvider.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerActionProvider.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,301 @@ +package org.eclipse.wst.server.ui.internal.view.servers.provisional; + +import java.util.Iterator; + +import org.eclipse.debug.core.ILaunchManager; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IContributionManager; +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.bindings.TriggerSequence; +import org.eclipse.jface.viewers.IOpenListener; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.OpenEvent; +import org.eclipse.jface.viewers.StructuredViewer; +import org.eclipse.swt.dnd.Clipboard; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.ActionFactory; +import org.eclipse.ui.keys.IBindingService; +import org.eclipse.ui.navigator.CommonActionProvider; +import org.eclipse.ui.navigator.CommonViewer; +import org.eclipse.ui.navigator.ICommonActionExtensionSite; +import org.eclipse.ui.navigator.ICommonViewerSite; +import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite; +import org.eclipse.wst.server.core.IModule; +import org.eclipse.wst.server.core.IServer; +import org.eclipse.wst.server.core.ServerPort; +import org.eclipse.wst.server.core.model.ServerDelegate; +import org.eclipse.wst.server.ui.internal.Messages; +import org.eclipse.wst.server.ui.internal.ServerUIPlugin; +import org.eclipse.wst.server.ui.internal.Trace; +import org.eclipse.wst.server.ui.internal.actions.NewServerWizardAction; +import org.eclipse.wst.server.ui.internal.view.servers.CopyAction; +import org.eclipse.wst.server.ui.internal.view.servers.DeleteAction; +import org.eclipse.wst.server.ui.internal.view.servers.ModuleServer; +import org.eclipse.wst.server.ui.internal.view.servers.ModuleSloshAction; +import org.eclipse.wst.server.ui.internal.view.servers.MonitorServerPortAction; +import org.eclipse.wst.server.ui.internal.view.servers.OpenAction; +import org.eclipse.wst.server.ui.internal.view.servers.PasteAction; +import org.eclipse.wst.server.ui.internal.view.servers.PropertiesAction; +import org.eclipse.wst.server.ui.internal.view.servers.PublishAction; +import org.eclipse.wst.server.ui.internal.view.servers.PublishCleanAction; +import org.eclipse.wst.server.ui.internal.view.servers.RemoveModuleAction; +import org.eclipse.wst.server.ui.internal.view.servers.RenameAction; +import org.eclipse.wst.server.ui.internal.view.servers.RestartModuleAction; +import org.eclipse.wst.server.ui.internal.view.servers.ShowInConsoleAction; +import org.eclipse.wst.server.ui.internal.view.servers.ShowInDebugAction; +import org.eclipse.wst.server.ui.internal.view.servers.StartAction; +import org.eclipse.wst.server.ui.internal.view.servers.StartModuleAction; +import org.eclipse.wst.server.ui.internal.view.servers.StopAction; +import org.eclipse.wst.server.ui.internal.view.servers.StopModuleAction; + +/** + * TODO Angel says: Not currently besing used + * + */ +public class ServerActionProvider extends CommonActionProvider { + private ICommonActionExtensionSite actionSite; + private Clipboard clipboard; + public ServerActionProvider() { + super(); + } + + public void init(ICommonActionExtensionSite aSite) { + super.init(aSite); + this.actionSite = aSite; + ICommonViewerSite site = aSite.getViewSite(); + if( site instanceof ICommonViewerWorkbenchSite ) { + StructuredViewer v = aSite.getStructuredViewer(); + if( v instanceof CommonViewer ) { + CommonViewer cv = (CommonViewer)v; + ICommonViewerWorkbenchSite wsSite = (ICommonViewerWorkbenchSite)site; + addListeners(cv); + makeServerActions(cv, wsSite.getSelectionProvider()); + } + } + } + + + // actions on a server + protected Action[] actions; + protected Action actionModifyModules; + protected Action openAction, showInConsoleAction, showInDebugAction, propertiesAction, monitorPropertiesAction; + protected Action copyAction, pasteAction, deleteAction, renameAction; + protected Action noneAction = new Action(Messages.dialogMonitorNone) { + // dummy action + }; + + private void addListeners(CommonViewer tableViewer) { + tableViewer.addOpenListener(new IOpenListener() { + public void open(OpenEvent event) { + try { + IStructuredSelection sel = (IStructuredSelection) event.getSelection(); + Object data = sel.getFirstElement(); + if (!(data instanceof IServer)) + return; + IServer server = (IServer) data; + ServerUIPlugin.editServer(server); + } catch (Exception e) { + Trace.trace(Trace.SEVERE, "Could not open server", e); + } + } + }); + } + + private void makeServerActions(CommonViewer tableViewer, ISelectionProvider provider) { + clipboard = new Clipboard(tableViewer.getTree().getDisplay()); + Shell shell = tableViewer.getTree().getShell(); + + actions = new Action[6]; + // create the start actions + actions[0] = new StartAction(shell, provider, ILaunchManager.DEBUG_MODE); + actions[1] = new StartAction(shell, provider, ILaunchManager.RUN_MODE); + actions[2] = new StartAction(shell, provider, ILaunchManager.PROFILE_MODE); + + // create the stop action + actions[3] = new StopAction(shell, provider); + + // create the publish actions + actions[4] = new PublishAction(shell, provider); + actions[5] = new PublishCleanAction(shell, provider); + + // create the open action + openAction = new OpenAction(provider); + +// // create copy, paste, and delete actions + pasteAction = new PasteAction(shell, provider, clipboard); + copyAction = new CopyAction(provider, clipboard, pasteAction); + deleteAction = new DeleteAction(shell, provider); + renameAction = new RenameAction(shell, tableViewer, provider); + + // create the other actions + actionModifyModules = new ModuleSloshAction(shell, provider); + showInConsoleAction = new ShowInConsoleAction(provider); + showInDebugAction = new ShowInDebugAction(provider); + + // create the properties action + propertiesAction = new PropertiesAction(shell, provider); + monitorPropertiesAction = new PropertiesAction(shell, "org.eclipse.wst.server.ui.properties.monitor", provider); + } + + public void fillActionBars(IActionBars actionBars) { + actionBars.setGlobalActionHandler("org.eclipse.wst.server.debug", actions[0]); + actionBars.setGlobalActionHandler("org.eclipse.wst.server.run", actions[1]); + actionBars.setGlobalActionHandler("org.eclipse.wst.server.stop", actions[3]); + actionBars.setGlobalActionHandler("org.eclipse.wst.server.publish", actions[4]); + actionBars.setGlobalActionHandler("org.eclipse.ui.navigator.Open", openAction); + actionBars.setGlobalActionHandler(ActionFactory.PROPERTIES.getId(), propertiesAction); + actionBars.updateActionBars(); + actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), copyAction); + actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), pasteAction); + actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), deleteAction); + actionBars.setGlobalActionHandler(ActionFactory.RENAME.getId(), renameAction); + + IContributionManager cm = actionBars.getToolBarManager(); + cm.removeAll(); + + for (int i = 0; i < actions.length - 1; i++) + cm.add(actions[i]); + } + + private static void fillNewContextMenu(Shell shell, ISelection selection, IMenuManager menu) { + IAction newServerAction = new NewServerWizardAction(); + newServerAction.setText(Messages.actionNewServer); + menu.add(newServerAction); + } + + public void fillContextMenu(IMenuManager menu) { + ICommonViewerSite site = actionSite.getViewSite(); + IStructuredSelection selection = null; + Shell shell = actionSite.getViewSite().getShell(); + if( site instanceof ICommonViewerWorkbenchSite ) { + ICommonViewerWorkbenchSite wsSite = (ICommonViewerWorkbenchSite)site; + selection = (IStructuredSelection) wsSite.getSelectionProvider().getSelection(); + } + + IServer server = null; + IModule[] module = null; + if (selection != null && !selection.isEmpty()) { + Iterator iterator = selection.iterator(); + Object obj = iterator.next(); + if (obj instanceof IServer) + server = (IServer) obj; + if (obj instanceof ModuleServer) { + ModuleServer ms = (ModuleServer) obj; + server = ms.server; + module = ms.module; + } + if (iterator.hasNext()) { + server = null; + module = null; + } + } + + // new action + MenuManager newMenu = new MenuManager(Messages.actionNew); + fillNewContextMenu(null, selection, newMenu); + menu.add(newMenu); + + // open action + if (server != null && module == null) { + menu.add(openAction); + + String text = Messages.actionShowIn; + final IWorkbench workbench = PlatformUI.getWorkbench(); + final IBindingService bindingService = (IBindingService) workbench + .getAdapter(IBindingService.class); + final TriggerSequence[] activeBindings = bindingService + .getActiveBindingsFor("org.eclipse.ui.navigate.showInQuickMenu"); + if (activeBindings.length > 0) { + text += "\t" + activeBindings[0].format(); + } + + MenuManager showInMenu = new MenuManager(text); + showInMenu.add(showInConsoleAction); + showInMenu.add(showInDebugAction); + //IActionBars actionBars = getViewSite().getActionBars(); + //actionBars.setGlobalActionHandler("group.show", showInMenu); + menu.add(showInMenu); + menu.add(new Separator()); + } else + menu.add(new Separator()); + + if (server != null) { + if (module == null) { + menu.add(copyAction); + menu.add(pasteAction); + menu.add(deleteAction); + menu.add(renameAction); + } else if (module.length == 1) + menu.add(new RemoveModuleAction(shell, server, module[0])); + menu.add(new Separator()); + } + + if (server != null && module == null) { + // server actions + for (int i = 0; i < actions.length; i++) + menu.add(actions[i]); + + menu.add(new Separator()); + menu.add(actionModifyModules); + + // monitor + if (server.getServerType() != null) { + final MenuManager menuManager = new MenuManager(Messages.actionMonitor); + + final IServer server2 = server; + final Shell shell2 = shell; + menuManager.addMenuListener(new IMenuListener() { + public void menuAboutToShow(IMenuManager manager) { + menuManager.removeAll(); + if (server2.getAdapter(ServerDelegate.class) != null) { + ServerPort[] ports = server2.getServerPorts(null); + if (ports != null) { + int size = ports.length; + for (int i = 0; i < size; i++) { + if (!ports[i].isAdvanced()) + menuManager.add(new MonitorServerPortAction(shell2, server2, ports[i])); + } + } + } + + if (menuManager.isEmpty()) + menuManager.add(noneAction); + + menuManager.add(new Separator()); + menuManager.add(monitorPropertiesAction); + } + }); + + // add an initial menu item so that the menu appears correctly + noneAction.setEnabled(false); + menuManager.add(noneAction); + menu.add(menuManager); + } + } + + if (server != null && module != null) { + menu.add(new Separator()); + menu.add(new StartModuleAction(server, module)); + menu.add(new StopModuleAction(server, module)); + menu.add(new RestartModuleAction(server, module)); + } + + menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end")); + + if (server != null) { + menu.add(new Separator()); + menu.add(propertiesAction); + } + } +} Index: serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerContentProvider.java =================================================================== RCS file: serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerContentProvider.java diff -N serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerContentProvider.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ serverui/org/eclipse/wst/server/ui/internal/view/servers/provisional/ServerContentProvider.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,331 @@ +package org.eclipse.wst.server.ui.internal.view.servers.provisional; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +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.ISelection; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.StructuredViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.widgets.Display; +import org.eclipse.wst.server.core.IModule; +import org.eclipse.wst.server.core.IPublishListener; +import org.eclipse.wst.server.core.IServer; +import org.eclipse.wst.server.core.IServerLifecycleListener; +import org.eclipse.wst.server.core.IServerListener; +import org.eclipse.wst.server.core.ServerCore; +import org.eclipse.wst.server.core.ServerEvent; +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 static Object INITIALIZING = new Object(); + protected IServerLifecycleListener serverResourceListener; + protected IPublishListener publishListener; + protected IServerListener serverListener; + + // servers that are currently publishing and starting + protected static Set publishing = new HashSet(4); + protected static Set starting = new HashSet(4); + protected boolean animationActive = false; + protected boolean stopAnimation = false; + protected boolean initialized = false; + + + private StructuredViewer viewer; + + public ServerContentProvider() { + addListeners(); + } + + public Object[] getElements(Object element) { + if( !initialized ) { + deferInitialization(); + return new Object[] {INITIALIZING}; + } + + List list = new ArrayList(); + IServer[] servers = ServerCore.getServers(); + if (servers != null) { + int size = servers.length; + for (int i = 0; i < size; i++) { + if (!((Server)servers[i]).isPrivate()) + list.add(servers[i]); + } + } + return list.toArray(); + } + + public Object[] getChildren(Object element) { + if (element instanceof ModuleServer) { + ModuleServer ms = (ModuleServer) element; + try { + IModule[] children = ms.server.getChildModules(ms.module, null); + int size = children.length; + ModuleServer[] ms2 = new ModuleServer[size]; + for (int i = 0; i < size; i++) { + int size2 = ms.module.length; + IModule[] module = new IModule[size2 + 1]; + System.arraycopy(ms.module, 0, module, 0, size2); + module[size2] = children[i]; + ms2[i] = new ModuleServer(ms.server, module); + } + return ms2; + } catch (Exception e) { + return null; + } + } + + IServer server = (IServer) element; + IModule[] modules = server.getModules(); + int size = modules.length; + ModuleServer[] ms = new ModuleServer[size]; + for (int i = 0; i < size; i++) { + ms[i] = new ModuleServer(server, new IModule[] { modules[i] }); + } + return ms; + } + + public Object getParent(Object element) { + if (element instanceof ModuleServer) { + ModuleServer ms = (ModuleServer) element; + return ms.server; + } + return null; + } + + public boolean hasChildren(Object element) { + if (element instanceof ModuleServer) { + // Check if the module server has child modules. + ModuleServer curModuleServer = (ModuleServer)element; + IServer curServer = curModuleServer.server; + IModule[] curModule = curModuleServer.module; + if (curServer != null && curModule != null) { + IModule[] curChildModule = curServer.getChildModules(curModule, null); + if (curChildModule != null && curChildModule.length > 0) + return true; + + return false; + } + + return false; + } + if( element instanceof IServer ) { + return ((IServer) element).getModules().length > 0; + } + return false; + } + + public void inputChanged(Viewer aViewer, Object oldInput, Object newInput) { + viewer = (StructuredViewer) aViewer; + } + + public void dispose() { + // do nothing + } + + + + // 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(); + if (state == IServer.STATE_STARTING || state == IServer.STATE_STOPPING) { + boolean startThread = false; + synchronized (starting) { + if (!starting.contains(id)) { + if (starting.isEmpty()) + startThread = true; + starting.add(id); + } + } + if (startThread) + startThread(); + } else { + boolean stopThread = false; + synchronized (starting) { + if (starting.contains(id)) { + starting.remove(id); + if (starting.isEmpty()) + stopThread = true; + } + } + if (stopThread) + stopThread(); + } + } 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 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()) { + viewer.refresh(server); + if( resetSelection ) { + ISelection sel = viewer.getSelection(); + viewer.setSelection(sel); + } + 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); + } + + + 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(); + refreshServer(server); + } + } + } 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; + }}