All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ibm.commons.PlatformClassLoader Maven / Gradle / Ivy

The newest version!
/*
 * © Copyright IBM Corp. 2012-2013
 * 
 * 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 com.ibm.commons;

/**
 * Platform Class Loader
 */
public class PlatformClassLoader extends SecurityManager  {

    private static boolean retry = false;
    private static int idx = 0;
 
    public Class[] getClassContext() {
        return super.getClassContext();
    }

    public boolean canDefineClass(String classname)  {
        try  {
            checkPackageDefinition(classname);
            return(true);
        } catch(SecurityException se)  {
        }
        return(false);
    }

    public Class findClass(String classname)  {
        Class stackd[] = getClassContext();
        // Could use this to do qik check, throws exception - but just will be running the stack twice
        // checkPackageDefinition(classname);
        retry = true;
        idx = 0;
        while(hasMore())  {
            ClassLoader cl = findDesLoader(stackd);
            if(cl != null)  {
                try {
                    return(cl.loadClass(classname));
                } catch (ClassNotFoundException e) {
                    // ignore and go on to the next one
                }
            }
        }
        return(null);
    }

//    private ClassLoader findDesLoader(Class[] stack)  {
//        for(; idx < stack.length; idx++)  {
//            if(stack[idx].getName().startsWith("com.ibm.workplace.designer"))  {
//                return(stack[idx++].getClassLoader());
//            }
//        }
//        // end of stack - no more
//        retry = false;
//        return(null);
//    }
//
    private ClassLoader findDesLoader(Class[] stack)  {
        return( findClassLoader(stack, "com.ibm.workplace.designer") ); // $NON-NLS-1$
    }

    private ClassLoader findClassLoader(Class[] stack, String pkgName)  {
        for(; idx < stack.length; idx++)  {
            if(stack[idx].getName().startsWith(pkgName))  {
                return(stack[idx++].getClassLoader());
            }
        }
        // end of stack - no more
        retry = false;
        return(null);
    }

    public boolean hasMore()  {
        return(retry);
    }

    public ClassLoader getClassLoader(String packageName) {
        Class stackd[] = getClassContext();
        // Could use this to do qik check, throws exception - but just will be running the stack twice
        // checkPackageDefinition(classname);
        retry = true;
        idx = 0;
        ClassLoader cl = findClassLoader(stackd, packageName);
        return( cl != null ? cl : ClassLoader.getSystemClassLoader());
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy