/*
* Redistribution and use of this software and associated documentation
* ("Software"), with or without modification, are permitted provided
* that the following conditions are met:
*
* 1. Redistributions of source code must retain copyright
* statements and notices. Redistributions must also contain a
* copy of this document.
*
* 2. Redistributions in binary form must reproduce the
* above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. The name "Exolab" must not be used to endorse or promote
* products derived from this Software without prior written
* permission of Intalio, Inc. For written permission,
* please contact info@exolab.org.
*
* 4. Products derived from this Software may not be called "Exolab"
* nor may "Exolab" appear in their names without prior written
* permission of Intalio, Inc. Exolab is a registered
* trademark of Intalio, Inc.
*
* 5. Due credit should be given to the Exolab Project
* (http://www.exolab.org/).
*
* THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* INTALIO, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright 1999 (C) Intalio, Inc. All Rights Reserved.
*
* $Id$
*/
package org.exolab.castor.builder.info;
/**
* A class to hold group information.
*
* @author <a href="mailto:kvisco@intalio.com">Keith Visco</a>
* @version $Revision$ $Date: 2003-03-03 00:05:44 -0700 (Mon, 03 Mar 2003) $
*/
public final class GroupInfo {
/**
* The compositor value that indicates that all fields are required, but
* order is not important. <I>default</I>
*/
public static final int ALL = 0;
/**
* The compositor value that indicates that only one field may be present.
*/
public static final int CHOICE = 1;
/**
* The compositor value that indicates that all fields are required and
* order is important.
*/
public static final int SEQUENCE = 2;
/** A flag indicating if the object described by this XML info can appear more than once. */
private boolean _multivalued = false;
/** indicates the XML object must appear at least once. */
private boolean _required = false;
/** The compositor for this XMLInfo. */
private int _compositor = ALL;
/** The minimum occurance for this group. */
private int _minOccurs = 1;
/** The maximum occurance for this group. */
private int _maxOccurs = 1;
/**
* Creates a new GroupInfo.
*/
public GroupInfo() {
super();
} //-- GroupInfo
/**
* Returns the maximum occurance for this group.
*
* @return the maximum occurance for this group.
*/
public int getMaxOccurs() {
return _maxOccurs;
} //-- getMaxOccurs
/**
* Returns the minimum occurance for this group.
*
* @return the minimum occurance for this group.
*/
public int getMinOccurs() {
return _minOccurs;
} //-- getMinOccurs
/**
* Return whether or not the object described by this XMLInfo is
* multi-valued (appears more than once in the XML document).
*
* @return true if this object can appear more than once.
*/
public boolean isMultivalued() {
return _multivalued;
} //-- isMultivalued
/**
* Return true if the XML object described by this GroupInfo must appear at
* least once in the XML document (or object model).
*
* @return true if the XML object must appear at least once.
*/
public boolean isRequired() {
return _required;
} //-- isRequired
/**
* Returns true if the compositor of this GroupInfo is a choice.
* @return true if the compositor of this GroupInfo is a choice.
*/
public boolean isChoice() {
return (_compositor == CHOICE);
} //-- isChoice
/**
* Returns true if the compositor of this GroupInfo is a sequence.
*
* @return true if the compositor of this GroupInfo is a sequence.
*/
public boolean isSequence() {
return (_compositor == SEQUENCE);
} //-- isSequence
/**
* Sets the compositor for the fields of this group to be "all".
*/
public void setAsAll() {
this._compositor = ALL;
} //-- setAsAll
/**
* Sets the compositor for the fields of this group to be a choice.
*/
public void setAsChoice() {
this._compositor = CHOICE;
} //-- setAsChoice
/**
* Sets the compositor for the fields of this group to be a sequence.
*/
public void setAsSequence() {
this._compositor = SEQUENCE;
} //-- setAsSequence
/**
* Sets the maximum occurance for this group.
*
* @param maxOccurs the maximum occurance this group must appear
*/
public void setMaxOccurs(final int maxOccurs) {
_maxOccurs = (maxOccurs < 0) ? -1 : maxOccurs;
} //-- setMaxOccurs
/**
* Sets the minimum occurrence for this group.
*
* @param minOccurs the minimum occurance this group must appear
*/
public void setMinOccurs(final int minOccurs) {
_minOccurs = (minOccurs < 0) ? 1 : minOccurs;
} //-- setMinOccurs
/**
* Sets whether the XML object can appear more than once in the XML
* document.
*
* @param multivalued the boolean indicating whether or not the object can
* appear more than once
*/
public void setMultivalued(final boolean multivalued) {
this._multivalued = multivalued;
} //-- setMultivalued
/**
* Sets whether or not the XML object must appear at least once.
*
* @param required the flag indicating whether or not this XML object is
* required
*/
public void setRequired(final boolean required) {
this._required = required;
} //-- setRequired
} //-- GroupInfo