1 87 package org.codehaus.loom.components.util; 88 89 import java.io.File ; 90 import java.net.MalformedURLException ; 91 92 import org.codehaus.loom.interfaces.LoomException; 93 94 100 public class ResourceUtil 101 { 102 private static final String SAR_PROTOCOL = "sar:"; 103 private static final String SAR_INF = "SAR-INF/"; 104 private static final String CLASSES = SAR_INF + "classes"; 105 private static final String LIB = SAR_INF + "lib"; 106 107 115 public static String expandSarURL( final String codeBase, 116 final File baseDirectory, 117 final File workDirectory ) 118 throws Exception 119 { 120 if( codeBase.startsWith( SAR_PROTOCOL ) ) 121 { 122 final File file = 123 getFileForResource( codeBase.substring( 4 ), 124 baseDirectory, 125 workDirectory ); 126 try 127 { 128 return file.toURL().toString(); 129 } 130 catch( MalformedURLException e ) 131 { 132 throw new LoomException( e.getMessage(), e ); 133 } 134 } 135 else 136 { 137 return codeBase; 138 } 139 } 140 141 public static File getFileForResource( final String location, 142 final File baseDirectory, 143 final File workDirectory ) 144 { 145 String filename = 146 location.replace( '/', File.separatorChar ); 147 if( filename.startsWith( "/" ) ) 148 { 149 filename = filename.substring( 1 ); 150 } 151 152 final File baseDir = 153 getBaseDirectoryFor( location, baseDirectory, workDirectory ); 154 return new File ( baseDir, filename ); 155 } 156 157 private static File getBaseDirectoryFor( final String location, 158 final File baseDirectory, 159 final File workDirectory ) 160 { 161 if( location.startsWith( CLASSES ) || 162 location.startsWith( LIB ) ) 163 { 164 return workDirectory; 165 } 166 else 167 { 168 return baseDirectory; 169 } 170 } 171 } 172 | Popular Tags |