<commit_before>/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You 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 java.beans;

import java.applet.Applet;
import java.applet.AppletContext;
import java.applet.AppletStub;
import java.applet.AudioClip;
import java.awt.Image;
import java.beans.beancontext.BeanContext;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;

import org.apache.harmony.beans.internal.nls.Messages;

public class Beans {

    private static boolean designTime = false;

    private static boolean guiAvailable = true;

    public Beans() {
    }

    public static Object instantiate(ClassLoader loader, String name)
            throws IOException, ClassNotFoundException {
        return instantiate(loader, name, null, null);
    }

    public static Object instantiate(ClassLoader cls, String beanName,
			BeanContext beanContext) throws IOException, ClassNotFoundException {
		return instantiate(cls, beanName, beanContext, null);

	}

    @SuppressWarnings("unchecked")
	public static Object instantiate(ClassLoader cls, String beanName,
			BeanContext context, AppletInitializer initializer)
			throws IOException, ClassNotFoundException {
		Object result = null;

		boolean deserialized = true;

		ClassLoader loader = null;

		String beanResourceName = getBeanResourceName(beanName);

		InputStream is = (cls == null) ? ClassLoader
				.getSystemResourceAsStream(beanResourceName) : cls
				.getResourceAsStream(beanResourceName);

		if (is != null) {
			ObjectInputStream ois = (cls == null) ? new ObjectInputStream(is)
					: new CustomizedObjectInputStream(is, cls);
			result = ois.readObject();
		}

		if (result == null) {
			deserialized = false;
			try {
				loader = cls == null ? ClassLoader.getSystemClassLoader() : cls;
				Class<?> c = Class.forName(beanName, true, loader);

				try {
					result = c.newInstance();

				} catch (IllegalAccessException iae) {
					throw new ClassNotFoundException(iae.getClass() + ": " //$NON-NLS-1$
							+ iae.getMessage());
				}
			} catch (InstantiationException ie) {
				throw new ClassNotFoundException(ie.getClass() + ": " //$NON-NLS-1$
						+ ie.getMessage());
			}
		}

		if (result != null) {
			// Applet specific initialization
			if (result instanceof Applet) {
				appletLoaded((Applet) result, loader, beanName, context,
						initializer, deserialized);
			}
			if (null != context) {
				context.add(result);
			}
		}
		return result;
	}

    public static Object getInstanceOf(Object bean, Class<?> targetType) {
        return bean;
    }

    public static boolean isInstanceOf(Object bean, Class<?> targetType) {
        if (bean == null) {
            throw new NullPointerException(Messages.getString("beans.1D")); //$NON-NLS-1$
        }

        return targetType == null ? false : targetType.isInstance(bean);
    }

    public static synchronized void setGuiAvailable(boolean isGuiAvailable)
            throws SecurityException {
        checkPropertiesAccess();
        guiAvailable = isGuiAvailable;
    }

    public static void setDesignTime(boolean isDesignTime)
            throws SecurityException {
        checkPropertiesAccess();
        synchronized(Beans.class){
            designTime = isDesignTime;
        }
    }

    public static synchronized boolean isGuiAvailable() {
        return guiAvailable;
    }

    public static synchronized boolean isDesignTime() {
        return designTime;
    }

    private static void checkPropertiesAccess() throws SecurityException {
        SecurityManager sm = System.getSecurityManager();

        if (sm != null) {
            sm.checkPropertiesAccess();
        }
    }

    private static String getBeanResourceName(String beanName) {
        return beanName.replace('.', '/') + ".ser"; //$NON-NLS-1$
    }
    
    
    private static void appletLoaded(Applet applet, ClassLoader loader,
            String name, BeanContext context, AppletInitializer initializer,
            boolean deserialized) throws ClassNotFoundException {

        // If there is an initializer<commit_msg>Write javadoc for java.beans.Beans, no functional change<commit_after>/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You 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 java.beans;

import java.applet.Applet;
import java.applet.AppletContext;
import java.applet.AppletStub;
import java.applet.AudioClip;
import java.awt.Image;
import java.beans.beancontext.BeanContext;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;

import org.apache.harmony.beans.internal.nls.Messages;

/**
 * This class <code>Beans</code> provides some methods for manipulting bean
 * controls.
 * 
 */

public class Beans {

    private static boolean designTime = false;

    private static boolean guiAvailable = true;

    /**
     * Constructs a Beans instance.
     */
    public Beans() {
    }

    /**
     * Obtains an instance of a JavaBean specified the bean name using the
     * specified class loader.
     * <p>
     * If the specified class loader is null, the system class loader is used.
     * </p>
     * 
     * @param loader
     *            the specified class loader. It can be null.
     * @param name
     *            the name of the JavaBean
     * @return an isntance of the bean.
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public static Object instantiate(ClassLoader loader, String name)
            throws IOException, ClassNotFoundException {
        return instantiate(loader, name, null, null);
    }

    /**
     * Obtains an instance of a JavaBean specified the bean name using the
     * specified class loader, and adds the instance into the specified bean
     * context.
     * 
     * <p>
     * If the specified class loader is null, the system class loader is used.
     * </p>
     * 
     * @param loader
     *            the specified class loader. It can be null.
     * @param name
     *            the name of the JavaBean
     * @param context
     *            the beancontext in which the bean instance will be added.
     * @return an instance of the specified JavaBean.
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public static Object instantiate(ClassLoader cls, String beanName,
			BeanContext beanContext) throws IOException, ClassNotFoundException {
		return instantiate(cls, beanName, beanContext, null);

	}

    /**
     * Obtains an instance of a JavaBean specified by the bean name using the
     * specified class loader, and adds the instance into the specified bean
     * context.
     * <p>
     * The parameter name must be a qualified name relative to the specified
     * class loader. For example, "java.awt.Button" and "x.y.z".
     * </p>
     * <p>
     * If the specified class loader is null, the system class loader is used.
     * </p>
     * <p>
     * Firstly, The class <code>Beans</code> regards the bean name as a
     * serialized object name. The class <code>Beans</code> convert bean name
     * into pathname, append a suffix ".ser" to the pathname. then try to load
     * the resource using the specified class loader. If <code>Beans</code>
     * fails to load the resource, <code>Beans</code> will regard the
     * <code>name</code> as a class name and construct a new instance of the
     * bean class.
     * </p>
     * <p>
     * For example, if the name is specified as "x.y.z", The class
     * <code>Beans</code> will try to load the serialized object from the
     * resource "x/y/z.ser"; If <code>Beans</code> fails to load the resource
     * "x/y/z.ser", it will create a new instance of "x.y.z".
     * </p>
     * <p>
     * If the bean is an instance of java.applet.Applet, <code>Beans</code>
     * will do some special initialization for this applet bean. First,
     * <code>Beans</code> will set the default AppletStub and AppletContext
     * for the applet bean (If the specified <code>AppletInitializer</code> is
     * not null, <code>Beans</code> will call the
     * <code>AppletInitializer.initialize</code> to set the default AppletStub
     * and AppletContext for the applet bean). Second, <code>Beans</code> will
     * call the <code>init</code> method of the applet. (If the applet bean is
     * loaded as a serialized object, the <code>init</code> method will not be
     * called.)
     * </p>
     * 
     * @param loader
     *            the specified class loader. It can be null.
     * @param name
     *            the name of the JavaBean
     * @param context
     *            the beancontext in which the bean instance will be added.
     * @param initializer
     *            the AppletInitializer for applet bean instance.
     * @return Obtains an instance of the JavaBean.
     * @throws IOException
     * @throws ClassNotFoundException
     */
    @SuppressWarnings("unchecked")
	public static Object instantiate(ClassLoader cls, String beanName,
			BeanContext context, AppletInitializer initializer)
			throws IOException, ClassNotFoundException {
		Object result = null;

		boolean deserialized = true;

		ClassLoader loader = null;

		String beanResourceName = getBeanResourceName(beanName);

		InputStream is = (cls == null) ? ClassLoader
				.getSystemResourceAsStream(beanResourceName) : cls
				.getResourceAsStream(beanResourceName);

		if (is != null) {
			ObjectInputStream ois = (cls == null) ? new ObjectInputStream(is)
					: new CustomizedObjectInputStream(is, cls);
			result = ois.readObject();
		}

		if (result == null) {
			deserialized = false;
			try {
				loader = cls == null ? ClassLoader.getSystemClassLoader() : cls;
				Class<?> c = Class.forName(beanName, true, loader);

				try {
					result = c.newInstance();

				} catch (IllegalAccessException iae) {
					throw new ClassNotFoundException(iae.getClass() + ": " //$NON-NLS-1$
							+ iae.getMessage());
				}
			} catch (InstantiationException ie) {
				throw new ClassNotFoundException(ie.getClass() + ": " //$NON-NLS-1$
						+ ie.getMessage());
			}
		}

		if (result != null) {
			// Applet specific initialization
			if (result instanceof Applet) {
				appletLoaded((Applet) result, loader, beanName, context,
						initializer, deserialized);
			}
			if (null != context) {
				context.add(result);
			}
		}
		return result;
	}

    /**
     * Obtain an alternative type view of the given bean. The view type is
     * specified by the parameter <code>type</code>.
     * <p>
     * If the type view cannot be obtained, the original bean object is
     * returned.
     * </p>
     * 
     * @param bean
     *            the original bean object.
     * @param type
     *            the specified view type.
     * @return a type view of the given bean.
     */
    public static Object getInstanceOf(Object bean, Class<?> targetType) {
        return bean;
    }

    /**
     * Determine if the the specified bean object can be viewed as the specified
     * type.
     * 
     * @param bean
     *            the specified bean object.
     * @param type
     *            the specifed view type.
     * @return true if the specified bean object can be viewed as the specified
     *         type; otherwise, return false;
     */
    public static boolean isInstanceOf(Object bean, Class<?> targetType) {
        if (bean == null) {
            throw new NullPointerException(Messages.getString("beans.1D")); //$NON-NLS-1$
        }

        return targetType == null ? false : targetType.isInstance(bean);
    }

    /**
     * Set whether or not a GUI is available in the bean's current environment.
     * 
     * @param value
     *            should be <code>true</code> to signify that a GUI is
     *            available, <code>false</code> otherwise.
     * @throws SecurityException
     *             if the caller does not have the required permission to access
     *             or modify system properties.
     */
    public static synchronized void setGuiAvailable(boolean isGuiAvailable)
            throws SecurityException {
        checkPropertiesAccess();
        guiAvailable = isGuiAvailable;
    }
    
    /**
     * Used to indicate whether of not it's in an application construction
     * environment.
     * 
     * @param value
     *            true to indicate that it's in application construction
     *            environment.
     * @throws SecurityException
     */
    public static void setDesignTime(boolean isDesignTime)
            throws SecurityException {
        checkPropertiesAccess();
        synchronized(Beans.class){
            designTime = isDesignTime;
        }
    }

    /**
     * Returns a boolean indication of whether or not a GUI is available for
     * beans.
     * 
     * @return <code>true</code> if a GUI is available, otherwise
     *         <code>false</code>.
     */
    public static synchronized boolean isGuiAvailable() {
        return guiAvailable;
    }

    /**
     * Determine if it's in design-mode.
     * 
     * @return true if it's in an application construction environment.
     */
    public static synchronized boolean isDesignTime() {
        return designTime;
    }

    private static void checkPropertiesAccess() throws SecurityException {
        SecurityManager sm = System.getSecurityManager();

        if (sm != null) {
            sm.checkPropertiesAccess();
        }
    }

    private static String getBeanResourceName(String beanName) {
        return beanName.replace('.', '/') + ".ser"; //$NON-NLS-1$
    }
    
    
    private static void appletLoaded(Applet applet, ClassLoader loader,
            String name, BeanContext context, AppletInitializer initializer,
            boolean deserialized) throws ClassNotFoundException {

        // If there is an initializer
{'fraction_non_alphanumeric': 0.08789037603569153, 'fraction_numerical': 0.001147227533460803, 'mean_word_length': 2.719127755392273, 'pattern_counts': {'":': 4, '<': 67, '<?xml version=': 0, '>': 67, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2894644', 'n_tokens_mistral': 4459, 'n_tokens_neox': 4207, 'n_words': 1479}