private ComparisonPairFilterManager filterManager;\r
\r
/**\r
+ * \r
+ */\r
+ private ClassLoader loader;\r
+\r
+ /**\r
* constructor for root environment\r
*/\r
private BirthmarkEnvironment(boolean flag){\r
manager = new WellknownClassManager();\r
classpathContext = ClasspathContext.getDefaultContext();\r
- filterManager = new ComparisonPairFilterManager();\r
+ filterManager = new ComparisonPairFilterManager(this);\r
}\r
\r
/**\r
this.parent = parent;\r
this.manager = new WellknownClassManager(parent.getWellknownClassManager());\r
this.classpathContext = new ClasspathContext(parent.getClasspathContext());\r
- this.filterManager = new ComparisonPairFilterManager(parent.getFilterManager());\r
+ this.filterManager = new ComparisonPairFilterManager(this, parent.getFilterManager());\r
}\r
\r
/**\r
return services;\r
}\r
\r
+ public <T> Iterator<T> lookupProviders(Class<T> providerClass){\r
+ Iterator<T> iterator;\r
+ if(loader != null) iterator = ServiceRegistry.lookupProviders(providerClass, loader);\r
+ else iterator = ServiceRegistry.lookupProviders(providerClass);\r
+ return iterator;\r
+ }\r
+\r
/**\r
* return birthmark services lookup from current class path.\r
*/\r
public synchronized BirthmarkSpi[] findServices(){\r
List<BirthmarkSpi> list = getServiceList();\r
\r
- for(Iterator<BirthmarkSpi> i = ServiceRegistry.lookupProviders(BirthmarkSpi.class); i.hasNext();){\r
+ for(Iterator<BirthmarkSpi> i = lookupProviders(BirthmarkSpi.class); i.hasNext(); ){\r
BirthmarkSpi spi = i.next();\r
if(getService(spi.getType()) == null){\r
list.add(spi);\r
public ComparisonPairFilterManager getFilterManager(){\r
return filterManager;\r
}\r
+\r
+ void setClassLoader(ClassLoader loader){\r
+ this.loader = loader;\r
+ }\r
}\r
import java.io.File;\r
import java.io.FileInputStream;\r
import java.io.FileNotFoundException;\r
+import java.io.FileWriter;\r
import java.io.IOException;\r
import java.io.InputStream;\r
+import java.io.PrintWriter;\r
+import java.net.MalformedURLException;\r
+import java.net.URL;\r
+import java.net.URLClassLoader;\r
import java.util.ArrayList;\r
import java.util.Iterator;\r
import java.util.List;\r
\r
-import javax.imageio.spi.ServiceRegistry;\r
-\r
import jp.naist.se.stigmata.event.BirthmarkEngineListener;\r
+import jp.naist.se.stigmata.format.FormatManager;\r
import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
+import jp.naist.se.stigmata.ui.swing.ExtensionFilter;\r
+import jp.naist.se.stigmata.utils.ConfigFileExporter;\r
import jp.naist.se.stigmata.utils.ConfigFileImporter;\r
\r
/**\r
}\r
\r
if(filePath == null){\r
- File file = new File("stigmata.xml");\r
+ String currentDirectory = System.getProperty("execution.directory");\r
+ if(currentDirectory == null){\r
+ currentDirectory = System.getProperty("user.dir");\r
+ }\r
+ File file = new File(currentDirectory, "stigmata.xml");\r
if(!file.exists()){\r
- file = new File(System.getProperty("user.home"), ".stigmata.xml");\r
+ file = new File(System.getProperty("user.home"), ".stigmata/stigmata.xml");\r
if(!file.exists()){\r
file = null;\r
}\r
if(defaultEnvironment == null){\r
defaultEnvironment = BirthmarkEnvironment.getDefaultEnvironment();\r
}\r
+ buildStigmataDirectory();\r
+\r
+ defaultEnvironment.setClassLoader(buildClassLoader());\r
try {\r
ConfigFileImporter parser = new ConfigFileImporter(defaultEnvironment);\r
parser.parse(in);\r
} catch(IOException e){\r
throw new ApplicationInitializationError(e);\r
}\r
- for(Iterator<BirthmarkSpi> i = ServiceRegistry.lookupProviders(BirthmarkSpi.class); i.hasNext(); ){\r
+ for(Iterator<BirthmarkSpi> i = defaultEnvironment.lookupProviders(BirthmarkSpi.class); i.hasNext(); ){\r
BirthmarkSpi service = i.next();\r
defaultEnvironment.addService(service);\r
}\r
+ FormatManager.updateServices(defaultEnvironment);\r
+ exportConfigFile();\r
+ }\r
+\r
+ private ClassLoader buildClassLoader(){\r
+ File file = new File(System.getProperty("user.home"), ".stigmata/plugins");\r
+ File[] jarfiles = file.listFiles(new ExtensionFilter("jar"));\r
+ if(jarfiles != null && jarfiles.length > 0){\r
+ try{\r
+ URL[] urls = new URL[jarfiles.length];\r
+ for(int i = 0; i < jarfiles.length; i++){\r
+ urls[i] = jarfiles[i].toURI().toURL();\r
+ }\r
+ return new URLClassLoader(urls);\r
+ } catch(MalformedURLException e){\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ private void buildStigmataDirectory(){\r
+ File file = new File(System.getProperty("user.home"), ".stigmata");\r
+ if(file.exists() && !file.isFile()){\r
+ File dest = new File(file.getParent(), ".stigmata.back");\r
+ file.renameTo(dest);\r
+ }\r
+ if(!file.exists()){\r
+ file.mkdirs();\r
+ }\r
+ File pluginDir = new File(file, "plugins");\r
+ if(!pluginDir.exists()){\r
+ pluginDir.mkdirs();\r
+ }\r
+ }\r
+\r
+ private void exportConfigFile(){\r
+ try{\r
+ File file = new File(System.getProperty("user.home"), ".stigmata/stigmata.xml");\r
+ if(file.exists()){\r
+ ConfigFileExporter exporter = new ConfigFileExporter(defaultEnvironment);\r
+ exporter.export(new PrintWriter(new FileWriter(file)));\r
+ }\r
+ } catch(IOException e){\r
+ }\r
}\r
}\r
import java.util.List;\r
import java.util.Map;\r
\r
-import javax.imageio.spi.ServiceRegistry;\r
-\r
+import jp.naist.se.stigmata.BirthmarkEnvironment;\r
import jp.naist.se.stigmata.ComparisonPairFilter;\r
import jp.naist.se.stigmata.ComparisonPairFilterSet;\r
import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
private Map<String, ComparisonPairFilterSet> filters = new HashMap<String, ComparisonPairFilterSet>();\r
private ComparisonPairFilterManager parent;\r
\r
- public ComparisonPairFilterManager(ComparisonPairFilterManager parent){\r
+ public ComparisonPairFilterManager(BirthmarkEnvironment env, ComparisonPairFilterManager parent){\r
this.parent = parent;\r
+ for(Iterator<ComparisonPairFilterSpi> i = env.lookupProviders(ComparisonPairFilterSpi.class); i.hasNext(); ){\r
+ ComparisonPairFilterSpi service = i.next();\r
+ if(getService(service.getFilterName()) != null){\r
+ services.put(service.getFilterName(), service);\r
+ }\r
+ }\r
}\r
\r
- public ComparisonPairFilterManager(){\r
- for(Iterator<ComparisonPairFilterSpi> i = ServiceRegistry.lookupProviders(ComparisonPairFilterSpi.class); i.hasNext(); ){\r
+ public ComparisonPairFilterManager(BirthmarkEnvironment env){\r
+ for(Iterator<ComparisonPairFilterSpi> i = env.lookupProviders(ComparisonPairFilterSpi.class); i.hasNext(); ){\r
ComparisonPairFilterSpi service = i.next();\r
services.put(service.getFilterName(), service);\r
}\r
import java.util.Iterator;\r
import java.util.Map;\r
import javax.imageio.spi.ServiceRegistry;\r
+\r
+import jp.naist.se.stigmata.BirthmarkEnvironment;\r
import jp.naist.se.stigmata.format.csv.CsvResultFormatService;\r
import jp.naist.se.stigmata.spi.ResultFormatSpi;\r
\r
private FormatManager(){\r
for(Iterator<ResultFormatSpi> i = ServiceRegistry.lookupProviders(ResultFormatSpi.class); i.hasNext(); ){\r
ResultFormatSpi spi = i.next();\r
- formats.put(spi.getFormat(), spi);\r
+ addService(spi);\r
+ }\r
+ }\r
+\r
+ public static void updateServices(BirthmarkEnvironment environment){\r
+ FormatManager instance = getInstance();\r
+ for(Iterator<ResultFormatSpi> i = environment.lookupProviders(ResultFormatSpi.class); i.hasNext(); ){\r
+ ResultFormatSpi spi = i.next();\r
+ instance.addService(spi);\r
}\r
}\r
\r
public ResultFormatSpi getService(String format){\r
return formats.get(format);\r
}\r
+\r
+ private void addService(ResultFormatSpi service){\r
+ formats.put(service.getFormat(), service);\r
+ }\r
}\r
import java.util.Iterator;\r
import java.util.List;\r
\r
-import javax.imageio.spi.ServiceRegistry;\r
import javax.swing.Box;\r
import javax.swing.BoxLayout;\r
import javax.swing.DefaultListModel;\r
\r
public void initData(){\r
comparator.addItem("");\r
- for(Iterator<BirthmarkComparatorSpi> i = ServiceRegistry.lookupProviders(BirthmarkComparatorSpi.class); i.hasNext();){\r
+ for(Iterator<BirthmarkComparatorSpi> i = stigmata.getEnvironment().lookupProviders(BirthmarkComparatorSpi.class); i.hasNext();){\r
BirthmarkComparatorSpi service = i.next();\r
comparator.addItem(service.getComparatorClassName());\r
}\r
extractor.addItem("");\r
- for(Iterator<BirthmarkExtractorSpi> i = ServiceRegistry.lookupProviders(BirthmarkExtractorSpi.class); i.hasNext();){\r
+ for(Iterator<BirthmarkExtractorSpi> i = stigmata.getEnvironment().lookupProviders(BirthmarkExtractorSpi.class); i.hasNext();){\r
BirthmarkExtractorSpi service = i.next();\r
extractor.addItem(service.getExtractorClassName());\r
}\r
import java.util.List;\r
import java.util.Map;\r
\r
-import javax.imageio.spi.ServiceRegistry;\r
import javax.swing.Box;\r
import javax.swing.JButton;\r
import javax.swing.JComboBox;\r
import javax.swing.JPanel;\r
\r
import jp.naist.se.stigmata.ComparisonPairFilter;\r
-import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
import jp.naist.se.stigmata.spi.BirthmarkSpi;\r
+import jp.naist.se.stigmata.spi.ComparisonPairFilterSpi;\r
import jp.naist.se.stigmata.ui.swing.BirthmarkServiceListener;\r
import jp.naist.se.stigmata.ui.swing.Messages;\r
import jp.naist.se.stigmata.ui.swing.StigmataFrame;\r
cardComponent.add(dummyPanel, "");\r
combo.addItem("");\r
\r
- for(Iterator<ComparisonPairFilterComponentService> i = ServiceRegistry.lookupProviders(ComparisonPairFilterComponentService.class); i.hasNext();){\r
+ \r
+ for(Iterator<ComparisonPairFilterComponentService> i = stigmata.getEnvironment().lookupProviders(ComparisonPairFilterComponentService.class); i.hasNext();){\r
ComparisonPairFilterComponentService service = i.next();\r
String name = service.getDisplayFilterName();\r
\r
\r
Birthmark birthmark = array[0].getBirthmark("uc");\r
Assert.assertEquals("uc", birthmark.getType());\r
- Assert.assertEquals(11, birthmark.getElementCount());\r
+ Assert.assertEquals(18, birthmark.getElementCount());\r
\r
BirthmarkElement[] elements = birthmark.getElements();\r
int index = 0;\r
Assert.assertEquals("java.io.File", elements[index++].getValue());\r
+ Assert.assertEquals("java.io.FileFilter", elements[index++].getValue());\r
Assert.assertEquals("java.io.FileInputStream", elements[index++].getValue());\r
+ Assert.assertEquals("java.io.FileWriter", elements[index++].getValue());\r
Assert.assertEquals("java.io.InputStream", elements[index++].getValue());\r
+ Assert.assertEquals("java.io.PrintWriter", elements[index++].getValue());\r
+ Assert.assertEquals("java.io.Writer", elements[index++].getValue());\r
Assert.assertEquals("java.lang.Class", elements[index++].getValue());\r
+ Assert.assertEquals("java.lang.ClassLoader", elements[index++].getValue());\r
Assert.assertEquals("java.lang.Object", elements[index++].getValue());\r
Assert.assertEquals("java.lang.String", elements[index++].getValue());\r
Assert.assertEquals("java.lang.System", elements[index++].getValue());\r
+ Assert.assertEquals("java.net.URI", elements[index++].getValue());\r
+ Assert.assertEquals("java.net.URL", elements[index++].getValue());\r
+ Assert.assertEquals("java.net.URLClassLoader", elements[index++].getValue());\r
Assert.assertEquals("java.util.ArrayList", elements[index++].getValue());\r
Assert.assertEquals("java.util.Iterator", elements[index++].getValue());\r
Assert.assertEquals("java.util.List", elements[index++].getValue());\r
- Assert.assertEquals("javax.imageio.spi.ServiceRegistry", elements[index++].getValue());\r
}\r
\r
@Test\r