/* * * Copyright 1990-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */ package javax.microedition.xml.rpc; import javax.xml.namespace.QName; import javax.xml.rpc.JAXRPCException; /** * The class <code>Element</code> is a special Object * used to represent an xsd:element defined in a Web Service's * WSDL definition. An element can have the additional properties * of being an array, being nillable, and has minOccurs and * maxOccurs values. * * @version 0.1 * @see javax.xml.rpc.Stub * @see javax.microedition.xml.rpc.Operation */ public class Element extends Type { /** * The QName of this element */ public final QName name; /** * The Type of this Element's content. */ public final Type contentType; /** * True if this element is nillable */ public final boolean isNillable; /** * True if this element is an array */ public final boolean isArray; /** * True if this element is optional, that is, its minOccurs * is defined as being 0. */ public final boolean isOptional; /** * The 'minOccurs' attribute of this element. -1 if this * element has no 'minOccurs' attribute. */ public final int minOccurs; /** * The 'maxOccurs' attribute of this element. -1 if this * element has no 'maxOccurs' attribute. */ public final int maxOccurs; /** * Constant use to indicate that <code>maxOccurrs</code> * is unbounded. */ public final static int UNBOUNDED = -1; /** * Construct an Element with the given properties. * This Type subclass will have an <code>intValue()</code> of 9. * * @param name the QName of this element * @param type the Type of this element's content * @param minOccurs indicates the minimum number of times this * element can occur. A value of '0' indicates * this element is optional. * @param maxOccurs indicates the maximum number of times this * element can occur. A value > 1, in addition * to <code>isArray</code> being true, indicates * this element is an array. * @throws IllegalArgumentException * <UL> * <LI>if <code>minOccurs < 0</code>, or * <LI>if <code>name</code> or <code>type</code> are <code>null</code> * <LI>if <code>type</code> is an instance of <code>Element</code> * </UL> */ public Element(QName name, Type type, int minOccurs, int maxOccurs, boolean nillable) throws IllegalArgumentException { super(9); if (name == null || type == null || type instanceof Element) { throw new IllegalArgumentException(); } this.name = name; this.contentType = type; if (minOccurs < 0 || (maxOccurs <= 0 && maxOccurs != UNBOUNDED)) { throw new IllegalArgumentException("[min|max]Occurs must >= 0"); } else if (maxOccurs < minOccurs && maxOccurs != UNBOUNDED) { throw new IllegalArgumentException("maxOccurs must > minOccurs"); } this.minOccurs = minOccurs; this.isOptional = (minOccurs == 0); this.maxOccurs = maxOccurs; this.isArray = (maxOccurs > 1 || maxOccurs == UNBOUNDED); this.isNillable = nillable; } /** * Construct an Element with the given properties. The defaults for * the unspecified properties are: * <UL> * <LI>minOccurs = 1 * <LI>maxOccurs = 1 * <LI>isOptional = false * <LI>isArray = false * <LI>nillable = false * </UL> * * This Type subclass will have an <code>intValue()</code> of 9. * * @param name the QName of this element * @param type the Type of this element's content * * @throws IllegalArgumentException * <UL> * <LI>if <code>name</code> or <code>type</code> are <code>null</code> * <LI>if <code>type</code> is an instance of <code>Element</code> * </UL> */ public Element(QName name, Type type) throws IllegalArgumentException { super(9); if (name == null || type == null || type instanceof Element) { throw new IllegalArgumentException(); } this.name = name; this.contentType = type; this.minOccurs = 1; this.maxOccurs = 1; this.isArray = false; this.isOptional = false; this.isNillable = false; } }