using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Schema;
namespace cn5apinet.GraphML
{
public class GraphMLFile
{
#region variables
public string FullPathLocation
{
get { return _FullPathLocation; }
set { _FullPathLocation = value; }
}
string _FullPathLocation = "";
#endregion
/// <summary>
/// GraphML File object constructor
/// </summary>
public GraphMLFile()
{
}
/// <summary>
/// GraphML File object constructor
/// </summary>
/// <param name="fullpathlocation">Full path plus .graphml file name</param>
public GraphMLFile(string fullpathlocation)
{
this.FullPathLocation = fullpathlocation;
}
public void Create(List<GraphML.GraphMLNode> NodeList, List<GraphML.GraphMLEdge> EdgeList, string ApplicationName)
{
if (this.FullPathLocation != "")
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter xwriter = XmlWriter.Create(this.FullPathLocation, settings);
xwriter.LookupPrefix(@"http://graphml.graphdrawing.org/xmlns/graphml");
xwriter.WriteStartElement("graphml", @"http://graphml.graphdrawing.org/xmlns");
string comment = "Created by " + ApplicationName + " for Java 2.8";
xwriter.WriteAttributeString("xmlns", "xsi", null, @"http://www.w3.org/2001/XMLSchema-instance");
xwriter.WriteAttributeString("xmlns", "y", null, @"http://www.yworks.com/xml/graphml");
xwriter.WriteAttributeString("xsi", "schemaLocation", null, @"http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd");
xwriter.WriteComment(comment);
xwriter.WriteStartElement("key");
xwriter.WriteAttributeString("for", "graphml");
xwriter.WriteAttributeString("id", "d0");
xwriter.WriteAttributeString("yfiles.type", "resources");
xwriter.WriteEndElement();//key
xwriter.WriteStartElement("key");
xwriter.WriteAttributeString("for", "port");
xwriter.WriteAttributeString("id", "d1");
xwriter.WriteAttributeString("yfiles.type", "portgraphics");
xwriter.WriteEndElement();//key
xwriter.WriteStartElement("key");
xwriter.WriteAttributeString("for", "port");
xwriter.WriteAttributeString("id", "d2");
xwriter.WriteAttributeString("yfiles.type", "portgeometry");
xwriter.WriteEndElement();//key
xwriter.WriteStartElement("key");
xwriter.WriteAttributeString("for", "port");
xwriter.WriteAttributeString("id", "d3");
xwriter.WriteAttributeString("yfiles.type", "portuserdata");
xwriter.WriteEndElement();//key
xwriter.WriteStartElement("key");
xwriter.WriteAttributeString("attr.name", "url");
xwriter.WriteAttributeString("attr.type", "string");
xwriter.WriteAttributeString("for", "node");
xwriter.WriteAttributeString("id", "d4");
xwriter.WriteEndElement();//key
xwriter.WriteStartElement("key");
xwriter.WriteAttributeString("attr.name", "description");
xwriter.WriteAttributeString("attr.type", "string");
xwriter.WriteAttributeString("for", "node");
xwriter.WriteAttributeString("id", "d5");
xwriter.WriteEndElement();//key
xwriter.WriteStartElement("key");
xwriter.WriteAttributeString("for", "node");
xwriter.WriteAttributeString("id", "d6");
xwriter.WriteAttributeString("yfiles.type", "nodegraphics");
xwriter.WriteEndElement();//key
xwriter.WriteStartElement("key");
xwriter.WriteAttributeString("attr.name", "Description");
xwriter.WriteAttributeString("attr.type", "string");
xwriter.WriteAttributeString("for", "graph");
xwriter.WriteAttributeString("id", "d7");
xwriter.WriteEndElement();//key
xwriter.WriteStartElement("key");
xwriter.WriteAttributeString("attr.name", "url");
xwriter.WriteAttributeString("attr.type", "string");
xwriter.WriteAttributeString("for", "edge");
xwriter.WriteAttributeString("id", "d8");
xwriter.WriteEndElement();//key
xwriter.WriteStartElement("key");
xwriter.WriteAttributeString("attr.name", "description");
xwriter.WriteAttributeString("attr.type", "string");
xwriter.WriteAttributeString("for", "edge");
xwriter.WriteAttributeString("id", "d9");
xwriter.WriteEndElement();//key
xwriter.WriteStartElement("key");
xwriter.WriteAttributeString("for", "edge");
xwriter.WriteAttributeString("id", "d10");
xwriter.WriteAttributeString("yfiles.type", "edgegraphics");
xwriter.WriteEndElement();//key
xwriter.WriteStartElement("graph");
xwriter.WriteAttributeString("edgedefault", "directed");//***maybe changable***
xwriter.WriteAttributeString("id", "G");
xwriter.WriteStartElement("data");
xwriter.WriteAttributeString("key", "d7");
xwriter.WriteEndElement();//data
//FOREACH NODE IN NODELIST....
foreach (GraphMLNode node in NodeList)
{
xwriter.WriteRaw(node.ToRawString());
}
//FOREACH EDGE IN EDGELIST....
foreach (GraphMLEdge edge in EdgeList)
{
xwriter.WriteRaw(edge.ToRawString());
}
xwriter.WriteEndElement();//graph
xwriter.WriteStartElement("data");
xwriter.WriteAttributeString("key", "d0");
xwriter.WriteAttributeString("y", "Resources", null, null);
xwriter.WriteEndElement();//data
xwriter.WriteEndElement();//graphml
xwriter.Flush();
xwriter.Close();
}
}
}
}