org.csstudio.alarm.beast.ui.alarmtree.AlarmTreeLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.csstudio.alarm.beast.ui.alarmtree.AlarmTreeLabelProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2010 Oak Ridge National Laboratory.
 *  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.csstudio.alarm.beast.ui.alarmtree;

import org.csstudio.alarm.beast.SeverityLevel;
import org.csstudio.alarm.beast.client.AlarmTreeItem;
import org.csstudio.alarm.beast.client.AlarmTreePV;
import org.csstudio.alarm.beast.ui.Messages;
import org.csstudio.alarm.beast.ui.SeverityColorProvider;
import org.csstudio.alarm.beast.ui.SeverityIconProvider;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Composite;

/** Label provider turns AlarmTreeItem into text, color, image, .. for Tree
 *  @author Kay Kasemir
 */
public class AlarmTreeLabelProvider extends CellLabelProvider {
    final private SeverityColorProvider color_provider;
    final private SeverityIconProvider icon_provider;

    /** Initialize
     *  @param parent Parent widget (used for dispose listener)
     */
    public AlarmTreeLabelProvider(final Composite parent) {
        color_provider = new SeverityColorProvider(parent);
        icon_provider = new SeverityIconProvider(parent);
    }

    @Override
    public String getToolTipText(final Object element) {
        // Saw null here when tree content changes while (slow) tool tip decides to show
        final AlarmTreeItem item = (AlarmTreeItem) element;
        if (item == null)
            return ""; //$NON-NLS-1$
        return item.getToolTipText();
    }

    /** Set a cell's text and color from alarm tree item */
    @Override
    public void update(final ViewerCell cell) {
        final AlarmTreeItem item = (AlarmTreeItem) cell.getElement();
        // Text
        String text = getText(item);
        if (!text.equals(cell.getText()))
            cell.setText(text);

        // Provide icon that represents the item's severity
        if (item instanceof AlarmTreePV && !((AlarmTreePV) item).isEnabled()) {
            cell.setImage(icon_provider.getDisabledIcon());
            cell.setBackground(null);
            cell.setForeground(null);
            return; // done, skip the color coding
        } else
            cell.setImage(icon_provider.getIcon(item.getCurrentSeverity(), item.getSeverity(),
                    item.getDisabledChildCount() > 0));

        // Color-code AlarmTreePV based on severity.
        final SeverityLevel severity = item.getSeverity();
        //  'OK' severity isn't color-coded.
        if (severity == SeverityLevel.OK) {
            cell.setBackground(null);
            cell.setForeground(null);
            return;
        }
        //  Generally, the foreground (text) color is set,
        //  but for PV items with active alarms, the background
        //  color is set to make it stand out even more.
        final Color color = color_provider.getColor(severity);
        if ((item instanceof AlarmTreePV) && severity.isActive()) {
            cell.setBackground(color);
            cell.setForeground(null);
        } else {
            cell.setForeground(color);
            cell.setBackground(null);
        }
    }

    /** Provide item's "name (severity/status)"
     *  @param item AlarmTreeItem
     */
    @SuppressWarnings("nls")
    public String getText(final AlarmTreeItem item) {
        final StringBuilder buf = new StringBuilder(100);
        AlarmTreePV pv = null;
        switch (item.getPosition()) {
        case PV:
            // getPosition indicates that it's a PV, but check to please FindBugs
            if (item instanceof AlarmTreePV)
                pv = (AlarmTreePV) item;
            else
                throw new RuntimeException("Not a PV?");
            buf.append(Messages.AlarmPV);
            break;
        case Area:
            buf.append(Messages.AlarmArea);
            break;
        default:
            buf.append(Messages.AlarmComponent);
        }
        buf.append(": ");
        buf.append(item.getName());
        // Suppress alarm info for disabled PVs
        if (pv != null && pv.isEnabled() == false)
            return buf.toString();
        // Add alarm info unless it's all OK
        if (item.getCurrentSeverity() != SeverityLevel.OK || item.getSeverity() != SeverityLevel.OK) {
            buf.append(" (");
            buf.append(item.getSeverity().getDisplayName());
            buf.append('/');
            buf.append(item.getMessage());
            if (pv != null) {
                buf.append(',');
                buf.append(pv.getCurrentSeverity().getDisplayName());
                buf.append('/');
                buf.append(pv.getCurrentMessage());
            }
            buf.append(')');
        }
        return buf.toString();
    }
}