Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
/*******************************************************************************
 * Copyright (c) 2003, 2010 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - Initial API and implementation
 *     Angelo Zerr <angelo.zerr@gmail.com> - Jetty packages
 *******************************************************************************/

import java.io.BufferedOutputStream;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;

import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

public class Main {
    public static void save(String filename, Document document) throws IOException {
        PrintStream out = null;
        try {
            out = new PrintStream(new BufferedOutputStream(new FileOutputStream(filename)), true, "UTF-8");
            // traceNode(document, "");
            print(out, document);
        } catch (Exception ex) {
            throw new IOException(ex.getLocalizedMessage());
        } finally {
            if (out != null)
                try {
                    out.close();
                } catch (Exception e) {
                    // ignore
                }
        }
    }

    public static void save(String filename, Node node) throws IOException {
        PrintStream out = null;
        try {
            out = new PrintStream(new BufferedOutputStream(new FileOutputStream(filename)), true, "UTF-8");
            print(out, node);
        } catch (Exception ex) {
            throw new IOException(ex.getLocalizedMessage());
        } finally {
            if (out != null)
                try {
                    out.close();
                } catch (Exception e) {
                    // ignore
                }
        }
    }

    protected static void print(PrintStream out, Node node) {
        if (node == null)
            return;
        short type = node.getNodeType();
        switch (type) {
        case Node.DOCUMENT_NODE: {
            out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            // out.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
            NodeList nodelist = node.getChildNodes();
            int size = nodelist.getLength();
            for (int i = 0; i < size; i++)
                print(out, nodelist.item(i));
            break;
        }

        case Node.DOCUMENT_TYPE_NODE: {
            DocumentType docType = (DocumentType) node;
            out.print("<!DOCTYPE " + getDocumentTypeData(docType) + ">\n");
            break;
        }

        case Node.ELEMENT_NODE: {
            out.print('<');
            out.print(node.getNodeName());
            NamedNodeMap map = node.getAttributes();
            if (map != null) {
                int size = map.getLength();
                for (int i = 0; i < size; i++) {
                    Attr attr = (Attr) map.item(i);
                    out.print(' ');
                    out.print(attr.getNodeName());
                    out.print("=\"");
                    out.print(normalize(attr.getNodeValue()));
                    out.print('"');
                }
            }

            if (!node.hasChildNodes())
                out.print("/>");
            else {
                out.print('>');
                NodeList nodelist = node.getChildNodes();
                int numChildren = nodelist.getLength();
                for (int i = 0; i < numChildren; i++)
                    print(out, nodelist.item(i));

                out.print("</");
                out.print(node.getNodeName());
                out.print('>');
            }
            break;
        }

        case Node.ENTITY_REFERENCE_NODE: {
            NodeList nodelist = node.getChildNodes();
            if (nodelist != null) {
                int size = nodelist.getLength();
                for (int i = 0; i < size; i++)
                    print(out, nodelist.item(i));

            }
            break;
        }

        case Node.CDATA_SECTION_NODE: {
            out.print(normalize(node.getNodeValue()));
            break;
        }

        case Node.TEXT_NODE: {
            out.print(normalize(node.getNodeValue()));
            break;
        }

        case Node.PROCESSING_INSTRUCTION_NODE: {
            out.print("<?");
            out.print(node.getNodeName());
            String s = node.getNodeValue();
            if (s != null && s.length() > 0) {
                out.print(' ');
                out.print(s);
            }
            out.print("?>");
            break;
        }

        case Node.COMMENT_NODE: {
            out.print("<!--");
            out.print(node.getNodeValue());
            out.print("-->");
            break;
        }

        default: {
            out.print(normalize(node.getNodeValue()));
            break;
        }
        }
        out.flush();
    }

    protected static String getDocumentTypeData(DocumentType doctype) {
        String data = doctype.getName();
        if (doctype.getPublicId() != null) {
            data += " PUBLIC \"" + doctype.getPublicId() + "\"";
            String systemId = doctype.getSystemId();
            if (systemId == null)
                systemId = "";
            data += " \"" + systemId + "\"";
        } else
            data += " SYSTEM \"" + doctype.getSystemId() + "\"";

        return data;
    }

    protected static String normalize(String s) {
        StringBuffer stringbuffer = new StringBuffer();
        int i = s == null ? 0 : s.length();
        for (int j = 0; j < i; j++) {
            char c = s.charAt(j);
            switch (c) {
            case 60: /* '<' */
                stringbuffer.append("&lt;");
                break;

            case 62: /* '>' */
                stringbuffer.append("&gt;");
                break;

            case 38: /* '&' */
                stringbuffer.append("&amp;");
                break;

            case 34: /* '"' */
                stringbuffer.append("&quot;");
                break;

            case 10: /* '\n' */
            case 13: /* '\r' */
            default:
                stringbuffer.append(c);
                break;

            }
        }

        return stringbuffer.toString();
    }

    /**
     * Get the value of this node. Will return "" instead of null.
     * 
     * @return java.lang.String
     * @param node
     *            org.w3c.dom.Node
     */
    public static String getNodeValue(Node node) {
        NodeList nodeList = node.getChildNodes();

        int length = nodeList.getLength();
        for (int i = 0; i < length; i++) {
            Node n = nodeList.item(i);
            if (n instanceof Text) {
                Text t = (Text) n;
                return t.getNodeValue();
            }
        }
        return "";
    }

    public static String toString(Document document) {
        PrintStream out = null;
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream(2048);
            out = new PrintStream(baos);
            print(out, document);
            return new String(baos.toByteArray(), "UTF-8");
        } catch (Exception ex) {
            // ignore
        } finally {
            if (out != null)
                try {
                    out.close();
                } catch (Exception e) {
                    // ignore
                }
        }
        return null;
    }
}