/**
* $Id: mxGmlData.java,v 1.1 2010-09-08 14:52:50 david Exp $
* Copyright (c) 2010 David Benson, Gaudenz Alder
*/
package com.mxgraph.io.gml;
import java.util.List;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* Represents a Data element in the GML Structure.
*/
public class mxGmlData
{
private String dataId = "";
private String dataKey = "";
private String dataValue = "";//not using
private mxGmlShapeNode dataShapeNode;
private mxGmlShapeEdge dataShapeEdge;
/**
* Construct a data with the params values.
* @param dataId Data's ID
* @param dataKey Reference to a Key Element ID
* @param dataValue Value of the data Element
* @param dataShapeEdge JGraph specific edge properties.
* @param dataShapeNode JGraph specific node properties.
*/
public mxGmlData(String dataId, String dataKey, String dataValue,
mxGmlShapeEdge dataShapeEdge, mxGmlShapeNode dataShapeNode)
{
this.dataId = dataId;
this.dataKey = dataKey;
this.dataValue = dataValue;
this.dataShapeNode = dataShapeNode;
this.dataShapeEdge = dataShapeEdge;
}
/**
* Construct a data from one xml data element.
* @param dataElement Xml Data Element.
*/
public mxGmlData(Element dataElement)
{
this.dataId = dataElement.getAttribute(mxGmlConstants.ID);
this.dataKey = dataElement.getAttribute(mxGmlConstants.KEY);
this.dataValue = "";
Element shapeNodeElement = mxGmlUtils.childsTag(dataElement,
mxGmlConstants.JGRAPH + mxGmlConstants.SHAPENODE);
Element shapeEdgeElement = mxGmlUtils.childsTag(dataElement,
mxGmlConstants.JGRAPH + mxGmlConstants.SHAPEEDGE);
if (shapeNodeElement != null)
{
this.dataShapeNode = new mxGmlShapeNode(shapeNodeElement);
}
else if (shapeEdgeElement != null)
{
this.dataShapeEdge = new mxGmlShapeEdge(shapeEdgeElement);
}
else
{
NodeList childs = dataElement.getChildNodes();
List<Node> childrens = mxGmlUtils.copyNodeList(childs);
for (Node n : childrens)
{
if (n.getNodeName().equals("#text"))
{
this.dataValue += n.getNodeValue();
}
}
this.dataValue = this.dataValue.trim();
}
}
/**
* Construct an empty data.
*/
public mxGmlData()
{
}
public String getDataId()
{
return dataId;
}
public void setDataId(String dataId)
{
this.dataId = dataId;
}
public String getDataKey()
{
return dataKey;
}
public void setDataKey(String dataKey)
{
this.dataKey = dataKey;
}
public String getDataValue()
{
return dataValue;
}
public void setDataValue(String dataValue)
{
this.dataValue = dataValue;
}
public mxGmlShapeNode getDataShapeNode()
{
return dataShapeNode;
}
public void setDataShapeNode(mxGmlShapeNode dataShapeNode)
{
this.dataShapeNode = dataShapeNode;
}
public mxGmlShapeEdge getDataShapeEdge()
{
return dataShapeEdge;
}
public void setDataShapeEdge(mxGmlShapeEdge dataShapeEdge)
{
this.dataShapeEdge = dataShapeEdge;
}
/**
* Generates an Node Data Element from this class.
* @param document Document where the key Element will be inserted.
* @return Returns the generated Elements.
*/
public Element generateNodeElement(Document document)
{
Element data = document.createElement(mxGmlConstants.DATA);
data.setAttribute(mxGmlConstants.KEY, dataKey);
Element shapeNodeElement = dataShapeNode.generateElement(document);
data.appendChild(shapeNodeElement);
return data;
}
/**
* Generates an Edge Data Element from this class.
* @param document Document where the key Element will be inserted.
* @return Returns the generated Elements.
*/
public Element generateEdgeElement(Document document)
{
Element data = document.createElement(mxGmlConstants.DATA);
data.setAttribute(mxGmlConstants.KEY, dataKey);
Element shapeEdgeElement = dataShapeEdge.generateElement(document);
data.appendChild(shapeEdgeElement);
return data;
}
}