Package org.fusesource.ide.camel.editor.views.diagram

Source Code of org.fusesource.ide.camel.editor.views.diagram.DiagramGraphLabelProvider

/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
*     Red Hat, Inc. - initial API and implementation
******************************************************************************/

package org.fusesource.ide.camel.editor.views.diagram;

import java.text.NumberFormat;
import java.util.HashSet;
import java.util.Set;

import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.zest.core.viewers.EntityConnectionData;
import org.eclipse.zest.core.viewers.GraphViewer;
import org.eclipse.zest.core.viewers.IConnectionStyleProvider;
import org.eclipse.zest.core.viewers.IEntityStyleProvider;
import org.eclipse.zest.core.widgets.ZestStyles;
import org.fusesource.ide.camel.editor.utils.DiagramUtils;
import org.fusesource.ide.camel.model.AbstractNode;
import org.fusesource.ide.camel.model.Flow;
import org.fusesource.ide.commons.tree.HasName;
import org.fusesource.ide.commons.util.Strings;
import org.fusesource.ide.graph.GraphLabelProviderSupport;
import org.fusesource.ide.jmx.commons.Activator;
import org.fusesource.ide.jmx.commons.messages.INodeStatistics;
import org.fusesource.ide.jmx.commons.messages.NodeStatisticsContainer;
import org.jboss.tools.jmx.core.tree.Node;
import org.jboss.tools.jmx.ui.ImageProvider;


public class DiagramGraphLabelProvider extends GraphLabelProviderSupport implements ILabelProvider,
IEntityStyleProvider, IConnectionStyleProvider,
ISelectionChangedListener {
  private final DiagramView view;
  private Set<AbstractNode> selectedConnections;
  private NumberFormat numberFormat = NumberFormat.getInstance();
  private boolean useNodeIdForLabel;

  public DiagramGraphLabelProvider(DiagramView view) {
    super(view.getViewer());
    this.view = view;
    numberFormat.setMaximumFractionDigits(1);
    numberFormat.setMinimumFractionDigits(0);
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
   */
  @Override
  public void selectionChanged(SelectionChangedEvent event) {
    GraphViewer viewer = getViewer();
    if (selectedConnections != null) {
      for (AbstractNode node : selectedConnections) {
        viewer.unReveal(node);
      }
      selectedConnections = null;
    }

    ISelection selection = event.getSelection();
    if (!selection.isEmpty() && selection instanceof IStructuredSelection) {
      selectedConnections = new HashSet<AbstractNode>();
      for (Object o : ((IStructuredSelection) selection).toList()) {
        if (o instanceof AbstractNode) {
          AbstractNode node = (AbstractNode) o;
          viewer.reveal(node);
          selectedConnections.add(node);
          /*
          AbstractNode output = (AbstractNode) o;
          for (AbstractNode node : output.getOutputs()) {
            viewer.reveal(node);
            selectedConnections.add(node);
          }
           */
        }
      }
    }

    Object[] connections = viewer.getConnectionElements();
    for (int i = 0; i < connections.length; i++) {
      viewer.update(connections[i], null);
    }
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
   */
  @Override
  public boolean isLabelProperty(Object element, String property) {
    return false;
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
   */
  @Override
  public void addListener(ILabelProviderListener listener) {
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
   */
  @Override
  public void removeListener(ILabelProviderListener listener) {
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
   */
  @Override
  public Image getImage(Object element) {
    if (isShowIcon()) {
      if (isRouteNode(element)) {
        AbstractNode node = (AbstractNode) element;
        return node.getSmallImage();
      }
      if (element instanceof ImageProvider) {
        ImageProvider node = (ImageProvider) element;
        return node.getImage();
      }
    }
    return null;
  }

  protected boolean isRouteNode(Object element) {
    return element instanceof AbstractNode && !(element instanceof Flow);
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
   */
  @Override
  public String getText(Object element) {
    try {
      if (isRouteNode(element)) {
        AbstractNode node = (AbstractNode) element;
        String label = DiagramUtils.filterFigureLabel(node.getDisplayText(useNodeIdForLabel));
        return label;
      } else if (element instanceof HasName) {
        HasName h = (HasName) element;
        return h.getName();
      } else if (element instanceof Flow) {
        Flow flow = (Flow) element;
        INodeStatistics stats = getStatsFor(flow);
        if (stats != null) {
          return statsLabel(stats);
        } else {
          return null;
        }
      } else if (element instanceof Node){
        return Strings.getOrElse(element, null);
      } else {
        // TODO use a strategy to display some label text...
        // e.g. timing stuff??
        return null;
      }
    } catch (Exception e) {
      Activator.getLogger().warning("Caught exception trying to get label: " + e, e);
      return null;
    }
  }


  /*
   * (non-Javadoc)
   * @see org.eclipse.zest.core.viewers.IEntityStyleProvider#getTooltip(java.lang.Object)
   */
  @Override
  public IFigure getTooltip(Object entity) {
    if (isRouteNode(entity)) {
      AbstractNode node = (AbstractNode) entity;
      String label = node.getDisplayToolTip();

      String id = node.getId();
      if (id != null) {
        label = "[" + id + "] " + label;
      }
      // TODO add link to docs!
      return new Label(label);
    } else if (entity instanceof Flow) {
      Flow flow = (Flow) entity;
      INodeStatistics stats = getStatsFor(flow);
      if (stats != null) {
        return statsToolTip(stats);
      } else {
        return null;
      }
    } else if (entity instanceof Node) {
    }
    return null;
  }

  protected INodeStatistics getStatsFor(Flow flow) {
    NodeStatisticsContainer traceExchangeList = view.getNodeStatisticsContainer();
    INodeStatistics stats = null;
    AbstractNode node = flow.getTarget();
    if (traceExchangeList != null && node != null) {
      stats = traceExchangeList.getNodeStats(node.getId());
    }
    return stats;
  }

  protected String statsLabel(INodeStatistics stats) {
    long counter = stats.getCounter();
    if (counter > 0) {
      return "Total: " + counter;
    } else {
      return "";
    }
  }

  protected IFigure statsToolTip(INodeStatistics stats) {
    long counter = stats.getCounter();
    if (counter > 0) {
      return new Label("Exchanges total: " + counter + " / mean time: " + numberFormat.format(stats.getMeanElapsedTime())
          + " / max time: " + numberFormat.format(stats.getMaxElapsedTime())
          + " / min time: " + numberFormat.format(stats.getMinElapsedTime()));
    } else {
      return null;
    }
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.zest.core.viewers.IEntityStyleProvider#fisheyeNode(java.lang.Object)
   */
  @Override
  public boolean fisheyeNode(Object entity) {
    return false;
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.zest.core.viewers.IEntityStyleProvider#getBorderWidth(java.lang.Object)
   */
  @Override
  public int getBorderWidth(Object entity) {
    return 1;
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.zest.core.viewers.IEntityStyleProvider#getBorderColor(java.lang.Object)
   */
  @Override
  public Color getBorderColor(Object entity) {
    return Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY);
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.zest.core.viewers.IEntityStyleProvider#getBorderHighlightColor(java.lang.Object)
   */
  @Override
  public Color getBorderHighlightColor(Object entity) {
    return Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY);
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.zest.core.viewers.IEntityStyleProvider#getForegroundColour(java.lang.Object)
   */
  @Override
  public Color getForegroundColour(Object entity) {
    //    return null;
    return Display.getDefault().getSystemColor(SWT.COLOR_BLACK);
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.zest.core.viewers.IEntityStyleProvider#getBackgroundColour(java.lang.Object)
   */
  @Override
  public Color getBackgroundColour(Object entity) {
    if (isRouteNode(entity)) {
    }
    return null;
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.zest.core.viewers.IEntityStyleProvider#getNodeHighlightColor(java.lang.Object)
   */
  @Override
  public Color getNodeHighlightColor(Object entity) {
    if (isRouteNode(entity)) {
    }
    return null;
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getLineWidth(java.lang.Object)
   */
  @Override
  public int getLineWidth(Object rel) {
    int lineWidth = 1;
    // rel is a Flow...
    if (isRouteNode(rel)) {
      if (selectedConnections != null
          && selectedConnections.contains(rel)) {
        return lineWidth;
      }

    } else if (rel instanceof EntityConnectionData) {
      if (selectedConnections != null
          && selectedConnections.contains(rel)) {
        return lineWidth;
      }
    }
    return 0;
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getHighlightColor(java.lang.Object)
   */
  @Override
  public Color getHighlightColor(Object rel) {
    return null;
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getColor(java.lang.Object)
   */
  @Override
  public Color getColor(Object rel) {
    return Display.getDefault().getSystemColor(SWT.COLOR_BLACK);
  }

  /*
   * (non-Javadoc)
   * @see org.eclipse.zest.core.viewers.IConnectionStyleProvider#getConnectionStyle(java.lang.Object)
   */
  @Override
  public int getConnectionStyle(Object rel) {
    return ZestStyles.CONNECTIONS_DOT | ZestStyles.CONNECTIONS_DIRECTED;
  }
}
TOP

Related Classes of org.fusesource.ide.camel.editor.views.diagram.DiagramGraphLabelProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.