/** * Copyright (C) 2001-2017 by RapidMiner and the contributors * * Complete list of developers available at our web site: * * http://rapidminer.com * * This program 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. * * 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 * Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.gui.graphs; import java.awt.Paint; import java.util.Set; import javax.swing.JComponent; import org.apache.commons.collections15.Transformer; import edu.uci.ics.jung.graph.Graph; import edu.uci.ics.jung.visualization.VisualizationViewer; import edu.uci.ics.jung.visualization.renderers.Renderer; /** * Creates a graph which can be displayed by the graph viewer. This class serves as a sort of graph * model combined with some methods tuning the displaying of nodes and edges in the graph. * * @author Ingo Mierswa, Marco Boeck */ public interface GraphCreator<V, E> { public static final int EDGE_SHAPE_LINE = 0; public static final int EDGE_SHAPE_QUAD_CURVE = 1; public static final int EDGE_SHAPE_CUBIC_CURVE = 2; public static final int EDGE_SHAPE_BENT_LINE = 3; public static final int EDGE_SHAPE_WEDGE = 4; /** Creates the graph. */ public Graph<V, E> createGraph(); /** * Returns the name that should be displayed in each vertex. May return null (no name will be * shown for this node). */ public String getVertexName(V id); /** * Returns the text that should be displayed as tool tip for each vertex. May return null (no * tool tip will be shown for this node). */ public String getVertexToolTip(V id); /** * Returns the text that should be displayed at the edge with the given id. May return null (no * text will be shown for this edge). */ public String getEdgeName(E id); /** Returns the strength of the edge. Should be normalized between 0 and 1. */ public double getEdgeStrength(E id); /** * Returns the shape of the edges. Must be one out of the constants {@link #EDGE_SHAPE_LINE}, * {@link #EDGE_SHAPE_QUAD_CURVE}, {@link #EDGE_SHAPE_CUBIC_CURVE}, * {@link #EDGE_SHAPE_BENT_LINE}, or {@link #EDGE_SHAPE_WEDGE}. */ public int getEdgeShape(); /** * Returns the minimal height for leafs. Might be important for graphs where the leafs should be * rendered in some specialized way. May return -1 (no minimal height). */ public int getMinLeafHeight(); /** * Returns the minimal width for leafs. Might be important for graphs where the leafs should be * rendered in some specialized way. May return -1 (no minimal width). */ public int getMinLeafWidth(); /** Returns true if the vertex with the given id should use a bold font. */ public boolean isBold(V id); /** Returns true if the edge labels should be rotated. */ public boolean isRotatingEdgeLabels(); /** * Returns the transformer which maps vertices to the paint (color) used for drawing. May return * null. */ public Transformer<V, Paint> getVertexPaintTransformer(VisualizationViewer<V, E> viewer); /** Returns the renderer used for the nodes. May return null (use default renderer). */ public Renderer.Vertex<V, E> getVertexRenderer(); /** Returns the renderer used for node labels. May return null (use default renderer). */ public Renderer.VertexLabel<V, E> getVertexLabelRenderer(); /** Returns the renderer for edge labels. May return null (use default renderer). */ public Renderer.EdgeLabel<V, E> getEdgeLabelRenderer(); /** Returns true if the edge label should be decorated. */ public boolean isEdgeLabelDecorating(); /** Returns true if the node with the given id is a leaf. */ public boolean isLeaf(V id); /** * Returns the viewer for objects. Will be notified after clicks on nodes. May return null (no * object viewer is used). */ public GraphObjectViewer getObjectViewer(); /** * Returns the object for the given id, e.g. a cluster node. The result of this method will be * given to the object viewer after a mouse click. */ public Object getObject(V id); /** * Returns the number of option componenents which will be added to the control panel of the * {@link GraphViewer}. */ public int getNumberOfOptionComponents(); /** * Returns the desired option componenents which will be added to the control panel of the * {@link GraphViewer}. */ public JComponent getOptionComponent(GraphViewer<?, ?> viewer, int index); /** * Returns the label offset. In most case, using -1 is just fine (default offset). Some tree * like graphs might prefer to use 0 since they manage the offset themself. */ public int getLabelOffset(); /** Indicates if the edge labels should be initially shown. */ public boolean showEdgeLabelsDefault(); /** Indicates if the vertex labels should be initially shown. */ public boolean showVertexLabelsDefault(); /** For directed graphs, the edges on the path back to the root will return true. */ public default boolean isEdgeOnSelectedPath(Set<V> selectedVertexes, E id) { return false; } /** For directed graphs, the vertices on the path back to the root will return true. */ public default boolean isVertexOnSelectedPath(Set<V> selectedVertexes, V id) { return false; } /** * Returns the scale of the vertex. Should be normalized between 0 and 1. Only used if * {@link #isVertexCircle()} returns {@code true}. */ public default double getVertexScale(V id) { return 1d; } /** * Returns if the given vertex should be displayed as a perfect circle. Otherwise it will be * displayed as ellipsis. Note that circle vertexes will NOT care about their vertex label size * and assume a default size, scaled by {@link #getVertexScale(Object)}. Default: {@code false} */ public default boolean isVertexCircle(V id) { return false; } }