com.netxforge.netxstudio.screens.f1.support.MonitoringTreeLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for com.netxforge.netxstudio.screens.f1.support.MonitoringTreeLabelProvider.java

Source

/*******************************************************************************
 * Copyright (c) Jun 24, 2011 NetXForge.
 * 
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details. You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>
 * 
 * Contributors: Christophe Bouhier - initial API and implementation and/or
 * initial documentation
 *******************************************************************************/
package com.netxforge.netxstudio.screens.f1.support;

import java.util.Set;

import org.eclipse.core.databinding.observable.map.IMapChangeListener;
import org.eclipse.core.databinding.observable.map.IObservableMap;
import org.eclipse.core.databinding.observable.map.MapChangeEvent;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.StyledString.Styler;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.graphics.Image;
import org.eclipse.wb.swt.ResourceManager;

import com.netxforge.base.NonModelUtils;
import com.netxforge.base.Tuple;
import com.netxforge.netxstudio.common.model.IMonitoringSummary;
import com.netxforge.netxstudio.common.model.IMonitoringSummary.RAG;
import com.netxforge.netxstudio.common.model.MonitoringStateModel;
import com.netxforge.netxstudio.generics.GenericsPackage;
import com.netxforge.netxstudio.library.NetXResource;
import com.netxforge.netxstudio.metrics.MetricValueRange;
import com.netxforge.netxstudio.operators.Node;
import com.netxforge.netxstudio.operators.Operator;
import com.netxforge.netxstudio.operators.OperatorsPackage;
import com.netxforge.netxstudio.screens.f3.support.NetworkTreeLabelProvider;
import com.netxforge.netxstudio.services.RFSService;
import com.netxforge.screens.editing.base.ScreenUtil;

public class MonitoringTreeLabelProvider extends StyledCellLabelProvider {

    private IMapChangeListener mapChangeListener = new IMapChangeListener() {

        public void handleMapChange(MapChangeEvent event) {
            Set<?> affectedElements = event.diff.getChangedKeys();
            if (!affectedElements.isEmpty()) {
                LabelProviderChangedEvent newEvent = new LabelProviderChangedEvent(MonitoringTreeLabelProvider.this,
                        affectedElements.toArray());
                fireLabelProviderChanged(newEvent);
            }
        }
    };
    private NetworkTreeLabelProvider networkTreeLabelProvider;

    @SuppressWarnings("unused")
    private Styler ragRedStyler;
    @SuppressWarnings("unused")
    private Styler ragAmberStyler;
    @SuppressWarnings("unused")
    private Styler ragGreenStyler;
    @SuppressWarnings("unused")
    private Styler ragYellowStyler;

    public MonitoringTreeLabelProvider(MonitoringStateModel stateModel, IObservableMap... attributeMaps) {

        for (int i = 0; i < attributeMaps.length; i++) {
            attributeMaps[i].addMapChangeListener(mapChangeListener);
        }
        networkTreeLabelProvider = new NetworkTreeLabelProvider(attributeMaps);
    }

    @Override
    public void update(ViewerCell cell) {

        switch (cell.getColumnIndex()) {
        case 0: {
            processColumn0(cell);
        }
            break;
        default: {
            processRagColumns(cell);
        }
            break;

        }
    }

    private void processColumn0(ViewerCell cell) {
        Object element = cell.getElement();

        if (element instanceof Operator) {
            Operator o = (Operator) element;

            StyledString styledString = new StyledString(
                    o.eIsSet(GenericsPackage.Literals.COMPANY__NAME) ? o.getName() : "?", null);
            // String decoration = " (" + tt.getFunctions() + " Functions)"
            // + " (" + tt.getEquipments() + " Equipments)";
            // styledString.append(decoration, StyledString.COUNTER_STYLER);
            cell.setText(styledString.getString());
            Image img = ResourceManager.getPluginImage("com.netxforge.netxstudio.models.edit",
                    "icons/full/obj16/Company_H.png");
            cell.setImage(img);
            cell.setStyleRanges(styledString.getStyleRanges());

        } else if (element instanceof RFSService) {

            RFSService nt = (RFSService) element;

            StyledString styledString = new StyledString(nt.getServiceName() != null ? nt.getServiceName() : "?",
                    null);
            // String decoration = " (" + tt.getFunctions() + " Functions)"
            // + " (" + tt.getEquipments() + " Equipments)";
            // styledString.append(decoration, StyledString.COUNTER_STYLER);
            cell.setText(styledString.getString());
            Image img = ResourceManager.getPluginImage("com.netxforge.netxstudio.models.edit",
                    "icons/full/obj16/Service_H.png");
            cell.setImage(img);
            cell.setStyleRanges(styledString.getStyleRanges());
        } else if (element instanceof NetXResource) {
            NetXResource res = (NetXResource) element;
            StyledString styledString = new StyledString(res.getShortName() != null ? res.getShortName() : "?",
                    null);
            cell.setText(styledString.getString());
            Image img = ResourceManager.getPluginImage("com.netxforge.netxstudio.models.edit",
                    "icons/full/obj16/NetXResource_H.gif");
            cell.setImage(img);
            cell.setStyleRanges(styledString.getStyleRanges());

        } else if (element instanceof MetricValueRange) {

            MetricValueRange mvr = (MetricValueRange) element;
            int size = mvr.getMetricValues().size();

            Tuple interval = NonModelUtils.interval(mvr.getIntervalHint());
            StyledString styledString = new StyledString(
                    interval.getKey() + " : " + mvr.getKindHint() + " : (" + new Integer(size).toString() + ")");
            cell.setText(styledString.getString());
            cell.setStyleRanges(styledString.getStyleRanges());

        } else {

            networkTreeLabelProvider.update(cell);
        }
    }

    private void processRagColumns(ViewerCell cell) {
        Object element = cell.getElement();

        if (element instanceof EObject) {

            // For node, we need to present the nodetype summary.
            if (element instanceof Node) {
                if (((EObject) element).eIsSet(OperatorsPackage.Literals.NODE__NODE_TYPE)) {
                    element = ((Node) element).getNodeType();
                }
            }

            if (!MonitoringStateModel.isAdapted((EObject) element)) {
                // We let our screen deal with calling the monitoring state
                // model.
                // System.out.println(" No monitor for: " + element);
            } else {
                IMonitoringSummary summary = MonitoringStateModel.getAdapted((EObject) element);

                StyledString styledString = backGroundAndStyleForRag(cell, summary);
                cell.setText(styledString.getString());
                cell.setStyleRanges(styledString.getStyleRanges());
            }
        }
    }

    /**
     * @param cell
     * @param summary
     * @param rag
     * @return
     */
    private StyledString backGroundAndStyleForRag(ViewerCell cell, IMonitoringSummary summary) {

        String rag = "";

        StyledString styledString;
        switch (cell.getColumnIndex()) {
        case 1: {
            backGroundForRag(cell, summary.totalRag(RAG.RED), ScreenUtil.RED_MARKER);
            rag = new Integer(summary.totalRag(RAG.RED)).toString();
        }
            break;
        case 2: {
            backGroundForRag(cell, summary.totalRag(RAG.AMBER), ScreenUtil.AMBER_MARKER);
            rag = new Integer(summary.totalRag(RAG.AMBER)).toString();
        }
            break;
        case 3: {
            backGroundForRag(cell, summary.totalRag(RAG.GREEN), ScreenUtil.GREEN_MARKER);
            rag = new Integer(summary.totalRag(RAG.GREEN)).toString();
        }
            break;
        }

        styledString = new StyledString(rag);

        return styledString;
    }

    private void backGroundForRag(ViewerCell cell, int ragValue, String symbolicName) {
        // Determine if R, A or G from the RAG status, set the styler.
        if (ragValue > 0) {
            // remember the previous background.
            cell.setBackground(JFaceResources.getColorRegistry().get(symbolicName));
        } else {
            cell.setBackground(null);
        }
    }

}