/*
* Copyright (c) 2005, Gaudenz Alder
* Copyright (c) 2005-2006, David Benson
*
*/
package com.jgraph.example.portlabels;
import java.awt.Color;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.net.URL;
import java.util.Hashtable;
import java.util.Map;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import org.jgraph.JGraph;
import com.jgraph.example.JGraphGraphFactory;
import org.jgraph.example.GraphEd;
import org.jgraph.graph.DefaultCellViewFactory;
import org.jgraph.graph.DefaultGraphCell;
import org.jgraph.graph.DefaultPort;
import org.jgraph.graph.EdgeView;
import org.jgraph.graph.GraphConstants;
import org.jgraph.graph.PortView;
import org.jgraph.graph.VertexView;
/**
* An example applet that demonstrates how to improve the performance of
* JGraph and reduce its memory footprint
*/
public class PortLabelGraph extends GraphEd {
/**
* JGraph Factory instance for random new graphs
*/
protected JGraphGraphFactory graphFactory;
/**
* Reference to the layout dialog which is used to configure the current
* layout.
*/
protected JDialog sampleDialog = null;
/**
* Constructs a new example
*/
public PortLabelGraph() {
graph.getGraphLayoutCache().setFactory(new DefaultCellViewFactory() {
/**
* Constructs an EdgeView view for the specified object.
*/
protected EdgeView createEdgeView(Object cell) {
return new EdgeView(cell);
}
/**
* Constructs a PortView view for the specified object.
*/
protected PortView createPortView(Object cell) {
return new PortView(cell);
}
/**
* Constructs a VertexView view for the specified object.
*/
protected VertexView createVertexView(Object cell) {
if (cell instanceof PortLabelCell) {
return new PortLabelVertexView(cell);
} else {
return new VertexView(cell);
}
}
});
}
/**
* Hook from GraphEd to set attributes of a new cell
*/
public Map createCellAttributes(Point2D point) {
Map map = new Hashtable();
// Add a Border Color Attribute to the Map
GraphConstants.setBorderColor(map, Color.black);
// Add a White Background
GraphConstants.setBackground(map, Color.white);
// Set autosize
GraphConstants.setAutoSize(map, true);
// Move the label of the vertex to the bottom
GraphConstants.setVerticalAlignment(map, JLabel.BOTTOM);
return map;
}
/**
* Create vertex with random numbers of ports that have labels
*/
protected DefaultGraphCell createDefaultGraphCell() {
DefaultGraphCell cell = new PortLabelCell("Cell "
+ new Integer(cellCount++));
// Add a random number of ports on either side of the vertex
Random random = new Random();
double numLeftSidePorts = random.nextInt(6) + 2;
double numRightSidePorts = random.nextInt(6) + 2;
double height = Math.max(numLeftSidePorts, numRightSidePorts);
for (double i=1.0; i <= height ;i++) {
if (i <= numLeftSidePorts) {
DefaultPort port = new DefaultPort("(0, GraphConstants.PERMILLE / " + new Double(i / (numLeftSidePorts+1)) + ")");
Point2D point = new Point2D.Double(0,
i * (GraphConstants.PERMILLE / (numLeftSidePorts+1)));
GraphConstants.setOffset(port.getAttributes(), point);
GraphConstants.setBackground(port.getAttributes(), Color.RED);
cell.add(port);
}
if (i <= numRightSidePorts) {
DefaultPort port = new DefaultPort("(GraphConstants.PERMILLE, GraphConstants.PERMILLE / " + new Double(i / (numRightSidePorts+1)) + ")");
Point2D point = new Point2D.Double(GraphConstants.PERMILLE,
i * (GraphConstants.PERMILLE / (numRightSidePorts+1)));
GraphConstants.setOffset(port.getAttributes(), point);
GraphConstants.setBackground(port.getAttributes(), Color.YELLOW);
cell.add(port);
}
}
height *= 50;
Map map = cell.getAttributes();
// Add a Bounds Attribute to the Map
GraphConstants.setBounds(map, new Rectangle2D.Double(20,
20, 160, height));
return cell;
}
/**
* Main method
*/
public static void main(String[] args) {
try {
// Construct Frame
JFrame frame = new JFrame(JGraph.VERSION);
// Set Close Operation to Exit
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Add an Editor Panel
PortLabelGraph portLabelGraph = new PortLabelGraph();
frame.getContentPane().add(portLabelGraph);
// Fetch URL to Icon Resource
URL jgraphUrl = PortLabelGraph.class.getClassLoader().getResource(
"org/jgraph/example/resources/jgraph.gif");
// If Valid URL
if (jgraphUrl != null) {
// Load Icon
ImageIcon jgraphIcon = new ImageIcon(jgraphUrl);
// Use in Window
frame.setIconImage(jgraphIcon.getImage());
}
// Set Default Size
frame.setSize(640, 480);
// Show Frame
frame.setVisible(true);
portLabelGraph.init();
} catch (Exception e) {
e.printStackTrace();
}
}
}