
net.sf.xmlform.util.ClassResourceScanner Maven / Gradle / Ivy
package net.sf.xmlform.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
public class ClassResourceScanner {
private static class JarClassResource implements ClassResource{
String name;
String name2;
URL url;
boolean isdir;
long last;
JarClassResource(String name,URL url,boolean isdir,long last){
this.name=name;
this.url=url;
this.isdir=isdir;
this.last=last;
}
public boolean isDirectory(){
return isdir;
}
public String getName() {
String na=name;
if(na.endsWith("/"))
na=na.substring(0,na.length()-1);
int idx=na.lastIndexOf("/");
if(idx>0){
return na.substring(idx+1);
}
return na;
}
public String getAbsoluteName(){
String na=name;
if(na.endsWith("/"))
na=na.substring(0,na.length()-1);
return na;
}
public long lastModified() {
return last;
}
public InputStream getInputStream() {
try{
final JarFile jar = ((JarURLConnection) url.openConnection()).getJarFile();
JarEntry entry=jar.getJarEntry(name);
if(entry==null){
jar.close();
throw new FileNotFoundException(url.getFile()+"!"+name);
}
final InputStream src=jar.getInputStream(entry);
return src;
}catch(Exception e){
throw new IllegalStateException(e);
}
}
public ClassResource createRelative(String name){
try{
String n=ClassResourceScanner.relName(this.name,name);
JarFile jar = ((JarURLConnection) url.openConnection()).getJarFile();
try{
JarEntry entry=jar.getJarEntry(n);
if(entry==null){
jar.close();
return null;
}
JarClassResource jcr=new JarClassResource(n,url,entry.isDirectory(),entry.getTime());
return jcr;
}finally{
jar.close();
}
}catch(Exception e){
throw new IllegalStateException(e);
}
}
public void scanSubResource(ClassResourceVisitor crv) {
try{
JarFile jar = ((JarURLConnection) url.openConnection()).getJarFile();
try{
ClassResourceScanner.scanJar(name, crv, url, jar);
}finally{
jar.close();
}
}catch(Exception e){
throw new IllegalStateException(e);
}
}
}
private static class FileClassResource implements ClassResource{
String name;
File file;
FileClassResource(String name,File file){
this.name=name;
this.file=file;
}
public boolean isDirectory(){
return file.isDirectory();
}
public String getName() {
int idx=name.lastIndexOf("/");
if(idx>0){
return name.substring(idx+1);
}
return name;
}
public String getAbsoluteName(){
return name;
}
public long lastModified() {
return file.lastModified();
}
public InputStream getInputStream() {
try {
return new FileInputStream(file);
}catch(Exception e){
throw new IllegalStateException(e);
}
}
public void scanSubResource(ClassResourceVisitor crv) {
ClassResourceScanner.scanClass(file.getAbsolutePath(),name,crv);
}
public ClassResource createRelative(String name){
String n=ClassResourceScanner.relName(this.name,name);
File f=new File(file.getParentFile(),name);
if(!f.exists())
return null;
FileClassResource fr=new FileClassResource(n,f);
return fr;
}
}
private static class JarItem{
static String tab="\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
JarEntry entry;
Map items=new HashMap();
String name="";
public void addEntry(String ename,JarEntry entry){
Map its=items;
String n[]=ename.split("/");
for(int i=0;i0){
n=n.substring(0,idx+1)+name;
}else{
n=n+"/"+name;
}
return n;
}
static public void scan(String packageName[],ClassResourceVisitor crv)throws IOException {
for(int i=0;i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy