<dependency>
<groupId>jp.sourceforge.talisman</groupId>
<artifactId>mds</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<scope>compile</scope>
</dependency>
<dependency>
+ <groupId>jp.sourceforge.talisman</groupId>
+ <artifactId>i18n</artifactId>
+ <version>1.0.1-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>jp.sourceforge.stigmata</groupId>
+ <artifactId>digger</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.1</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>jp.sourceforge.talisman</groupId>
- <artifactId>i18n</artifactId>
- <version>1.0.1</version>
- </dependency>
</dependencies>
<licenses>
</configuration>
</plugin>
</plugins>
-
</build>
<reporting>
<configuration>
<linkXref>true</linkXref>
<sourceEncoding>utf-8</sourceEncoding>
- <targetJdk>1.5</targetJdk>
+ <targetJdk>1.6</targetJdk>
</configuration>
</plugin>
<plugin>
import java.util.Stack;
import jp.sourceforge.stigmata.birthmarks.extractors.BirthmarkExtractorFactory;
+import jp.sourceforge.stigmata.digger.ClassFileArchive;
+import jp.sourceforge.stigmata.digger.ClassFileEntry;
+import jp.sourceforge.stigmata.digger.ClasspathContext;
+import jp.sourceforge.stigmata.digger.DefaultClassFileArchive;
+import jp.sourceforge.stigmata.digger.JarClassFileArchive;
+import jp.sourceforge.stigmata.digger.WarClassFileArchive;
import jp.sourceforge.stigmata.event.BirthmarkEngineEvent;
import jp.sourceforge.stigmata.event.BirthmarkEngineListener;
import jp.sourceforge.stigmata.event.OperationStage;
import jp.sourceforge.stigmata.filter.FilteredComparisonResultSet;
import jp.sourceforge.stigmata.hook.Phase;
import jp.sourceforge.stigmata.hook.StigmataHookManager;
-import jp.sourceforge.stigmata.reader.ClassFileArchive;
-import jp.sourceforge.stigmata.reader.ClassFileEntry;
-import jp.sourceforge.stigmata.reader.ClasspathContext;
-import jp.sourceforge.stigmata.reader.DefaultClassFileArchive;
-import jp.sourceforge.stigmata.reader.JarClassFileArchive;
-import jp.sourceforge.stigmata.reader.WarClassFileArchive;
import jp.sourceforge.stigmata.result.CertainPairComparisonResultSet;
import jp.sourceforge.stigmata.result.RoundRobinComparisonResultSet;
import javax.imageio.spi.ServiceRegistry;
+import jp.sourceforge.stigmata.digger.ClasspathContext;
import jp.sourceforge.stigmata.filter.ComparisonPairFilterManager;
-import jp.sourceforge.stigmata.reader.ClasspathContext;
import jp.sourceforge.stigmata.result.history.ExtractedBirthmarkServiceManager;
import jp.sourceforge.stigmata.spi.BirthmarkSpi;
import jp.sourceforge.stigmata.utils.WellknownClassManager;
import java.util.List;
import java.util.ResourceBundle;
+import jp.sourceforge.stigmata.digger.ClasspathContext;
import jp.sourceforge.stigmata.event.BirthmarkEngineAdapter;
import jp.sourceforge.stigmata.event.BirthmarkEngineEvent;
import jp.sourceforge.stigmata.event.WarningMessages;
import jp.sourceforge.stigmata.printer.ComparisonResultSetPrinter;
import jp.sourceforge.stigmata.printer.ExtractionResultSetPrinter;
import jp.sourceforge.stigmata.printer.PrinterManager;
-import jp.sourceforge.stigmata.reader.ClasspathContext;
import jp.sourceforge.stigmata.spi.BirthmarkSpi;
import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
+++ /dev/null
-package jp.sourceforge.stigmata.reader;
-
-/*
- * $Id$
- */
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Iterator;
-
-/**
- * abstract presentation of class file archive's location.
- *
- * @author Haruaki TAMADA
- * @version $Revision$
- */
-public interface ClassFileArchive extends Iterable<ClassFileEntry>{
- public URL getLocation();
-
- public InputStream getInputStream(ClassFileEntry entry) throws IOException;
-
- public Iterator<ClassFileEntry> iterator();
-
- public boolean hasEntry(String className);
-
- public ClassFileEntry getEntry(String className) throws ClassNotFoundException;
-
- public String getName();
-}
+++ /dev/null
-package jp.sourceforge.stigmata.reader;
-
-/*
- * $Id$
- */
-
-import java.net.URL;
-
-/**
- *
- *
- * @author Haruaki TAMADA
- * @version $Revision$
- */
-public class ClassFileEntry{
- private URL location;
- private String className;
-
- public ClassFileEntry(String className, URL location){
- this.className = className;
- setLocation(location);
- }
-
- public String getClassName(){
- return className;
- }
-
- public void setLocation(URL location){
- this.location = location;
- }
-
- public URL getLocation(){
- return location;
- }
-}
+++ /dev/null
-package jp.sourceforge.stigmata.reader;
-
-/*
- * $Id$
- */
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import jp.sourceforge.stigmata.utils.WarClassLoader;
-
-/**
- * @author Haruaki TAMADA
- * @version $Revision$
- */
-public class ClasspathContext implements Iterable<URL>{
- private static ClasspathContext DEFAULT_CONTEXT = new ClasspathContext(false);
-
- private ClasspathContext parent;
- private List<URL> classpath = new ArrayList<URL>();
- private ClassLoader loader = null;
-
- /**
- * private constructor for root context.
- */
- private ClasspathContext(boolean flag){
- }
-
- public ClasspathContext(){
- this(DEFAULT_CONTEXT);
- }
-
- /**
- * constructor with parent classpath context.
- */
- public ClasspathContext(ClasspathContext parent){
- this.parent = parent;
- }
-
- /**
- * returns parent classpath context.
- */
- public ClasspathContext getParent(){
- return parent;
- }
-
- /**
- * returns default classpath context.
- */
- public static final ClasspathContext getDefaultContext(){
- return DEFAULT_CONTEXT;
- }
-
- /**
- * adds given url to this context. If this context already has given url or
- * parent context has given url, this method do nothing.
- */
- public synchronized void addClasspath(URL url){
- if(!contains(url)){
- classpath.add(url);
- loader = null;
- }
- }
-
- /**
- * returns that this context or parent context have given url.
- */
- public synchronized boolean contains(URL url){
- return (parent != null && parent.contains(url)) || classpath.contains(url);
- }
-
- /**
- * returns a size of classpath list, which this context and parent context have.
- */
- public int getClasspathSize(){
- int count = classpath.size();
- if(parent != null){
- count += parent.getClasspathSize();
- }
- return count;
- }
-
- /**
- * returns an array of all of classpathes include parent context.
- */
- public synchronized URL[] getClasspathList(){
- List<URL> list = new ArrayList<URL>();
- for(URL url: this){
- list.add(url);
- }
- return list.toArray(new URL[list.size()]);
- }
-
- /**
- * clears all of classpathes of this context. not clear parent context.
- * If you want to clear this context and parent context, use {@link #clearAll <code>clearAll</code>} method.
- * @see clearAll
- */
- public void clear(){
- classpath.clear();
- }
-
- /**
- * clears all of classpathes of this context and parent context.
- */
- public void clearAll(){
- clear();
- if(parent != null){
- parent.clearAll();
- }
- }
-
- public Iterator<URL> iterator(){
- if(parent == null){
- return classpath.iterator();
- }
- else{
- final Iterator<URL> parentIterator = parent.iterator();
- final Iterator<URL> thisIterator = classpath.iterator();
- return new Iterator<URL>(){
- public boolean hasNext(){
- boolean next = parentIterator.hasNext();
- if(!next){
- next = thisIterator.hasNext();
- }
- return next;
- }
- public URL next(){
- URL nextObject = null;
- if(parentIterator.hasNext()){
- nextObject = parentIterator.next();
- }
- else{
- nextObject = thisIterator.next();
- }
- return nextObject;
- }
- public void remove(){
- }
- };
- }
- }
-
- public synchronized ClassLoader createClassLoader(){
- if(loader == null){
- List<URL> list = new ArrayList<URL>();
- for(URL url: this){
- list.add(url);
- }
-
- loader = new WarClassLoader(list.toArray(new URL[list.size()]), getClass().getClassLoader());
- }
- return loader;
- }
-
- public ClassFileEntry find(String className) throws ClassNotFoundException{
- ClassLoader loader = createClassLoader();
-
- URL resource = loader.getResource(className.replace('.', '/') + ".class");
- if(resource != null){
- return new ClassFileEntry(className, resource);
- }
- return null;
- }
-
- public Class<?> findClass(String className) throws ClassNotFoundException{
- try{
- ClassLoader loader = createClassLoader();
-
- return loader.loadClass(className);
- } catch(NoClassDefFoundError e){
- throw new ClassNotFoundException(e.getMessage(), e);
- }
- }
-}
+++ /dev/null
-package jp.sourceforge.stigmata.reader;
-
-/*
- * $Id$
- */
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.commons.EmptyVisitor;
-
-/**
- *
- *
- *
- * @author Haruaki TAMADA
- * @version $Revision$
- */
-public class DefaultClassFileArchive implements ClassFileArchive{
- private File file;
- private String className;
-
- public DefaultClassFileArchive(String file){
- this(new File(file));
- }
-
- public DefaultClassFileArchive(File file){
- this.file = file;
- parseClassName();
- }
-
- public DefaultClassFileArchive(String file, String className){
- this(new File(file), className);
- }
-
- public DefaultClassFileArchive(File file, String className){
- this.file = file;
- this.className = className;
- }
-
- public URL getLocation(){
- try {
- return file.toURI().toURL();
- } catch (MalformedURLException ex) {
- }
- return null;
- }
-
- public InputStream getInputStream(ClassFileEntry entry) throws IOException{
- return new FileInputStream(file);
- }
-
- public Iterator<ClassFileEntry> iterator(){
- List<ClassFileEntry> list = new ArrayList<ClassFileEntry>();
- list.add(new ClassFileEntry(className, getLocation()));
-
- return list.iterator();
- }
-
- public boolean hasEntry(String className){
- return this.className.equals(className);
- }
-
- public ClassFileEntry getEntry(String className) throws ClassNotFoundException{
- return new ClassFileEntry(className, getLocation());
- }
-
- public String getName(){
- return className;
- }
-
- private void parseClassName(){
- FileInputStream in = null;
- try {
- in = new FileInputStream(file);
- ClassReader reader = new ClassReader(in);
- ClassNameExtractVisitor visitor = new ClassNameExtractVisitor();
- reader.accept(visitor, true);
-
- this.className = visitor.getClassName();
- } catch (FileNotFoundException ex) {
- ex.printStackTrace();
- } catch (IOException ex) {
- ex.printStackTrace();
- } finally{
- if(in != null){
- try{
- in.close();
- } catch(IOException e){
- }
- }
- }
- }
-
- private static class ClassNameExtractVisitor extends EmptyVisitor{
- private String className;
-
- public String getClassName(){
- return className;
- }
-
- @Override
- public void visit(int version, int access, String name, String signature,
- String superClassName, String[] interfaces){
- className = name;
- }
- }
-}
+++ /dev/null
-package jp.sourceforge.stigmata.reader;
-
-/*
- * $Id$
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-/**
- *
- * @author Haruaki TAMADA
- * @version $Revision$
- */
-public class JarClassFileArchive implements ClassFileArchive{
- private File file;
- private JarFile jarfile;
- private URL jarfileLocation;
-
- public JarClassFileArchive(String jarfile) throws IOException{
- this.file = new File(jarfile);
- this.jarfile = new JarFile(jarfile);
- this.jarfileLocation = file.toURI().toURL();
- }
-
- public URL getLocation(){
- return jarfileLocation;
- }
-
- public String getName(){
- return file.getName();
- }
-
- public InputStream getInputStream(ClassFileEntry entry) throws IOException{
- if(hasEntry(entry.getClassName())){
- return jarfile.getInputStream(jarfile.getEntry(entry.getClassName().replace('.', '/') + ".class"));
- }
- return null;
- }
-
- public Iterator<ClassFileEntry> iterator(){
- List<ClassFileEntry> list = new ArrayList<ClassFileEntry>();
-
- for(Enumeration<JarEntry> e = jarfile.entries(); e.hasMoreElements(); ){
- JarEntry entry = e.nextElement();
- if(entry.getName().endsWith(".class")){
- URL location = null;
- try {
- location = new URL("jar:" + getLocation() + "!/" + entry.getName());
- String className = entry.getName();
- className = className.substring(0, className.length() - ".class".length());
- className = className.replace('/', '.');
-
- list.add(new ClassFileEntry(className, location));
- } catch (MalformedURLException ex) {
- }
- }
- }
- return list.iterator();
- }
-
- public boolean hasEntry(String className){
- return jarfile.getEntry(className.replace('.', '/') + ".class") != null;
- }
-
- public ClassFileEntry getEntry(String className) throws ClassNotFoundException{
- if(hasEntry(className)){
- String entryName = className.replace('.', '/') + ".class";
- try{
- URL location = new URL("jar:" + jarfile.getName() + "!/" + entryName);
-
- return new ClassFileEntry(className, location);
- } catch(MalformedURLException e){
- }
- }
- return null;
- }
-
- Enumeration<JarEntry> jarentries(){
- return jarfile.entries();
- }
-
- boolean hasJarEntry(String entry){
- return jarfile.getEntry(entry) != null;
- }
-}
+++ /dev/null
-package jp.sourceforge.stigmata.reader;
-
-/*
- * $Id$
- */
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.jar.JarEntry;
-
-/**
- *
- *
- *
- * @author Haruaki TAMADA
- * @version $Revision$
- */
-public class WarClassFileArchive extends JarClassFileArchive{
- public WarClassFileArchive(String jarfile) throws IOException{
- super(jarfile);
- }
-
- public InputStream getInputStream(ClassFileEntry entry) throws IOException{
- if(hasEntry(entry.getClassName())){
- return entry.getLocation().openStream();
- }
- return null;
- }
-
- public Iterator<ClassFileEntry> iterator(){
- List<ClassFileEntry> list = new ArrayList<ClassFileEntry>();
-
- for(Enumeration<JarEntry> e = jarentries(); e.hasMoreElements(); ){
- JarEntry entry = e.nextElement();
- if(entry.getName().endsWith(".class")){
- URL location = null;
- try {
- location = new URL("jar:" + getLocation() + "!/" + entry.getName());
- String className = entry.getName();
- className = className.substring("WEB-INF/classes/".length(), className.length() - ".class".length());
- className = className.replace('/', '.');
-
- list.add(new ClassFileEntry(className, location));
- } catch (MalformedURLException ex) {
- ex.printStackTrace();
- }
- }
- }
- return list.iterator();
- }
-
- public boolean hasEntry(String className){
- return hasJarEntry("WEB-INF/classes/" + className.replace('.', '/') + ".class");
- }
-
- public ClassFileEntry getEntry(String className) throws ClassNotFoundException{
- if(hasEntry(className)){
- String entryName = className.replace('.', '/') + ".class";
- try{
- URL location = new URL("jar:" + getLocation() + "!/WEB-INF/classes/" + entryName);
-
- return new ClassFileEntry(className, location);
- } catch(MalformedURLException e){
- }
- }
- return null;
- }
-}
import javax.swing.event.DocumentListener;
import jp.sourceforge.stigmata.Stigmata;
-import jp.sourceforge.stigmata.reader.ClasspathContext;
+import jp.sourceforge.stigmata.digger.ClasspathContext;
import jp.sourceforge.talisman.i18n.Messages;
/**
import jp.sourceforge.stigmata.ComparisonMethod;
import jp.sourceforge.stigmata.ExtractionUnit;
import jp.sourceforge.stigmata.Stigmata;
+import jp.sourceforge.stigmata.digger.ClasspathContext;
import jp.sourceforge.stigmata.filter.ComparisonPairFilterManager;
-import jp.sourceforge.stigmata.reader.ClasspathContext;
import jp.sourceforge.stigmata.utils.ConfigFileExporter;
import jp.sourceforge.stigmata.utils.WellknownClassManager;
+++ /dev/null
-package jp.sourceforge.stigmata.utils;
-
-/*
- * $Id$
- */
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.net.URLStreamHandlerFactory;
-
-/**
- * ClassLoader for war file.
- * A war file layouts classes in /WEB-INF/classes directory.
- * Therefore, plain jar class loader cannot load classes included in war file.
- * Because plain jar class loader only loads classes in top directory.
- * Then, this class loader can load classes included in a plain jar file and a war file.
- *
- * @author Haruaki Tamada
- * @version $Revision$
- */
-public class WarClassLoader extends URLClassLoader{
- public WarClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory){
- super(urls, parent, factory);
- }
-
- public WarClassLoader(URL[] urls, ClassLoader parent){
- super(urls, parent);
- }
-
- public WarClassLoader(URL[] urls){
- super(urls);
- }
-
- @Override
- protected Class<?> findClass(String name) throws ClassNotFoundException{
- Class<?> clazz = null;
- try{
- clazz = super.findClass(name);
- } catch(ClassNotFoundException e){
- String path = "WEB-INF/classes/" + name.replace('.', '/') + ".class";
- for(URL url: getURLs()){
- if(url.toString().endsWith(".war")){
- try{
- URL newurl = new URL("jar:" + url + "!/" + path);
- InputStream in = newurl.openStream();
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- byte[] data = new byte[256];
- int read = 0;
- while((read = in.read(data, 0, data.length)) != -1){
- out.write(data, 0, read);
- }
- byte[] classdata = out.toByteArray();
- in.close();
- out.close();
-
- clazz = defineClass(name, classdata, 0, classdata.length);
- break;
- } catch(IOException exp){
- }
- }
- }
- }
- if(clazz == null){
- throw new ClassNotFoundException(name);
- }
- return clazz;
- }
-}
<project name="Stigmata">
<bannerLeft>
- <name>sourceforge.jp</name>
- <href>http://sourceforge.jp/</href>
- <alt>sourceforge.jp</alt>
+ <name>Stigmata</name>
+ <href>http://stigmata.sourceforge.jp</href>
+ <src>images/logos/stigmata_logo.png</src>
+ <alt>Stigmata: Java birthmark toolkit</alt>
</bannerLeft>
+
<bannerRight>
<name>Stigmata</name>
<src>images/logos/stigmata_logo.png</src>
<alt>Stigmata: Java birthmark toolkit</alt>
</bannerRight>
+
<poweredBy>
<logo name="Powered by ASM"
href="http://asm.objectweb.org/"
<links>
<item name="jbirth 1.x" href="http://se.naist.jp/jbirth/" />
<item name="Stigmata (jbirth 2.x)" href="http://stigmata.sourceforge.jp/" />
+ <item name="Digger" href="http://stigmata.sourceforge.jp/digger/" />
</links>
<menu name="Stigmata">