Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@
/edu_files/EduFiles/nbproject/private/
/edu_files/EduFiles/build/
/edu_xml/eduxml/nbproject/private/
/edu_xml/eduxml/build/
/edu_xml/eduxml/build/
/edu_xml/eduxml/dist/
52 changes: 52 additions & 0 deletions VGViewer/src/ru/grfc/edu/vgviewer/VGViewer.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import ru.grfc.edu.vgviewer.figures.RoundRectangle;
import ru.grfc.edu.vgviewer.figures.support.FigureEnum;
import ru.grfc.edu.vgviewer.figures.support.NormalFigureFactory;
import ru.grfc.edu.vgviewer.xml.*;

/**
* Главный класс для запуска вьювера векторной графики
Expand Down Expand Up @@ -258,10 +259,61 @@ public void actionPerformed(ActionEvent e) {
}
});

MenuItem sXml = new MenuItem("Save XML");
sXml.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileopen = new JFileChooser();
File file = null;
int ret = fileopen.showDialog(null, "Сохранить в файл");
if (ret == JFileChooser.APPROVE_OPTION) {
file = fileopen.getSelectedFile();
try {
DomWriter write = new DomWriter(file, figuresToPrint);
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
});
MenuItem oXml = new MenuItem("Open XML");
oXml.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileopen = new JFileChooser();
File file = null;
int ret = fileopen.showDialog(null, "Открыть");
if (ret == JFileChooser.APPROVE_OPTION) {
file = fileopen.getSelectedFile();
try {
SaxReader read = new SaxReader(file.getAbsolutePath(), figuresToPrint);
canvas.repaint();
} catch (Exception ex) {
System.out.println("Исключение " + ex);
}
}
}
});

MenuItem clear = new MenuItem("Clear");
clear.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

figuresToPrint.clear();
canvas.repaint();

}

});

fileMenu.add(oSer);
fileMenu.add(sSer);
fileMenu.add(oTxt);
fileMenu.add(sTxt);
fileMenu.add(oXml);
fileMenu.add(sXml);
fileMenu.add(clear);
mbar.add(fileMenu);
f.setMenuBar(mbar);

Expand Down
88 changes: 88 additions & 0 deletions VGViewer/src/ru/grfc/edu/vgviewer/xml/DomWriter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package ru.grfc.edu.vgviewer.xml;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import ru.grfc.edu.vgviewer.figures.*;
/**
*
* @author mada
*/
public class DomWriter {

public DomWriter(File file, List<Figure> figures) throws ParserConfigurationException, TransformerConfigurationException, TransformerException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.newDocument();
Element figuresNode = document.createElement("figures");
document.appendChild(figuresNode);

for(Figure fig : figures){

if (fig instanceof Line) {
Element line = document.createElement("line");
line.setAttribute("x", String.valueOf(fig.getFirstPoint().getX()));
line.setAttribute("y", String.valueOf(fig.getFirstPoint().getY()));
String color = "rgb(" + fig.getColor().getRed() + "," + fig.getColor().getGreen() + "," + fig.getColor().getBlue() + ")";
line.setAttribute("color", color);
Element point = document.createElement("point");
point.setAttribute("x", String.valueOf(((Line) fig).getLastPoint().getX()));
point.setAttribute("y", String.valueOf(((Line) fig).getLastPoint().getY()));
Element label = document.createElement("label");
label.setAttribute("x", String.valueOf(fig.getTextPoint().getX()));
label.setAttribute("y", String.valueOf(fig.getTextPoint().getY()));
label.appendChild(document.createTextNode(fig.getText()));
figuresNode.appendChild(line);
line.appendChild(point);
line.appendChild(label);
} else if (fig instanceof Rectangle) {
Element rectangle = document.createElement("rectangle");
rectangle.setAttribute("width", String.valueOf(((Rectangle) fig).getHeight()));
rectangle.setAttribute("height", String.valueOf(((Rectangle) fig).getWidth()));
String color = "rgb(" + fig.getColor().getRed() + "," + fig.getColor().getGreen() + "," + fig.getColor().getBlue() + ")";
rectangle.setAttribute("color", color);
rectangle.setAttribute("isFilled", String.valueOf(fig.isFill()));
Element point = document.createElement("point");
point.setAttribute("x", String.valueOf(fig.getFirstPoint().getX()));
point.setAttribute("y", String.valueOf(fig.getFirstPoint().getY()));
Element label = document.createElement("label");
label.setAttribute("x", String.valueOf(fig.getTextPoint().getX()));
label.setAttribute("y", String.valueOf(fig.getTextPoint().getY()));
label.appendChild(document.createTextNode(fig.getText()));
figuresNode.appendChild(rectangle);
rectangle.appendChild(point);
rectangle.appendChild(label);

}
}

TransformerFactory transformerFactory = TransformerFactory.newInstance();

Transformer transformer = transformerFactory.newTransformer();

DOMSource domSource = new DOMSource(document);

StreamResult streamResult = new StreamResult(file);

transformer.transform(domSource, streamResult);

}

}
185 changes: 185 additions & 0 deletions VGViewer/src/ru/grfc/edu/vgviewer/xml/SaxReader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package ru.grfc.edu.vgviewer.xml;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.util.List;
import ru.grfc.edu.vgviewer.figures.*;
import ru.grfc.edu.vgviewer.figures.support.*;

/**
*
* @author mada
*/
public class SaxReader {

public SaxReader(String path, List<Figure> figures) throws ParserConfigurationException, SAXException, IOException {

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = spf.newSAXParser();
XMLReader xmlReader = saxParser.getXMLReader();
SaxReading saxHandler = new SaxReading();
xmlReader.setContentHandler(saxHandler);
xmlReader.setErrorHandler(saxHandler);
xmlReader.parse(path);
figures.clear();
for (Params par : saxHandler.params) {
String parStr ;
if (par.fig == "li") {
parStr = "fx=" + par.x1 + " fy=" + par.y1 + " lx="
+ par.x2 + " ly=" + par.y2 + " color=" + par.color
+ " text=" + par.label + " tx=" + par.xL + " ty=" + par.yL;
figures.add(NormalFigureFactory.getFigure(FigureEnum.LINE, parStr));

} else {
parStr = "w=" + par.w + " h=" + par.h + " fx=" + par.x1 + " fy="
+ par.y1 + " color=" + par.color + " fill=" + par.filled
+ " text=" + par.label + " tx=" + par.xL + " ty=" + par.yL;
System.out.println(parStr);
figures.add(NormalFigureFactory.getFigure(FigureEnum.RECTANGLE, parStr));
}
}


}
}

class SaxReading extends DefaultHandler {

public List<Params> params;
private String currentFigure = "";
private String currentElement = "";

@Override
public void startDocument() throws SAXException {
}

@Override
public void endDocument() throws SAXException {
}

@Override
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts) throws SAXException {
Params par = null;
if (!params.isEmpty()) {
par = params.get(params.size() - 1);
}
switch (qName) {
case "figures":
break;
case "line":
currentFigure = qName;
currentElement = "";
params.add(new Params());
par = params.get(params.size() - 1);
par.x1 = Integer.parseInt(atts.getValue("x"));
par.y1 = Integer.parseInt(atts.getValue("y"));
par.color = atts.getValue("color");
par.fig = "li";
break;
case "rectangle":
currentFigure = qName;
params.add(new Params());
par = params.get(params.size() - 1);
par.h = Integer.parseInt(atts.getValue("height"));
par.w = Integer.parseInt(atts.getValue("width"));
par.filled = Boolean.valueOf(atts.getValue("isFilled"));
par.color = atts.getValue("color");
currentElement = "";
par.fig = "re";
break;
case "label":
currentElement = qName;
par.xL = Integer.parseInt(atts.getValue("x"));
par.yL = Integer.parseInt(atts.getValue("y"));
break;
case "point":
switch (currentFigure) {
case "rectangle":
par.x1 = Integer.parseInt(atts.getValue("x"));
par.y1 = Integer.parseInt(atts.getValue("y"));
break;
case "line":
par.x2 = Integer.parseInt(atts.getValue("x"));
par.y2 = Integer.parseInt(atts.getValue("y"));
break;
}
break;
}
}

@Override
public void endElement(String namespaceURI, String localName,
String qName) throws SAXException {
}

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
char[] s = Arrays.copyOfRange(ch, start, start + length);
String string = new String(s);
if (!params.isEmpty()) {
Params par = params.get(params.size() - 1);
switch (currentElement) {
case "label":
par.label = string;
currentElement = "";
break;
}
}
}

@Override
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
}

public void warning(SAXParseException spe) throws SAXException {
System.out.println("Warning: " + spe.toString());
}

public void error(SAXParseException spe) throws SAXException {
String message = "Error: " + spe.toString();
throw new SAXException(message);
}

public void fatalError(SAXParseException spe) throws SAXException {
String message = "Fatal Error: " + spe.toString();
throw new SAXException(message);
}

SaxReading() {

super();
params = new ArrayList();

}

}

class Params {

public int x1;
public int y1;
public int x2;
public int y2;
public int h;
public int w;
public String color;
public String label;
public int xL;
public int yL;
public boolean filled;
public String fig;
}
1 change: 1 addition & 0 deletions edu_xml/eduxml/src/domwriter.xml

Large diffs are not rendered by default.

Loading