| /******************************************************************************* |
| * Copyright (c) 2005 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.bpel.common.ui.details.widgets; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.bpel.common.ui.CommonUIPlugin; |
| import org.eclipse.bpel.common.ui.ICommonUIConstants; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.jface.resource.ImageRegistry; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.widgets.Control; |
| |
| /** |
| * Status label which holds information from text markers next to labels. |
| * |
| * @author IBM |
| * @author Michal Chmielewski (michal.chmielewski@oracle.com) |
| * @date May 15, 2007 |
| */ |
| public class StatusLabel2 { |
| |
| final static private int MAX_MESSAGES = 5; |
| final static private String STATUS_MESSAGE_ID = "STATUS_MESSAGE"; //$NON-NLS-1$ |
| final static private String NEW_LINE = "\n"; //$NON-NLS-1$ |
| final static private String ETCETERA = "..."; //$NON-NLS-1$ |
| |
| protected DecoratedLabel label; |
| protected List<StatusMessage> statusMessageList; |
| |
| protected static Image blankImage, infoImage, warnImage, errorImage; |
| |
| /** |
| * Inner class: StatusMessage which holds one message and its dedicated severity |
| * |
| */ |
| protected class StatusMessage { |
| |
| protected String id; //* e.g name of originator of message |
| protected int severity; |
| protected String message; |
| |
| /** |
| * constructor |
| * |
| */ |
| protected StatusMessage(String messageId, int sev, String msg) { |
| setSeverity(messageId, sev, msg); |
| } |
| |
| /** |
| * constructor |
| * |
| */ |
| protected StatusMessage() { |
| setStatus(null); |
| } |
| |
| /** |
| * Sets the severity and (optional) message. |
| * |
| * @param messageId message id |
| * @param sev One of IStatus.OK, IStatus.INFO, IStatus.WARNING, IStatus.ERROR |
| * @param msg A text message describing the condition (or null). |
| * |
| */ |
| protected void setSeverity(String messageId, int sev, String msg) { |
| setId(messageId); |
| setSeverity(sev); |
| setMessage(msg); |
| } |
| |
| /** |
| * Convenience method taking an IStatus as input. |
| * |
| * @param IStatus |
| */ |
| protected void setStatus (IStatus status) { |
| if (status == null) { |
| setSeverity(STATUS_MESSAGE_ID, IStatus.OK, null); |
| } else { |
| setSeverity(STATUS_MESSAGE_ID, status.getSeverity(), status.getMessage()); |
| } |
| } |
| |
| /** |
| * @return the severity |
| */ |
| protected int getSeverity() { |
| return severity; |
| } |
| |
| /** |
| * @param i the severity |
| */ |
| protected void setSeverity(int i) { |
| severity = i; |
| } |
| |
| /** |
| * @return String the message |
| */ |
| protected String getMessage() { |
| return message; |
| } |
| |
| /** |
| * @param String the message |
| */ |
| protected void setMessage(String string) { |
| message = string; |
| } |
| /** |
| * @return String id of status message |
| */ |
| protected String getId() { |
| return id; |
| } |
| |
| /** |
| * @param string id of status message |
| */ |
| protected void setId(String string) { |
| id = string; |
| } |
| |
| } |
| |
| /** |
| * constructor |
| * |
| * @param aLabel to be wrapped |
| * |
| */ |
| |
| public StatusLabel2(DecoratedLabel aLabel) { |
| this.label = aLabel; |
| |
| if (blankImage == null) { |
| initSharedImages(); |
| } |
| |
| setStatusMessageList(new ArrayList<StatusMessage>()); |
| |
| clear(); |
| } |
| |
| /** |
| * Initializes the images |
| * |
| */ |
| protected static void initSharedImages() { |
| ImageRegistry registry = CommonUIPlugin.getDefault().getImageRegistry(); |
| // blankImage = registry.get(ICommonUIConstants.ICON_SM_BLANK); |
| |
| infoImage = registry.get(ICommonUIConstants.ICON_SM_INFO); |
| warnImage = registry.get(ICommonUIConstants.ICON_SM_WARN); |
| errorImage = registry.get(ICommonUIConstants.ICON_SM_ERROR); |
| } |
| |
| /** |
| * Returns the CLabel. |
| * |
| * @return CLabel |
| * |
| */ |
| public DecoratedLabel getLabel() { |
| return label; |
| } |
| |
| /** |
| * Returns the primary control (e.g. maybe a composite). In this implementation, the CLabel. |
| * |
| * @return Control |
| * |
| */ |
| public Control getControl() { |
| return label; |
| } |
| |
| /** |
| * Returns the CLabel text |
| * |
| * @return String |
| * |
| */ |
| public String getText() { |
| return label.getText(); |
| } |
| |
| /** |
| * Sets the CLabel text |
| * |
| * @param s the label text |
| * |
| */ |
| public void setText(String s) { |
| label.setText(s); |
| } |
| |
| /** |
| * Returns the CLabel LayoutData |
| * |
| * @return Object LayoutData |
| * |
| */ |
| public Object getLayoutData() { |
| return label.getLayoutData(); |
| } |
| |
| /** |
| * Sets the CLabel LayoutData |
| * |
| * @param layoutData layout data |
| * |
| */ |
| public void setLayoutData(Object layoutData) { |
| label.setLayoutData(layoutData); |
| } |
| |
| /** |
| * clears (removes) all status messages |
| * |
| */ |
| public void clear() { |
| statusMessageList.clear(); |
| updateLabel() ; |
| } |
| |
| /** |
| * clears all status message with a id equals to the passed messageId |
| * |
| * @param messageId id of status message to be removed |
| * |
| */ |
| public void clear (String messageId) { |
| |
| if (messageId == null) { |
| clear(); |
| return ; |
| } |
| List<StatusMessage> removeList = new ArrayList<StatusMessage>(); |
| |
| // get all status messages to be removed |
| for(StatusMessage m : statusMessageList ) { |
| if (messageId.equals(m.getId())) { |
| removeList.add(m); |
| } |
| } |
| // remove all just now collected status messages |
| statusMessageList.removeAll(removeList); |
| // update label |
| updateLabel() ; |
| } |
| |
| /** |
| * Sets the severity and (optional) message. |
| * |
| * @param messageId id of status message |
| * @param severity One of IStatus.OK, IStatus.INFO, IStatus.WARNING, IStatus.ERROR |
| * @param message A text message describing the condition (or null). |
| * |
| */ |
| public void setSeverity(String messageId, int severity, String message) { |
| statusMessageList.clear(); |
| addSeverity(severity,message); |
| } |
| |
| /** |
| * Sets the severity and (optional) message. The status message Id will be set to default |
| * |
| * @param severity One of IStatus.OK, IStatus.INFO, IStatus.WARNING, IStatus.ERROR |
| * @param message A text message describing the condition (or null). |
| * |
| */ |
| public void setSeverity(int severity, String message) { |
| setSeverity(STATUS_MESSAGE_ID, severity, message); |
| } |
| |
| /** |
| * Convenience method taking an IStatus as input. |
| * |
| * @param status the status to set |
| * |
| */ |
| public void setStatus(IStatus status) { |
| if (status == null) { |
| setSeverity(STATUS_MESSAGE_ID, IStatus.OK, null); |
| } else { |
| setSeverity(STATUS_MESSAGE_ID, status.getSeverity(), status.getMessage()); |
| } |
| } |
| |
| |
| /** |
| * Sets the severity and (optional) message. |
| * |
| * @param messageId id of status message |
| * @param severity One of IStatus.OK, IStatus.INFO, IStatus.WARNING, IStatus.ERROR |
| * @param message A text message describing the condition (or null). |
| * |
| */ |
| public void addSeverity(String messageId, int severity, String message) { |
| statusMessageList.add(new StatusMessage(messageId, severity, message) ); |
| updateLabel(); |
| } |
| |
| /** |
| * Sets the severity and (optional) message. The status message Id will be set to default |
| * |
| * @param severity One of IStatus.OK, IStatus.INFO, IStatus.WARNING, IStatus.ERROR |
| * @param message A text message describing the condition (or null). |
| * |
| */ |
| public void addSeverity(int severity, String message) { |
| addSeverity(STATUS_MESSAGE_ID, severity, message); |
| } |
| |
| /** |
| * Convenience method taking an IStatus as input. |
| * @param status |
| */ |
| |
| public void addStatus (IStatus status) { |
| if (status != null) { |
| addSeverity(status.getSeverity(), status.getMessage()); |
| } |
| } |
| |
| protected void updateLabel() { |
| |
| label.setToolTipText(getToolTipText()); |
| |
| switch (getHighestSeverity()) { |
| case IStatus.OK : |
| label.setImage(blankImage); |
| break; |
| case IStatus.INFO : |
| label.setImage(infoImage); |
| break; |
| case IStatus.WARNING : |
| label.setImage(warnImage); |
| break; |
| default : |
| label.setImage(errorImage); |
| break; |
| } |
| } |
| |
| /** |
| * returns the tool tip text. Only a maximum of messages will be appended to the tool tip text. The different |
| * messages are separated with a new line character. |
| * If there are more messages than the maximum number, than three |
| * dots will be appended to the tool tip text. |
| * |
| * @return the tool tip text from the status message list |
| * |
| */ |
| protected String getToolTipText() { |
| |
| StringBuilder toolTipText = new StringBuilder(256); |
| List<String> toolTipTextList = new ArrayList<String>(); |
| |
| appendToolTipTextList(toolTipTextList, IStatus.ERROR, MAX_MESSAGES); |
| appendToolTipTextList(toolTipTextList, IStatus.WARNING, MAX_MESSAGES); |
| appendToolTipTextList(toolTipTextList, IStatus.INFO, MAX_MESSAGES); |
| appendToolTipTextList(toolTipTextList, IStatus.OK, MAX_MESSAGES); |
| |
| for (String t : toolTipTextList) { |
| toolTipText.append(t).append(NEW_LINE); |
| } |
| |
| if (statusMessageList.size() > toolTipTextList.size()) { |
| if (toolTipText.length() > 0) { |
| toolTipText.append(ETCETERA); |
| } |
| } |
| |
| return toolTipText.toString().trim(); |
| } |
| |
| /** |
| * reads all messaged according to the passed severity from the status message list and appends them to |
| * the passed toolTipText |
| * |
| * @param toolTipTextList where message must be appended to |
| * @param severity of messages to be appended |
| * @param maxMessages maximum number of messages to be appended |
| * |
| */ |
| protected void appendToolTipTextList(List<String> toolTipTextList, int severity, int maxMessages) { |
| |
| for(String m : getMessageList(severity) ) { |
| if (toolTipTextList.size() < maxMessages) { |
| toolTipTextList.add(m); |
| } else { |
| break; |
| } |
| } |
| } |
| |
| /** |
| * returns messages according to the passed severity |
| * |
| * @param severity of messages to be returned |
| * @return List of messages according to the passed severity |
| * |
| */ |
| |
| protected List<String> getMessageList (int severity) { |
| List<String> messageList = new ArrayList<String>(); |
| |
| for (StatusMessage m : statusMessageList ) { |
| if (m.getSeverity() == severity) { |
| messageList.add(m.getMessage()); |
| } |
| } |
| return messageList; |
| } |
| |
| /** |
| * @return the highest severity in the status message list |
| * |
| */ |
| protected int getHighestSeverity() { |
| int severity = IStatus.OK; |
| for(StatusMessage m : statusMessageList) { |
| if (m.getSeverity() > severity) { |
| severity = m.getSeverity(); |
| } |
| } |
| return severity; |
| } |
| |
| /** |
| * @return List of status messages |
| */ |
| protected List<StatusMessage> getStatusMessageList() { |
| return statusMessageList; |
| } |
| |
| /** |
| * @param List of status messages |
| */ |
| protected void setStatusMessageList(List<StatusMessage> list) { |
| statusMessageList = list; |
| } |
| } |