Package org.apache.ivyde.eclipse.resolvevisualizer

Source Code of org.apache.ivyde.eclipse.resolvevisualizer.IvyNodeLabelProvider

/*
*  Licensed to the Apache Software Foundation (ASF) under one or more
*  contributor license agreements.  See the NOTICE file distributed with
*  this work for additional information regarding copyright ownership.
*  The ASF licenses this file to You under the Apache License, Version 2.0
*  (the "License"); you may not use this file except in compliance with
*  the License.  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*
*/
package org.apache.ivyde.eclipse.resolvevisualizer;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.ivyde.eclipse.IvyPlugin;
import org.apache.ivyde.eclipse.resolvevisualizer.label.ConfigurationConflictAlgorithm;
import org.apache.ivyde.eclipse.resolvevisualizer.label.ConnectionStyle;
import org.apache.ivyde.eclipse.resolvevisualizer.label.DirectDependenciesAlgorithm;
import org.apache.ivyde.eclipse.resolvevisualizer.label.ILabelDecoratorAlgorithm;
import org.apache.ivyde.eclipse.resolvevisualizer.label.ShortestRootPathAlgorithm;
import org.apache.ivyde.eclipse.resolvevisualizer.model.IvyNodeElement;
import org.eclipse.draw2d.ColorConstants;
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.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;

/**
* Alters the color of the labels and connections based on the selected analysis algorithm.
*/
public class IvyNodeLabelProvider implements ILabelProvider, IConnectionStyleProvider, IEntityStyleProvider {
    public Color GRAY = new Color(Display.getDefault(), 128, 128, 128);
    public Color LIGHT_GRAY = new Color(Display.getDefault(), 220, 220, 220);
    public Color BLACK = new Color(Display.getDefault(), 0, 0, 0);
    public Color RED = new Color(Display.getDefault(), 255, 0, 0);
    public Color LIGHT_GREEN = new Color(Display.getDefault(), 96, 255, 96);

    private IvyNodeElement selected = null;
    private IvyNodeElement rootNode = null;
    private Map/* <EntityConnectionData, Color> */highlightedRelationships = new HashMap/* <EntityConnectionData, Color> */();
    private Map/* <IvyNodeElement, Color> */highlightedDependencies = new HashMap/* <IvyNodeElement, Color> */();
    private Color disabledColor = null;
    private IvyNodeElement pinnedNode = null;
    private GraphViewer viewer;

    private ILabelDecoratorAlgorithm autoSelectDecorator = new ShortestRootPathAlgorithm();
    private DirectDependenciesAlgorithm rootDirectDependenciesDecorator = new DirectDependenciesAlgorithm();;
    private ConfigurationConflictAlgorithm conflictDecorator = new ConfigurationConflictAlgorithm();

    private Color rootColor;
    private Color rootSelectedColor;

    public IvyNodeLabelProvider(GraphViewer viewer) {
        this.viewer = viewer;
        this.rootDirectDependenciesDecorator.setStyles(new Color(Display.getDefault(), 197, 237, 197),
                new ConnectionStyle(ZestStyles.CONNECTIONS_SOLID, new Color(Display.getDefault(), 175, 175, 175), 1,
                        false));
    }

    public Image getImage(Object element) {
        if (element instanceof IvyNodeElement) {
            IvyNodeElement node = (IvyNodeElement) element;
            if (node.isEvicted()) {
                return ResolveVisualizerPlugin.getImageDescriptor("icons/evicted.gif").createImage();
            }
        }

        return null;
    }

    public String getText(Object element) {
        if (element instanceof IvyNodeElement) {
            IvyNodeElement node = (IvyNodeElement) element;
            String text = node.getOrganization() + "#" + node.getName() + ";";
            if (node.getRevision().indexOf("working@") != -1)
                text += "WORKSPACE";
            else
                text += node.getRevision();
            return text;
        }

        return "";
    }

    public void addListener(ILabelProviderListener listener) {
    }

    public void removeListener(ILabelProviderListener listener) {
    }

    public boolean isLabelProperty(Object element, String property) {
        return false;
    }

    /**
     * Colors all connections regardless of their selection status.
     */
    public Color getColor(Object rel) {
        if (highlightedRelationships.keySet().contains(rel)) {
            ConnectionStyle style = (ConnectionStyle) highlightedRelationships.get(rel);
            return style.getHighlightColor();
        }
        return LIGHT_GRAY;
    }

    public int getConnectionStyle(Object rel) {
        return ZestStyles.CONNECTIONS_DIRECTED;
    }

    /**
     * Colors "highlighted" relationships. We want to differentiate between those highlighted programatically by the
     * auto-select mechanism, and those hand-selected by the user.
     */
    public Color getHighlightColor(Object rel) {
        if (highlightedRelationships.keySet().contains(rel)) {
            ConnectionStyle style = (ConnectionStyle) highlightedRelationships.get(rel);
            return style.getHighlightColor();
        }
        return ColorConstants.blue;
    }

    public Color getNodeHighlightColor(Object entity) {
        return null;
    }

    public int getLineWidth(Object rel) {
        if (highlightedRelationships.keySet().contains(rel)) {
            ConnectionStyle style = (ConnectionStyle) highlightedRelationships.get(rel);
            if (style.isRevealOnHighlight()) {
                return style.getLineWidth();
            }
        }
        return 1;
    }

    public Color getAdjacentEntityHighlightColor(Object entity) {
        return null;
    }

    public Color getBorderColor(Object entity) {
        if (this.selected != null || this.pinnedNode != null) {
            if (entity == this.selected || entity == this.pinnedNode) {
                return BLACK;
            } else if (highlightedDependencies.keySet().contains(entity)) {
                // If this entity is directly connected to the selected entity
                return BLACK;
            } else {
                return LIGHT_GRAY;
            }

        }

        return BLACK;
    }

    public Color getBorderHighlightColor(Object entity) {
        return null;
    }

    public int getBorderWidth(Object entity) {
        return 0;
    }

    public Color getBackgroundColour(Object entity) {

        if (entity == this.rootNode) {
            if (rootColor == null) {
                rootColor = LIGHT_GREEN;
            }
            return rootColor;
        }
        if (highlightedDependencies.keySet().contains(entity)) {
            return (Color) highlightedDependencies.get(entity); // viewer.getGraphControl().HIGHLIGHT_ADJACENT_COLOR;
        } else {
            return viewer.getGraphControl().DEFAULT_NODE_COLOR;
        }
    }

    public Color getForegroundColour(Object entity) {
        if (this.selected != null || this.pinnedNode != null) {
            if (entity == this.selected || this.pinnedNode == entity) {
                return BLACK;
            } else if (highlightedDependencies.keySet().contains(entity)) {
                // If this entity is directly connected to the selected entity
                return BLACK;
            } else {
                return GRAY;
            }

        }
        return BLACK;
    }

    public void setPinnedNode(IvyNodeElement pinnedNode) {
        this.pinnedNode = pinnedNode;
    }

    protected IvyNodeElement getSelected() {
        if (pinnedNode != null) {
            return pinnedNode;
        }
        return selected;
    }

    /**
     * Sets the current selection
     *
     * @param root
     * @param currentSelection
     */
    public void setCurrentSelection(IvyNodeElement root, IvyNodeElement currentSelection) {
        for (Iterator iter = highlightedRelationships.keySet().iterator(); iter.hasNext();) {
            EntityConnectionData entityConnectionData = (EntityConnectionData) iter.next();

            ConnectionStyle style = (ConnectionStyle) highlightedRelationships.get(entityConnectionData);
            if (style.isRevealOnHighlight()) {
                viewer.unReveal(entityConnectionData);
            }
        }

        this.rootNode = root;
        this.selected = null;
        this.selected = currentSelection;

        highlightedRelationships = new HashMap/* <EntityConnectionData, Color> */();
        highlightedDependencies = new HashMap/* <IvyNodeElement, Color> */();

        rootDirectDependenciesDecorator.calculateHighlighted(root, root, highlightedRelationships,
                highlightedDependencies);
        conflictDecorator.calculateHighlighted(root, root, highlightedRelationships, highlightedDependencies);

        if (this.selected != null || this.pinnedNode != null) {
            autoSelectDecorator.calculateHighlighted(root, selected, highlightedRelationships, highlightedDependencies);
        }

        Object[] connections = viewer.getConnectionElements();
        for (Iterator iter = highlightedRelationships.keySet().iterator(); iter.hasNext();) {
            Object entityConnectionData = iter.next();

            ConnectionStyle style = (ConnectionStyle) highlightedRelationships.get(entityConnectionData);
            if (style.isRevealOnHighlight()) {
                viewer.reveal(entityConnectionData);
            }
        }

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

    public void dispose() {
        if (this.disabledColor != null) {
            this.disabledColor.dispose();
            this.disabledColor = null;
        }
        if (this.rootColor != null) {
            this.rootColor.dispose();
            this.rootColor = null;
        }
        if (this.rootSelectedColor != null) {
            this.rootSelectedColor.dispose();
            this.rootSelectedColor = null;
        }
    }

    public IFigure getTooltip(Object entity) {
        if (entity instanceof EntityConnectionData) {
            EntityConnectionData connection = (EntityConnectionData) entity;
            IvyNodeElement source = (IvyNodeElement) connection.source;
            IvyNodeElement dest = (IvyNodeElement) connection.dest;

            String[] confs = dest.getCallerConfigurations(source);
            String tooltipText = "";
            for (int i = 0; i < confs.length; i++) {
                tooltipText += confs[i] + ", ";
            }
            return new Label(tooltipText.substring(0, tooltipText.length() - 2));
        }

        return null;
    }

    public boolean fisheyeNode(Object entity) {
        return false;
    }

    public void setAutoSelectDecorator(ILabelDecoratorAlgorithm decoratorAlgorithm) {
        this.autoSelectDecorator = decoratorAlgorithm;
    }
}
TOP

Related Classes of org.apache.ivyde.eclipse.resolvevisualizer.IvyNodeLabelProvider

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.