001: /*
002: Copyright (c) 2003-2006, Dennis M. Sosnoski
003: All rights reserved.
004:
005: Redistribution and use in source and binary forms, with or without modification,
006: are permitted provided that the following conditions are met:
007:
008: * Redistributions of source code must retain the above copyright notice, this
009: list of conditions and the following disclaimer.
010: * Redistributions in binary form must reproduce the above copyright notice,
011: this list of conditions and the following disclaimer in the documentation
012: and/or other materials provided with the distribution.
013: * Neither the name of JiBX nor the names of its contributors may be used
014: to endorse or promote products derived from this software without specific
015: prior written permission.
016:
017: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
018: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
019: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
020: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
021: ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
022: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
023: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
024: ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
025: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
026: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027: */
028:
029: package org.jibx.binding.def;
030:
031: import java.util.ArrayList;
032:
033: import org.jibx.binding.classes.ClassFile;
034: import org.jibx.runtime.JiBXException;
035:
036: /**
037: * Interface for mapping definitions. This defines the additional access methods
038: * used with mappings (beyond those used with ordinary components).
039: *
040: * @author Dennis M. Sosnoski
041: * @version 1.0
042: */
043:
044: public interface IMapping extends IComponent {
045: /**
046: * Get class name handled by mapping.
047: *
048: * @return name of class bound by mapping
049: */
050: public String getBoundType();
051:
052: /**
053: * Get class name of type to be assumed for references to this mapping.
054: *
055: * @return reference type class name name
056: */
057: public String getReferenceType();
058:
059: /**
060: * Get binding component implementing mapping. This call is only valid for
061: * mappings with child components, not for mappings defined using
062: * marshallers or unmarshallers.
063: *
064: * @return binding component implementing this mapping
065: */
066: public IComponent getImplComponent();
067:
068: /**
069: * Get marshaller class used for mapping.
070: *
071: * @return marshaller class information
072: * @throws JiBXException if error in configuration
073: */
074: public ClassFile getMarshaller() throws JiBXException;
075:
076: /**
077: * Get unmarshaller class used for mapping.
078: *
079: * @return unmarshaller class information
080: * @throws JiBXException if error in configuration
081: */
082: public ClassFile getUnmarshaller() throws JiBXException;
083:
084: /**
085: * Get mapped element name.
086: *
087: * @return mapped element name information (may be <code>null</code> if no
088: * element name defined for mapping)
089: */
090: public NameDefinition getName();
091:
092: /**
093: * Get type name.
094: *
095: * @return qualified type name, in text form (<code>null</code> if unnamed)
096: */
097: public String getTypeName();
098:
099: /**
100: * Get mapped class index number.
101: *
102: * @return mapped class index number in context
103: */
104: public int getIndex();
105:
106: /**
107: * Add namespace. This adds a namespace definition to those active for the
108: * mapping.
109: *
110: * @param ns namespace definition to be added
111: * @throws JiBXException if error in defining namespace
112: */
113: public void addNamespace(NamespaceDefinition ns)
114: throws JiBXException;
115:
116: /**
117: * Check if mapping is abstract.
118: *
119: * @return <code>true</code> if an abstract mapping, <code>false</code> if
120: * not
121: */
122: public boolean isAbstract();
123:
124: /**
125: * Check if mapping has extensions.
126: *
127: * @return <code>true</code> if one or more mappings extend this mapping,
128: * <code>false</code> if not
129: */
130: public boolean isBase();
131:
132: /**
133: * Add extension to abstract mapping. This call is only valid for abstract
134: * mappings.
135: *
136: * @param mdef extension mapping definition
137: * @throws JiBXException if configuration error
138: */
139: public void addExtension(MappingDefinition mdef)
140: throws JiBXException;
141:
142: /**
143: * Build reference to mapping. Constructs and returns the component for
144: * handling the mapping.
145: *
146: * @param parent containing binding definition structure
147: * @param objc current object context
148: * @param type mapped value type
149: * @param prop property definition (may be <code>null</code>)
150: * @return constructed mapping reference component
151: * @throws JiBXException if configuration error
152: */
153: public IComponent buildRef(IContainer parent, IContextObj objc,
154: String type, PropertyDefinition prop) throws JiBXException;
155:
156: /**
157: * Get namespaces defined for mapping.
158: *
159: * @return namespace definitions (may be <code>null</code> if none)
160: */
161: public ArrayList getNamespaces();
162:
163: /**
164: * Generate required code for mapping.
165: *
166: * @param force add marshaller/unmarshaller classes for abstract non-base
167: * mappings flag (not passed on to children)
168: * @throws JiBXException if error in transformation
169: */
170: public void generateCode(boolean force) throws JiBXException;
171: }
|