Graphic Rendering System 1.0
A Java-based graphic rendering system implementing various design patterns
Loading...
Searching...
No Matches
XmlExportVisitor.java
Go to the documentation of this file.
1package com.example.graphics.visitor;
2
3import com.example.graphics.model.Circle;
4import com.example.graphics.model.Line;
5import com.example.graphics.model.Rectangle;
6import com.example.graphics.model.Triangle;
7
8import javax.xml.parsers.DocumentBuilderFactory;
9import javax.xml.parsers.DocumentBuilder;
10import javax.xml.parsers.ParserConfigurationException;
11import javax.xml.transform.TransformerFactory;
12import javax.xml.transform.Transformer;
13import javax.xml.transform.TransformerException;
14import javax.xml.transform.dom.DOMSource;
15import javax.xml.transform.OutputKeys;
16import javax.xml.transform.stream.StreamResult;
17
18import org.w3c.dom.Document;
19import org.w3c.dom.Element;
20
21import java.io.StringWriter;
22
27public class XmlExportVisitor implements ShapeVisitor {
28 private Document document;
29 private Element rootElement;
30
35 try {
36 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
37 DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
38
39 // Root elements
40 document = docBuilder.newDocument();
41 rootElement = document.createElement("shapes");
42 document.appendChild(rootElement);
43 } catch (ParserConfigurationException e) {
44 throw new RuntimeException("Error initializing XML document", e);
45 }
46 }
47
48 @Override
49 public void visit(Circle circle) {
50 Element circleElement = document.createElement("circle");
51 circleElement.setAttribute("x", String.valueOf(circle.getX()));
52 circleElement.setAttribute("y", String.valueOf(circle.getY()));
53 circleElement.setAttribute("radius", String.valueOf(circle.getRadius()));
54 rootElement.appendChild(circleElement);
55 }
56
57 @Override
58 public void visit(Rectangle rectangle) {
59 Element rectElement = document.createElement("rectangle");
60 rectElement.setAttribute("x", String.valueOf(rectangle.getX()));
61 rectElement.setAttribute("y", String.valueOf(rectangle.getY()));
62 rectElement.setAttribute("width", String.valueOf(rectangle.getWidth()));
63 rectElement.setAttribute("height", String.valueOf(rectangle.getHeight()));
64 rootElement.appendChild(rectElement);
65 }
66
67 @Override
68 public void visit(Line line) {
69 Element lineElement = document.createElement("line");
70 lineElement.setAttribute("x1", String.valueOf(line.getX1()));
71 lineElement.setAttribute("y1", String.valueOf(line.getY1()));
72 lineElement.setAttribute("x2", String.valueOf(line.getX2()));
73 lineElement.setAttribute("y2", String.valueOf(line.getY2()));
74 rootElement.appendChild(lineElement);
75 }
76
77 @Override
78 public void visit(Triangle triangle) {
79 Element triangleElement = document.createElement("triangle");
80 triangleElement.setAttribute("x1", String.valueOf(triangle.getX1()));
81 triangleElement.setAttribute("y1", String.valueOf(triangle.getY1()));
82 triangleElement.setAttribute("x2", String.valueOf(triangle.getX2()));
83 triangleElement.setAttribute("y2", String.valueOf(triangle.getY2()));
84 triangleElement.setAttribute("x3", String.valueOf(triangle.getX3()));
85 triangleElement.setAttribute("y3", String.valueOf(triangle.getY3()));
86 rootElement.appendChild(triangleElement);
87 }
88
93 public String getXmlOutput() {
94 try {
95 TransformerFactory transformerFactory = TransformerFactory.newInstance();
96 Transformer transformer = transformerFactory.newTransformer();
97 transformer.setOutputProperty(OutputKeys.INDENT, "yes");
98 transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
99
100 StringWriter writer = new StringWriter();
101 transformer.transform(new DOMSource(document), new StreamResult(writer));
102 return writer.toString();
103 } catch (TransformerException e) {
104 throw new RuntimeException("Error transforming XML document", e);
105 }
106 }
107
111 public void clear() {
112 try {
113 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
114 DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
115
116 // Root elements
117 document = docBuilder.newDocument();
118 rootElement = document.createElement("shapes");
119 document.appendChild(rootElement);
120 } catch (ParserConfigurationException e) {
121 throw new RuntimeException("Error resetting XML document", e);
122 }
123 }
124}