From c53d87b90c570c1506e2bebd513c8a578f22a6a6 Mon Sep 17 00:00:00 2001 From: ZsoltKovari Date: Tue, 20 Oct 2015 21:06:29 +0200 Subject: [PATCH] Extend Jena --- .../benchmark/jena/JenaBenchmarkCase.java | 24 +++++++++++++-- .../jena/analyzer/JenaQueryAnalyzer.java | 24 +++++++++++++++ .../benchmark/jena/checkers/JenaChecker.java | 29 +++++++++++++++---- .../benchmark/jena/match/JenaMatch.java | 6 ++++ .../match/schedule/JenaNavigationsMatch.java | 25 ++++++++++++++++ .../match/schedule/JenaStationsPathMatch.java | 25 ++++++++++++++++ 6 files changed, 126 insertions(+), 7 deletions(-) create mode 100644 hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/analyzer/JenaQueryAnalyzer.java create mode 100644 hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/match/schedule/JenaNavigationsMatch.java create mode 100644 hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/match/schedule/JenaStationsPathMatch.java diff --git a/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/JenaBenchmarkCase.java b/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/JenaBenchmarkCase.java index be2683a40..c6feca8ed 100644 --- a/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/JenaBenchmarkCase.java +++ b/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/JenaBenchmarkCase.java @@ -14,7 +14,9 @@ import hu.bme.mit.trainbenchmark.benchmark.benchmarkcases.BenchmarkCase; import hu.bme.mit.trainbenchmark.benchmark.benchmarkcases.layers.AnalyzedBenchmarkCase; +import hu.bme.mit.trainbenchmark.benchmark.benchmarkcases.layers.VersatileBenchmarkCase; import hu.bme.mit.trainbenchmark.benchmark.jena.analyzer.JenaModelAnalyzer; +import hu.bme.mit.trainbenchmark.benchmark.jena.analyzer.JenaQueryAnalyzer; import hu.bme.mit.trainbenchmark.benchmark.jena.checkers.JenaChecker; import hu.bme.mit.trainbenchmark.benchmark.jena.driver.JenaDriver; import hu.bme.mit.trainbenchmark.benchmark.jena.match.JenaMatch; @@ -28,11 +30,13 @@ import com.hp.hpl.jena.rdf.model.Resource; public class JenaBenchmarkCase extends BenchmarkCase implements - AnalyzedBenchmarkCase { + AnalyzedBenchmarkCase, VersatileBenchmarkCase { protected JenaDriver jenaDriver; protected RDFBenchmarkConfig rbc; protected JenaModelAnalyzer jenaModelAnalyzer; + protected JenaQueryAnalyzer jenaQueryAnalyzer; + protected JenaChecker jenaChecker; protected RDFBenchmarkConfig getRDFBenchmarkConfig() { return (RDFBenchmarkConfig) benchmarkConfig; @@ -42,7 +46,7 @@ protected RDFBenchmarkConfig getRDFBenchmarkConfig() { protected void init() throws IOException { rbc = (RDFBenchmarkConfig) benchmarkConfig; driver = jenaDriver = new JenaDriver(); - checker = new JenaChecker(jenaDriver, benchmarkConfig); + checker = jenaChecker = new JenaChecker(jenaDriver, benchmarkConfig); transformation = JenaTransformation.newInstance(jenaDriver, benchmarkConfig.getQuery(), benchmarkConfig.getScenario()); @@ -57,6 +61,22 @@ protected Comparator getMatchComparator() { public void initAnalyzer() { modelAnalyzer = jenaModelAnalyzer = new JenaModelAnalyzer(jenaDriver); jenaModelAnalyzer.setBenchmarkConfig(rbc); + queryAnalyzer = jenaQueryAnalyzer = new JenaQueryAnalyzer(jenaDriver); + jenaQueryAnalyzer.setQueryString(jenaChecker.getQueryDefinition()); + } + + @Override + public void modify() throws IOException { + if (benchmarkConfig.isVersatile()) { + final String query = queryInitializer + .resolveQuery(rbc.getWorkspacePath() + + "/hu.bme.mit.trainbenchmark.benchmark.rdf/src/main/resources/queries/", + ".sparql"); + jenaChecker.setQueryDefinition(query); + jenaChecker.setQuery(query); + jenaQueryAnalyzer.setQueryString(query); + } + } } diff --git a/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/analyzer/JenaQueryAnalyzer.java b/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/analyzer/JenaQueryAnalyzer.java new file mode 100644 index 000000000..ea1c6cc4a --- /dev/null +++ b/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/analyzer/JenaQueryAnalyzer.java @@ -0,0 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2010-2015, Benedek Izso, Gabor Szarnyas, Istvan Rath and Daniel Varro + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Benedek Izso - initial API and implementation + * Gabor Szarnyas - initial API and implementation + *******************************************************************************/ + +package hu.bme.mit.trainbenchmark.benchmark.jena.analyzer; + +import hu.bme.mit.trainbenchmark.benchmark.jena.driver.JenaDriver; +import hu.bme.mit.trainbenchmark.benchmark.rdf.analyzer.RDFQueryAnalyzer; + +public class JenaQueryAnalyzer extends RDFQueryAnalyzer { + + public JenaQueryAnalyzer(JenaDriver driver) { + super(driver); + } + +} diff --git a/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/checkers/JenaChecker.java b/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/checkers/JenaChecker.java index 1acb7ad5b..622f9b56c 100644 --- a/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/checkers/JenaChecker.java +++ b/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/checkers/JenaChecker.java @@ -16,11 +16,14 @@ import hu.bme.mit.trainbenchmark.benchmark.jena.driver.JenaDriver; import hu.bme.mit.trainbenchmark.benchmark.jena.match.JenaMatch; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import org.apache.commons.io.FileUtils; + import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.query.QueryExecutionFactory; @@ -33,21 +36,26 @@ public class JenaChecker extends Checker { protected JenaDriver jenaDriver; protected Query query; protected hu.bme.mit.trainbenchmark.constants.Query tbQuery; + protected String queryDefinition; public JenaChecker(final JenaDriver jenaDriver, final BenchmarkConfig bc) throws IOException { super(); this.jenaDriver = jenaDriver; - final String queryPath = bc.getWorkspacePath() + "/hu.bme.mit.trainbenchmark.benchmark.rdf/src/main/resources/queries/" + bc.getQuery() - + ".sparql"; + final String queryPath = bc.getWorkspacePath() + + "/hu.bme.mit.trainbenchmark.benchmark.rdf/src/main/resources/queries/" + + bc.getQuery() + ".sparql"; tbQuery = bc.getQuery(); - - query = QueryFactory.read(queryPath); + this.queryDefinition = FileUtils.readFileToString(new File(queryPath)); + if (!bc.isVersatile()) { + query = QueryFactory.read(queryPath); + } } @Override public Collection check() throws IOException { final List matches = new ArrayList<>(); - try (QueryExecution queryExecution = QueryExecutionFactory.create(query, jenaDriver.getModel())) { + try (QueryExecution queryExecution = QueryExecutionFactory.create(query, + jenaDriver.getModel())) { final ResultSet resultSet = queryExecution.execSelect(); while (resultSet.hasNext()) { @@ -60,4 +68,15 @@ public Collection check() throws IOException { return matches; } + public void setQueryDefinition(String queryDefinition) { + this.queryDefinition = queryDefinition; + } + + public String getQueryDefinition() { + return queryDefinition; + } + + public void setQuery(String queryDefinition) { + query = QueryFactory.create(queryDefinition); + } } diff --git a/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/match/JenaMatch.java b/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/match/JenaMatch.java index 888f93111..2f25c588d 100644 --- a/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/match/JenaMatch.java +++ b/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/match/JenaMatch.java @@ -11,6 +11,8 @@ *******************************************************************************/ package hu.bme.mit.trainbenchmark.benchmark.jena.match; +import hu.bme.mit.trainbenchmark.benchmark.jena.match.schedule.JenaNavigationsMatch; +import hu.bme.mit.trainbenchmark.benchmark.jena.match.schedule.JenaStationsPathMatch; import hu.bme.mit.trainbenchmark.constants.Query; import com.hp.hpl.jena.query.QuerySolution; @@ -40,6 +42,10 @@ public static JenaMatch createMatch(final Query query, final QuerySolution qs) { return new JenaSwitchSensorMatch(qs); case SWITCHSET: return new JenaSwitchSetMatch(qs); + case STATIONSPATH: + return new JenaStationsPathMatch(qs); + case SCHEDULENAVIGATIONS: + return new JenaNavigationsMatch(qs); default: throw new UnsupportedOperationException("Pattern not supported: " + query); } diff --git a/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/match/schedule/JenaNavigationsMatch.java b/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/match/schedule/JenaNavigationsMatch.java new file mode 100644 index 000000000..9d90c305c --- /dev/null +++ b/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/match/schedule/JenaNavigationsMatch.java @@ -0,0 +1,25 @@ +package hu.bme.mit.trainbenchmark.benchmark.jena.match.schedule; + +import hu.bme.mit.trainbenchmark.benchmark.jena.match.JenaMatch; +import hu.bme.mit.trainbenchmark.benchmark.matches.schedule.ScheduleCountMatch; + +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.rdf.model.Resource; + +public class JenaNavigationsMatch extends JenaMatch implements ScheduleCountMatch { + + public JenaNavigationsMatch(QuerySolution qs) { + super(qs); + } + + @Override + public Object getCount() { + return null; + } + + @Override + public Resource[] toArray() { + return null; + } + +} diff --git a/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/match/schedule/JenaStationsPathMatch.java b/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/match/schedule/JenaStationsPathMatch.java new file mode 100644 index 000000000..d13a36bdb --- /dev/null +++ b/hu.bme.mit.trainbenchmark.benchmark.jena/src/main/java/hu/bme/mit/trainbenchmark/benchmark/jena/match/schedule/JenaStationsPathMatch.java @@ -0,0 +1,25 @@ +package hu.bme.mit.trainbenchmark.benchmark.jena.match.schedule; + +import hu.bme.mit.trainbenchmark.benchmark.jena.match.JenaMatch; +import hu.bme.mit.trainbenchmark.benchmark.matches.schedule.ScheduleCountMatch; + +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.rdf.model.Resource; + +public class JenaStationsPathMatch extends JenaMatch implements ScheduleCountMatch { + + public JenaStationsPathMatch(QuerySolution qs) { + super(qs); + } + + @Override + public Object getCount() { + return null; + } + + @Override + public Resource[] toArray() { + return null; + } + +}