Package org.gephi.preview.supervisors

Source Code of org.gephi.preview.supervisors.EdgeSupervisorImpl

/*
Copyright 2008-2010 Gephi
Authors : Jeremy Subtil <jeremy.subtil@gephi.org>
Website : http://www.gephi.org

This file is part of Gephi.

Gephi is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

Gephi 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 Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with Gephi.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.gephi.preview.supervisors;

import java.awt.Font;
import java.util.Set;
import org.gephi.preview.EdgeImpl;
import org.gephi.preview.EdgeLabelImpl;
import org.gephi.preview.GraphImpl;
import org.gephi.preview.api.EdgeChildColorizer;
import org.gephi.preview.api.EdgeColorizer;
import org.gephi.preview.api.PreviewController;
import org.gephi.preview.api.supervisors.EdgeSupervisor;
import org.gephi.preview.api.supervisors.GlobalEdgeSupervisor;
import org.gephi.preview.updaters.LabelFontAdjuster;
import org.gephi.preview.updaters.LabelShortener;
import org.gephi.visualization.api.VisualizationController;
import org.openide.util.Lookup;

/**
* Edge supervisor implementation.
*
* @author Jérémy Subtil <jeremy.subtil@gephi.org>
*/
public abstract class EdgeSupervisorImpl implements EdgeSupervisor {

    protected Boolean curvedFlag;
    protected EdgeColorizer colorizer;
    protected Boolean showLabelsFlag;
    protected Boolean shortenLabelsFlag;
    protected Integer labelMaxChar;
    protected Font baseLabelFont;
    protected EdgeChildColorizer labelColorizer;
    protected Float edgeScale;
    protected Boolean rescaleWeight;
    protected VisualizationController visualizationController;

    /**
     * Adds the given edge to the list of the supervised edges.
     *
     * It updates the edges with the supervisor's values.
     *
     * @param edge  the edge to supervise
     */
    public void addEdge(EdgeImpl edge) {
        getSupervisedEdges().add(edge);
        colorEdge(edge);
        colorEdgeLabel(edge);
        updateEdgeLabelValue(edge);
        adjustEdgeLabelFont(edge);

        if (visualizationController == null) {
            visualizationController = Lookup.getDefault().lookup(VisualizationController.class);
        }

        float weight = edge.getThickness();
        float min = edge.getMetaEdge() ? edge.getGraph().getMinMetaWeight() : edge.getGraph().getMinWeight();
        float max = edge.getMetaEdge() ? edge.getGraph().getMaxMetaWeight() : edge.getGraph().getMaxWeight();
        if (rescaleWeight) {
            if (!Double.isInfinite(min) && !Double.isInfinite(max) && max != min) {
                float ratio = (GraphImpl.WEIGHT_MAXIMUM - GraphImpl.WEIGHT_MINIMUM) / (max - min);
                weight = (weight - min) * ratio + GraphImpl.WEIGHT_MINIMUM;
            }
        } else if (min <= 0) {
            weight += Math.abs(min) + 1;
        }

        if (edge.getMetaEdge() && visualizationController != null) {
            weight *= visualizationController.getMetaEdgeScale();
        }

        edge.setThickness(weight);
    }

    public void clearSupervised() {
        getSupervisedEdges().clear();
    }

    /**
     * Returns the global edge supervisor.
     *
     * @return the controller's global edge supervisor
     */
    public GlobalEdgeSupervisor getGlobalEdgeSupervisor() {
        PreviewController controller = Lookup.getDefault().lookup(PreviewController.class);
        return controller.getModel().getGlobalEdgeSupervisor();
    }

    public Float getEdgeScale() {
        return edgeScale;
    }

    public void setEdgeScale(Float scale) {
        this.edgeScale = scale;
    }

    public Boolean getShowFlag() {
        return getGlobalEdgeSupervisor().getShowFlag();
    }

    public Boolean getCurvedFlag() {
        return curvedFlag;
    }

    public void setCurvedFlag(Boolean value) {
        curvedFlag = value;
    }

    public EdgeColorizer getColorizer() {
        return colorizer;
    }

    public void setColorizer(EdgeColorizer value) {
        colorizer = value;
        colorEdges();
    }

    public Boolean getShowLabelsFlag() {
        return showLabelsFlag;
    }

    public void setShowLabelsFlag(Boolean value) {
        showLabelsFlag = value;
    }

    public Font getBaseLabelFont() {
        return baseLabelFont;
    }

    public void setBaseLabelFont(Font value) {
        baseLabelFont = value;
        adjustEdgeLabelFonts();
    }

    public Integer getLabelMaxChar() {
        return labelMaxChar;
    }

    public void setLabelMaxChar(Integer value) {
        labelMaxChar = value;
        updateEdgeLabelValues();
    }

    public Boolean getShortenLabelsFlag() {
        return shortenLabelsFlag;
    }

    public void setShortenLabelsFlag(Boolean value) {
        shortenLabelsFlag = value;
        updateEdgeLabelValues();
    }

    public EdgeChildColorizer getLabelColorizer() {
        return labelColorizer;
    }

    public void setLabelColorizer(EdgeChildColorizer value) {
        labelColorizer = value;
        colorEdgeLabels();
    }

    public Boolean getRescaleWeight() {
        return rescaleWeight;
    }

    public void setRescaleWeight(Boolean rescaleWeight) {
        this.rescaleWeight = rescaleWeight;
    }

    /**
     * Returns the set of the supervised edges.
     *
     * @return the set of the supervised edges
     */
    protected abstract Set<EdgeImpl> getSupervisedEdges();

    /**
     * Colors the given edge.
     *
     * @param edge  the edge to color
     */
    private void colorEdge(EdgeImpl edge) {
        colorizer.color(edge);
    }

    /**
     * Colors the supervised edges.
     */
    private void colorEdges() {
        for (EdgeImpl e : getSupervisedEdges()) {
            colorEdge(e);
        }
    }

    /**
     * Colors the given edge label.
     *
     * @param edgeLabel  the edge label to color
     */
    private void colorEdgeLabel(EdgeLabelImpl edgeLabel) {
        labelColorizer.color(edgeLabel);
    }

    /**
     * Colors the label of the given edge.
     *
     * @param edge  the edge to color the label
     */
    private void colorEdgeLabel(EdgeImpl edge) {
        if (edge.hasLabel()) {
            colorEdgeLabel(edge.getLabel());
        }
    }

    /**
     * Colors the labels of the supervised edges.
     */
    private void colorEdgeLabels() {
        for (EdgeImpl e : getSupervisedEdges()) {
            colorEdgeLabel(e);
        }
    }

    /**
     * Updates the edge label by shortening its value or by reverting its
     * original one.
     */
    private void updateEdgeLabelValue(EdgeImpl edge) {
        if (shortenLabelsFlag) {
            shortenEdgeLabel(edge);
        } else {
            revertEdgeLabel(edge);
        }
    }

    /**
     * Updates the edge labels by shortening their values or by reverting their
     * original ones.
     */
    private void updateEdgeLabelValues() {
        if (shortenLabelsFlag) {
            shortenEdgeLabels();
        } else {
            revertEdgeLabels();
        }
    }

    /**
     * Shortens the given edge label.
     *
     * @param edgeLabel  the edge label to shorten
     */
    private void shortenEdgeLabel(EdgeLabelImpl edgeLabel) {
        LabelShortener.shortenLabel(edgeLabel, labelMaxChar);
    }

    /**
     * Shortens the label of the given edge.
     *
     * @param edge  the edge to shorten the label
     */
    private void shortenEdgeLabel(EdgeImpl edge) {
        if (edge.hasLabel()) {
            shortenEdgeLabel(edge.getLabel());
        }
    }

    /**
     * Shortens the labels of the supervised edges.
     */
    private void shortenEdgeLabels() {
        for (EdgeImpl e : getSupervisedEdges()) {
            shortenEdgeLabel(e);
        }
    }

    /**
     * Reverts the original value of the the given edge label.
     *
     * @param edge  the edge label to revert the original value
     */
    private void revertEdgeLabel(EdgeLabelImpl edgeLabel) {
        LabelShortener.revertLabel(edgeLabel);
    }

    /**
     * Reverts the label of the given edge.
     *
     * @param edge  the edge to revert the label
     */
    private void revertEdgeLabel(EdgeImpl edge) {
        if (edge.hasLabel()) {
            revertEdgeLabel(edge.getLabel());
        }
    }

    /**
     * Reverts the labels of the supervised edges.
     */
    private void revertEdgeLabels() {
        for (EdgeImpl e : getSupervisedEdges()) {
            revertEdgeLabel(e);
        }
    }

    /**
     * Adjusts the font of the given edge label.
     *
     * @param label  the edge label to adjust the font
     */
    private void adjustEdgeLabelFont(EdgeLabelImpl label) {
        LabelFontAdjuster.adjustFont(label);
    }

    /**
     * Adjusts the label font of a given edge.
     *
     * @param edge  the edge to adjust the label font
     */
    private void adjustEdgeLabelFont(EdgeImpl edge) {
        if (edge.hasLabel()) {
            adjustEdgeLabelFont(edge.getLabel());
        }
    }

    /**
     * Adjusts the label fonts of the supervised edges.
     */
    private void adjustEdgeLabelFonts() {
        for (EdgeImpl e : getSupervisedEdges()) {
            adjustEdgeLabelFont(e);
        }
    }
}
TOP

Related Classes of org.gephi.preview.supervisors.EdgeSupervisorImpl

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.