OSDN Git Service

extractor settings read from properties
authortama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Thu, 29 Mar 2007 06:36:53 +0000 (06:36 +0000)
committertama3 <tama3@acee48c3-7b26-0410-bdac-b3d0e5314bbc>
Thu, 29 Mar 2007 06:36:53 +0000 (06:36 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/stigmata/trunk@91 acee48c3-7b26-0410-bdac-b3d0e5314bbc

pom.xml
src/main/java/jp/naist/se/stigmata/BirthmarkContext.java
src/main/java/jp/naist/se/stigmata/Stigmata.java
src/main/java/jp/naist/se/stigmata/utils/ConfigFileImporter.java
src/main/resources/resources/stigmata.xml
src/test/java/jp/naist/se/stigmata/birthmarks/smc/SmcBirthmarkExtractorTest.java
src/test/java/jp/naist/se/stigmata/birthmarks/uc/UCBirthmarkExtractorTest.java

diff --git a/pom.xml b/pom.xml
index 1a7cecb..0e724a3 100755 (executable)
--- a/pom.xml
+++ b/pom.xml
           </execution>
         </executions>
       </plugin>
+
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>native2ascii-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>native2ascii</goal>
+            </goals>
+            <configuration>
+              <src>${basedir}/src/main/resources/resources</src>
+              <dest>${project.build.directory}/classes/resources</dest>
+              <ext>.properties</ext>
+              <includes>*.source</includes>
+              <encoding>shift_jis</encoding>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!-- for JUnit4 -->
+      <plugin>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <version>2.3</version>
+      </plugin>
     </plugins>
   </build>
 
index 67fde84..8fb898f 100755 (executable)
@@ -5,11 +5,13 @@ package jp.naist.se.stigmata;
  */\r
 \r
 import java.util.ArrayList;\r
+import java.util.Arrays;\r
 import java.util.HashMap;\r
+import java.util.HashSet;\r
 import java.util.Iterator;\r
 import java.util.List;\r
 import java.util.Map;\r
-import java.util.Arrays;\r
+import java.util.Set;\r
 \r
 import javax.imageio.spi.ServiceRegistry;\r
 \r
@@ -55,6 +57,9 @@ public class BirthmarkContext{
      */\r
     private Map<String, String> properties = new HashMap<String, String>();\r
 \r
+    /**\r
+     * filter manager.\r
+     */\r
     private ComparisonPairFilterManager filterManager;\r
 \r
     /**\r
@@ -121,7 +126,14 @@ public class BirthmarkContext{
     }\r
 \r
     public Iterator<String> propertyKeys(){\r
-        return properties.keySet().iterator();\r
+        Set<String> set = new HashSet<String>();\r
+        if(parent != null){\r
+            for(Iterator<String> i = parent.propertyKeys(); i.hasNext(); ){\r
+                set.add(i.next());\r
+            }\r
+        }\r
+        set.addAll(properties.keySet());\r
+        return set.iterator();\r
     }\r
 \r
     /**\r
index d2a22b2..50da22d 100755 (executable)
@@ -14,6 +14,7 @@ import java.io.InputStream;
 import java.util.ArrayList;\r
 import java.util.Iterator;\r
 import java.util.List;\r
+import java.util.Map;\r
 import java.util.logging.Logger;\r
 \r
 import javax.imageio.spi.ServiceRegistry;\r
@@ -29,6 +30,8 @@ import jp.naist.se.stigmata.reader.WarClassFileArchive;
 import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
 import jp.naist.se.stigmata.utils.ConfigFileImporter;\r
 \r
+import org.apache.commons.beanutils.BeanUtils;\r
+\r
 /**\r
  * Birthmarking engine.\r
  *\r
@@ -256,13 +259,24 @@ public class Stigmata{
         return extractBirthmark(birthmarks, data, holder, context);\r
     }\r
 \r
-    private BirthmarkSet extractBirthmark(String[] birthmarks, byte[] bytecode,\r
-                                          BirthmarkSet holder,\r
+    private BirthmarkSet extractBirthmark(String[] birthmarks, byte[] bytecode, BirthmarkSet holder,\r
                                           BirthmarkContext context) throws BirthmarkExtractionException, IOException{\r
         for(String birthmark: birthmarks){\r
             BirthmarkSpi spi = context.getService(birthmark);\r
             if(spi != null){\r
                 BirthmarkExtractor extractor = spi.getExtractor();\r
+                try{\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(context.getProperty(key) != null){\r
+                            BeanUtils.setProperty(extractor, (String)keyObject, context.getProperty(key));\r
+                        }\r
+                    }\r
+                } catch(Exception e){\r
+                }\r
                 holder.addBirthmark(\r
                     extractor.extract(new ByteArrayInputStream(bytecode), context)\r
                 );\r
index f1eaca8..8fc1168 100755 (executable)
@@ -158,10 +158,12 @@ public class ConfigFileImporter{
 \r
             if(value.length() > 0){\r
                 if(part == Part.PROPERTIES){\r
-                    if(qname.equals("name"))\r
+                    if(qname.equals("name")){\r
                         key = value;\r
-                    else if(qname.equals("value"))\r
+                    }\r
+                    else if(qname.equals("value")){\r
                         context.addProperty(key, value);\r
+                    }\r
                 }\r
                 else if(part == Part.WELLKNOWN_CLASSES\r
                         && (qname.equals("suffix") || qname.equals("prefix") || qname\r
@@ -190,22 +192,28 @@ public class ConfigFileImporter{
                         service.setComparatorClassName(value);\r
                 }\r
                 else if(part == Part.FILTER_SET){\r
-                    if(qname.equals("name"))\r
+                    if(qname.equals("name")){\r
                         filter.setName(value);\r
+                    }\r
                     else if(qname.equals("match")){\r
-                        if(value.equals("all"))\r
+                        if(value.equals("all")){\r
                             filter.setMatchAll();\r
-                        else\r
+                        }\r
+                        else{\r
                             filter.setMatchAny();\r
+                        }\r
                     }\r
                 }\r
                 else if(part == Part.FILTER_DEFINITION){\r
-                    if(qname.equals("filter-type"))\r
+                    if(qname.equals("filter-type")){\r
                         filterType = value;\r
-                    else if(qname.equals("criterion"))\r
+                    }\r
+                    else if(qname.equals("criterion")){\r
                         filterCriterion = value;\r
-                    else if(qname.equals("name"))\r
+                    }\r
+                    else if(qname.equals("name")){\r
                         attributeName = value;\r
+                    }\r
                     else{\r
                         filterAttributes.put(attributeName, value);\r
                     }\r
@@ -220,9 +228,9 @@ public class ConfigFileImporter{
                 service = null;\r
             }\r
             else if(part == Part.FILTER_DEFINITION && qname.equals("filter")){\r
-                ComparisonPairFilter f = context.getFilterManager()\r
-                        .buildFilter(filterType, filterCriterion,\r
-                                filterAttributes);\r
+                ComparisonPairFilter f = context.getFilterManager().buildFilter(\r
+                    filterType, filterCriterion, filterAttributes\r
+                );\r
                 filter.addFilter(f);\r
                 part = Part.FILTER_SET;\r
             }\r
index 7a0ea47..1855c70 100755 (executable)
@@ -182,8 +182,8 @@ $Id$
   <!-- Properties for birthmark context -->
   <properties>
     <property>
-      <name>birthmark.file.directory</name>
-      <value>.</value>
+      <name>extractor.kgram.KValue</name>
+      <value>4</value>
     </property>
 <!--
     <property>
index fc1b54e..a39eaed 100755 (executable)
@@ -38,7 +38,7 @@ public class SmcBirthmarkExtractorTest{
 \r
         Birthmark birthmark = array[0].getBirthmark("smc");\r
         Assert.assertEquals(birthmark.getType(), "smc");\r
-        Assert.assertEquals(birthmark.getElementCount(), 62);\r
+        Assert.assertEquals(birthmark.getElementCount(), 76);\r
 \r
         BirthmarkElement[] elements = birthmark.getElements();\r
         for(int i = 0; i < elements.length; i++){\r
@@ -47,68 +47,83 @@ public class SmcBirthmarkExtractorTest{
                 "jp.naist.se.stigmata.birthmarks.smc.MethodCallBirthmarkElement"\r
             );\r
         }\r
-        Assert.assertEquals(elements[ 0].getValue(), "java.lang.Object#<init>");\r
-        Assert.assertEquals(elements[ 1].getValue(), "java.io.FileInputStream#<init>");\r
-        Assert.assertEquals(elements[ 2].getValue(), "java.io.File#<init>");\r
-        Assert.assertEquals(elements[ 3].getValue(), "java.io.File#exists");\r
-        Assert.assertEquals(elements[ 4].getValue(), "java.lang.System#getProperty");\r
-        Assert.assertEquals(elements[ 5].getValue(), "java.io.File#<init>");\r
-        Assert.assertEquals(elements[ 6].getValue(), "java.io.File#exists");\r
-        Assert.assertEquals(elements[ 7].getValue(), "java.io.FileInputStream#<init>");\r
-        Assert.assertEquals(elements[ 8].getValue(), "java.lang.Object#getClass");\r
-        Assert.assertEquals(elements[ 9].getValue(), "java.lang.Class#getResourceAsStream");\r
-        Assert.assertEquals(elements[10].getValue(), "java.util.ArrayList#<init>");\r
-        Assert.assertEquals(elements[11].getValue(), "java.util.ArrayList#<init>");\r
-        Assert.assertEquals(elements[12].getValue(), "java.lang.String#endsWith");\r
-        Assert.assertEquals(elements[13].getValue(), "java.util.List#add");\r
-        Assert.assertEquals(elements[14].getValue(), "java.lang.String#endsWith");\r
-        Assert.assertEquals(elements[15].getValue(), "java.lang.String#endsWith");\r
-        Assert.assertEquals(elements[16].getValue(), "java.util.List#add");\r
-        Assert.assertEquals(elements[17].getValue(), "java.io.File#<init>");\r
-        Assert.assertEquals(elements[18].getValue(), "java.io.File#toURI");\r
-        Assert.assertEquals(elements[19].getValue(), "java.net.URI#toURL");\r
-        Assert.assertEquals(elements[20].getValue(), "java.lang.String#endsWith");\r
-        Assert.assertEquals(elements[21].getValue(), "java.util.List#add");\r
-        Assert.assertEquals(elements[22].getValue(), "java.util.List#iterator");\r
-        Assert.assertEquals(elements[23].getValue(), "java.util.Iterator#hasNext");\r
-        Assert.assertEquals(elements[24].getValue(), "java.util.Iterator#next");\r
-        Assert.assertEquals(elements[25].getValue(), "java.util.Iterator#hasNext");\r
-        Assert.assertEquals(elements[26].getValue(), "java.util.Iterator#next");\r
-        Assert.assertEquals(elements[27].getValue(), "java.net.URL#openStream");\r
-        Assert.assertEquals(elements[28].getValue(), "java.util.List#add");\r
-        Assert.assertEquals(elements[29].getValue(), "java.util.List#size");\r
-        Assert.assertEquals(elements[30].getValue(), "java.util.List#toArray");\r
-        Assert.assertEquals(elements[31].getValue(), "java.util.ArrayList#<init>");\r
-        Assert.assertEquals(elements[32].getValue(), "java.util.List#add");\r
-        Assert.assertEquals(elements[33].getValue(), "java.lang.Object#getClass");\r
-        Assert.assertEquals(elements[34].getValue(), "java.lang.Class#getName");\r
-        Assert.assertEquals(elements[35].getValue(), "java.util.logging.Logger#getLogger");\r
-        Assert.assertEquals(elements[36].getValue(), "java.lang.StringBuilder#<init>");\r
-        Assert.assertEquals(elements[37].getValue(), "java.lang.StringBuilder#append");\r
-        Assert.assertEquals(elements[38].getValue(), "java.lang.StringBuilder#append");\r
-        Assert.assertEquals(elements[39].getValue(), "java.lang.StringBuilder#toString");\r
-        Assert.assertEquals(elements[40].getValue(), "java.util.logging.Logger#warning");\r
-        Assert.assertEquals(elements[41].getValue(), "java.util.List#size");\r
-        Assert.assertEquals(elements[42].getValue(), "java.util.List#toArray");\r
-        Assert.assertEquals(elements[43].getValue(), "java.util.ArrayList#<init>");\r
-        Assert.assertEquals(elements[44].getValue(), "java.util.Iterator#hasNext");\r
-        Assert.assertEquals(elements[45].getValue(), "java.util.Iterator#next");\r
-        Assert.assertEquals(elements[46].getValue(), "java.lang.Double#valueOf");\r
-        Assert.assertEquals(elements[47].getValue(), "java.util.List#add");\r
-        Assert.assertEquals(elements[48].getValue(), "java.util.List#iterator");\r
-        Assert.assertEquals(elements[49].getValue(), "java.util.Iterator#hasNext");\r
-        Assert.assertEquals(elements[50].getValue(), "java.util.Iterator#next");\r
-        Assert.assertEquals(elements[51].getValue(), "java.lang.Double#doubleValue");\r
-        Assert.assertEquals(elements[52].getValue(), "java.lang.Double#doubleValue");\r
-        Assert.assertEquals(elements[53].getValue(), "java.io.ByteArrayInputStream#<init>");\r
-        Assert.assertEquals(elements[54].getValue(), "java.io.ByteArrayOutputStream#<init>");\r
-        Assert.assertEquals(elements[55].getValue(), "java.io.InputStream#read");\r
-        Assert.assertEquals(elements[56].getValue(), "java.io.ByteArrayOutputStream#write");\r
-        Assert.assertEquals(elements[57].getValue(), "java.io.ByteArrayOutputStream#toByteArray");\r
-        Assert.assertEquals(elements[58].getValue(), "java.io.ByteArrayOutputStream#close");\r
-        Assert.assertEquals(elements[59].getValue(), "javax.imageio.spi.ServiceRegistry#lookupProviders");\r
-        Assert.assertEquals(elements[60].getValue(), "java.util.Iterator#hasNext");\r
-        Assert.assertEquals(elements[61].getValue(), "java.util.Iterator#next");\r
+        int index = 0;\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.Object#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.FileInputStream#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.File#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.File#exists");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.System#getProperty");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.File#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.File#exists");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.FileInputStream#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.Object#getClass");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.Class#getResourceAsStream");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.ArrayList#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.ArrayList#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.String#endsWith");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.List#add");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.String#endsWith");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.String#endsWith");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.List#add");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.File#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.File#toURI");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.net.URI#toURL");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.String#endsWith");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.List#add");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.List#iterator");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Iterator#next");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Iterator#next");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.net.URL#openStream");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.List#add");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Iterator#hasNext");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Iterator#hasNext");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.List#size");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.List#toArray");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.ArrayList#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.List#add");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.Object#getClass");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.Class#getName");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.logging.Logger#getLogger");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.String#valueOf");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.StringBuilder#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.StringBuilder#append");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.StringBuilder#toString");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.logging.Logger#warning");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.List#size");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.List#toArray");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.ArrayList#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Iterator#next");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.Double#valueOf");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.List#add");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Iterator#hasNext");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.List#iterator");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Iterator#next");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.Double#doubleValue");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.Double#doubleValue");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Iterator#hasNext");\r
+        Assert.assertEquals(elements[index++].getValue(), "org.apache.commons.beanutils.BeanUtils#describe");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Map#remove");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Map#remove");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Map#keySet");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Set#iterator");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Iterator#next");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.StringBuilder#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.StringBuilder#append");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.StringBuilder#append");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.String#valueOf");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.StringBuilder#append");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.lang.StringBuilder#toString");\r
+        Assert.assertEquals(elements[index++].getValue(), "org.apache.commons.beanutils.BeanUtils#setProperty");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Iterator#hasNext");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.ByteArrayInputStream#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.ByteArrayOutputStream#<init>");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.ByteArrayOutputStream#write");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.InputStream#read");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.ByteArrayOutputStream#toByteArray");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.io.ByteArrayOutputStream#close");\r
+        Assert.assertEquals(elements[index++].getValue(), "javax.imageio.spi.ServiceRegistry#lookupProviders");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Iterator#next");\r
+        Assert.assertEquals(elements[index++].getValue(), "java.util.Iterator#hasNext");\r
     }\r
 \r
     @Test\r
index 275dc35..53b78d8 100755 (executable)
@@ -38,7 +38,7 @@ public class UCBirthmarkExtractorTest{
 \r
         Birthmark birthmark = array[0].getBirthmark("uc");\r
         Assert.assertEquals(birthmark.getType(), "uc");\r
-        Assert.assertEquals(birthmark.getElementCount(), 18);\r
+        Assert.assertEquals(birthmark.getElementCount(), 21);\r
 \r
         BirthmarkElement[] elements = birthmark.getElements();\r
         Assert.assertEquals(elements[ 0].getValue(), "java.io.ByteArrayInputStream");\r
@@ -57,8 +57,12 @@ public class UCBirthmarkExtractorTest{
         Assert.assertEquals(elements[13].getValue(), "java.util.ArrayList");\r
         Assert.assertEquals(elements[14].getValue(), "java.util.Iterator");\r
         Assert.assertEquals(elements[15].getValue(), "java.util.List");\r
-        Assert.assertEquals(elements[16].getValue(), "java.util.logging.Logger");\r
-        Assert.assertEquals(elements[17].getValue(), "javax.imageio.spi.ServiceRegistry");\r
+        Assert.assertEquals(elements[16].getValue(), "java.util.Map");\r
+        Assert.assertEquals(elements[17].getValue(), "java.util.Set");\r
+        Assert.assertEquals(elements[18].getValue(), "java.util.logging.Logger");\r
+        Assert.assertEquals(elements[19].getValue(), "javax.imageio.spi.ServiceRegistry");\r
+\r
+        Assert.assertEquals(elements[20].getValue(), "org.apache.commons.beanutils.BeanUtils");\r
     }\r
 \r
     @Test\r