1 87 package org.codehaus.loom.components.classloader; 88 89 import java.io.File ; 90 import java.net.URL ; 91 import java.security.Policy ; 92 import java.util.Arrays ; 93 import java.util.Set ; 94 import org.codehaus.loom.classman.builder.SimpleLoaderResolver; 95 import org.codehaus.loom.components.extensions.pkgmgr.OptionalPackage; 96 import org.codehaus.loom.components.extensions.pkgmgr.PackageManager; 97 import org.codehaus.loom.components.util.ResourceUtil; 98 import org.codehaus.loom.extension.Extension; 99 import org.codehaus.spice.salt.i18n.ResourceManager; 100 import org.codehaus.spice.salt.i18n.Resources; 101 import org.codehaus.dna.LogEnabled; 102 import org.codehaus.dna.Logger; 103 import org.codehaus.dna.impl.ContainerUtil; 104 105 112 class SarLoaderResolver 113 extends SimpleLoaderResolver 114 implements LogEnabled 115 { 116 private final static Resources REZ = 117 ResourceManager.getPackageResources( SarLoaderResolver.class ); 118 119 120 private PackageManager m_manager; 121 122 123 private Logger m_logger; 124 125 126 private Policy m_policy; 127 128 129 private File m_workDirectory; 130 131 140 SarLoaderResolver( final PackageManager manager, 141 final Policy policy, 142 final File baseDirectory, 143 final File workDirectory ) 144 { 145 super( baseDirectory ); 146 if( null == manager ) 147 { 148 throw new NullPointerException ( "manager" ); 149 } 150 if( null == policy ) 151 { 152 throw new NullPointerException ( "policy" ); 153 } 154 if( null == baseDirectory ) 155 { 156 throw new NullPointerException ( "baseDirectory" ); 157 } 158 if( null == workDirectory ) 159 { 160 throw new NullPointerException ( "workDirectory" ); 161 } 162 163 m_manager = manager; 164 m_policy = policy; 165 m_workDirectory = workDirectory; 166 } 167 168 173 public void enableLogging( final Logger logger ) 174 { 175 m_logger = logger; 176 } 177 178 public URL resolveExtension( final Extension extension ) 179 throws Exception 180 { 181 if( null == m_manager ) 182 { 183 final String message = 184 REZ.getString( "missing-packagemanager" ); 185 throw new IllegalStateException ( message ); 186 } 187 final OptionalPackage optionalPackage = 188 m_manager.getOptionalPackage( extension ); 189 return optionalPackage.getFile().toURL(); 190 } 191 192 199 public URL resolveURL( final String location ) 200 throws Exception 201 { 202 final File file = 203 ResourceUtil.getFileForResource( location, 204 getBaseDirectory(), 205 m_workDirectory ); 206 return file.toURL(); 207 } 208 209 219 public URL [] resolveFileSet( final String baseDirectory, 220 final String [] includes, 221 final String [] excludes ) 222 throws Exception 223 { 224 final URL [] baseURLs = 225 resolveFileSet( getBaseDirectory(), 226 baseDirectory, 227 includes, 228 excludes ); 229 final URL [] workURLs = 230 resolveFileSet( m_workDirectory, 231 baseDirectory, 232 includes, 233 excludes ); 234 final URL [] urls = new URL [ baseURLs.length + workURLs.length ]; 235 System.arraycopy( baseURLs, 0, urls, 0, baseURLs.length ); 236 System.arraycopy( workURLs, 237 0, 238 urls, 239 baseURLs.length, 240 workURLs.length ); 241 return urls; 242 } 243 244 252 public ClassLoader createClassLoader( final ClassLoader parent, 253 final URL [] urls ) 254 throws Exception 255 { 256 final URL [] classpath = determineCompleteClasspath( urls ); 257 if( m_logger.isDebugEnabled() ) 258 { 259 final String message = 260 REZ.format( "resolver.loader-urls.notice", 261 Arrays.asList( classpath ) ); 262 m_logger.debug( message ); 263 } 264 final PolicyClassLoader loader = 265 new PolicyClassLoader( classpath, parent, m_policy ); 266 ContainerUtil.enableLogging( loader, m_logger ); 267 return loader; 268 } 269 270 275 protected void debug( final String message ) 276 { 277 m_logger.debug( message ); 278 } 279 280 285 protected boolean isDebugEnabled() 286 { 287 return m_logger.isDebugEnabled(); 288 } 289 290 295 protected void warn( final String message ) 296 { 297 m_logger.warn( message ); 298 } 299 300 305 protected void warn( final String message, 306 final Throwable t ) 307 { 308 m_logger.warn( message, t ); 309 } 310 311 protected void scanDependencies( final Extension[] required, 312 final Extension[] available, 313 final Set dependencies, 314 final Set unsatisfied ) 315 { 316 m_manager.scanDependencies( required, 317 available, 318 dependencies, 319 unsatisfied ); 320 } 321 } 322 | Popular Tags |