| 
0
 | 
     1 /*--
 | 
| 
 | 
     2 
 | 
| 
 | 
     3  $Id: EntityRef.java,v 1.22 2007/11/10 05:28:59 jhunter Exp $
 | 
| 
 | 
     4 
 | 
| 
 | 
     5  Copyright (C) 2000-2007 Jason Hunter & Brett McLaughlin.
 | 
| 
 | 
     6  All rights reserved.
 | 
| 
 | 
     7 
 | 
| 
 | 
     8  Redistribution and use in source and binary forms, with or without
 | 
| 
 | 
     9  modification, are permitted provided that the following conditions
 | 
| 
 | 
    10  are met:
 | 
| 
 | 
    11 
 | 
| 
 | 
    12  1. Redistributions of source code must retain the above copyright
 | 
| 
 | 
    13     notice, this list of conditions, and the following disclaimer.
 | 
| 
 | 
    14 
 | 
| 
 | 
    15  2. Redistributions in binary form must reproduce the above copyright
 | 
| 
 | 
    16     notice, this list of conditions, and the disclaimer that follows
 | 
| 
 | 
    17     these conditions in the documentation and/or other materials
 | 
| 
 | 
    18     provided with the distribution.
 | 
| 
 | 
    19 
 | 
| 
 | 
    20  3. The name "JDOM" must not be used to endorse or promote products
 | 
| 
 | 
    21     derived from this software without prior written permission.  For
 | 
| 
 | 
    22     written permission, please contact <request_AT_jdom_DOT_org>.
 | 
| 
 | 
    23 
 | 
| 
 | 
    24  4. Products derived from this software may not be called "JDOM", nor
 | 
| 
 | 
    25     may "JDOM" appear in their name, without prior written permission
 | 
| 
 | 
    26     from the JDOM Project Management <request_AT_jdom_DOT_org>.
 | 
| 
 | 
    27 
 | 
| 
 | 
    28  In addition, we request (but do not require) that you include in the
 | 
| 
 | 
    29  end-user documentation provided with the redistribution and/or in the
 | 
| 
 | 
    30  software itself an acknowledgement equivalent to the following:
 | 
| 
 | 
    31      "This product includes software developed by the
 | 
| 
 | 
    32       JDOM Project (http://www.jdom.org/)."
 | 
| 
 | 
    33  Alternatively, the acknowledgment may be graphical using the logos
 | 
| 
 | 
    34  available at http://www.jdom.org/images/logos.
 | 
| 
 | 
    35 
 | 
| 
 | 
    36  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 | 
| 
 | 
    37  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | 
| 
 | 
    38  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
| 
 | 
    39  DISCLAIMED.  IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
 | 
| 
 | 
    40  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
| 
 | 
    41  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
| 
 | 
    42  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 | 
| 
 | 
    43  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | 
| 
 | 
    44  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
| 
 | 
    45  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 | 
| 
 | 
    46  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
| 
 | 
    47  SUCH DAMAGE.
 | 
| 
 | 
    48 
 | 
| 
 | 
    49  This software consists of voluntary contributions made by many
 | 
| 
 | 
    50  individuals on behalf of the JDOM Project and was originally
 | 
| 
 | 
    51  created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
 | 
| 
 | 
    52  Brett McLaughlin <brett_AT_jdom_DOT_org>.  For more information
 | 
| 
 | 
    53  on the JDOM Project, please see <http://www.jdom.org/>.
 | 
| 
 | 
    54 
 | 
| 
 | 
    55  */
 | 
| 
 | 
    56 
 | 
| 
 | 
    57 package org.jdom;
 | 
| 
 | 
    58 
 | 
| 
 | 
    59 /**
 | 
| 
 | 
    60  * An XML entity reference. Methods allow the user to manage its name, public
 | 
| 
 | 
    61  * id, and system id.
 | 
| 
 | 
    62  *
 | 
| 
 | 
    63  * @version $Revision: 1.22 $, $Date: 2007/11/10 05:28:59 $
 | 
| 
 | 
    64  * @author  Brett McLaughlin
 | 
| 
 | 
    65  * @author  Jason Hunter
 | 
| 
 | 
    66  * @author  Philip Nelson
 | 
| 
 | 
    67  */
 | 
| 
 | 
    68 public class EntityRef extends Content {
 | 
| 
 | 
    69 
 | 
| 
 | 
    70     private static final String CVS_ID =
 | 
| 
 | 
    71       "@(#) $RCSfile: EntityRef.java,v $ $Revision: 1.22 $ $Date: 2007/11/10 05:28:59 $ $Name: jdom_1_1_1 $";
 | 
| 
 | 
    72 
 | 
| 
 | 
    73     /** The name of the <code>EntityRef</code> */
 | 
| 
 | 
    74     protected String name;
 | 
| 
 | 
    75 
 | 
| 
 | 
    76     /** The PublicID of the <code>EntityRef</code> */
 | 
| 
 | 
    77     protected String publicID;
 | 
| 
 | 
    78 
 | 
| 
 | 
    79     /** The SystemID of the <code>EntityRef</code> */
 | 
| 
 | 
    80     protected String systemID;
 | 
| 
 | 
    81 
 | 
| 
 | 
    82     /**
 | 
| 
 | 
    83      * Default, no-args constructor for implementations to use if needed.
 | 
| 
 | 
    84      */
 | 
| 
 | 
    85     protected EntityRef() {}
 | 
| 
 | 
    86 
 | 
| 
 | 
    87     /**
 | 
| 
 | 
    88      * This will create a new <code>EntityRef</code> with the supplied name.
 | 
| 
 | 
    89      *
 | 
| 
 | 
    90      * @param name <code>String</code> name of element.
 | 
| 
 | 
    91      * @throws IllegalNameException if the given name is not a legal
 | 
| 
 | 
    92      *         XML name.
 | 
| 
 | 
    93      */
 | 
| 
 | 
    94     public EntityRef(String name) {
 | 
| 
 | 
    95         this(name, null, null);
 | 
| 
 | 
    96     }
 | 
| 
 | 
    97 
 | 
| 
 | 
    98     /**
 | 
| 
 | 
    99      * This will create a new <code>EntityRef</code>
 | 
| 
 | 
   100      * with the supplied name and system id.
 | 
| 
 | 
   101      *
 | 
| 
 | 
   102      * @param name <code>String</code> name of element.
 | 
| 
 | 
   103      * @param systemID system id of the entity reference being constructed
 | 
| 
 | 
   104      * @throws IllegalNameException if the given name is not a legal
 | 
| 
 | 
   105      *         XML name.
 | 
| 
 | 
   106      * @throws IllegalDataException if the given system ID is not a legal
 | 
| 
 | 
   107      *         system literal.
 | 
| 
 | 
   108      */
 | 
| 
 | 
   109     public EntityRef(String name, String systemID) {
 | 
| 
 | 
   110         this(name, null, systemID);
 | 
| 
 | 
   111     }
 | 
| 
 | 
   112 
 | 
| 
 | 
   113     /**
 | 
| 
 | 
   114      * This will create a new <code>EntityRef</code>
 | 
| 
 | 
   115      * with the supplied name, public id, and system id.
 | 
| 
 | 
   116      *
 | 
| 
 | 
   117      * @param name <code>String</code> name of element.
 | 
| 
 | 
   118      * @param publicID public id of the entity reference being constructed
 | 
| 
 | 
   119      * @param systemID system id of the entity reference being constructed
 | 
| 
 | 
   120      * @throws IllegalDataException if the given system ID is not a legal
 | 
| 
 | 
   121      *         system literal or the the given public ID is not a
 | 
| 
 | 
   122      *         legal public ID
 | 
| 
 | 
   123      * @throws IllegalNameException if the given name is not a legal
 | 
| 
 | 
   124      *         XML name.
 | 
| 
 | 
   125      */
 | 
| 
 | 
   126     public EntityRef(String name, String publicID, String systemID) {
 | 
| 
 | 
   127         setName(name);
 | 
| 
 | 
   128         setPublicID(publicID);
 | 
| 
 | 
   129         setSystemID(systemID);
 | 
| 
 | 
   130     }
 | 
| 
 | 
   131 
 | 
| 
 | 
   132     /**
 | 
| 
 | 
   133      * This returns the name of the <code>EntityRef</code>.
 | 
| 
 | 
   134      *
 | 
| 
 | 
   135      * @return <code>String</code> - entity name.
 | 
| 
 | 
   136      */
 | 
| 
 | 
   137     public String getName() {
 | 
| 
 | 
   138         return name;
 | 
| 
 | 
   139     }
 | 
| 
 | 
   140 
 | 
| 
 | 
   141     /**
 | 
| 
 | 
   142      * Returns the empty string since entity references don't have an XPath
 | 
| 
 | 
   143      * 1.0 string value.
 | 
| 
 | 
   144      * @return the empty string
 | 
| 
 | 
   145      */
 | 
| 
 | 
   146     public String getValue() {
 | 
| 
 | 
   147         return "";  // entity references don't have XPath string values
 | 
| 
 | 
   148     }
 | 
| 
 | 
   149 
 | 
| 
 | 
   150     /**
 | 
| 
 | 
   151      * This will return the publid ID of this <code>EntityRef</code>.
 | 
| 
 | 
   152      * If there is no public ID, then this returns <code>null</code>.
 | 
| 
 | 
   153      *
 | 
| 
 | 
   154      * @return public ID of this <code>EntityRef</code>
 | 
| 
 | 
   155      */
 | 
| 
 | 
   156     public String getPublicID() {
 | 
| 
 | 
   157         return publicID;
 | 
| 
 | 
   158     }
 | 
| 
 | 
   159 
 | 
| 
 | 
   160     /**
 | 
| 
 | 
   161      * This will return the system ID of this <code>EntityRef</code>.
 | 
| 
 | 
   162      * If there is no system ID, then this returns <code>null</code>.
 | 
| 
 | 
   163      *
 | 
| 
 | 
   164      * @return system ID of this <code>EntityRef</code>
 | 
| 
 | 
   165      */
 | 
| 
 | 
   166     public String getSystemID() {
 | 
| 
 | 
   167         return systemID;
 | 
| 
 | 
   168     }
 | 
| 
 | 
   169 
 | 
| 
 | 
   170     /**
 | 
| 
 | 
   171      * This will set the name of this <code>EntityRef</code>.
 | 
| 
 | 
   172      *
 | 
| 
 | 
   173      * @param name new name of the entity
 | 
| 
 | 
   174      * @return this <code>EntityRef</code> modified.
 | 
| 
 | 
   175      * @throws IllegalNameException if the given name is not a legal
 | 
| 
 | 
   176      *         XML name.
 | 
| 
 | 
   177      */
 | 
| 
 | 
   178     public EntityRef setName(String name) {
 | 
| 
 | 
   179         // This can contain a colon so we use checkXMLName()
 | 
| 
 | 
   180         // instead of checkElementName()
 | 
| 
 | 
   181         String reason = Verifier.checkXMLName(name);
 | 
| 
 | 
   182         if (reason != null) {
 | 
| 
 | 
   183             throw new IllegalNameException(name, "EntityRef", reason);
 | 
| 
 | 
   184         }
 | 
| 
 | 
   185         this.name = name;
 | 
| 
 | 
   186         return this;
 | 
| 
 | 
   187     }
 | 
| 
 | 
   188 
 | 
| 
 | 
   189     /**
 | 
| 
 | 
   190      * This will set the public ID of this <code>EntityRef</code>.
 | 
| 
 | 
   191      *
 | 
| 
 | 
   192      * @param publicID new public id
 | 
| 
 | 
   193      * @return this <code>EntityRef</code> modified.
 | 
| 
 | 
   194      * @throws IllegalDataException if the given public ID is not a legal
 | 
| 
 | 
   195      *         public ID.
 | 
| 
 | 
   196      */
 | 
| 
 | 
   197     public EntityRef setPublicID(String publicID) {
 | 
| 
 | 
   198         String reason = Verifier.checkPublicID(publicID);
 | 
| 
 | 
   199         if (reason != null) {
 | 
| 
 | 
   200             throw new IllegalDataException(publicID, "EntityRef", reason);
 | 
| 
 | 
   201         }
 | 
| 
 | 
   202         this.publicID = publicID;
 | 
| 
 | 
   203         return this;
 | 
| 
 | 
   204     }
 | 
| 
 | 
   205 
 | 
| 
 | 
   206     /**
 | 
| 
 | 
   207      * This will set the system ID of this <code>EntityRef</code>.
 | 
| 
 | 
   208      *
 | 
| 
 | 
   209      * @param systemID new system id
 | 
| 
 | 
   210      * @throws IllegalDataException if the given system ID is not a legal
 | 
| 
 | 
   211      *         system literal.
 | 
| 
 | 
   212      * @return this <code>EntityRef</code> modified.
 | 
| 
 | 
   213      */
 | 
| 
 | 
   214     public EntityRef setSystemID(String systemID) {
 | 
| 
 | 
   215         String reason = Verifier.checkSystemLiteral(systemID);
 | 
| 
 | 
   216         if (reason != null) {
 | 
| 
 | 
   217             throw new IllegalDataException(systemID, "EntityRef", reason);
 | 
| 
 | 
   218         }
 | 
| 
 | 
   219         this.systemID = systemID;
 | 
| 
 | 
   220         return this;
 | 
| 
 | 
   221     }
 | 
| 
 | 
   222 
 | 
| 
 | 
   223     /**
 | 
| 
 | 
   224      * This returns a <code>String</code> representation of the
 | 
| 
 | 
   225      * <code>EntityRef</code>, suitable for debugging.
 | 
| 
 | 
   226      *
 | 
| 
 | 
   227      * @return <code>String</code> - information about the
 | 
| 
 | 
   228      *         <code>EntityRef</code>
 | 
| 
 | 
   229      */
 | 
| 
 | 
   230     public String toString() {
 | 
| 
 | 
   231         return new StringBuffer()
 | 
| 
 | 
   232             .append("[EntityRef: ")
 | 
| 
 | 
   233             .append("&")
 | 
| 
 | 
   234             .append(name)
 | 
| 
 | 
   235             .append(";")
 | 
| 
 | 
   236             .append("]")
 | 
| 
 | 
   237             .toString();
 | 
| 
 | 
   238     }
 | 
| 
 | 
   239 }
 |