001: /*
002: * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package com.sun.xml.internal.bind.v2.model.core;
027:
028: import java.util.Map;
029:
030: import javax.xml.bind.JAXBException;
031: import javax.xml.bind.annotation.XmlSchema;
032: import javax.xml.bind.annotation.XmlNsForm;
033: import javax.xml.namespace.QName;
034: import javax.xml.transform.Result;
035:
036: import com.sun.xml.internal.bind.v2.model.nav.Navigator;
037:
038: /**
039: * Root of models. Set of {@link TypeInfo}s.
040: *
041: * @author Kohsuke Kawaguchi
042: */
043: public interface TypeInfoSet<T, C, F, M> {
044:
045: /**
046: * {@link Navigator} for this model.
047: */
048: Navigator<T, C, F, M> getNavigator();
049:
050: // turns out we can't have AnnotationReader in XJC, so it's impossible to have this here.
051: // perhaps we should revisit this in the future.
052: // /**
053: // * {@link AnnotationReader} for this model.
054: // */
055: // AnnotationReader<T,C,F,M> getReader();
056:
057: /**
058: * Returns a {@link TypeInfo} for the given type.
059: *
060: * @return
061: * null if the specified type cannot be bound by JAXB, or
062: * not known to this set.
063: */
064: NonElement<T, C> getTypeInfo(T type);
065:
066: /**
067: * Gets the {@link TypeInfo} for the any type.
068: */
069: NonElement<T, C> getAnyTypeInfo();
070:
071: /**
072: * Returns a {@link ClassInfo}, {@link ArrayInfo}, or {@link LeafInfo}
073: * for the given bean.
074: *
075: * <p>
076: * This method is almost like refinement of {@link #getTypeInfo(Object)} except
077: * our C cannot derive from T.
078: *
079: * @return
080: * null if the specified type is not bound by JAXB or otherwise
081: * unknown to this set.
082: */
083: NonElement<T, C> getClassInfo(C type);
084:
085: /**
086: * Returns all the {@link ArrayInfo}s known to this set.
087: */
088: Map<? extends T, ? extends ArrayInfo<T, C>> arrays();
089:
090: /**
091: * Returns all the {@link ClassInfo}s known to this set.
092: */
093: Map<C, ? extends ClassInfo<T, C>> beans();
094:
095: /**
096: * Returns all the {@link BuiltinLeafInfo}s known to this set.
097: */
098: Map<T, ? extends BuiltinLeafInfo<T, C>> builtins();
099:
100: /**
101: * Returns all the {@link EnumLeafInfo}s known to this set.
102: */
103: Map<C, ? extends EnumLeafInfo<T, C>> enums();
104:
105: /**
106: * Returns a {@link ElementInfo} for the given element.
107: *
108: * @param scope
109: * if null, return the info about a global element.
110: * Otherwise return a local element in the given scope if available,
111: * then look for a global element next.
112: */
113: ElementInfo<T, C> getElementInfo(C scope, QName name);
114:
115: /**
116: * Returns a type information for the given reference.
117: */
118: NonElement<T, C> getTypeInfo(Ref<T, C> ref);
119:
120: /**
121: * Returns all {@link ElementInfo}s in the given scope.
122: *
123: * @param scope
124: * if non-null, this method only returns the local element mapping.
125: */
126: Map<QName, ? extends ElementInfo<T, C>> getElementMappings(C scope);
127:
128: /**
129: * Returns all the {@link ElementInfo} known to this set.
130: */
131: Iterable<? extends ElementInfo<T, C>> getAllElements();
132:
133: /**
134: * Gets all {@link XmlSchema#xmlns()} found in this context for the given namespace URI.
135: *
136: * <p>
137: * This operation is expected to be only used in schema generator, so it can be slow.
138: *
139: * @return
140: * A map from prefixes to namespace URIs, which should be declared when generating a schema.
141: * Could be empty but never null.
142: */
143: Map<String, String> getXmlNs(String namespaceUri);
144:
145: /**
146: * Gets the reasonable {@link XmlNsForm} for the given namespace URI.
147: *
148: * <p>
149: * The spec doesn't define very precisely what the {@link XmlNsForm} value
150: * for the given namespace would be, so this method is implemented in rather
151: * ad-hoc way. It should work as what most people expect for simple cases.
152: *
153: * @return never null.
154: */
155: XmlNsForm getElementFormDefault(String nsUri);
156:
157: /**
158: * Gets the reasonable {@link XmlNsForm} for the given namespace URI.
159: *
160: * <p>
161: * The spec doesn't define very precisely what the {@link XmlNsForm} value
162: * for the given namespace would be, so this method is implemented in rather
163: * ad-hoc way. It should work as what most people expect for simple cases.
164: *
165: * @return never null.
166: */
167: XmlNsForm getAttributeFormDefault(String nsUri);
168:
169: /**
170: * Dumps this model into XML.
171: *
172: * For debug only.
173: *
174: * TODO: not sure if this actually works. We don't really know what are T,C.
175: */
176: public void dump(Result out) throws JAXBException;
177: }
|