All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.mxgraph.model.mxCell Maven / Gradle / Ivy
Go to download
JGraphX Swing Component - Java Graph Visualization Library
This is a binary & source redistribution of the original, unmodified JGraphX library originating from:
"https://github.com/jgraph/jgraphx/archive/v3.4.1.3.zip".
The purpose of this redistribution is to make the library available to other Maven projects.
/**
* $Id: mxCell.java,v 1.32 2010/08/31 12:33:02 gaudenz Exp $
* Copyright (c) 2007, Gaudenz Alder
*/
package com.mxgraph.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
/**
* Cells are the elements of the graph model. They represent the state
* of the groups, vertices and edges in a graph.
*
* Edge Labels
*
* Using the x- and y-coordinates of a cell's geometry it is
* possible to position the label on edges on a specific location
* on the actual edge shape as it appears on the screen. The
* x-coordinate of an edge's geometry is used to describe the
* distance from the center of the edge from -1 to 1 with 0
* being the center of the edge and the default value. The
* y-coordinate of an edge's geometry is used to describe
* the absolute, orthogonal distance in pixels from that
* point. In addition, the mxGeometry.offset is used
* as a absolute offset vector from the resulting point.
*
* The width and height of an edge geometry are ignored.
*
* To add more than one edge label, add a child vertex with
* a relative geometry. The x- and y-coordinates of that
* geometry will have the same semantiv as the above for
* edge labels.
*/
public class mxCell implements mxICell, Cloneable, Serializable
{
/**
*
*/
private static final long serialVersionUID = 910211337632342672L;
/**
* Holds the Id. Default is null.
*/
protected String id;
/**
* Holds the user object. Default is null.
*/
protected Object value;
/**
* Holds the geometry. Default is null.
*/
protected mxGeometry geometry;
/**
* Holds the style as a string of the form
* stylename[;key=value]. Default is null.
*/
protected String style;
/**
* Specifies whether the cell is a vertex or edge and whether it is
* connectable, visible and collapsed. Default values are false, false,
* true, true and false respectively.
*/
protected boolean vertex = false, edge = false, connectable = true,
visible = true, collapsed = false;
/**
* Reference to the parent cell and source and target terminals for edges.
*/
protected mxICell parent, source, target;
/**
* Holds the child cells and connected edges.
*/
protected List children, edges;
/**
* Constructs a new cell with an empty user object.
*/
public mxCell()
{
this(null);
}
/**
* Constructs a new cell for the given user object.
*
* @param value
* Object that represents the value of the cell.
*/
public mxCell(Object value)
{
this(value, null, null);
}
/**
* Constructs a new cell for the given parameters.
*
* @param value Object that represents the value of the cell.
* @param geometry Specifies the geometry of the cell.
* @param style Specifies the style as a formatted string.
*/
public mxCell(Object value, mxGeometry geometry, String style)
{
setValue(value);
setGeometry(geometry);
setStyle(style);
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#getId()
*/
public String getId()
{
return id;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#setId(String)
*/
public void setId(String id)
{
this.id = id;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#getValue()
*/
public Object getValue()
{
return value;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#setValue(Object)
*/
public void setValue(Object value)
{
this.value = value;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#getGeometry()
*/
public mxGeometry getGeometry()
{
return geometry;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#setGeometry(com.mxgraph.model.mxGeometry)
*/
public void setGeometry(mxGeometry geometry)
{
this.geometry = geometry;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#getStyle()
*/
public String getStyle()
{
return style;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#setStyle(String)
*/
public void setStyle(String style)
{
this.style = style;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#isVertex()
*/
public boolean isVertex()
{
return vertex;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#setVertex(boolean)
*/
public void setVertex(boolean vertex)
{
this.vertex = vertex;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#isEdge()
*/
public boolean isEdge()
{
return edge;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#setEdge(boolean)
*/
public void setEdge(boolean edge)
{
this.edge = edge;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#isConnectable()
*/
public boolean isConnectable()
{
return connectable;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#setConnectable(boolean)
*/
public void setConnectable(boolean connectable)
{
this.connectable = connectable;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#isVisible()
*/
public boolean isVisible()
{
return visible;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#setVisible(boolean)
*/
public void setVisible(boolean visible)
{
this.visible = visible;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#isCollapsed()
*/
public boolean isCollapsed()
{
return collapsed;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#setCollapsed(boolean)
*/
public void setCollapsed(boolean collapsed)
{
this.collapsed = collapsed;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#getParent()
*/
public mxICell getParent()
{
return parent;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#setParent(com.mxgraph.model.mxICell)
*/
public void setParent(mxICell parent)
{
this.parent = parent;
}
/**
* Returns the source terminal.
*/
public mxICell getSource()
{
return source;
}
/**
* Sets the source terminal.
*
* @param source Cell that represents the new source terminal.
*/
public void setSource(mxICell source)
{
this.source = source;
}
/**
* Returns the target terminal.
*/
public mxICell getTarget()
{
return target;
}
/**
* Sets the target terminal.
*
* @param target Cell that represents the new target terminal.
*/
public void setTarget(mxICell target)
{
this.target = target;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#getTerminal(boolean)
*/
public mxICell getTerminal(boolean source)
{
return (source) ? getSource() : getTarget();
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#setTerminal(com.mxgraph.model.mxICell, boolean)
*/
public mxICell setTerminal(mxICell terminal, boolean isSource)
{
if (isSource)
{
setSource(terminal);
}
else
{
setTarget(terminal);
}
return terminal;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#getChildCount()
*/
public int getChildCount()
{
return (children != null) ? children.size() : 0;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#getIndex(com.mxgraph.model.mxICell)
*/
public int getIndex(mxICell child)
{
return (children != null) ? children.indexOf(child) : -1;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#getChildAt(int)
*/
public mxICell getChildAt(int index)
{
return (children != null) ? (mxICell) children.get(index) : null;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#insert(com.mxgraph.model.mxICell)
*/
public mxICell insert(mxICell child)
{
int index = getChildCount();
if (child.getParent() == this)
{
index--;
}
return insert(child, index);
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#insert(com.mxgraph.model.mxICell, int)
*/
public mxICell insert(mxICell child, int index)
{
if (child != null)
{
child.removeFromParent();
child.setParent(this);
if (children == null)
{
children = new ArrayList();
children.add(child);
}
else
{
children.add(index, child);
}
}
return child;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#remove(int)
*/
public mxICell remove(int index)
{
mxICell child = null;
if (children != null && index >= 0)
{
child = getChildAt(index);
remove(child);
}
return child;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#remove(com.mxgraph.model.mxICell)
*/
public mxICell remove(mxICell child)
{
if (child != null && children != null)
{
children.remove(child);
child.setParent(null);
}
return child;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#removeFromParent()
*/
public void removeFromParent()
{
if (parent != null)
{
parent.remove(this);
}
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#getEdgeCount()
*/
public int getEdgeCount()
{
return (edges != null) ? edges.size() : 0;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#getEdgeIndex(com.mxgraph.model.mxICell)
*/
public int getEdgeIndex(mxICell edge)
{
return (edges != null) ? edges.indexOf(edge) : -1;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#getEdgeAt(int)
*/
public mxICell getEdgeAt(int index)
{
return (edges != null) ? (mxICell) edges.get(index) : null;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#insertEdge(com.mxgraph.model.mxICell, boolean)
*/
public mxICell insertEdge(mxICell edge, boolean isOutgoing)
{
if (edge != null)
{
edge.removeFromTerminal(isOutgoing);
edge.setTerminal(this, isOutgoing);
if (edges == null || edge.getTerminal(!isOutgoing) != this
|| !edges.contains(edge))
{
if (edges == null)
{
edges = new ArrayList();
}
edges.add(edge);
}
}
return edge;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#removeEdge(com.mxgraph.model.mxICell, boolean)
*/
public mxICell removeEdge(mxICell edge, boolean isOutgoing)
{
if (edge != null)
{
if (edge.getTerminal(!isOutgoing) != this && edges != null)
{
edges.remove(edge);
}
edge.setTerminal(null, isOutgoing);
}
return edge;
}
/* (non-Javadoc)
* @see com.mxgraph.model.mxICell#removeFromTerminal(boolean)
*/
public void removeFromTerminal(boolean isSource)
{
mxICell terminal = getTerminal(isSource);
if (terminal != null)
{
terminal.removeEdge(this, isSource);
}
}
/**
* Returns the specified attribute from the user object if it is an XML
* node.
*
* @param name Name of the attribute whose value should be returned.
* @return Returns the value of the given attribute or null.
*/
public String getAttribute(String name)
{
return getAttribute(name, null);
}
/**
* Returns the specified attribute from the user object if it is an XML
* node.
*
* @param name Name of the attribute whose value should be returned.
* @param defaultValue Default value to use if the attribute has no value.
* @return Returns the value of the given attribute or defaultValue.
*/
public String getAttribute(String name, String defaultValue)
{
Object userObject = getValue();
String val = null;
if (userObject instanceof Element)
{
Element element = (Element) userObject;
val = element.getAttribute(name);
}
if (val == null)
{
val = defaultValue;
}
return val;
}
/**
* Sets the specified attribute on the user object if it is an XML node.
*
* @param name Name of the attribute whose value should be set.
* @param value New value of the attribute.
*/
public void setAttribute(String name, String value)
{
Object userObject = getValue();
if (userObject instanceof Element)
{
Element element = (Element) userObject;
element.setAttribute(name, value);
}
}
/**
* Returns a clone of the cell.
*/
public Object clone() throws CloneNotSupportedException
{
mxCell clone = (mxCell) super.clone();
clone.setValue(cloneValue());
clone.setStyle(getStyle());
clone.setCollapsed(isCollapsed());
clone.setConnectable(isConnectable());
clone.setEdge(isEdge());
clone.setVertex(isVertex());
clone.setVisible(isVisible());
clone.setParent(null);
clone.setSource(null);
clone.setTarget(null);
clone.children = null;
clone.edges = null;
mxGeometry geometry = getGeometry();
if (geometry != null)
{
clone.setGeometry((mxGeometry) geometry.clone());
}
return clone;
}
/**
* Returns a clone of the user object. This implementation clones any XML
* nodes or otherwise returns the same user object instance.
*/
protected Object cloneValue()
{
Object value = getValue();
if (value instanceof Node)
{
value = ((Node) value).cloneNode(true);
}
return value;
}
}