001    /* ========================================================================
002     * JCommon : a free general purpose class library for the Java(tm) platform
003     * ========================================================================
004     *
005     * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
006     * 
007     * Project Info:  http://www.jfree.org/jcommon/index.html
008     *
009     * This library is free software; you can redistribute it and/or modify it 
010     * under the terms of the GNU Lesser General Public License as published by 
011     * the Free Software Foundation; either version 2.1 of the License, or 
012     * (at your option) any later version.
013     *
014     * This library is distributed in the hope that it will be useful, but 
015     * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
016     * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
017     * License for more details.
018     *
019     * You should have received a copy of the GNU Lesser General Public
020     * License along with this library; if not, write to the Free Software
021     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
022     * USA.  
023     *
024     * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
025     * in the United States and other countries.]
026     * 
027     * ---------------------
028     * ObjectRefHandler.java
029     * ---------------------
030     * (C)opyright 2003, by Thomas Morgner and Contributors.
031     *
032     * Original Author:  Thomas Morgner;
033     * Contributor(s):   David Gilbert (for Object Refinery Limited);
034     *
035     * $Id: ObjectRefHandler.java,v 1.3 2005/10/18 13:33:32 mungady Exp $
036     *
037     * Changes
038     * -------
039     * 29-Sep-2003 : Initial version (TM);
040     * 25-Nov-2003 : Updated header and Javadocs (DG);
041     *
042     */
043    
044    package org.jfree.xml.parser.coretypes;
045    
046    import org.jfree.xml.parser.AbstractXmlReadHandler;
047    import org.xml.sax.Attributes;
048    import org.xml.sax.SAXException;
049    
050    /**
051     * A SAX handler for an object reference.
052     */
053    public class ObjectRefHandler extends AbstractXmlReadHandler {
054    
055        /** The object. */
056        private Object object;
057      
058        /** The property name. */
059        private String propertyName;
060    
061        /**
062         * Creates a new handler.
063         */
064        public ObjectRefHandler() {
065            super();
066        }
067    
068        /**
069         * Starts parsing.
070         * 
071         * @param attrs  the attributes.
072         * 
073         * @throws SAXException ???.
074         */
075        protected void startParsing(final Attributes attrs) throws SAXException {
076            final String tagName = getTagName();
077            if (tagName.equals("objectRef")) {
078                final String sourceName = attrs.getValue("source");
079                if (sourceName == null) {
080                    throw new SAXException("Source name is not defined.");
081                }
082                this.propertyName = attrs.getValue("property");
083                if (this.propertyName == null) {
084                    throw new SAXException("Property name is not defined.");
085                }
086    
087                this.object = getRootHandler().getHelperObject(sourceName);
088                if (this.object == null) {
089                    throw new SAXException("Referenced object is undefined.");
090                }
091            }
092        }
093    
094        /**
095         * Returns the property name.
096         * 
097         * @return the property name.
098         */
099        public String getPropertyName() {
100            return this.propertyName;
101        }
102    
103        /**
104         * Returns the value.
105         * 
106         * @return the value.
107         */
108        public Object getObject() {
109            return this.object;
110        }
111    
112    }