All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.xmlform.util.ClassResourceScanner Maven / Gradle / Ivy

There is a newer version: 3.2.1
Show newest version
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