package org.softlang.company.features; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class Cut extends DefaultHandler { private static String ns = "http://www.company.softlang.org/company.xsd"; private static XMLOutputFactory factory = XMLOutputFactory.newInstance(); private XMLStreamWriter writer; private boolean isSalary = false; private String lastNamespace = null; public Cut(String file) throws FileNotFoundException, XMLStreamException { writer = factory.createXMLStreamWriter(new FileOutputStream(file)); } @Override public void startDocument() throws SAXException { try { writer.writeStartDocument(); } catch (XMLStreamException e) { e.printStackTrace(); } } @Override public void endDocument() throws SAXException { try { writer.writeEndDocument(); writer.close(); } catch (XMLStreamException e) { e.printStackTrace(); } } @Override public void startElement(String uri, String name, String qName, Attributes atts) { try { isSalary = (uri.equals(ns) && name.equals("salary")); writer.writeStartElement(name); if (!(uri.equals(lastNamespace))) { lastNamespace = uri; writer.setDefaultNamespace(uri); writer.writeDefaultNamespace(uri); } for (int i = 0; i < atts.getLength(); i++) { writer.writeAttribute(atts.getLocalName(i), atts.getValue(i)); } } catch (XMLStreamException e) { e.printStackTrace(); } } @Override public void endElement(String uri, String name, String qName) { isSalary = false; try { writer.writeEndElement(); } catch (XMLStreamException e) { e.printStackTrace(); } } @Override public void characters(char[] ch, int start, int length) { try { if (isSalary) { String str = String.valueOf(ch, start, length); double salary = Double.parseDouble(str); writer.writeCharacters(String.valueOf(salary / 2)); } else { writer.writeCharacters(String.valueOf(ch, start, length)); } } catch (XMLStreamException e) { e.printStackTrace(); } } }