Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
/*******************************************************************************
 * Copyright (c) 2001, 2006 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
 *     Jens Lukowski/Innoopract - initial renaming/restructuring
 *     
 *******************************************************************************/

import java.util.ArrayList;
import java.util.List;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

public class Main {
    public static final String CONTENT = "Content";
    public static final String CONTENT_SCRIPT_TYPE = "Content-Script-Type";
    public static final String HEAD = "HEAD";
    public static final String HTML = "HTML";
    public static final String HTTP_EQUIV = "HTTP-EQUIV";
    public static final String META = "META";

    private static String getMetaScriptType(Document doc) {
        // Can not just do a Document.getElementsByTagName(String) as this
        // needs
        // to be relatively fast.
        List metas = new ArrayList();
        // check for META tags under the Document
        Node html = null;
        Node head = null;
        Node child = null;
        // ----------------------------------------------------------------------
        // (pa) 20021217
        // cmvc defect 235554
        // performance enhancement: using child.getNextSibling() rather than
        // nodeList(item) for O(n) vs. O(n*n)
        // ----------------------------------------------------------------------

        for (child = doc.getFirstChild(); child != null; child = child.getNextSibling()) {
            if (child.getNodeType() != Node.ELEMENT_NODE) {
                continue;
            }
            if (child.getNodeName().equalsIgnoreCase(META)) {
                metas.add(child);
            } else if (child.getNodeName().equalsIgnoreCase(HTML)) {
                html = child;
            }
        }
        // NodeList children = doc.getChildNodes();
        // for(int i = 0; i < children.getLength(); i++) {
        // child = children.item(i);
        // if(child.getNodeType() != Node.ELEMENT_NODE)
        // continue;
        // if(child.getNodeName().equalsIgnoreCase(META))
        // metas.add(child);
        // else if(child.getNodeName().equalsIgnoreCase(HTML))
        // html = child;
        // }

        // check for META tags under HEAD
        if (html != null) {
            for (child = html.getFirstChild(); (child != null) && (head == null); child = child.getNextSibling()) {
                if (child.getNodeType() != Node.ELEMENT_NODE) {
                    continue;
                }
                if (child.getNodeName().equalsIgnoreCase(HEAD)) {
                    head = child;
                }
            }
            // children = html.getChildNodes();
            // for(int i = 0; i < children.getLength() && head == null; i++) {
            // child = children.item(i);
            // if(child.getNodeType() != Node.ELEMENT_NODE)
            // continue;
            // if(child.getNodeName().equalsIgnoreCase(HEAD))
            // head = child;
            // }
        }

        if (head != null) {
            for (head.getFirstChild(); child != null; child = child.getNextSibling()) {
                if (child.getNodeType() != Node.ELEMENT_NODE) {
                    continue;
                }
                if (child.getNodeName().equalsIgnoreCase(META)) {
                    metas.add(child);
                }
            }
            // children = head.getChildNodes();
            // for(int i = 0 ; i < children.getLength(); i++) {
            // child = children.item(i);
            // if(child.getNodeType() != Node.ELEMENT_NODE)
            // continue;
            // if(child.getNodeName().equalsIgnoreCase(META))
            // metas.add(child);
            // }
        }

        return getMetaScriptType(metas);
    }

    private static String getMetaScriptType(List metaNodeList) {
        Node meta = null;
        NamedNodeMap attributes = null;
        boolean httpEquiv = false;
        String contentScriptType = null;

        for (int i = metaNodeList.size() - 1; i >= 0; i--) {
            meta = (Node) metaNodeList.get(i);
            attributes = meta.getAttributes();
            httpEquiv = false;
            contentScriptType = null;
            for (int j = 0; j < attributes.getLength(); j++) {
                if (attributes.item(j).getNodeName().equalsIgnoreCase(HTTP_EQUIV)) {
                    httpEquiv = attributes.item(j).getNodeValue().equalsIgnoreCase(CONTENT_SCRIPT_TYPE);
                } else if (attributes.item(j).getNodeName().equalsIgnoreCase(CONTENT)) {
                    contentScriptType = attributes.item(j).getNodeValue();
                }
            }
            if (httpEquiv && (contentScriptType != null)) {
                return contentScriptType;
            }
        }
        return null;
    }
}