4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk//
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v1.0.6-b27-fcs
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk// Any modifications to this file will be lost upon recompilation of the source schema.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk// Generated on: 2012.06.11 at 10:33:54 AM PDT
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk//
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkpackage com.sun.identity.federation.jaxb.entityconfig.impl.runtime;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkimport java.util.ArrayList;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkimport java.util.StringTokenizer;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkimport javax.xml.bind.JAXBContext;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkimport javax.xml.bind.JAXBException;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkimport com.sun.xml.bind.GrammarImpl;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkimport com.sun.xml.bind.Messages;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkimport com.sun.xml.bind.ProxyGroup;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk/**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * This class is a facade to a collection of GrammarInfo objects. It
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * dispatches rootElement requests to the underlying GrammarInfo objects.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @version $Revision: 1.2 $
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkclass GrammarInfoFacade implements GrammarInfo {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk private GrammarInfo[] grammarInfos = null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public GrammarInfoFacade( GrammarInfo[] items ) throws JAXBException {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk grammarInfos = items;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk detectRootElementCollisions( getProbePoints() );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /*
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Gets a generated implementation class for the specified root element.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * This method is used to determine the first object to be unmarshalled.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public UnmarshallingEventHandler createUnmarshaller(String namespaceUri, String localName, UnmarshallingContext context) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // find the root element among the GrammarInfos
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int i = 0; i < grammarInfos.length; i++ ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk UnmarshallingEventHandler ueh = grammarInfos[i].createUnmarshaller( namespaceUri, localName, context );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if( ueh != null ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return ueh;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // the element was not located in any of the grammar infos...
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public Class getRootElement(String namespaceUri, String localName) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // find the root element among the GrammarInfos
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int i = 0; i < grammarInfos.length; i++ ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk Class c = grammarInfos[i].getRootElement( namespaceUri, localName );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if( c != null ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return c;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // the element was not located in any of the grammar infos...
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public boolean recognize( String nsUri, String localName ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int i = 0; i < grammarInfos.length; i++ )
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if( grammarInfos[i].recognize(nsUri, localName) )
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return true;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return false;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /*
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Return the probe points for this GrammarInfo, which are used to detect
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * {namespaceURI,localName} collisions across the GrammarInfo's on the
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * schemaPath. This is a slightly more complex implementation than a simple
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * hashmap, but it is more flexible in supporting additional schema langs.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public String[] getProbePoints() {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ArrayList probePointList = new ArrayList();
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int i = 0; i < grammarInfos.length; i++ ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk String[] points = grammarInfos[i].getProbePoints();
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int j = 0; j < points.length; j++ ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk probePointList.add( points[j] );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // once per JAXBContext creation, so it may not be worth it.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return (String[])probePointList.toArray( new String[ probePointList.size() ] );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Iterate through the probe points looking for root element collisions.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * If a duplicate is detected, then multiple root element componenets
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * exist with the same uri:localname
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk private void detectRootElementCollisions( String[] points )
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk throws JAXBException {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // the array of probe points contain uri:localname pairs
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int i = 0; i < points.length; i += 2 ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // iterate over GrammarInfos - if more than one GI returns
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // a class from getRootElement, then there is a collision
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk boolean elementFound = false;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int j = grammarInfos.length-1; j >= 0; j -- ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if( grammarInfos[j].recognize( points[i], points[i+1] ) ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if( elementFound == false ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk elementFound = true;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk } else {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk throw new JAXBException(
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk Messages.format( Messages.COLLISION_DETECTED,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk points[i], points[i+1] ) );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /*
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * This static method is used to setup the GrammarInfoFacade. It
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * is invoked by the DefaultJAXBContextImpl constructor
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk static GrammarInfo createGrammarInfoFacade( String contextPath,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ClassLoader classLoader )
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk throws JAXBException {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk String version=null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // array of GrammarInfo objs
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ArrayList gis = new ArrayList();
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk StringTokenizer st = new StringTokenizer( contextPath, ":;" );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // instantiate all of the specified JAXBContextImpls
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk while( st.hasMoreTokens() ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk String targetPackage = st.nextToken();
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk String objectFactoryName = targetPackage + ".ObjectFactory";
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk try {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk JAXBContext c = (JAXBContext)Class.forName(
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk objectFactoryName, true, classLoader ).newInstance();
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // check version
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if( version==null ) version = getVersion(c);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk else
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if( !version.equals(getVersion(c)) )
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk throw new JAXBException( Messages.format(
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk Messages.INCOMPATIBLE_VERSION, new Object[]{
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk version,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk c.getClass().getName(),
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk getVersion(c) } ) );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // use reflection to get GrammarInfo
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk Object grammarInfo = c.getClass().getField("grammarInfo").get(null);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // wrap the grammarInfo into a proxy if necessary
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk grammarInfo = ProxyGroup.blindWrap(
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk grammarInfo, GrammarInfo.class,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk new Class[]{
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk GrammarInfo.class,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk UnmarshallingContext.class,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk UnmarshallingEventHandler.class,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk XMLSerializer.class,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk XMLSerializable.class,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk NamespaceContext2.class,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ValidatableObject.class
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk } );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk gis.add( grammarInfo );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk } catch( ClassNotFoundException e ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk throw new NoClassDefFoundError(e.getMessage());
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk } catch( Exception e ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk throw new JAXBException(e);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if( gis.size()==1 )
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // if there's only one path, no need to use a facade.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return (GrammarInfo)gis.get(0);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return new GrammarInfoFacade(
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk (GrammarInfo[])(gis.toArray( new GrammarInfo[ gis.size() ] ) ) );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Obtains a version number of the JAXB RI that has generated
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * the specified context, or null if it fails (for example
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * because it's not generated by JAXB RI.)
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @param c
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * an instance of a generated ObjectFactory class.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * This will return the version number written into
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * the corresponding JAXBVersion class.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk private static String getVersion(JAXBContext c) throws JAXBException {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk try {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk Class jaxbBersionClass = (Class)c.getClass().getField("version").get(null);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return (String)jaxbBersionClass.getField("version").get(null);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk } catch( Throwable t ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public Class getDefaultImplementation( Class javaContentInterface ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int i=0; i<grammarInfos.length; i++ ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk Class c = grammarInfos[i].getDefaultImplementation( javaContentInterface );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if(c!=null) return c;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk private com.sun.msv.grammar.Grammar bgm = null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public com.sun.msv.grammar.Grammar getGrammar() throws JAXBException {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if(bgm==null) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk com.sun.msv.grammar.Grammar[] grammars = new com.sun.msv.grammar.Grammar[grammarInfos.length];
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // load al the grammars individually
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int i=0; i<grammarInfos.length; i++ )
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk grammars[i] = grammarInfos[i].getGrammar();
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // connect them to each other
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int i=0; i<grammarInfos.length; i++ )
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if( grammars[i] instanceof GrammarImpl )
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ((GrammarImpl)grammars[i]).connect(grammars);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // take union of them
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int i=0; i<grammarInfos.length; i++ ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk com.sun.msv.grammar.Grammar n = grammars[i];
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if( bgm == null ) bgm = n;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk else bgm = union( bgm, n );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return bgm;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Computes the union of two grammars.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk private com.sun.msv.grammar.Grammar union( com.sun.msv.grammar.Grammar g1, com.sun.msv.grammar.Grammar g2 ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // either g1.getPool() or g2.getPool() is OK.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk // this is just a metter of performance problem.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk final com.sun.msv.grammar.ExpressionPool pool = g1.getPool();
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk final com.sun.msv.grammar.Expression top = pool.createChoice(g1.getTopLevel(),g2.getTopLevel());
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return new com.sun.msv.grammar.Grammar() {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public com.sun.msv.grammar.ExpressionPool getPool() {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return pool;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public com.sun.msv.grammar.Expression getTopLevel() {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return top;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk };
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @see com.sun.tools.xjc.runtime.GrammarInfo#castToXMLSerializable(java.lang.Object)
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public XMLSerializable castToXMLSerializable(Object o) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk XMLSerializable result = null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int i = 0; i < grammarInfos.length; i++ ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk result = grammarInfos[i].castToXMLSerializable( o );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if( result != null ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return result;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /**
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * @see com.sun.tools.xjc.runtime.GrammarInfo#castToValidatableObject(java.lang.Object)
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk public ValidatableObject castToValidatableObject(Object o) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk ValidatableObject result = null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk for( int i = 0; i < grammarInfos.length; i++ ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk result = grammarInfos[i].castToValidatableObject( o );
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk if( result != null ) {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return result;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk return null;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk }
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk}