samples/composition/src-api2.0-runtime/org/apidesign/runtime/check/VersionAwareClassLoader.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Feb 2009 17:30:06 +0100
changeset 321 06bf3a32eaa0
parent 155 c00f947c0936
permissions -rw-r--r--
Moving code to org.apidesign.math package
     1 package org.apidesign.runtime.check;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.Map;
     6 
     7 final class VersionAwareClassLoader extends ClassLoader 
     8 implements RuntimeCheck.AwareLoader {
     9     
    10     private final Map<String,String> requestedVersions;
    11 
    12     public VersionAwareClassLoader(ClassLoader parent, Map<String,String> requestedVersions) {
    13         super(parent);
    14         this.requestedVersions = requestedVersions;
    15     }
    16 
    17     @Override
    18     protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
    19         if (name.endsWith("Test") && name.startsWith("api.")) {
    20             try {
    21                 InputStream is = getResourceAsStream(name.replace('.', '/').concat(".class"));
    22                 byte[] arr = new byte[is.available()];
    23                 int read = is.read(arr);
    24                 assert read >= 0;
    25                 is.close();
    26                 return defineClass(name, arr, 0, read);
    27             } catch (IOException ex) {
    28                 throw new ClassNotFoundException("Cannot load " + name, ex);
    29             }
    30         }
    31         
    32         return super.loadClass(name, resolve);
    33     }
    34 
    35     public String requestedVersion(String apiName) {
    36         return requestedVersions.get(apiName);
    37     }
    38     
    39     
    40 }