/******************************************************************************* * Copyright (c) 2009, 2010 Progress Software Corporation. * 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 ******************************************************************************/ package org.fusesource.tools.messaging.cnf.ui; import org.eclipse.core.resources.IProject; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.navigator.IDescriptionProvider; import org.eclipse.wst.server.core.IServer; import org.fusesource.tools.messaging.IConstants; import org.fusesource.tools.messaging.cnf.model.BaseGroupComponent; import org.fusesource.tools.messaging.cnf.model.ListenerComponent; import org.fusesource.tools.messaging.cnf.model.ListenersRootComponent; import org.fusesource.tools.messaging.cnf.model.SenderComponent; import org.fusesource.tools.messaging.cnf.model.SendersRootComponent; import org.fusesource.tools.messaging.core.IDestination; import org.fusesource.tools.messaging.core.IDestinationType; import org.fusesource.tools.messaging.core.IListener; import org.fusesource.tools.messaging.core.IMessageChangeListener; import org.fusesource.tools.messaging.core.IMessagesManager; import org.fusesource.tools.messaging.core.ISender; import org.fusesource.tools.messaging.server.MessagingServersUtil; import org.fusesource.tools.messaging.ui.FontBasedLabelProvider; import org.fusesource.tools.messaging.ui.ImageConstants; import org.fusesource.tools.messaging.utils.ImagesUtil; /** * Label provider implementation for Messaging Project */ public class MsgProjectLabelProvider extends FontBasedLabelProvider implements IDescriptionProvider { private static final String TYPE_INFO_UNAVAILABLE = "TYPE INFO UNAVAILABLE"; private static final String STATUS_OFFLINE_SUFFIX = " is Offline"; private static final String STATUS_ONLINE_SUFFIX = " is Online"; @Override public String getText(Object element) { if (element instanceof SendersRootComponent) { return ((SendersRootComponent) element).getName(); } else if (element instanceof ListenersRootComponent) { return ((ListenersRootComponent) element).getName(); } else if (element instanceof SenderComponent) { ISender sender = ((SenderComponent) element).getSender(); if (hasLabelProvider(sender)) { return ((LabelProvider) sender).getText(sender); } return getDefaultText(sender.getDestination()); } else if (element instanceof ListenerComponent) { IListener listener = ((ListenerComponent) element).getListener(); return getListenerDisplayText(listener); } return null; } private boolean hasLabelProvider(Object element) { if (element instanceof LabelProvider) { return true; } return false; } @Override public Image getImage(Object element) { ImagesUtil instance = ImagesUtil.getInstance(); if (element instanceof SendersRootComponent) { return instance.getImage(ImageConstants.SENDER_COMPONENT_IMAGE); } else if (element instanceof ListenersRootComponent) { return instance.getImage(ImageConstants.LISTENER_COMPONENT_IMAGE); } else if (element instanceof SenderComponent) { ISender sender = ((SenderComponent) element).getSender(); if (hasLabelProvider(sender)) { return ((LabelProvider) sender).getImage(sender); } return instance.getImage(ImageConstants.SENDER); } else if (element instanceof ListenerComponent) { IListener listener = ((ListenerComponent) element).getListener(); if (hasLabelProvider(listener)) { return ((LabelProvider) listener).getImage(listener); } return instance.getImage(ImageConstants.LISTENER); } return null; } @Override public Font getFont(Object element) { if (element instanceof ListenerComponent) { IListener listener = ((ListenerComponent) element).getListener(); IMessagesManager messagesManager = listener.getMessagesManager(); if (messagesManager == null) { return MsgProjectChangeHandler.DEFAULT_FONT; } int unreadCount = messagesManager.getMessagesCount(IMessageChangeListener.MESSAGE_UNREAD); if (unreadCount > 0) { return MsgProjectChangeHandler.BOLD_FONT;// TODO not // good...temp code } } return MsgProjectChangeHandler.DEFAULT_FONT;// TODO not good...temp // code } private String getListenerDisplayText(IListener listener) { StringBuffer displayText = new StringBuffer(); if (hasLabelProvider(listener)) { displayText.append(((LabelProvider) listener).getText(listener)); } else { displayText.append(getDefaultText(listener.getDestination())); } if (listener.getMessagesManager() == null) { return displayText.toString(); } // Append the message received count int unreadCount = listener.getMessagesManager().getMessagesCount(IMessageChangeListener.MESSAGE_UNREAD); if (unreadCount <= 0) { return displayText.toString(); } displayText.append(" (" + unreadCount + ")"); return displayText.toString(); } public String getDefaultText(IDestination destination) { return destination != null ? destination.getDestinationName() : IConstants.EMPTY_STRING; } /** * shows the type & name of the selected project viewer element in the status bar */ public String getDescription(Object anElement) { if (anElement instanceof IProject) { IProject project = (IProject) anElement; IServer deployedServer = MessagingServersUtil.getDeployedServer(project); if (deployedServer != null) { return project.getName() + " is deployed in " + deployedServer.getName(); } } else if (anElement instanceof SenderComponent) { ISender sender = ((SenderComponent) anElement).getSender(); return getType(sender.getDestination()) + ": " + getDefaultText(sender.getDestination()); } else if (anElement instanceof ListenerComponent) { IListener listener = ((ListenerComponent) anElement).getListener(); return getType(listener.getDestination()) + ": " + getDefaultText(listener.getDestination()); } else if (anElement instanceof BaseGroupComponent) { return getStatusMessage((BaseGroupComponent) anElement); } return null; } public String getType(IDestination destination) { if (destination == null) { return TYPE_INFO_UNAVAILABLE; } IDestinationType type = destination.getDestinationType(); if (type == null) { return TYPE_INFO_UNAVAILABLE; } return type.getType(); } private String getStatusMessage(BaseGroupComponent group) { IProject project = group.getFile().getProject(); String status = project.getName(); boolean isOnline = MessagingServersUtil.isMsgProjectOnline(project); if (isOnline) { return status + STATUS_ONLINE_SUFFIX; } return status + STATUS_OFFLINE_SUFFIX; } }