View Javadoc
1   package org.codehaus.classworlds;
2   
3   /*
4    * Copyright 2001-2010 Codehaus Foundation.
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   *      http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  import java.io.IOException;
20  import java.io.InputStream;
21  import java.net.URL;
22  import java.util.Enumeration;
23  
24  /**
25   * An adapter for ClassRealms
26   *
27   * @author Andrew Williams
28   */
29  @Deprecated
30  public class ClassRealmAdapter implements ClassRealm {
31  
32      public static ClassRealmAdapter getInstance(org.codehaus.plexus.classworlds.realm.ClassRealm newRealm) {
33          ClassRealmAdapter adapter = new ClassRealmAdapter(newRealm);
34  
35          return adapter;
36      }
37  
38      private org.codehaus.plexus.classworlds.realm.ClassRealm realm;
39  
40      private ClassRealmAdapter(org.codehaus.plexus.classworlds.realm.ClassRealm newRealm) {
41          this.realm = newRealm;
42      }
43  
44      public String getId() {
45          return realm.getId();
46      }
47  
48      public ClassWorld getWorld() {
49          return ClassWorldAdapter.getInstance(realm.getWorld());
50      }
51  
52      public void importFrom(String realmId, String pkgName) throws NoSuchRealmException {
53          try {
54              realm.importFrom(realmId, pkgName);
55          } catch (org.codehaus.plexus.classworlds.realm.NoSuchRealmException e) {
56              throw new NoSuchRealmException(getWorld(), e.getId());
57          }
58      }
59  
60      public void addConstituent(URL constituent) {
61          realm.addURL(constituent);
62      }
63  
64      public ClassRealm locateSourceRealm(String className) {
65          ClassLoader importLoader = realm.getImportClassLoader(className);
66  
67          if (importLoader instanceof org.codehaus.plexus.classworlds.realm.ClassRealm) {
68              return ClassRealmAdapter.getInstance((org.codehaus.plexus.classworlds.realm.ClassRealm) importLoader);
69          } else {
70              return null;
71          }
72      }
73  
74      public void setParent(ClassRealm classRealm) {
75          if (classRealm != null) {
76              realm.setParentRealm(ClassRealmReverseAdapter.getInstance(classRealm));
77          }
78      }
79  
80      public ClassRealm createChildRealm(String id) throws DuplicateRealmException {
81          try {
82              return ClassRealmAdapter.getInstance(realm.createChildRealm(id));
83          } catch (org.codehaus.plexus.classworlds.realm.DuplicateRealmException e) {
84              throw new DuplicateRealmException(getWorld(), e.getId());
85          }
86      }
87  
88      public ClassLoader getClassLoader() {
89          return realm;
90      }
91  
92      public ClassRealm getParent() {
93          return ClassRealmAdapter.getInstance(realm.getParentRealm());
94      }
95  
96      public ClassRealm getParentRealm() {
97          return ClassRealmAdapter.getInstance(realm.getParentRealm());
98      }
99  
100     public URL[] getConstituents() {
101         return realm.getURLs();
102     }
103 
104     public Class loadClass(String name) throws ClassNotFoundException {
105         return realm.loadClass(name);
106     }
107 
108     public URL getResource(String name) {
109         return realm.getResource(trimLeadingSlash(name));
110     }
111 
112     public Enumeration findResources(String name) throws IOException {
113         return realm.findResources(trimLeadingSlash(name));
114     }
115 
116     public InputStream getResourceAsStream(String name) {
117         return realm.getResourceAsStream(trimLeadingSlash(name));
118     }
119 
120     public void display() {
121         realm.display();
122     }
123 
124     public boolean equals(Object o) {
125         if (!(o instanceof ClassRealm)) return false;
126 
127         return getId().equals(((ClassRealm) o).getId());
128     }
129 
130     /**
131      * Provides backward-compat with the old classworlds which accepted resource names with leading slashes.
132      */
133     private String trimLeadingSlash(String resource) {
134         if (resource != null && resource.startsWith("/")) {
135             return resource.substring(1);
136         } else {
137             return resource;
138         }
139     }
140 }