codexmlwriter.java

来自「一个java 代码生成器」· Java 代码 · 共 101 行

JAVA
101
字号
package com.jenerator.regen;

/*<Imports>*/

import com.jenerator.util.XMLConnect;
import org.apache.log4j.Logger;
import org.apache.xml.serialize.BaseMarkupSerializer;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.TextSerializer;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import java.io.*;

/*</Imports>*/


/** * CodeXmlWriter
 *
 * * * @author Siddhartha P. Chandurkar
 * @version 0.9.0 */
public class CodeXmlWriter implements CodeWriter {

    private Document doc;
    private String formatter;
    private Logger log = Logger.getLogger(com.jenerator.regen.CodeXmlWriter.class.getName());

    public CodeXmlWriter(File file) throws ReplacerException {
        try {
            doc = new XMLConnect(convertJavaSourceIntoXml(file)).readXmlString();
        } catch (SAXException e) {
            throw new ReplacerException(e);
        } catch (IOException e) {
            throw new ReplacerException(e);
        } catch (ReplacerException e) {
            throw e;
        }
        formatter = "TEXT";

    }

    private String convertJavaSourceIntoXml(File file) throws ReplacerException {
        StringBuffer buff = new StringBuffer();
        try {
            BufferedReader d = new BufferedReader(new FileReader(file));

            String str = "<?xml version='1.0' ?>\n<Source>\n";
            buff.append(str);
            while (str != null) {
                str = d.readLine();
                if (str != null)
                    buff.append(str + "\n");
            }

            buff.append("\n</Source>\n");

        } catch (IOException e) {
            log.fatal(e);
            throw new ReplacerException(e);
        }
        return buff.toString();
    }


    public void write(File file) throws IOException {


        OutputFormat outputFormat = new OutputFormat(doc, "UTF-8", false);
        BaseMarkupSerializer serializer;

        if (formatter.equals("TEXT")) {
            serializer = new TextSerializer();
            serializer.setOutputByteStream(new FileOutputStream(file));

        } else {
            // loses formatting if XMLSerializer is used.            serializer = new XMLSerializer(new FileOutputStream(file), outputFormat);

        }
        log.info("Regenerated File : " + file);
        serializer.serialize(doc);
    }


    public void putClassCode(String classCode) throws ReplacerException {
        try {
            NodeList element = doc.getElementsByTagName("manual-code");
            element.item(0).getChildNodes().item(0).setNodeValue("<manual-code>" + classCode + "</manual-code>");
        } catch (Exception e) {
            log.fatal("The <manual-code> element delimiters might be missing in the source code", e);
            throw new ReplacerException(e);
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?