VisioDocumentConverter.java
package com.taxonomy.visio.converter;
import com.taxonomy.visio.VisioDocument;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
/**
* Marshals the Visio main document part for the supported 2012 namespace.
* Package metadata is stored in the standard OPC core-properties part rather
* than in legacy inline document-property elements. Optional collections are
* omitted when empty instead of emitting schema-invalid empty containers.
*/
public class VisioDocumentConverter implements Converter {
private static final String VISIO_NS =
"http://schemas.microsoft.com/office/visio/2012/main";
private static final String REL_NS =
"http://schemas.openxmlformats.org/officeDocument/2006/relationships";
@Override
public boolean canConvert(Class type) {
return VisioDocument.class.equals(type);
}
@Override
public void marshal(
Object source,
HierarchicalStreamWriter writer,
MarshallingContext context) {
writer.addAttribute("xmlns", VISIO_NS);
writer.addAttribute("xmlns:r", REL_NS);
writer.addAttribute("xml:space", "preserve");
// Explicit defaults make the masterless package renderable as well as parseable.
writer.startNode("DocumentSettings");
writer.addAttribute("DefaultLineStyle", "0");
writer.addAttribute("DefaultFillStyle", "0");
writer.addAttribute("DefaultTextStyle", "0");
writer.endNode();
writer.startNode("FaceNames");
writer.startNode("FaceName");
writer.addAttribute("NameU", "Arial");
writer.endNode();
writer.endNode();
writer.startNode("StyleSheets");
writer.startNode("StyleSheet");
writer.addAttribute("ID", "0");
writer.addAttribute("NameU", "Normal");
cell(writer, "LineColor", "#44546A");
cell(writer, "LinePattern", "1");
cell(writer, "LineWeight", "0.01388888888888889");
cell(writer, "LineCap", "0");
cell(writer, "FillForegnd", "#FFFFFF");
cell(writer, "FillBkgnd", "#FFFFFF");
cell(writer, "FillPattern", "1");
cell(writer, "VerticalAlign", "1");
writer.startNode("Section");
writer.addAttribute("N", "Character");
writer.startNode("Row");
writer.addAttribute("IX", "0");
cell(writer, "Font", "Arial");
cell(writer, "Size", "0.1388888888888889");
cell(writer, "Color", "#172B4D");
writer.endNode();
writer.endNode();
writer.startNode("Section");
writer.addAttribute("N", "Paragraph");
writer.startNode("Row");
writer.addAttribute("IX", "0");
cell(writer, "HorzAlign", "1");
writer.endNode();
writer.endNode();
writer.endNode();
writer.endNode();
}
private static void cell(HierarchicalStreamWriter writer, String name, String value) {
writer.startNode("Cell");
writer.addAttribute("N", name);
writer.addAttribute("V", value);
writer.endNode();
}
@Override
public Object unmarshal(
HierarchicalStreamReader reader,
UnmarshallingContext context) {
throw new UnsupportedOperationException(
"VisioDocumentConverter does not support unmarshaling");
}
}