/**
* $Id: mxGmlNode.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.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 mxGmlNode
{
private String nodeId;
private mxGmlData nodeData;
private List<mxGmlGraph> nodeGraphList = new ArrayList<mxGmlGraph>();
private HashMap<String, mxGmlData> nodeDataMap = new HashMap<String, mxGmlData>();
private HashMap<String, mxGmlPort> nodePortMap = new HashMap<String, mxGmlPort>();
/**
* Construct a node with Id and one data element
* @param nodeId Node`s ID
* @param nodeData Gml Data.
*/
public mxGmlNode(String nodeId, mxGmlData nodeData)
{
this.nodeId = nodeId;
this.nodeData = nodeData;
}
/**
* Construct a Node from a xml Node Element.
* @param nodeElement Xml Node Element.
*/
public mxGmlNode(Element nodeElement)
{
this.nodeId = nodeElement.getAttribute(mxGmlConstants.ID);
//Add data elements
List<Element> dataList = mxGmlUtils.childsTags(nodeElement,
mxGmlConstants.DATA);
for (Element dataElem : dataList)
{
mxGmlData data = new mxGmlData(dataElem);
String key = data.getDataKey();
nodeDataMap.put(key, data);
}
//Add graph elements
List<Element> graphList = mxGmlUtils.childsTags(nodeElement,
mxGmlConstants.GRAPH);
for (Element graphElem : graphList)
{
mxGmlGraph graph = new mxGmlGraph(graphElem);
nodeGraphList.add(graph);
}
//Add port elements
List<Element> portList = mxGmlUtils.childsTags(nodeElement,
mxGmlConstants.PORT);
for (Element portElem : portList)
{
mxGmlPort port = new mxGmlPort(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, mxGmlData> getNodeDataMap()
{
return nodeDataMap;
}
public void setNodeDataMap(HashMap<String, mxGmlData> nodeDataMap)
{
this.nodeDataMap = nodeDataMap;
}
public List<mxGmlGraph> getNodeGraph()
{
return nodeGraphList;
}
public void setNodeGraph(List<mxGmlGraph> nodeGraph)
{
this.nodeGraphList = nodeGraph;
}
public HashMap<String, mxGmlPort> getNodePort()
{
return nodePortMap;
}
public void setNodePort(HashMap<String, mxGmlPort> 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(mxGmlConstants.NODE);
node.setAttribute(mxGmlConstants.ID, nodeId);
Element dataElement = nodeData.generateNodeElement(document);
node.appendChild(dataElement);
for (mxGmlPort port : nodePortMap.values())
{
Element portElement = port.generateElement(document);
node.appendChild(portElement);
}
for (mxGmlGraph graph : nodeGraphList)
{
Element graphElement = graph.generateElement(document);
node.appendChild(graphElement);
}
return node;
}
public mxGmlData getNodeData()
{
return nodeData;
}
public void setNodeData(mxGmlData nodeData)
{
this.nodeData = nodeData;
}
}