All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.netbeans.modules.schema2beansdev.DocDefParser Maven / Gradle / Ivy

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
 *
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
 * Other names may be trademarks of their respective owners.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common
 * Development and Distribution License("CDDL") (collectively, the
 * "License"). You may not use this file except in compliance with the
 * License. You can obtain a copy of the License at
 * http://www.netbeans.org/cddl-gplv2.html
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
 * specific language governing permissions and limitations under the
 * License.  When distributing the software, include this License Header
 * Notice in each file and include the License file at
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the GPL Version 2 section of the License file that
 * accompanied this code. If applicable, add the following below the
 * License Header, with the fields enclosed by brackets [] replaced by
 * your own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 *
 * Contributor(s):
 *
 * The Original Software is NetBeans. The Initial Developer of the Original
 * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
 * Microsystems, Inc. All Rights Reserved.
 *
 * If you wish your version of this file to be governed by only the CDDL
 * or only the GPL Version 2, indicate your decision by adding
 * "[Contributor] elects to include this software in this distribution
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
 * single choice of license, a recipient has the option to distribute
 * your version of this file under either the CDDL, the GPL Version 2 or
 * to extend the choice of license to its licensees as provided above.
 * However, if you add GPL Version 2 code and therefore, elected the GPL
 * Version 2 license, then the option applies only if the new code is
 * made subject to such option by the copyright holder.
 */

package org.netbeans.modules.schema2beansdev;

import java.io.*;

import org.netbeans.modules.schema2beans.*;

/**
 *
 *	This class implement the Document Definition handler in order to build
 *	the internal tree representation of the DD DTD.
 *
 */
public class DocDefParser extends GeneralParser implements SchemaParser {

    static class MissingEndOfEltException extends RuntimeException {
        String propName;

        public MissingEndOfEltException(String propName) {
            this.propName = propName;
        }
    }
    
    static private final int WORD_NO_CONTEXT	= 0;
    static private final int WORD_CHECK		= 1;
    static private final int WORD_COMMENT	= 2;
    static private final int WORD_ELEMENT1	= 3;
    static private final int WORD_ELEMENT	= 4;
    static private final int WORD_ATTLIST1	= 5;
    static private final int WORD_ATTLIST	= 6;
    static private final int WORD_PI		= 7;
    static private final int WORD_ENTITY1	= 10;
    static private final int WORD_ENTITY	= 11;
    
    static String errHeader = "DTD parsing failed: ";	// NOI18N
    
    //	Buffer used to read the file by chunks
    private char 		buffer[] = new char[BUFFER_SIZE];
    
    //	Current size of the buffer
    private int			bufSize;
    
    //	Reading offset in the buffer while parsing
    private int			bufScan;
    
    protected static int BUFFER_SIZE	=	4096;
    
    //	Handler to callback with the tokens found in the DTD.
    private DocDefHandler	handler;
    
    private GenBeans.Config config = null;
    
    public DocDefParser() {
    }
    
    public DocDefParser(GenBeans.Config config, DocDefHandler handler) {
        this.config = config;
        this.filename = config.getFilename();
        this.schemaIn = config.getFileIn();
        this.handler = handler;
    }
    
    protected @Override void startupReader() throws java.io.IOException {
        if (schemaIn == null) {
            schemaIn = new FileInputStream(filename);
        }
        EntityParser entityParser = new EntityParser(new InputStreamReader(schemaIn));
        entityParser.parse();
        reader = entityParser.getReader();
    }
    
    public void setHandler(DocDefHandler handler) {
        this.handler = handler;
    }
    
    public DocDefHandler getHandler() {
        return this.handler;
    }
    
    protected boolean checkBuffer() throws IOException {
        if (this.bufScan >= this.bufSize) {
            //	Buffer either empty or already parsed - get more from the file
            this.bufSize = reader.read(this.buffer);
            if (this.bufSize == -1)
                return false;
            this.bufScan = 0;
        }
        return true;
    }
    
    /**
     *	Returns the next character of the parsed file.
     */
    protected char getNext() throws IOException {
        if (this.checkBuffer())
            return this.buffer[this.bufScan++];
        else
            return '\0';
    }
    
    /**
     *	Get the next character without moving the parser offset.
     */
    protected char peekNext() throws IOException {
        if (this.checkBuffer())
            return this.buffer[this.bufScan];
        else
            return '\0';
    }
    
    /**
     *	Return the instance value associated with an element
     */
    private static int getInstanceValue(char c) {
        switch(c) {
            case '*':
                return Common.TYPE_0_N;
            case '+':
                return Common.TYPE_1_N;
            case '?':
                return Common.TYPE_0_1;
            default:
                //  We assume this default value if nothing is specified
                return Common.TYPE_1;
        }
    }
    
    /**
     *  Find out the type of the current word
     */
    private int processWord(StringBuffer curWord, int wordContext) throws SchemaParseException{
        String 	word = curWord.toString();
        int	len = word.length();
        
        if (len >0) {
            //	We have some word to play with
            switch (wordContext) {
                case WORD_CHECK:
                    if (word.startsWith("--")) {	// NOI18N
                        if (len > 2)
                            word = curWord.substring(2);
                        else
                            word = "";	// NOI18N
                        
                        this.handler.startElement(word, word, Common.COMMENT);
                        wordContext = WORD_COMMENT;
                    } else if (word.equals("ELEMENT"))	// NOI18N
                        wordContext = WORD_ELEMENT1;
                    else if (word.equals("ATTLIST"))	// NOI18N
                        wordContext = WORD_ATTLIST1;
                    else if (word.equals("ENTITY"))	// NOI18N
                        wordContext = WORD_ENTITY1;
                    else {
                        //System.err.println("Error: found an unknown '':
                    //	Might be the end of a comment or ' without '' without '




© 2015 - 2025 Weber Informatics LLC | Privacy Policy