/**
* $Id: mxGraphMlNode.java,v 1.1 2012/11/15 13:26:45 gaudenz Exp $
* Copyright (c) 2010 David Benson, Gaudenz Alder
*/
package com.mxgraph.io.graphml;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* Represents a Data element in the GML Structure.
*/
public class mxGraphMlNode
{
private String nodeId;
private mxGraphMlData nodeData;
private List<mxGraphMlGraph> nodeGraphList = new ArrayList<mxGraphMlGraph>();
private HashMap<String, mxGraphMlData> nodeDataMap = new HashMap<String, mxGraphMlData>();
private HashMap<String, mxGraphMlPort> nodePortMap = new HashMap<String, mxGraphMlPort>();
/**
* Construct a node with Id and one data element
* @param nodeId Node`s ID
* @param nodeData Gml Data.
*/
public mxGraphMlNode(String nodeId, mxGraphMlData nodeData)
{
this.nodeId = nodeId;
this.nodeData = nodeData;
}
/**
* Construct a Node from a xml Node Element.
* @param nodeElement Xml Node Element.
*/
public mxGraphMlNode(Element nodeElement)
{
this.nodeId = nodeElement.getAttribute(mxGraphMlConstants.ID);
//Add data elements
List<Element> dataList = mxGraphMlUtils.childsTags(nodeElement,
mxGraphMlConstants.DATA);
for (Element dataElem : dataList)
{
mxGraphMlData data = new mxGraphMlData(dataElem);
String key = data.getDataKey();
nodeDataMap.put(key, data);
}
//Add graph elements
List<Element> graphList = mxGraphMlUtils.childsTags(nodeElement,
mxGraphMlConstants.GRAPH);
for (Element graphElem : graphList)
{
mxGraphMlGraph graph = new mxGraphMlGraph(graphElem);
nodeGraphList.add(graph);
}
//Add port elements
List<Element> portList = mxGraphMlUtils.childsTags(nodeElement,
mxGraphMlConstants.PORT);
for (Element portElem : portList)
{
mxGraphMlPort port = new mxGraphMlPort(portElem);
String name = port.getName();
nodePortMap.put(name, port);
}
}
public String getNodeId()
{
return nodeId;
}
public void setNodeId(String nodeId)
{
this.nodeId = nodeId;
}
public HashMap<String, mxGraphMlData> getNodeDataMap()
{
return nodeDataMap;
}
public void setNodeDataMap(HashMap<String, mxGraphMlData> nodeDataMap)
{
this.nodeDataMap = nodeDataMap;
}
public List<mxGraphMlGraph> getNodeGraph()
{
return nodeGraphList;
}
public void setNodeGraph(List<mxGraphMlGraph> nodeGraph)
{
this.nodeGraphList = nodeGraph;
}
public HashMap<String, mxGraphMlPort> getNodePort()
{
return nodePortMap;
}
public void setNodePort(HashMap<String, mxGraphMlPort> nodePort)
{
this.nodePortMap = nodePort;
}
/**
* Generates a Key Element from this class.
* @param document Document where the key Element will be inserted.
* @return Returns the generated Elements.
*/
public Element generateElement(Document document)
{
Element node = document.createElement(mxGraphMlConstants.NODE);
node.setAttribute(mxGraphMlConstants.ID, nodeId);
Element dataElement = nodeData.generateNodeElement(document);
node.appendChild(dataElement);
for (mxGraphMlPort port : nodePortMap.values())
{
Element portElement = port.generateElement(document);
node.appendChild(portElement);
}
for (mxGraphMlGraph graph : nodeGraphList)
{
Element graphElement = graph.generateElement(document);
node.appendChild(graphElement);
}
return node;
}
public mxGraphMlData getNodeData()
{
return nodeData;
}
public void setNodeData(mxGraphMlData nodeData)
{
this.nodeData = nodeData;
}
}