OSDN Git Service

update control flow
authortama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Tue, 25 Sep 2007 08:51:24 +0000 (08:51 +0000)
committertama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Tue, 25 Sep 2007 08:51:24 +0000 (08:51 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/stigmata/trunk@210 acee48c3-7b26-0410-bdac-b3d0e5314bbc

src/main/java/jp/naist/se/stigmata/BirthmarkEngine.java
src/main/java/jp/naist/se/stigmata/ComparisonResultSet.java
src/main/java/jp/naist/se/stigmata/ExtractionResultSet.java
src/main/java/jp/naist/se/stigmata/ExtractionTarget.java
src/main/java/jp/naist/se/stigmata/ExtractionUnit.java
src/main/java/jp/naist/se/stigmata/Stigmata.java
src/main/java/jp/naist/se/stigmata/birthmarks/kgram/KGram.java
src/main/java/jp/naist/se/stigmata/ui/swing/StigmataFrame.java
src/main/java/jp/naist/se/stigmata/utils/WarClassLoader.java

index b690a57..72b0d84 100755 (executable)
@@ -9,11 +9,9 @@ import java.io.ByteArrayOutputStream;
 import java.io.File;\r
 import java.io.IOException;\r
 import java.io.InputStream;\r
-import java.lang.reflect.InvocationTargetException;\r
 import java.net.MalformedURLException;\r
 import java.util.ArrayList;\r
 import java.util.HashMap;\r
-import java.util.Iterator;\r
 import java.util.List;\r
 import java.util.Map;\r
 import java.util.Stack;\r
@@ -35,11 +33,12 @@ import jp.naist.se.stigmata.reader.WarClassFileArchive;
 import jp.naist.se.stigmata.result.CertainPairComparisonResultSet;\r
 import jp.naist.se.stigmata.result.ExtractionResultSetFactory;\r
 import jp.naist.se.stigmata.result.RoundRobinComparisonResultSet;\r
-import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
-\r
-import org.apache.commons.beanutils.BeanUtils;\r
 \r
 /**\r
+ * This class is birthmarking engine. \r
+ * This class extracts birthmarks from given Java class files, compares results of extractions, and filters results of comparisons.\r
+ * \r
+ * This class is not thread safe.\r
  * \r
  * @author Haruaki Tamada\r
  * @version $Revision$ $Date$\r
@@ -53,11 +52,17 @@ public class BirthmarkEngine{
     private OperationType targetType;\r
     private BirthmarkExtractorFactory factory;\r
 \r
+    /**\r
+     * constructor.\r
+     */\r
     public BirthmarkEngine(BirthmarkEnvironment env){\r
         this.environment = env;\r
         factory = new BirthmarkExtractorFactory(env);\r
     }\r
 \r
+    /**\r
+     * returns an environment of this object.\r
+     */\r
     public BirthmarkEnvironment getEnvironment(){\r
         return environment;\r
     }\r
@@ -70,7 +75,14 @@ public class BirthmarkEngine{
         listeners.remove(listener);\r
     }\r
 \r
-    public ComparisonResultSet filter(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
+    /**\r
+     * filters comparison of birthmarks from target files.\r
+     * @see #extract(String[], BirthmarkContext)\r
+     * @see #compare(String[], BirthmarkContext)\r
+     * @see #filter(ComparisonResultSet)\r
+     * @see BirthmarkContext#getFilterTypes()\r
+     */\r
+    public synchronized ComparisonResultSet filter(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
         operationStart(OperationType.FILTER_BIRTHMARKS);\r
 \r
         ComparisonResultSet crs = compare(target, context);\r
@@ -81,7 +93,14 @@ public class BirthmarkEngine{
         return crs;\r
     }\r
 \r
-    public ComparisonResultSet filter(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
+    /**\r
+     * filters comparison of birthmarks from given two targets targetx, and targetY\r
+     * @see #extract(String[], String[], BirthmarkContext)\r
+     * @see #compare(String[], String[], BirthmarkContext)\r
+     * @see #filter(ComparisonResultSet)\r
+     * @see BirthmarkContext#getFilterTypes()\r
+     */\r
+    public synchronized ComparisonResultSet filter(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
         operationStart(OperationType.FILTER_BIRTHMARKS);\r
 \r
         ComparisonResultSet crs = compare(targetX, targetY, context);\r
@@ -92,7 +111,14 @@ public class BirthmarkEngine{
         return crs;\r
     }\r
 \r
-    public ComparisonResultSet filter(ExtractionResultSet er) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
+    /**\r
+     * filters comparison of birthmarks from given extraction result set.\r
+     * @see #compare(ExtractionResultSet)\r
+     * @see #filter(ComparisonResultSet)\r
+     * @see ExtractionResultSet#getContext()\r
+     * @see BirthmarkContext#getFilterTypes()\r
+     */\r
+    public synchronized ComparisonResultSet filter(ExtractionResultSet er) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
         operationStart(OperationType.FILTER_BIRTHMARKS);\r
 \r
         ComparisonResultSet crs = compare(er);\r
@@ -103,7 +129,12 @@ public class BirthmarkEngine{
         return crs;\r
     }\r
 \r
-    public ComparisonResultSet filter(ComparisonResultSet crs) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
+    /**\r
+     * filters comparison of birthmarks.\r
+     * @see ExtractionResultSet#getContext()\r
+     * @see BirthmarkContext#getFilterTypes()\r
+     */\r
+    public synchronized ComparisonResultSet filter(ComparisonResultSet crs) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
         operationStart(OperationType.FILTER_BIRTHMARKS);\r
 \r
         String[] filterTypes = crs.getContext().getFilterTypes();\r
@@ -129,11 +160,14 @@ public class BirthmarkEngine{
         return crs;\r
     }\r
 \r
-    public ComparisonPair compareDetails(BirthmarkSet bs1, BirthmarkSet bs2, BirthmarkContext context) throws BirthmarkComparisonFailedException{\r
+    /**\r
+     * compares two given birthmarks and returns comparison pair.\r
+     */\r
+    public synchronized ComparisonPair compareDetails(BirthmarkSet bs1, BirthmarkSet bs2, BirthmarkContext context) throws BirthmarkComparisonFailedException{\r
         return new ComparisonPair(bs1, bs2, context);\r
     }\r
 \r
-    public ComparisonResultSet compare(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
+    public synchronized ComparisonResultSet compare(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
         operationStart(OperationType.COMPARE_BIRTHMARKS);\r
 \r
         ExtractionResultSet er = extract(target, context);\r
@@ -144,7 +178,7 @@ public class BirthmarkEngine{
         return crs;\r
     }\r
 \r
-    public ComparisonResultSet compare(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
+    public synchronized ComparisonResultSet compare(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
         operationStart(OperationType.COMPARE_BIRTHMARKS);\r
 \r
         ExtractionResultSet er = extract(targetX, targetY, context);\r
@@ -155,7 +189,7 @@ public class BirthmarkEngine{
         return crs;\r
     }\r
 \r
-    public ComparisonResultSet compare(ExtractionResultSet er) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
+    public synchronized ComparisonResultSet compare(ExtractionResultSet er) throws BirthmarkExtractionFailedException, BirthmarkComparisonFailedException{\r
         operationStart(OperationType.COMPARE_BIRTHMARKS);\r
         BirthmarkContext context = er.getContext();\r
 \r
@@ -181,46 +215,14 @@ public class BirthmarkEngine{
         return crs;\r
     }\r
 \r
-    public ExtractionResultSet extract(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException{\r
+    public synchronized ExtractionResultSet extract(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException{\r
         operationStart(OperationType.EXTRACT_BIRTHMARKS);\r
         ExtractionResultSet er = extract(target, null, context);\r
         operationDone(OperationType.EXTRACT_BIRTHMARKS);\r
         return er;\r
     }\r
 \r
-    public ExtractionResultSet extract(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException{\r
-        operationStart(OperationType.EXTRACT_BIRTHMARKS);\r
-        ExtractionResultSet er = ExtractionResultSetFactory.getInstance().createResultSet(context);\r
-\r
-        try{\r
-            switch(context.getComparisonMethod()){\r
-            case ROUND_ROBIN_SAME_PAIR:\r
-            case ROUND_ROBIN_WITHOUT_SAME_PAIR:\r
-                er.setTableType(false);\r
-                String[] targetXY = mergeTarget(targetX, targetY);\r
-                extractImpl2(targetXY, er, ExtractionTarget.TARGET_XY);\r
-                break;\r
-            case GUESSED_PAIR:\r
-            case SPECIFIED_PAIR:\r
-            case ROUND_ROBIN_XY:\r
-            default:\r
-                if(targetX == null || targetY == null){\r
-                    throw new BirthmarkExtractionFailedException("targetX or targetY is null");\r
-                }\r
-                er.setTableType(true);\r
-                extractImpl2(targetX, er, ExtractionTarget.TARGET_X);\r
-                extractImpl2(targetY, er, ExtractionTarget.TARGET_Y);\r
-                break;\r
-            }\r
-            return er;\r
-        } catch(IOException e){\r
-            throw new BirthmarkExtractionFailedException(e);\r
-        } finally{\r
-            operationDone(OperationType.EXTRACT_BIRTHMARKS);\r
-        }\r
-    }\r
-\r
-    public ExtractionResultSet extract2(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException{\r
+    public synchronized ExtractionResultSet extract(String[] targetX, String[] targetY, BirthmarkContext context) throws BirthmarkExtractionFailedException{\r
         operationStart(OperationType.EXTRACT_BIRTHMARKS);\r
         ExtractionResultSet er = ExtractionResultSetFactory.getInstance().createResultSet(context);\r
 \r
@@ -230,8 +232,7 @@ public class BirthmarkEngine{
             case ROUND_ROBIN_WITHOUT_SAME_PAIR:\r
                 er.setTableType(false);\r
                 String[] targetXY = mergeTarget(targetX, targetY);\r
-                BirthmarkSet[] s = extractImpl(targetXY, context);\r
-                er.setBirthmarkSets(ExtractionTarget.TARGET_XY, s);\r
+                extractImpl(targetXY, er, ExtractionTarget.TARGET_XY);\r
                 break;\r
             case GUESSED_PAIR:\r
             case SPECIFIED_PAIR:\r
@@ -241,11 +242,8 @@ public class BirthmarkEngine{
                     throw new BirthmarkExtractionFailedException("targetX or targetY is null");\r
                 }\r
                 er.setTableType(true);\r
-                BirthmarkSet[] extractResultX = extractImpl(targetX, context);\r
-                BirthmarkSet[] extractResultY = extractImpl(targetY, context);\r
-\r
-                er.setBirthmarkSets(ExtractionTarget.TARGET_X, extractResultX);\r
-                er.setBirthmarkSets(ExtractionTarget.TARGET_Y, extractResultY);\r
+                extractImpl(targetX, er, ExtractionTarget.TARGET_X);\r
+                extractImpl(targetY, er, ExtractionTarget.TARGET_Y);\r
                 break;\r
             }\r
             return er;\r
@@ -272,88 +270,25 @@ public class BirthmarkEngine{
         }\r
     }\r
 \r
-    private BirthmarkSet[] extractImpl2(String[] target, ExtractionResultSet er, ExtractionTarget et) throws BirthmarkExtractionFailedException, IOException{\r
+    private BirthmarkSet[] extractImpl(String[] target, ExtractionResultSet er, ExtractionTarget et) throws BirthmarkExtractionFailedException, IOException{\r
         ClassFileArchive[] archives = createArchives(target, environment);\r
         BirthmarkContext context = er.getContext();\r
         ExtractionUnit unit = context.getExtractionUnit();\r
 \r
         BirthmarkSet[] extractResult = null;\r
         if(unit == ExtractionUnit.CLASS){\r
-            extractFromClass2(archives, er, et);\r
+            extractFromClass(archives, er, et);\r
         }\r
         else if(unit == ExtractionUnit.PACKAGE){\r
-            extractFromPackage2(archives, er, et);\r
+            extractFromPackage(archives, er, et);\r
         }\r
         else if(unit == ExtractionUnit.ARCHIVE){\r
-            extractFromProduct2(archives, er, et);\r
+            extractFromProduct(archives, er, et);\r
         }\r
 \r
         return extractResult;\r
     }\r
 \r
-    private BirthmarkSet[] extractImpl(String[] target, BirthmarkContext context) throws BirthmarkExtractionFailedException, IOException{\r
-        ClassFileArchive[] archives = createArchives(target, environment);\r
-        BirthmarkExtractor[] extractors = createExtractors(context.getExtractionTypes(), environment);\r
-        ExtractionUnit unit = context.getExtractionUnit();\r
-\r
-        BirthmarkSet[] extractResult = null;\r
-        if(unit == ExtractionUnit.CLASS){\r
-            extractResult = extractFromClass(archives, extractors, environment);\r
-        }\r
-        else if(unit == ExtractionUnit.PACKAGE){\r
-            extractResult = extractFromPackage(archives, extractors, environment);\r
-        }\r
-        else if(unit == ExtractionUnit.ARCHIVE){\r
-            extractResult = extractFromProduct(archives, extractors, environment);\r
-        }\r
-\r
-        return extractResult;\r
-    }\r
-\r
-    private BirthmarkExtractor[] createExtractors(String[] birthmarkTypes, BirthmarkEnvironment environment){\r
-        List<BirthmarkExtractor> list = new ArrayList<BirthmarkExtractor>();\r
-        for(String type: birthmarkTypes){\r
-            BirthmarkExtractor extractor = createExtractor(type, environment);\r
-            list.add(extractor);\r
-        }\r
-        return list.toArray(new BirthmarkExtractor[list.size()]);\r
-    }\r
-\r
-    @SuppressWarnings("unchecked")\r
-    private BirthmarkExtractor createExtractor(String birthmarkType, BirthmarkEnvironment environment){\r
-        BirthmarkSpi spi = environment.getService(birthmarkType);\r
-        BirthmarkExtractor extractor = null;\r
-        if(spi != null){\r
-            extractor = spi.getExtractor();\r
-            try{\r
-                if(extractor != null){\r
-                    Map props = BeanUtils.describe(extractor);\r
-                    props.remove("class");\r
-                    props.remove("provider");\r
-                    for(Object keyObject: props.keySet()){\r
-                        String key = "extractor." + spi.getType() + "." + String.valueOf(keyObject);\r
-                        if(environment.getProperty(key) != null){\r
-                            BeanUtils.setProperty(\r
-                                extractor, (String)keyObject, environment.getProperty(key)\r
-                            );\r
-                        }\r
-                    }\r
-                }\r
-            } catch(InvocationTargetException e){\r
-                throw new InternalError(e.getMessage());\r
-            } catch(NoSuchMethodException e){\r
-                throw new InternalError(e.getMessage());\r
-            } catch(IllegalAccessException e){\r
-                throw new InternalError(e.getMessage());\r
-            }\r
-        }\r
-        if(extractor == null){\r
-            warnings.addMessage(new ExtractorNotFoundException("extractor not found"), birthmarkType);\r
-        }\r
-\r
-        return extractor;\r
-    }\r
-\r
     private byte[] inputStreamToByteArray(InputStream in) throws IOException{\r
         ByteArrayOutputStream bout = new ByteArrayOutputStream();\r
         int read;\r
@@ -367,7 +302,7 @@ public class BirthmarkEngine{
         return data;\r
     }\r
 \r
-    private void extractFromPackage2(ClassFileArchive[] archives, ExtractionResultSet er, ExtractionTarget et) throws IOException, BirthmarkExtractionFailedException{\r
+    private void extractFromPackage(ClassFileArchive[] archives, ExtractionResultSet er, ExtractionTarget et) throws IOException, BirthmarkExtractionFailedException{\r
         Map<String, BirthmarkSet> map = new HashMap<String, BirthmarkSet>();\r
         BirthmarkContext context = er.getContext();\r
 \r
@@ -408,40 +343,6 @@ public class BirthmarkEngine{
         }\r
     }\r
 \r
-    private BirthmarkSet[] extractFromPackage(ClassFileArchive[] archives, BirthmarkExtractor[] extractors, BirthmarkEnvironment context) throws IOException, BirthmarkExtractionFailedException{\r
-        Map<String, BirthmarkSet> list = new HashMap<String, BirthmarkSet>();\r
-\r
-        for(ClassFileArchive archive: archives){\r
-            for(ClassFileEntry entry: archive){\r
-                try{\r
-                    String name = entry.getClassName();\r
-                    String packageName = parsePackageName(name);\r
-                    BirthmarkSet bs = list.get(packageName);\r
-                    if(bs == null){\r
-                        bs = new BirthmarkSet(packageName, archive.getLocation());\r
-                        list.put(packageName, bs);\r
-                    }\r
-\r
-                    byte[] data = inputStreamToByteArray(entry.getLocation().openStream());\r
-                    for(BirthmarkExtractor extractor: extractors){\r
-                        if(extractor.isAcceptable(ExtractionUnit.PACKAGE)){\r
-                            Birthmark b = bs.getBirthmark(extractor.getProvider().getType());\r
-                            if(b == null){\r
-                                b = extractor.createBirthmark();\r
-                                bs.addBirthmark(b);\r
-                            }\r
-                            extractor.extract(b, new ByteArrayInputStream(data), context);\r
-                        }\r
-                    }\r
-                } catch(IOException e){\r
-                    warnings.addMessage(e, archive.getName());\r
-                }\r
-            }\r
-        }\r
-\r
-        return list.values().toArray(new BirthmarkSet[list.size()]);\r
-    }\r
-\r
     private String parsePackageName(String name){\r
         String n = name.replace('/', '.');\r
         int index = n.lastIndexOf('.');\r
@@ -452,7 +353,7 @@ public class BirthmarkEngine{
         return n;\r
     }\r
 \r
-    private void extractFromClass2(ClassFileArchive[] archives, ExtractionResultSet er,\r
+    private void extractFromClass(ClassFileArchive[] archives, ExtractionResultSet er,\r
             ExtractionTarget et) throws IOException, BirthmarkExtractionFailedException{\r
         BirthmarkContext context = er.getContext();\r
 \r
@@ -481,31 +382,7 @@ public class BirthmarkEngine{
         }\r
     }\r
 \r
-    private BirthmarkSet[] extractFromClass(ClassFileArchive[] archives,\r
-            BirthmarkExtractor[] extractors, BirthmarkEnvironment context) throws IOException, BirthmarkExtractionFailedException{\r
-        List<BirthmarkSet> list = new ArrayList<BirthmarkSet>();\r
-\r
-        for(ClassFileArchive archive: archives){\r
-            for(ClassFileEntry entry: archive){\r
-                try{\r
-                    BirthmarkSet birthmarkset = new BirthmarkSet(entry.getClassName(), entry.getLocation());\r
-                    list.add(birthmarkset);\r
-                    byte[] data = inputStreamToByteArray(entry.getLocation().openStream());\r
-                    for(BirthmarkExtractor extractor: extractors){\r
-                        if(extractor.isAcceptable(ExtractionUnit.CLASS)){\r
-                            Birthmark b = extractor.extract(new ByteArrayInputStream(data), context);\r
-                            birthmarkset.addBirthmark(b);\r
-                        }\r
-                    }\r
-                } catch(IOException e){\r
-                    warnings.addMessage(e, entry.getClassName());\r
-                }\r
-            }\r
-        }\r
-        return list.toArray(new BirthmarkSet[list.size()]);\r
-    }\r
-\r
-    private void extractFromProduct2(ClassFileArchive[] archives, ExtractionResultSet er, ExtractionTarget et) throws IOException, BirthmarkExtractionFailedException{\r
+    private void extractFromProduct(ClassFileArchive[] archives, ExtractionResultSet er, ExtractionTarget et) throws IOException, BirthmarkExtractionFailedException{\r
         BirthmarkContext context = er.getContext();\r
 \r
         for(ClassFileArchive archive: archives){\r
@@ -539,41 +416,6 @@ public class BirthmarkEngine{
         }\r
     }\r
 \r
-    private BirthmarkSet[] extractFromProduct(ClassFileArchive[] archives, BirthmarkExtractor[] extractors, BirthmarkEnvironment context) throws IOException, BirthmarkExtractionFailedException{\r
-        List<BirthmarkSet> list = new ArrayList<BirthmarkSet>();\r
-\r
-        for(ClassFileArchive archive: archives){\r
-            BirthmarkSet birthmarkset = new BirthmarkSet(archive.getName(), archive.getLocation());\r
-            list.add(birthmarkset);\r
-\r
-            for(ClassFileEntry entry: archive){\r
-                try{\r
-                    byte[] data = inputStreamToByteArray(entry.getLocation().openStream());\r
-                    for(BirthmarkExtractor extractor: extractors){\r
-                        if(extractor.isAcceptable(ExtractionUnit.ARCHIVE)){\r
-                            Birthmark b = birthmarkset.getBirthmark(extractor.getProvider().getType());\r
-                            if(b == null){\r
-                                b = extractor.createBirthmark();\r
-                                birthmarkset.addBirthmark(b);\r
-                            }\r
-                            extractor.extract(b, new ByteArrayInputStream(data), context);\r
-                        }\r
-                    }\r
-                } catch(IOException e){\r
-                    warnings.addMessage(e, entry.getClassName());\r
-                }\r
-            }\r
-        }\r
-        for(Iterator<BirthmarkSet> i = list.iterator(); i.hasNext(); ){\r
-            BirthmarkSet set = i.next();\r
-            if(set.getBirthmarksCount() == 0){\r
-                i.remove();\r
-            }\r
-        }\r
-\r
-        return list.toArray(new BirthmarkSet[list.size()]);\r
-    }\r
-\r
     private ClassFileArchive[] createArchives(String[] files, BirthmarkEnvironment environment) throws IOException, MalformedURLException{\r
         ClasspathContext bytecode = environment.getClasspathContext();\r
         List<ClassFileArchive> archives = new ArrayList<ClassFileArchive>();\r
index 426d87d..1f824b0 100644 (file)
@@ -48,5 +48,8 @@ public interface ComparisonResultSet extends Iterable<ComparisonPair>{
      */\r
     public BirthmarkSet[] getPairSources();\r
 \r
+    /**\r
+     * returns an array of comparison sources.\r
+     */\r
     public Iterator<BirthmarkSet> pairSources();\r
 }\r
index 5cb5838..e2d86fd 100755 (executable)
@@ -7,56 +7,123 @@ package jp.naist.se.stigmata;
 import java.util.Iterator;\r
 \r
 /**\r
+ * This interface represents a set of extracted birthmarks.\r
  * \r
  * @author Haruaki Tamada\r
  * @version $Revision$ $Date$\r
  */\r
 public interface ExtractionResultSet extends Iterable<BirthmarkSet>{\r
+    /**\r
+     * returns an environment of extraction result.\r
+     */\r
     public BirthmarkEnvironment getEnvironment();\r
 \r
+    /**\r
+     * returns a context of extraction result.\r
+     */\r
     public BirthmarkContext getContext();\r
 \r
     /**\r
-     * \r
+     * sets extraction \r
      */\r
     public boolean isTableType();\r
 \r
     /**\r
-     * \r
+     * sets table type comparison flag.\r
+     * @see #isTableType()\r
      */\r
     public void setTableType(boolean flag);\r
 \r
+    /**\r
+     * returns types of extracted birthmarks.\r
+     */\r
     public String[] getBirthmarkTypes();\r
 \r
+    /**\r
+     * returns the number of target birthmark-set size (# of classes, packages, or jar files).\r
+     */\r
     public int getBirthmarkSetSize();\r
 \r
+    /**\r
+     * returns an iterator for all of birthmark-sets.\r
+     */\r
     public Iterator<BirthmarkSet> iterator();\r
 \r
+    /**\r
+     * returns a birthmark-set of given index.\r
+     */\r
     public BirthmarkSet getBirthmarkSet(int index);\r
 \r
+    /**\r
+     * returns a birthmark-set of given name.\r
+     */\r
     public BirthmarkSet getBirthmarkSet(String name);\r
 \r
+    /**\r
+     * returns an array for all of birthmark-sets.\r
+     */\r
     public BirthmarkSet[] getBirthmarkSets();\r
 \r
-    public int getBirthmarkSetSize(ExtractionTarget target);\r
-\r
+    /**\r
+     * removes given birthmark-set from this object.\r
+     */\r
     public void removeBirthmarkSet(BirthmarkSet bs);\r
 \r
+    /**\r
+     * removes all of birthmark-set this object has.\r
+     */\r
     public void removeAllBirthmarkSets();\r
 \r
+    /**\r
+     * returns the number of birthmark-set to specified extraction target (TARGET_X, TARGET_Y, TARGET_XY, or TARGET_BOTH).\r
+     */\r
+    public int getBirthmarkSetSize(ExtractionTarget target);\r
+\r
+    /**\r
+     * returns an iterator of birthmark-sets from specified extraction target.\r
+     */\r
     public Iterator<BirthmarkSet> birthmarkSets(ExtractionTarget target);\r
 \r
+    /**\r
+     * \r
+     */\r
     public BirthmarkSet getBirthmarkSet(ExtractionTarget target, int index);\r
 \r
+    /**\r
+     * \r
+     */\r
     public BirthmarkSet getBirthmarkSet(ExtractionTarget target, String setname);\r
 \r
+    /**\r
+     * \r
+     */\r
     public BirthmarkSet[] getBirthmarkSets(ExtractionTarget target);\r
 \r
+    /**\r
+     * adds birthmark-set to extraction target.\r
+     * This method must be called when building birthmark-set is completely finished.\r
+     * All of birthmark must be added to birthmark-set.\r
+     * Because, if the concrete class of this interface stores given birthmark-set to database,\r
+     * birthmarks is parsed and store into target database in this method.\r
+     * @throws IllegalArgumentsException target is ExtractionTarget.TARGET_BOTH \r
+     */\r
     public void addBirthmarkSet(ExtractionTarget target, BirthmarkSet set);\r
 \r
+    /**\r
+     * remove all of birthmark-set this object has, then, adds each birthmark-sets to this object. \r
+     * @see #removeAllBirthmarkSets(ExtractionTarget)\r
+     * @see #addBirthmarkSet(ExtractionTarget, BirthmarkSet)\r
+     * @throws IllegalArgumentsException target is ExtractionTarget.TARGET_BOTH \r
+     */\r
     public void setBirthmarkSets(ExtractionTarget target, BirthmarkSet[] sets);\r
 \r
+    /**\r
+     * remove specified birthmark-set from specified extraction target.\r
+     */\r
     public void removeBirthmarkSet(ExtractionTarget target, BirthmarkSet set);\r
 \r
+    /**\r
+     * remove all birthmark-sets from specified extraction target.\r
+     */\r
     public void removeAllBirthmarkSets(ExtractionTarget target);\r
 }\r
index f16d17d..510f251 100755 (executable)
@@ -5,6 +5,7 @@ package jp.naist.se.stigmata;
  */\r
 \r
 /**\r
+ * This enum represents the mean of extracted birthmarks.\r
  * \r
  * @author Haruaki Tamada\r
  * @version $Revision$ $Date$\r
index 66772e7..94ad087 100755 (executable)
@@ -5,13 +5,19 @@ package jp.naist.se.stigmata;
  */\r
 \r
 /**\r
- * This enum type represents birthmark extraction unit. The name of\r
- * {@link jp.naist.se.stigmata.BirthmarkSet <code>BirthmarkSet</code>} is class\r
- * name, method name, package name, or product name.\r
+ * This enum type represents birthmark extraction unit.\r
+ * \r
+ * The name of\r
+ * {@link jp.naist.se.stigmata.BirthmarkSet <code>BirthmarkSet</code>} will be\r
+ * class name, method name, package name, or product name.\r
  * \r
  * @author Haruaki TAMADA\r
  * @version $Revision$ $Date$\r
  */\r
 public enum ExtractionUnit{\r
-    CLASS, PACKAGE, ARCHIVE,\r
+    CLASS,\r
+    PACKAGE,\r
+    ARCHIVE,\r
+    @Deprecated\r
+    METHOD,\r
 }\r
index 824ee3b..6028a1b 100755 (executable)
@@ -25,14 +25,23 @@ import jp.naist.se.stigmata.utils.ConfigFileImporter;
  * @version $Revision$ $Date$\r
  */\r
 public class Stigmata{\r
+    /**\r
+     * instance. singleton pattern.\r
+     */\r
     private static Stigmata stigmata;\r
     private BirthmarkEnvironment defaultEnvironment;\r
     private List<BirthmarkEngineListener> listeners = new ArrayList<BirthmarkEngineListener>();\r
 \r
+    /**\r
+     * private constructor.\r
+     */\r
     private Stigmata(){\r
         configuration();\r
     }\r
 \r
+    /**\r
+     * gets only instance of this class.\r
+     */\r
     public static synchronized Stigmata getInstance(){\r
         if(stigmata == null){\r
             stigmata = new Stigmata();\r
@@ -40,21 +49,35 @@ public class Stigmata{
         return stigmata;\r
     }\r
 \r
+    /**\r
+     * creates a new birthmark context.\r
+     */\r
     public BirthmarkContext createContext(){\r
         return new BirthmarkContext(createEnvironment());\r
     }\r
 \r
+    /**\r
+     * creates a new birthmark environment.\r
+     */\r
     public BirthmarkEnvironment createEnvironment(){\r
         return new BirthmarkEnvironment(defaultEnvironment);\r
     }\r
 \r
+    /**\r
+     * creates a new birthmark engine.\r
+     */\r
     public BirthmarkEngine createEngine(){\r
-        BirthmarkEngine engine = new BirthmarkEngine(createEnvironment());\r
-        return engine;\r
+        return createEngine(createEnvironment());\r
     }\r
 \r
+    /**\r
+     * creates a new birthmark engine with given environment.\r
+     */\r
     public BirthmarkEngine createEngine(BirthmarkEnvironment environment){\r
         BirthmarkEngine engine = new BirthmarkEngine(environment);\r
+        for(BirthmarkEngineListener listener: listeners){\r
+            engine.addBirthmarkEngineListener(listener);\r
+        }\r
         return engine;\r
     }\r
 \r
index 90a2634..1974c39 100644 (file)
@@ -5,60 +5,106 @@ package jp.naist.se.stigmata.birthmarks.kgram;
  */\r
 \r
 import java.io.Serializable;\r
-import java.util.ArrayList;\r
+import java.lang.reflect.Array;\r
+import java.util.Arrays;\r
 import java.util.LinkedHashSet;\r
-import java.util.List;\r
 import java.util.Set;\r
 \r
 /**\r
+ * This class represents k-gram of the some sequence. \r
  * \r
  * @author Haruaki TAMADA\r
  * @version $Revision$ $Date$\r
  */\r
 public class KGram<T> implements Serializable{\r
     private static final long serialVersionUID = 273465874532523L;\r
-    private List<T> list = new ArrayList<T>();\r
+    // private List<T> list = new ArrayList<T>();\r
     private int maxLength = 4;\r
+    private T[] values;\r
 \r
+    /**\r
+     * constructor.\r
+     * @param kvalue the number of elements of this object.\r
+     */\r
     public KGram(int kvalue){\r
         setKValue(kvalue);\r
     }\r
 \r
+    /**\r
+     * sets k-value. \r
+     * @param kvalue the number of elements of this object.\r
+     */\r
     public void setKValue(int kvalue){\r
         this.maxLength = kvalue;\r
     }\r
 \r
+    /**\r
+     * returns k-value which is the number of elements.\r
+     * @return the number of elements.\r
+     */\r
     public int getKValue(){\r
         return maxLength;\r
     }\r
 \r
+    /**\r
+     * returns string representation of this object.\r
+     */\r
     public String toString(){\r
         StringBuffer buffer = new StringBuffer("{ ");\r
         for(int i = 0; i < maxLength; i++){\r
             if(i != 0) buffer.append(", ");\r
-            buffer.append(list.get(i));\r
+            buffer.append(get(i));\r
         }\r
         buffer.append(" }");\r
         return new String(buffer);\r
     }\r
 \r
+    /**\r
+     * sets a element to given index.\r
+     * @param index element index.\r
+     * @param value element value.\r
+     */\r
+    @SuppressWarnings("unchecked")\r
     public void set(int index, T value){\r
         if(index < 0 || index >= maxLength){\r
-            throw new ArrayIndexOutOfBoundsException("expected 0-" + maxLength + ": " + index);\r
+            throw new ArrayIndexOutOfBoundsException("expected 0-" + (maxLength - 1) + ": " + index);\r
         }\r
-        if(list.size() == index){\r
-            list.add(value);\r
+        if(value == null){\r
+            throw new NullPointerException("null value");\r
         }\r
-        else{\r
-            list.set(index, value);\r
+        if(values == null){\r
+            values = (T[])Array.newInstance(value.getClass(), getKValue());\r
         }\r
+        values[index] = value;\r
     }\r
 \r
+    /**\r
+     * returns an object of given index.\r
+     */\r
     public T get(int index){\r
+        T returnValue = null;\r
         if(index < 0 || index >= maxLength){\r
-            throw new ArrayIndexOutOfBoundsException("expected 0-" + maxLength + ": " + index);\r
+            throw new ArrayIndexOutOfBoundsException("expected 0-" + (maxLength - 1) + ": " + index);\r
+        }\r
+        if(values != null){\r
+            returnValue = values[index];\r
+        }\r
+\r
+        return returnValue;\r
+    }\r
+\r
+    /**\r
+     * returns an array of elements this object has.\r
+     * @return\r
+     */\r
+    @SuppressWarnings("unchecked")\r
+    public T[] toArray(){\r
+        if(values == null){\r
+            throw new IllegalStateException("this object has no elements.");\r
         }\r
-        return list.get(index);\r
+        T[] newarray = (T[])Array.newInstance(values[0].getClass(), getKValue());\r
+        System.arraycopy(values, 0, newarray, 0, getKValue());\r
+        return newarray;\r
     }\r
 \r
     @SuppressWarnings("unchecked")\r
@@ -77,7 +123,7 @@ public class KGram<T> implements Serializable{
     }\r
 \r
     public int hashCode(){\r
-        return list.hashCode();\r
+        return Arrays.hashCode(values);\r
     }\r
 \r
     @SuppressWarnings("unchecked")\r
index 3c16cf2..69f164f 100644 (file)
@@ -177,7 +177,7 @@ public class StigmataFrame extends JFrame{
     public void compareRoundRobin(String[] targetX, String[] targetY, \r
             BirthmarkContext context){\r
         try{\r
-            BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment());\r
+            BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());\r
             ExtractionResultSet ers = engine.extract(targetX, targetY, context);\r
 \r
             RoundRobinComparisonResultPane compare = new RoundRobinComparisonResultPane(this, ers);\r
@@ -200,7 +200,7 @@ public class StigmataFrame extends JFrame{
     public void compareRoundRobinFilter(String[] targetX, String[] targetY, \r
             BirthmarkContext context){\r
         try{\r
-            BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment());\r
+            BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());\r
 \r
             ExtractionResultSet ers = engine.extract(targetX, targetY, context);\r
             ComparisonResultSet resultset = engine.compare(ers);\r
@@ -225,7 +225,7 @@ public class StigmataFrame extends JFrame{
 \r
     public void compareGuessedPair(String[] targetX, String[] targetY, BirthmarkContext context){\r
         try{\r
-            BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment());\r
+            BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());\r
             ExtractionResultSet extraction = engine.extract(targetX, targetY, context);\r
             int comparePair = getNextCount("compare_pair");\r
 \r
@@ -253,7 +253,7 @@ public class StigmataFrame extends JFrame{
             Map<String, String> mapping = constructMapping(file);\r
 \r
             try{\r
-                BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment());\r
+                BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());\r
                 context.setNameMappings(mapping);\r
                 ComparisonResultSet crs = engine.compare(targetX, targetY, context);\r
                 int comparePair = getNextCount("compare_pair");\r
@@ -318,7 +318,7 @@ public class StigmataFrame extends JFrame{
 \r
     public void extract(String[] targets, BirthmarkContext context){\r
         try{\r
-            BirthmarkEngine engine = new BirthmarkEngine(context.getEnvironment());\r
+            BirthmarkEngine engine = getStigmata().createEngine(context.getEnvironment());\r
             ExtractionResultSet ers = engine.extract(targets, context);\r
             showExtractionResult(ers);\r
         }catch(Throwable e){\r
index ca69e94..fd48031 100755 (executable)
@@ -56,11 +56,14 @@ public class WarClassLoader extends URLClassLoader{
                         in.close();\r
                         out.close();\r
                     \r
-                        return defineClass(name, classdata, 0, classdata.length);\r
+                        clazz = defineClass(name, classdata, 0, classdata.length);\r
+                        break;\r
                     } catch(IOException exp){\r
                     }\r
                 }\r
             }\r
+        }\r
+        if(clazz == null){\r
             throw new ClassNotFoundException(name);\r
         }\r
         return clazz;\r