1 package eu.fbk.rdfpro;
2
3 import java.util.List;
4
5 import javax.script.Invocable;
6 import javax.script.ScriptContext;
7 import javax.script.ScriptEngine;
8 import javax.script.ScriptEngineFactory;
9 import javax.script.ScriptEngineManager;
10
11 import org.junit.Test;
12 import org.openrdf.model.Statement;
13 import org.openrdf.model.impl.StatementImpl;
14 import org.openrdf.model.impl.URIImpl;
15 import org.openrdf.model.vocabulary.OWL;
16 import org.openrdf.model.vocabulary.RDF;
17 import org.openrdf.rio.RDFHandler;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
20
21 import eu.fbk.rdfpro.util.Tracker;
22
23 public class ScriptTest {
24
25 private static final Logger LOGGER = LoggerFactory.getLogger(ScriptTest.class);
26
27 private static final String SCRIPT = "var k = new org.openrdf.model.impl.URIImpl(\"ex:blabla\"); logger.info(pippo); function filter (s, h) { if (s.getSubject().equals(new org.openrdf.model.impl.URIImpl(\"ex:blabla\"))) { print(1); } h.handleStatement(s); }";
28
29
30
31
32 @Test
33 public void test() throws Throwable {
34 final ScriptEngineManager manager = new ScriptEngineManager();
35 final List<ScriptEngineFactory> factories = manager.getEngineFactories();
36
37 for (final ScriptEngineFactory factory : factories) {
38
39 System.out.println("ScriptEngineFactory Info");
40
41 final String engName = factory.getEngineName();
42 final String engVersion = factory.getEngineVersion();
43 final String langName = factory.getLanguageName();
44 final String langVersion = factory.getLanguageVersion();
45
46 System.out.printf("\tScript Engine: %s (%s)%n", engName, engVersion);
47
48 final List<String> engNames = factory.getNames();
49 for (final String name : engNames) {
50 System.out.printf("\tEngine Alias: %s%n", name);
51 }
52
53 System.out.printf("\tLanguage: %s (%s)%n", langName, langVersion);
54
55 }
56
57 final ScriptEngine engine = manager.getEngineByExtension("js");
58 engine.getContext().setAttribute("logger", LOGGER, ScriptContext.ENGINE_SCOPE);
59 engine.eval("var pippo=\"ouch\";\n");
60 engine.eval(SCRIPT);
61 @SuppressWarnings("unchecked")
62 final Filter<Statement> filter = ((Invocable) engine).getInterface(Filter.class);
63 final RDFHandler handler = RDFProcessors.track(
64 new Tracker(LOGGER, "Started", "Done %d %d", "%d %d %d")).wrap(RDFHandlers.NIL);
65 handler.startRDF();
66 for (int i = 0; i < 100000000; ++i) {
67 final Statement statement = new StatementImpl(new URIImpl("ex:entity" + i), RDF.TYPE,
68 OWL.THING);
69
70 filter.filter(statement, handler);
71 }
72 handler.endRDF();
73 }
74
75 public interface Filter<T> {
76
77 void filter(Statement T, RDFHandler handler);
78
79 }
80
81 }