use of org.jgraph.JGraph in project cayenne by apache.
the class BaseGraphBuilder method buildGraph.
@Override
public void buildGraph(ProjectController mediator, DataChannelDescriptor domain, boolean doLayout) {
if (graph != null) {
// graph already built, exiting silently
return;
}
graph = new JGraph();
GraphModel model = new DefaultGraphModel();
graph.setModel(model);
setProjectController(mediator);
setDataDomain(domain);
GraphLayoutCache view = new GraphLayoutCache(model, new DefaultCellViewFactory());
graph.setGraphLayoutCache(view);
addMouseListeners();
entityCells = new HashMap<>();
createdObjects = new ArrayList<>();
relCells = new HashMap<>();
/*
* an array for entities that are not connected to anyone. We add them
* separately so that layout doesn't touch them
*/
List<DefaultGraphCell> isolatedObjects = new ArrayList<>();
/*
* 1. Add all entities
*/
for (DataMap map : domain.getDataMaps()) {
DefaultGraphCell mapCell = new DefaultGraphCell();
createdObjects.add(mapCell);
for (Entity entity : getEntities(map)) {
DefaultGraphCell cell = createEntityCell(entity);
// mapCell.add(cell);
// cell.setParent(mapCell);
List<DefaultGraphCell> array = !isIsolated(domain, entity) ? createdObjects : isolatedObjects;
array.add(cell);
// port
array.add((DefaultGraphCell) cell.getChildAt(0));
}
}
/*
* 2. Add all relationships
*/
for (DataMap map : domain.getDataMaps()) {
for (Entity entity : getEntities(map)) {
DefaultGraphCell sourceCell = entityCells.get(entity.getName());
postProcessEntity(entity, sourceCell);
}
}
view.insert(createdObjects.toArray());
setLayout(doLayout);
/*
* Adding isolated objects
*
* We're placing them so that they will take maximum space in left top
* corner. The sample order is below:
*
* 1 2 6 7... 3 5 8 ... 4 9... 10 ...
*/
addIsolatedObjects(isolatedObjects);
view.insert(isolatedObjects.toArray());
graph.getModel().addUndoableEditListener(this);
}
use of org.jgraph.JGraph in project cayenne by apache.
the class ZoomInAction method performAction.
@Override
public void performAction(ActionEvent e) {
JGraph graph = dataDomainGraphTab.getGraph();
graph.setScale(graph.getScale() * GraphBuilder.ZOOM_FACTOR);
}
use of org.jgraph.JGraph in project cayenne by apache.
the class SaveAsImageAction method performAction.
@Override
public void performAction(ActionEvent e) {
// find start directory in preferences
FSPath lastDir = getApplication().getFrameController().getLastDirectory();
// configure dialog
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
lastDir.updateChooser(chooser);
chooser.setAcceptAllFileFilterUsed(false);
String ext = "png";
chooser.addChoosableFileFilter(FileFilters.getExtensionFileFilter(ext, "PNG Images"));
int status = chooser.showSaveDialog(Application.getFrame());
if (status == JFileChooser.APPROVE_OPTION) {
lastDir.updateFromChooser(chooser);
String path = chooser.getSelectedFile().getPath();
if (!path.endsWith("." + ext)) {
path += "." + ext;
}
File file = new File(path);
try {
JGraph graph = dataDomainGraphTab.getGraph();
BufferedImage img = graph.getImage(null, 0);
if (file.exists()) {
int response = JOptionPane.showConfirmDialog(null, "Do you want to replace the existing file?", "Confirm", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (response != JOptionPane.YES_OPTION) {
return;
}
}
try (OutputStream out = new FileOutputStream(file)) {
ImageIO.write(img, ext, out);
out.flush();
}
} catch (IOException ex) {
logObj.error("Could not save image", ex);
JOptionPane.showMessageDialog(Application.getFrame(), "Could not save image.", "Error saving image", JOptionPane.ERROR_MESSAGE);
}
}
}
use of org.jgraph.JGraph in project cayenne by apache.
the class ZoomOutAction method performAction.
@Override
public void performAction(ActionEvent e) {
JGraph graph = dataDomainGraphTab.getGraph();
graph.setScale(graph.getScale() / GraphBuilder.ZOOM_FACTOR);
}
use of org.jgraph.JGraph in project cytoscape-impl by cytoscape.
the class JGraphLayoutWrapperTask method construct.
/**
* DOCUMENT ME!
*/
public void construct() {
canceled = false;
// initialize();
double currentProgress = 0;
double percentProgressPerIter = 0;
CyNetwork network = networkView.getModel();
// PrimeFinder.nextPrime(network.getNodeCount()));
Map j_giny_node_map = new HashMap();
// PrimeFinder.nextPrime(network.getNodeCount()));
Map giny_j_node_map = new HashMap();
// PrimeFinder.nextPrime(network.getEdgeCount()));
Map j_giny_edge_map = new HashMap();
taskMonitor.setStatusMessage("Executing Layout");
taskMonitor.setProgress(currentProgress / 100.0);
// Construct Model and Graph
//
GraphModel model = new DefaultGraphModel();
JGraph graph = new JGraph(model);
// Create Nested Map (from Cells to Attributes)
//
Map attributes = new Hashtable();
Set cells = new HashSet();
// update progress bar
currentProgress = 20;
taskMonitor.setProgress(currentProgress / 100.0);
percentProgressPerIter = 20 / (double) (nodesToLayOut.size());
// create Vertices
for (View<CyNode> node_view : nodesToLayOut) {
if (canceled)
return;
CyNode n = node_view.getModel();
DefaultGraphCell jcell = new DefaultGraphCell(n.getSUID());
// Set bounds
Rectangle2D bounds = new Rectangle2D.Double(node_view.getVisualProperty(BasicVisualLexicon.NODE_X_LOCATION), node_view.getVisualProperty(BasicVisualLexicon.NODE_Y_LOCATION), node_view.getVisualProperty(BasicVisualLexicon.NODE_WIDTH), node_view.getVisualProperty(BasicVisualLexicon.NODE_HEIGHT));
GraphConstants.setBounds(jcell.getAttributes(), bounds);
j_giny_node_map.put(jcell, n);
giny_j_node_map.put(n, jcell);
cells.add(jcell);
// update progress bar
currentProgress += percentProgressPerIter;
taskMonitor.setProgress(currentProgress / 100.0);
}
// update progress bar
percentProgressPerIter = 20 / (double) (networkView.getEdgeViews().size());
for (CyEdge edge : network.getEdgeList()) {
if (canceled)
return;
DefaultGraphCell j_source = (DefaultGraphCell) giny_j_node_map.get(edge.getSource());
DefaultGraphCell j_target = (DefaultGraphCell) giny_j_node_map.get(edge.getTarget());
DefaultPort source_port = new DefaultPort();
DefaultPort target_port = new DefaultPort();
j_source.add(source_port);
j_target.add(target_port);
source_port.setParent(j_source);
target_port.setParent(j_target);
// create the edge
DefaultEdge jedge = new DefaultEdge();
j_giny_edge_map.put(jedge, edge);
// Connect Edge
//
ConnectionSet cs = new ConnectionSet(jedge, source_port, target_port);
Object[] ecells = new Object[] { jedge, j_source, j_target };
// Insert into Model
//
model.insert(ecells, attributes, cs, null, null);
cells.add(jedge);
// update progress bar
currentProgress += percentProgressPerIter;
taskMonitor.setProgress(currentProgress / 100.0);
}
layout.run(graph, cells.toArray());
GraphLayoutCache cache = graph.getGraphLayoutCache();
CellView[] cellViews = graph.getGraphLayoutCache().getAllDescendants(graph.getGraphLayoutCache().getRoots());
currentProgress = 80;
taskMonitor.setProgress(currentProgress / 100.0);
percentProgressPerIter = 20 / (double) (cellViews.length);
if (canceled)
return;
for (int i = 0; i < cellViews.length; i++) {
CellView cell_view = cellViews[i];
if (cell_view instanceof VertexView) {
// ok, we found a node
Rectangle2D rect = graph.getCellBounds(cell_view.getCell());
CyNode giny = (CyNode) j_giny_node_map.get(cell_view.getCell());
View<CyNode> node_view = networkView.getNodeView(giny);
node_view.setVisualProperty(BasicVisualLexicon.NODE_X_LOCATION, rect.getX());
node_view.setVisualProperty(BasicVisualLexicon.NODE_Y_LOCATION, rect.getY());
// update progress bar
currentProgress += percentProgressPerIter;
taskMonitor.setProgress(currentProgress / 100.0);
}
}
// I don't think that any of the current layouts have edge components,
// so I won't bother for now.
model = null;
graph = null;
attributes = null;
cells = null;
System.gc();
}
Aggregations