/*******************************************************************************
 * Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
 * which accompanies this distribution.
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *     Oracle - initial API and implementation from Oracle TopLink
 ******************************************************************************/

package org.eclipse.persistence.internal.xr;

//EclipseLink imports
import org.eclipse.persistence.dynamic.DynamicClassLoader;

/**
 * <p>
 * <b>INTERNAL:</b> XRDynamicClassLoader uses ASM to dynamically
 * generate subclasses of {@link XRDynamicEntity}
 *
 * @author Mike Norman - michael.norman@oracle.com
 * @since EclipseLink 1.x
 */
public class XRDynamicClassLoader extends DynamicClassLoader {

    public static final String COLLECTION_WRAPPER_SUFFIX =
        "_CollectionWrapper";

    private Boolean generateSubclasses = Boolean.TRUE;

    public XRDynamicClassLoader(ClassLoader parentLoader) {
        super(parentLoader, new XRClassWriter());
    }

    @Override
    protected Class<?> findClass(String className) throws ClassNotFoundException {
        if (!generateSubclasses.booleanValue()) {
            throw new ClassNotFoundException(className);
        }
        try {
            byte[] data = defaultWriter.writeClass(this, className);
            return defineClass(className, data, 0, data.length);
        }
        catch (ClassFormatError cfe) {
            throw new ClassNotFoundException(className, cfe);
        }
        catch (ClassCircularityError cce) {
            throw new ClassNotFoundException(className, cce);
        }
    }

    public void dontGenerateSubclasses() {
        this.generateSubclasses = Boolean.TRUE;
    }
}