/*
* 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 2002 (C) Intalio Inc. All Rights Reserved.
*
* $Id$
*/
package org.exolab.castor.builder;
import org.exolab.castor.builder.binding.xml.EnumBindingType;
import org.exolab.castor.builder.types.XSType;
/**
* This interface is the abstraction of any type of source that can interact
* with the Source Code Generator. From the Source Code Generator point of view,
* the source document used to generate Java source code is totally transparent
* and is not exposed.
* <p>
* Specific implementation of that class will represent the source document
* used. For instance when generating source code from an XML Schema, the source
* generator will interact with an
* {@link org.exolab.castor.builder.binding.XMLBindingComponent} whereas when
* generating source code from an UML model object model, the source generator
* will interact with an UMLBindingComponent (This is obviously just an example,
* no UML Object Model has been as of today integrated in Castor).
* <p>
* A binding component can be of three different types:
* <ul>
* <li>MEMBER: this type of BindingComponent will represent a java class
* member.</li>
* <li>INTERFACE: this type of BindingComponent will represent a java
* interface.</li>
* <li>CLASS: this type of BindingComponent will represent a java class.</li>
* </ul>
*
* @author <a href="mailto:blandin@intalio.com">Arnaud Blandin</a>
* @version $Revision$ $Date: 2005-03-05 06:42:06 -0700 (Sat, 05 Mar
* 2005) $
*/
public interface BindingComponent {
/** An interface binding component. */
short INTERFACE = 0;
/** A class binding component. */
short CLASS = 1;
/** A member binding component. */
short MEMBER = 2;
/** An enum binding component. */
short ENUM_TYPE = 3;
/** A content member binding component. */
short CONTENT_MEMBER_TYPE = 4;
/**
* Returns true if the given Object is equal to this instance of
* BindingComponent.
*
* @param object the object to compare to this instance
* @return true if the given Object is equal to this instance of
* BindingComponent.
* @see java.lang.Object#equals(java.lang.Object)
*/
boolean equals(Object object);
/**
* Returns the name of collection type such as 'arraylist' in which we will
* store the different occurrences of the java member generated to represent
* that BindingComponent.
*
* @return a string that represents the collection type such as 'arraylist'
* name in which we will store the different occurrences of the java
* member generated to represent that BindingComponent.
*/
String getCollectionType();
/**
* Returns the name of a super class for the current BindingComponent. Null
* is returned if this BindingComponent is not meant to be mapped to a java
* class.
*
* @return the name of a super class for the current BindingComponent. Null
* is returned if this BindingComponent is not meant to be mapped to
* a java class.
*/
String getExtends();
/**
* Returns an array of the different interface names implemented by the
* class that will represent the current BindingComponent. Null is returned
* if this BindingComponent is not meant to be mapped to a java class.
*
* @return an array of the different interface names implemented by the
* class that will represent the current BindingComponent. Null is
* returned if this BindingComponent is not meant to be mapped to a
* java class.
*/
String[] getImplements();
/**
* Returns a valid Java Class Name corresponding to this BindingComponent.
* This name is not qualified, this is only a local Java class name.
*
* @return a valid Java Class Name corresponding to this BindingComponent.
* This name is not qualified, this is only a local Java class name.
* @see #getQualifiedName
*/
String getJavaClassName();
/**
* Returns a valid Java Member Name corresponding to this BindingComponent.
* This name is not qualified, this is only a local Java Member name.
*
* @return a valid Java Member Name corresponding to this BindingComponent.
* This name is not qualified, this is only a local Java member
* name.
* @see #getQualifiedName
*/
String getJavaMemberName();
/**
* Returns the java package associated with this BindingComponent.
*
* @return the java package associated with this BindingComponent.
*/
String getJavaPackage();
/**
* Returns the XSType that corresponds to the Java type chosen to represent
* this BindingComponent. An XSType is an abstraction of a Java type used in
* the Source Generator. It wraps a JType as well as the necessary methods
* to convert to/from String.
*
* @return an XSType that corresponds to the Java type chosen to represent
* this BindingComponent.
*/
XSType getJavaType();
/**
* Returns the lower bound of the collection that is generated from this
* BindingComponent. The lower bound is a positive integer.
*
* @return an int representing the lower bound of the collection generated
* from this BindingComponent.
*/
int getLowerBound();
/**
* Returns a fully qualified java class name. This name corresponds to the
* class name that will be generated from this BindingComponent.
*
* @return a fully qualified java class name. This name corresponds to the
* class name corresponding to this BindingComponent.
*/
String getQualifiedName();
/**
* Returns the type of this component binding. A component binding can be of
* three different types:
* <ul>
* <li>Interface: it represents the binding to a java interface.</li>
* <li>Class: it represents the binding to a java class.</li>
* <li>Member: it represents the binding to a java class member.</li>
* </ul>
* -1 is returned if the component binding is null.
*
* @return the type of this component binding.
*/
short getType();
/**
* Returns the upper bound of the collection that is generated from this
* BindingComponent. The upper bound is a positive integer. -1 is returned
* to indicate that the upper bound is unbounded.
*
* @return an int representing the lower bound of the collection generated
* from this BindingComponent. -1 is returned to indicate that the
* upper bound is uinbounded.
*/
int getUpperBound();
/**
* Returns the default value of the member generated from this binding
* component. The value is returned as its string representation.
*
* @return a string representation of default value for the member generated
* from this binding component.
*/
String getValue();
/**
* Returns the fully qualified name of the Validator to use.
*
* @return the fully qualified name of the Validator to use.
*/
String getValidator();
/**
* Returns the EnumBindingType instance for the active binding component.
* @return The EnumBindingType instance
*/
EnumBindingType getEnumBinding();
/**
* Returns the fully qualified name of the XMLFieldHandler to use. This
* handler will be used when generating ClassDescriptors meant to be used in
* the marshalling framework.
*
* @return the fully qualified name of the XMLFieldHandler to use.
*/
String getXMLFieldHandler();
/**
* Returns true if bound properties must be generated for the class that
* will represent the current BindingComponent.
*
* @return true if bound properties must be generated for the class the
* class that will represent the current BindingComponent.
*/
boolean hasBoundProperties();
/**
* Returns true if equal method must be generated for the class that will
* represent the current BindingComponent.
*
* @return true if equal method must be generated for the class the class
* that will represent the current BindingComponent.
*/
boolean hasEquals();
/**
* Returns the hashCode value for this object.
*
* @return the hashcode value for this object.
* @see java.lang.Object#hashCode()
*/
int hashCode();
/**
* Returns true if the class generated from the current BindingComponent
* will be abstract.
*
* @return true if the class generated from the current BindingComponent
* will be abstract.
*/
boolean isAbstract();
/**
* Returns true if the class generated from the current BindingComponent
* will be final.
*
* @return true if the class generated from the current BindingComponent
* will be final.
*/
boolean isFinal();
/**
* Returns true if the member represented by that BindingComponent is to be
* represented by an Object wrapper. For instance an int will be represented
* by a java Integer if the property is set to true.
*
* @return true if the member represented by that BindingComponent is to be
* represented by an Object wrapper.
*/
boolean useWrapper();
}