Package org.vocvark.XMLParsers

Source Code of org.vocvark.XMLParsers.ParseFeatureDefinitionsFileHandler

/*
* @(#)ParseFeatureDefinitionssFileHandler.java  1.0  April 5, 2005.
*
* McGill Univarsity
*/

package org.vocvark.XMLParsers;

import org.vocvark.DataTypes.FeatureDefinition;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;

import java.util.LinkedList;


/**
* An extension of the Xerces XML DefaultHandler class that implements the
* SAX ContentHandler. The methods of this class are called by an instance of
* an XMLReader while it is parsing an XML document.
* <p/>
* <p>This particular implementation is custom designed to parse XML files of
* the feature_key_file type used by the ACE classification system. A custom
* exception is thrown if the file is not of this type. At the end of parsing,
* the contents of the files elements are stored in the parsed_file_contents
* field.
*
* @author Cory McKay
*/
public class ParseFeatureDefinitionsFileHandler
        extends ParseFileHandler {
    /* FIELDS ******************************************************************/


    /*
      * FeatureDefinition[] parsed_file_contents
      * Holds the data extracted from the XML file.
      */


    /**
     * Holds the FeatureDefinitions
     */
    private LinkedList<FeatureDefinition> definitions;


    /**
     * The FeatureDefinition currently being filled
     */
    private FeatureDefinition current_definition;


    /**
     * Identifies what tag has been found
     */
    private int tag_identifier;


    /**
     * A count of the number of start elements encountered
     */
    private int count;


    /* PUBLIC METHODS **********************************************************/


    /**
     * This method is called when the start of the XML file to be
     * parsed is reached. Instantiates the definitions field
     * and sets the count to 0.
     */
    public void startDocument() {
        definitions = new LinkedList<FeatureDefinition>();
        count = 0;
    }


    /**
     * This method is called when the start of an XML element
     * is encountered. Instantiates a new FeatureDefinition
     * object if a feature tag was encountered. Otherwise lets
     * the characters method know what kind of action to take.
     *
     * @param    name            Name of the element that is encountered.
     * @throws org.xml.sax.SAXException    Exception thrown if is wrong type of XML file.
     */
    public void startElement(String namespace, String name, String qName, Attributes atts)
            throws SAXException {
        // Make sure is correct file type
        if (count == 0)
            if (!name.equals("feature_key_file"))
                throw new SAXException("\n\nIt is in reality of the type " + name + ".");
        count++;

        // Identify the type of tag
        tag_identifier = 0;
        if (name.equals("feature"))
            current_definition = new FeatureDefinition();
        else if (name.equals("name"))
            tag_identifier = 1;
        else if (name.equals("description"))
            tag_identifier = 2;
        else if (name.equals("is_sequential"))
            tag_identifier = 3;
        else if (name.equals("parallel_dimensions"))
            tag_identifier = 4;
    }


    /**
     * This method responds to the contents of tags in a way
     * determined by the name of the tag (as determined by the
     * startElement method).
     * <p/>
     * <p>The FeatureDefinition object represented by
     * current_definition is filled by the contents
     * of the name, description, is_sequential and
     * parallel_dimensions tags.
     */
    public void characters(char[] ch, int start, int length) {
        String contents = new String(ch, start, length);

        if (tag_identifier == 1)
            current_definition.name = contents;
        else if (tag_identifier == 2)
            current_definition.description = contents;
        else if (tag_identifier == 3) {
            if (contents.equals("false"))
                current_definition.is_sequential = false;
            else
                current_definition.is_sequential = true;
        } else if (tag_identifier == 4)
            current_definition.dimensions = Integer.parseInt(contents);
    }


    /**
     * This method is called when the end tag of an XML element
     * is encountered. Adds the current_definition to the
     * definitions list when the feature end tag is encountered.
     *
     * @param    name            Name of the element that is encountered.
     */
    public void endElement(String namespace, String name, String qName) {
        if (name.equals("feature"))
            definitions.add(current_definition);
    }


    /**
     * This method is called when the end tag of an XML element
     * is encountered. Fills the parsed_file_contents
     * field with the definitions LinkedList.
     */
    public void endDocument() {
        parsed_file_contents = definitions.toArray();
    }
}
TOP

Related Classes of org.vocvark.XMLParsers.ParseFeatureDefinitionsFileHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.