173 } 174 ); 175 } 176 177 @Override 178 public Path getPath(URI uri) { 179 checkPermission(); 180 if (!uri.getScheme().equalsIgnoreCase(getScheme())) { 181 throw new IllegalArgumentException("URI does not match this provider"); 182 } 183 if (uri.getAuthority() != null) { 184 throw new IllegalArgumentException("Authority component present"); 185 } 186 if (uri.getQuery() != null) { 187 throw new IllegalArgumentException("Query component present"); 188 } 189 if (uri.getFragment() != null) { 190 throw new IllegalArgumentException("Fragment component present"); 191 } 192 String path = uri.getPath(); 193 if (path == null || path.charAt(0) != '/') { 194 throw new IllegalArgumentException("Invalid path component"); 195 } 196 return getTheFileSystem().getPath(path); 197 } 198 199 private FileSystem getTheFileSystem() { 200 checkPermission(); 201 FileSystem fs = this.theFileSystem; 202 if (fs == null) { 203 synchronized (this) { 204 fs = this.theFileSystem; 205 if (fs == null) { 206 try { 207 this.theFileSystem = fs = new JrtFileSystem(this, null); 208 } catch (IOException ioe) { 209 throw new InternalError(ioe); 210 } 211 } 212 } 213 } 214 return fs; 215 } 216 | 173 } 174 ); 175 } 176 177 @Override 178 public Path getPath(URI uri) { 179 checkPermission(); 180 if (!uri.getScheme().equalsIgnoreCase(getScheme())) { 181 throw new IllegalArgumentException("URI does not match this provider"); 182 } 183 if (uri.getAuthority() != null) { 184 throw new IllegalArgumentException("Authority component present"); 185 } 186 if (uri.getQuery() != null) { 187 throw new IllegalArgumentException("Query component present"); 188 } 189 if (uri.getFragment() != null) { 190 throw new IllegalArgumentException("Fragment component present"); 191 } 192 String path = uri.getPath(); 193 if (path == null || path.charAt(0) != '/' || path.contains("..")) { 194 throw new IllegalArgumentException("Invalid path component"); 195 } 196 return getTheFileSystem().getPath("/modules" + path); 197 } 198 199 private FileSystem getTheFileSystem() { 200 checkPermission(); 201 FileSystem fs = this.theFileSystem; 202 if (fs == null) { 203 synchronized (this) { 204 fs = this.theFileSystem; 205 if (fs == null) { 206 try { 207 this.theFileSystem = fs = new JrtFileSystem(this, null); 208 } catch (IOException ioe) { 209 throw new InternalError(ioe); 210 } 211 } 212 } 213 } 214 return fs; 215 } 216 |