/*
 * Copyright 2007 Joachim Grueneis
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.castor.xml;

import org.castor.mapping.BindingType;
import org.exolab.castor.xml.ClassDescriptorResolverFactory;
import org.exolab.castor.xml.Introspector;
import org.exolab.castor.xml.XMLClassDescriptorResolver;
import org.exolab.castor.xml.XMLContext;
import org.exolab.castor.xml.util.ResolverStrategy;
import org.exolab.castor.xml.util.resolvers.CastorXMLStrategy;

/**
 * As the name already expresses: this class is there for backward compatibility
 * and should be removed from Castor with a future release. 
 * 
 * Normally the internal context is created by XMLContext exclusivly and then handed down
 * the call chain. This very class is used in all cases, which fail to be on a call
 * chain started with {@link XMLContext}.
 * 
 * Ideally, all usage of this class should disappear and be replaced with proper
 * usage of {@link XMLContext}.
 * 
 * @see XMLContext
 * @author Joachim Grueneis, jgrueneis_at_gmail_dot_com
 * @version $Id$
 */
public class BackwardCompatibilityContext extends AbstractInternalContext implements InternalContext{
    /**
     * Initializes InternalContext with default values.
     */
    public BackwardCompatibilityContext() {
        setClassLoader(getClass().getClassLoader());
        
        XMLClassDescriptorResolver cdr = (XMLClassDescriptorResolver) ClassDescriptorResolverFactory
            .createClassDescriptorResolver(BindingType.XML);
        cdr.setInternalContext(this);
        setXMLClassDescriptorResolver(cdr);

        Introspector introspector = new Introspector();
        introspector.setInternalContext(this);
        setIntrospector(introspector);
        cdr.setIntrospector(introspector);
        
        ResolverStrategy resolverStrategy = new CastorXMLStrategy();
        setResolverStrategy(resolverStrategy);
        cdr.setResolverStrategy(resolverStrategy);
    }
}
