/******************************************************************************* * Copyright (c) 2008,2010 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.cnf; import org.eclipse.core.runtime.IStatus; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.jface.viewers.*; 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.*; import org.eclipse.wst.server.ui.internal.provisional.AbstractServerLabelProvider; 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 ) { IServer server = (IServer)element; String state = getServerStateLabel(server ); String status = getServerStatusLabel(server ); decoration.addSuffix(combine(state, status)); } else if( element instanceof ModuleServer ) { ModuleServer module = (ModuleServer)element; String state = getModuleStateText(module); String status = getModuleStatusText(module); decoration.addSuffix(combine(state, status)); } } 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()); } /** * Find the ServerLabelProvider for this server type and provide a label. If none are found * a default server label provider will be provided * * @param server * @return */ public static String getServerStateLabel(IServer server) { if (server == null || server.getServerType() == null) return null; String stateLabel; AbstractServerLabelProvider labelProvider= ServerUIPlugin.getServerLabelProvider(server.getServerType().getId()); stateLabel = labelProvider.getServerStateLabel(server); return stateLabel; } public static String getStateLabel(IServerType serverType, int state, String mode) { return serverType == null ? null : UIDecoratorManager.getCNFUIDecorator().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 (ServersView2.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.getCNFUIDecorator().getStateImage(state, mode, getCount()); } public static Image getServerStateImageOverlay(IServer server) { return server == null ? null : getStateImageOverlay(server.getServerType(), server.getServerState(), server.getMode()); } public static Image getStateImageOverlay(IServerType serverType, int state, String mode) { return serverType == null ? null : UIDecoratorManager.getCNFUIDecorator().getStateImageOverlay(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) { if (ms == null || ms.module == null) return null; Server curServer = (Server) ms.getServer(); if (curServer == null || curServer.getServerType() == null) return null; // For module state, we always use run mode since the state of the module will only be showing // Started state even for debug and profile mode. return getStateLabel(curServer.getServerType(), curServer.getModuleState(ms.module), ILaunchManager.RUN_MODE); } 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; } 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)); } }