    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     * URLClassFactory.java
    029     * --------------------
    030     * (C)opyright 2003, 2004, by Thomas Morgner and Contributors.
    031     *
    032     * Original Author:  Thomas Morgner;
    033     * Contributor(s):   David Gilbert (for Object Refinery Limited);
    034     *
    035     * $Id: URLObjectDescription.java,v 1.3 2005/11/14 11:04:43 mungady Exp $
    036     *
    037     * Changes (from 19-Feb-2003)
    038     * -------------------------
    039     * 19-Feb-2003 : Added standard header and Javadocs (DG);
    040     * 29-Apr-2003 : Distilled from the JFreeReport project and moved into JCommon
    041     *
    042     */
    043
    044    package org.jfree.xml.factory.objects;
    045
    046    import java.net.URL;
    047
    048    import org.jfree.io.IOUtils;
    049    import org.jfree.util.Log;
    050    import org.jfree.xml.Parser;
    051
    052    /**
    053     * An object-description for a <code>URL</code> object.
    054     *
    055     * @author Thomas Morgner
    056     */
    057    public class URLObjectDescription extends AbstractObjectDescription {
    058
    059        /**
    060         * Creates a new object description.
    061         */
    062        public URLObjectDescription() {
    063            super(URL.class);
    064            setParameterDefinition("value", String.class);
    065        }
    066
    067        /**
    068         * Creates an object based on this description.
    069         *
    070         * @return The object.
    071         */
    072        public Object createObject() {
    073            final String o = (String) getParameter("value");
    074            final String baseURL = getConfig().getConfigProperty(Parser.CONTENTBASE_KEY);
    075            try {
    076                try {
    077                    final URL bURL = new URL(baseURL);
    078                    return new URL(bURL, o);
    079                }
    080                catch (Exception e) {
    081                    Log.warn("BaseURL is invalid: ", e);
    082                }
    083                return new URL(o);
    084            }
    085            catch (Exception e) {
    086                return null;
    087            }
    088        }
    089
    090        /**
    091         * Sets the parameters of this description object to match the supplied object.
    092         *
    093         * @param o  the object (should be an instance of <code>URL</code>).
    094         *
    095         * @throws ObjectFactoryException if the object is not an instance of <code>URL</code>.
    096         */
    097        public void setParameterFromObject(final Object o) throws ObjectFactoryException {
    098            if (!(o instanceof URL)) {
    099                throw new ObjectFactoryException("Is no instance of java.net.URL");
    100            }
    101
    102            final URL comp = (URL) o;
    103            final String baseURL = getConfig().getConfigProperty(Parser.CONTENTBASE_KEY);
    104            try {
    105                final URL bURL = new URL(baseURL);
    106                setParameter("value", IOUtils.getInstance().createRelativeURL(comp, bURL));
    107            }
    108            catch (Exception e) {
    109                Log.warn("BaseURL is invalid: ", e);
    110            }
    111            setParameter("value", comp.toExternalForm());
    112        }
    113
    114    }