Revision: 87
http://polepos.svn.sourceforge.net/polepos/?rev=87&view=rev
Author: patrickroemer
Date: 2009-07-21 13:22:20 +0000 (Tue, 21 Jul 2009)
Log Message:
-----------
acv/pr: refactor reporter to interface and allow runners to specify reporters
Modified Paths:
--------------
trunk/polepos/src/org/polepos/RunSeason.java
trunk/polepos/src/org/polepos/framework/PropertiesHandler.java
trunk/polepos/src/org/polepos/framework/Racer.java
trunk/polepos/src/org/polepos/framework/TurnResult.java
trunk/polepos/src/org/polepos/framework/TurnSetup.java
trunk/polepos/src/org/polepos/reporters/CSVReporter.java
trunk/polepos/src/org/polepos/reporters/GraphReporter.java
trunk/polepos/src/org/polepos/reporters/HTMLReporter.java
trunk/polepos/src/org/polepos/reporters/PDFReporter.java
trunk/polepos/src/org/polepos/reporters/PlainTextReporter.java
trunk/polepos/src/org/polepos/runner/AbstractRunner.java
trunk/polepos/src/org/polepos/runner/db4o/AbstractDb4oVersionsRaceRunner.java
trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java
Added Paths:
-----------
trunk/polepos/src/org/polepos/reporters/DefaultReporterFactory.java
trunk/polepos/src/org/polepos/reporters/Reporter.java
trunk/polepos/src/org/polepos/reporters/ReporterBase.java
Removed Paths:
-------------
trunk/polepos/src/org/polepos/reporters/Reporter.java
Modified: trunk/polepos/src/org/polepos/RunSeason.java
===================================================================
--- trunk/polepos/src/org/polepos/RunSeason.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/RunSeason.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -26,6 +26,7 @@
import org.polepos.circuits.sepang.Sepang;
import org.polepos.framework.Circuit;
import org.polepos.framework.Team;
+import org.polepos.reporters.*;
import org.polepos.runner.AbstractRunner;
import org.polepos.teams.db4o.Db4oTeam;
import org.polepos.teams.hibernate.HibernateTeam;
@@ -65,4 +66,9 @@
};
}
+ @Override
+ protected Reporter[] reporters() {
+ return DefaultReporterFactory.defaultReporters();
+ }
+
}
Modified: trunk/polepos/src/org/polepos/framework/PropertiesHandler.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/PropertiesHandler.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/framework/PropertiesHandler.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -19,10 +19,7 @@
package org.polepos.framework;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
+import java.io.*;
import java.util.Properties;
import java.util.StringTokenizer;
@@ -81,7 +78,14 @@
if(file.exists()){
_properties.load(new FileInputStream(file));
}else{
- _properties.load( PropertiesHandler.class.getClassLoader().getResourceAsStream( _fileName ) );
+ InputStream propertiesStream = PropertiesHandler.class.getClassLoader().getResourceAsStream( _fileName );
+ if(propertiesStream != null) {
+ _properties.load( propertiesStream );
+ }
+ else {
+ Log.logger.warning( "Cannot load default properties." );
+ return false;
+ }
}
}
catch ( IOException ioex )
Modified: trunk/polepos/src/org/polepos/framework/Racer.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/Racer.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/framework/Racer.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -29,22 +29,18 @@
private final List<Team> teams;
- public Racer(List<Circuit> circuits_, List<Team> teams_) {
+
+ private final List<Reporter> reporters;
+
+
+ public Racer(List<Circuit> circuits_, List<Team> teams_, List<Reporter> reporters_) {
circuits = circuits_;
teams = teams_;
+ reporters = reporters_;
}
-
- public Racer(Circuit[] circuits_, Team[] teams_) {
- circuits = new ArrayList <Circuit>();
- for(Circuit circuit : circuits_){
- circuits.add(circuit);
- }
-
- teams = new ArrayList <Team>();
- for(Team team : teams_){
- teams.add(team);
- }
+ public Racer(Circuit[] circuits_, Team[] teams_, Reporter[] reporters_) {
+ this(Arrays.asList(circuits_), Arrays.asList(teams_), Arrays.asList(reporters_));
}
public void run() {
@@ -53,9 +49,6 @@
long start = System.currentTimeMillis();
- Reporter[] reporters = new Reporter[] { new PlainTextReporter(), new PDFReporter(),
- new CSVReporter(), new HTMLReporter()};
-
for (Reporter reporter : reporters) {
reporter.startSeason();
}
@@ -110,8 +103,10 @@
System.out.println("The F1 season was run O.K. without lethal accidents.");
System.out.println("****************************************************\n");
System.out.println("Overall time taken: " + duration + "ms\n");
- System.out.println("All output from this benchmark run can be found in:");
- System.out.println(reporters[0].path());
+ System.out.println("Reporters present:");
+ for (Reporter reporter : reporters) {
+ System.out.println(reporter);
+ }
this.notify();
}
Modified: trunk/polepos/src/org/polepos/framework/TurnResult.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/TurnResult.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/framework/TurnResult.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -27,7 +27,7 @@
/**
* collects all the results for a turn.
*/
-public class TurnResult
+public class TurnResult implements Iterable<Result>
{
private List<Result> results = new ArrayList<Result>();
@@ -35,21 +35,14 @@
results.add(result);
}
- public void requestTaskNames(Reporter reporter) {
- int num = 1;
- Iterator i = results.iterator();
- while(i.hasNext()){
- Result result = (Result)i.next();
- reporter.reportTaskName(num ++, result.getName());
- }
- }
-
- public void report(Reporter reporter) {
+ public void report(ReporterBase reporter) {
for(Result res : results){
reporter.reportResult(res);
}
}
-
+ public Iterator<Result> iterator() {
+ return results.iterator();
+ }
}
Modified: trunk/polepos/src/org/polepos/framework/TurnSetup.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/TurnSetup.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/framework/TurnSetup.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -32,14 +32,14 @@
private final static PropertiesHandler mProperties = new PropertiesHandler(Settings.CIRCUIT);
- private final static String OBJECTCOUNT = "objects";
- private final static String SELECTCOUNT = "selects";
- private final static String UPDATECOUNT = "updates";
- private final static String COMMITCOUNT = "commits";
- private final static String TREEWIDTH = "width";
- private final static String TREEDEPTH = "depth";
- private final static String COMMITINTERVAL = "commitinterval";
- private final static String OBJECTSIZE = "size";
+ public final static String OBJECTCOUNT = "objects";
+ public final static String SELECTCOUNT = "selects";
+ public final static String UPDATECOUNT = "updates";
+ public final static String COMMITCOUNT = "commits";
+ public final static String TREEWIDTH = "width";
+ public final static String TREEDEPTH = "depth";
+ public final static String COMMITINTERVAL = "commitinterval";
+ public final static String OBJECTSIZE = "size";
private final static String[] AVAILABLE_SETTINGS = new String[]{
OBJECTCOUNT,
@@ -54,6 +54,15 @@
private Map<SetupProperty, SetupProperty> mSettings = new Hashtable<SetupProperty, SetupProperty>();
+ public TurnSetup() {
+ }
+
+ public TurnSetup(SetupProperty... properties) {
+ for (SetupProperty property : properties) {
+ mSettings.put(property, property);
+ }
+ }
+
private TurnSetup deepClone(){
TurnSetup res = null;
try {
Modified: trunk/polepos/src/org/polepos/reporters/CSVReporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/CSVReporter.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/reporters/CSVReporter.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -27,8 +27,13 @@
public class CSVReporter extends GraphReporter {
- private final static String TAB = "\t";
+ public CSVReporter(String path) {
+ super(path);
+
+ }
+ private final static String TAB = "\t";
+
protected void report(Graph graph){
new File(path()).mkdirs();
Added: trunk/polepos/src/org/polepos/reporters/DefaultReporterFactory.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/DefaultReporterFactory.java (rev 0)
+++ trunk/polepos/src/org/polepos/reporters/DefaultReporterFactory.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -0,0 +1,25 @@
+/* Copyright (C) 2009 Versant Inc. http://www.db4o.com */
+package org.polepos.reporters;
+
+import java.io.*;
+
+
+public class DefaultReporterFactory {
+
+ public static Reporter[] defaultReporters() {
+ return new Reporter[] {
+ new PlainTextReporter(defaultReporterOutputPath()),
+ new PDFReporter(defaultReporterOutputPath()),
+ new CSVReporter(defaultReporterOutputPath()),
+ new HTMLReporter(subfolderPath(defaultReporterOutputPath(), "html")),
+ };
+ }
+
+ public static String defaultReporterOutputPath() {
+ return new File(System.getProperty("polepos.result.dir", "doc/results")).getAbsolutePath();
+ }
+
+ public static String subfolderPath(String root, String subfolder) {
+ return new File(new File(root), subfolder).getAbsolutePath();
+ }
+}
Property changes on: trunk/polepos/src/org/polepos/reporters/DefaultReporterFactory.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/polepos/src/org/polepos/reporters/GraphReporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/GraphReporter.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/reporters/GraphReporter.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -33,10 +33,14 @@
import org.polepos.util.*;
-public abstract class GraphReporter extends Reporter{
+public abstract class GraphReporter extends ReporterBase{
-
- private Map<CircuitLap,Graph> mGraphs;
+ public GraphReporter(String path) {
+ super(path);
+
+ }
+
+ private Map<CircuitLap,Graph> mGraphs;
private java.util.List<Circuit> mCircuits;
protected final DefaultCategoryDataset _overviewTimeDataset = new DefaultCategoryDataset();
protected final DefaultCategoryDataset _overviewMemoryDataset = new DefaultCategoryDataset();
@@ -56,12 +60,7 @@
}
@Override
- public String file() {
- return "F1Results.txt";
- }
-
- @Override
- public void reportTaskName(int number, String name){
+ public void reportTaskNames(String[] taskNames){
// do nothing
}
Modified: trunk/polepos/src/org/polepos/reporters/HTMLReporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/HTMLReporter.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/reporters/HTMLReporter.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -32,6 +32,12 @@
public class HTMLReporter extends GraphReporter {
+
+ public HTMLReporter(String path) {
+ super(path);
+
+ }
+
public final static String ENCODING = "utf-8";
private File outdir=null;
@@ -72,10 +78,6 @@
copyStylesheet();
}
- public String path() {
- return super.path() + "/html";
- }
-
private void setup() throws Exception {
outdir=new File(path());
outdir.mkdirs();
Modified: trunk/polepos/src/org/polepos/reporters/PDFReporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/PDFReporter.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/reporters/PDFReporter.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -33,6 +33,7 @@
public class PDFReporter extends GraphReporter {
+
private Circuit _circuit;
private Document _document;
private PdfWriter _writer;
@@ -42,7 +43,12 @@
private static final com.lowagie.text.Font h2Font = FontFactory.getFont(FontFactory.HELVETICA,12,Font.BOLD);
private static final com.lowagie.text.Font bigFont = FontFactory.getFont(FontFactory.HELVETICA,10,Font.BOLD);
private static final com.lowagie.text.Font smallFont = FontFactory.getFont(FontFactory.HELVETICA,9,Font.PLAIN);
-
+
+ public PDFReporter(String path) {
+ super(path);
+
+ }
+
protected void report(Graph graph) {
if(_document == null) {
setupDocument(path());
Modified: trunk/polepos/src/org/polepos/reporters/PlainTextReporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/PlainTextReporter.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/reporters/PlainTextReporter.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -25,11 +25,15 @@
import org.polepos.framework.*;
-public class PlainTextReporter extends Reporter{
+public class PlainTextReporter extends ReporterBase{
- protected PrintStream mOut;
+ protected PrintStream mOut;
private boolean mSetupReported;
+ public PlainTextReporter(String path) {
+ super(path);
+ }
+
@Override
public void startSeason() {
@@ -48,19 +52,19 @@
mOut.println( "Season started at " + new Date().toString() );
mOut.println( "===========================================================================================" );
}
-
+
@Override
public boolean append() {
return true;
}
- @Override
- public String file() {
+ private String file() {
return path() + "/F1Season.log";
}
@Override
public void noDriver(Team team, Circuit circuit) {
+ super.noDriver(team, circuit);
mOut.println("*** No driver for team " + team.name() + " in " + circuit.name() );
}
@@ -76,8 +80,10 @@
}
@Override
- public void reportTaskName(int number, String name){
- mOut.println("[" + number + "] " + name );
+ public void reportTaskNames(String[] taskNames){
+ for (int nameIdx = 0; nameIdx < taskNames.length; nameIdx++) {
+ mOut.println("[" + (nameIdx+1) + "] " + taskNames[nameIdx] );
+ }
}
@Override
Deleted: trunk/polepos/src/org/polepos/reporters/Reporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/Reporter.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/reporters/Reporter.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -1,108 +0,0 @@
-/*
-This file is part of the PolePosition database benchmark
-http://www.polepos.org
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public
-License along with this program; if not, write to the Free
-Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-MA 02111-1307, USA. */
-
-package org.polepos.reporters;
-
-import java.io.*;
-
-import org.polepos.framework.*;
-
-
-/**
- * base class for reporting the results.
- */
-public abstract class Reporter {
-
- protected Car _car;
-
- protected Team _team;
-
- protected TeamCar _teamCar;
-
- private boolean _taskListPrinted;
-
- public Reporter(){
- new File(path()).mkdirs();
- }
-
- public abstract String file();
-
- public abstract boolean append();
-
- public abstract void startSeason();
-
- public abstract void endSeason();
-
- public String path(){
- String reportDir = System.getProperty("polepos.result.dir", "doc/results");
- return reportDir;
- }
-
- public void sendToCircuit(Circuit circuit) {
- _taskListPrinted = false;
- }
-
- public void noDriver(Team team, Circuit circuit) {
- // default: do nothing
- }
-
- public void report( Team team, Car car, TurnSetup[] setups, TurnResult[] results ){
-
- if(! _taskListPrinted){
- results[0].requestTaskNames(this);
- _taskListPrinted = true;
- }
-
- if(team != _team){
- _team = team;
- reportTeam(team);
- }
-
- if(car != _car){
- _car = car;
- reportCar(car);
- }
-
- _teamCar = new TeamCar(team, car);
-
- reportSetups(setups);
-
- for ( int i = 0; i < results.length; i++ ){
- beginResults();
- if(results[i] != null){
- results[i].report(this);
- }
- }
- }
-
- public abstract void reportTaskName(int number, String name);
-
- protected abstract void reportTeam(Team team);
-
- protected abstract void reportCar(Car car);
-
- public void reportSetups(TurnSetup[] setups){
-
- }
-
- protected abstract void beginResults();
-
- public abstract void reportResult(Result result);
-
-}
Added: trunk/polepos/src/org/polepos/reporters/Reporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/Reporter.java (rev 0)
+++ trunk/polepos/src/org/polepos/reporters/Reporter.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -0,0 +1,18 @@
+/* Copyright (C) 2009 Versant Inc. http://www.db4o.com */
+package org.polepos.reporters;
+
+import org.polepos.framework.*;
+
+public interface Reporter {
+
+ void startSeason();
+
+ void endSeason();
+
+ void sendToCircuit(Circuit circuit);
+
+ void noDriver(Team team, Circuit circuit);
+
+ void report(Team team, Car car, TurnSetup[] setups, TurnResult[] results);
+
+}
\ No newline at end of file
Property changes on: trunk/polepos/src/org/polepos/reporters/Reporter.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Copied: trunk/polepos/src/org/polepos/reporters/ReporterBase.java (from rev 86, trunk/polepos/src/org/polepos/reporters/Reporter.java)
===================================================================
--- trunk/polepos/src/org/polepos/reporters/ReporterBase.java (rev 0)
+++ trunk/polepos/src/org/polepos/reporters/ReporterBase.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -0,0 +1,122 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+package org.polepos.reporters;
+
+import java.io.*;
+
+import org.polepos.framework.*;
+
+
+/**
+ * base class for reporting the results.
+ */
+public abstract class ReporterBase implements Reporter {
+
+ protected Car _car;
+
+ protected Team _team;
+
+ protected TeamCar _teamCar;
+
+ private boolean _taskListPrinted;
+
+ private String _path;
+
+ private Circuit _circuit;
+
+ public ReporterBase(String path){
+ _path = path;
+ new File(_path).mkdirs();
+ }
+
+ public abstract boolean append();
+
+ public abstract void startSeason();
+
+ public abstract void endSeason();
+
+ public final String path(){
+ return _path;
+ }
+
+ public void sendToCircuit(Circuit circuit) {
+ _taskListPrinted = false;
+ _circuit = circuit;
+ }
+
+ public void noDriver(Team team, Circuit circuit) {
+ _circuit = circuit;
+ // default: do nothing
+ }
+
+ public void report( Team team, Car car, TurnSetup[] setups, TurnResult[] results ){
+
+ if(! _taskListPrinted){
+ String[] taskNames = new String[_circuit.laps().size()];
+ int lapIdx = 0;
+ for (Lap lap : _circuit.laps()) {
+ taskNames[lapIdx] = lap.name();
+ lapIdx++;
+ }
+ reportTaskNames(taskNames);
+ _taskListPrinted = true;
+ }
+
+ if(team != _team){
+ _team = team;
+ reportTeam(team);
+ }
+
+ if(car != _car){
+ _car = car;
+ reportCar(car);
+ }
+
+ _teamCar = new TeamCar(team, car);
+
+ reportSetups(setups);
+
+ for ( int i = 0; i < results.length; i++ ){
+ beginResults();
+ if(results[i] != null){
+ results[i].report(this);
+ }
+ }
+ }
+
+ public abstract void reportTaskNames(String[] taskNames);
+
+ protected abstract void reportTeam(Team team);
+
+ protected abstract void reportCar(Car car);
+
+ public void reportSetups(TurnSetup[] setups){
+
+ }
+
+ protected abstract void beginResults();
+
+ public abstract void reportResult(Result result);
+
+ @Override
+ public String toString() {
+ return getClass().getName() + ": output in " + path();
+ }
+}
Modified: trunk/polepos/src/org/polepos/runner/AbstractRunner.java
===================================================================
--- trunk/polepos/src/org/polepos/runner/AbstractRunner.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/runner/AbstractRunner.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -20,15 +20,18 @@
package org.polepos.runner;
import org.polepos.framework.*;
+import org.polepos.reporters.*;
public abstract class AbstractRunner {
public void run() {
- new Racer(circuits(), teams()).run();
+ new Racer(circuits(), teams(), reporters()).run();
}
- public abstract Circuit[] circuits();
+ protected abstract Circuit[] circuits();
- public abstract Team[] teams();
+ protected abstract Team[] teams();
+ protected abstract Reporter[] reporters();
+
}
\ No newline at end of file
Modified: trunk/polepos/src/org/polepos/runner/db4o/AbstractDb4oVersionsRaceRunner.java
===================================================================
--- trunk/polepos/src/org/polepos/runner/db4o/AbstractDb4oVersionsRaceRunner.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/runner/db4o/AbstractDb4oVersionsRaceRunner.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -25,6 +25,7 @@
import java.net.*;
import org.polepos.framework.*;
+import org.polepos.reporters.*;
import org.polepos.runner.*;
import org.polepos.teams.db4o.*;
@@ -60,27 +61,28 @@
return db4oTeam(jarName, options, drivers(), null) ;
}
- private Team db4oTeam(String jarName, int[] options, Driver[] drivers, ConfigurationSetting[] configurations) {
- return db4oTeam(workspace(), jarName, options, drivers, configurations) ;
- }
-
- private Team db4oTeam(String workspace, String jarName, int[] options, Driver[] drivers, ConfigurationSetting[] configurations) {
+ @Override
+ protected Reporter[] reporters() {
+ return DefaultReporterFactory.defaultReporters();
+ }
+
+ private Team db4oTeam(String jarName, int[] options, Driver[] drivers, ConfigurationSetting[] configurations) {
try {
Team team = null;
if(jarName == null){
- team = (Team)Class.forName(Db4oTeam.class.getName()).newInstance();
+ team = instantiateTeam((Class<? extends Team>)Class.forName(Db4oTeam.class.getName()));
}else{
String[] prefixes={"com.db4o.","org.polepos.teams.db4o."};
+
+ File[] projectPaths = projectPaths();
+ URL[] urls = new URL[projectPaths.length + 1];
+ for (int projectIdx = 0; projectIdx < projectPaths.length; projectIdx++) {
+ urls[projectIdx] = new File(projectPaths[projectIdx], "bin").toURI().toURL();
+ }
+ urls[urls.length - 1] = jarURL(workspace(), jarName);
- URL poleposClassURL=new File(workspace + "/polepos/bin").toURL();
-
- File db4oPoleposBin = new File(workspace + "/db4opolepos/bin");
- URL classURL= db4oPoleposBin.exists() ? db4oPoleposBin.toURL() : poleposClassURL;
-
- URL jarURL = jarURL(workspace, jarName);
-
- ClassLoader loader=new VersionClassLoader(new URL[]{poleposClassURL, classURL, jarURL},prefixes);
- team = (Team)loader.loadClass(Db4oTeam.class.getName()).newInstance();
+ ClassLoader loader=new VersionClassLoader(urls, prefixes);
+ team = instantiateTeam((Class<? extends Team>)loader.loadClass(Db4oTeam.class.getName()));
}
team.configure(options, configurations);
if(jarName != null){
@@ -99,15 +101,18 @@
}
}
+ private Team instantiateTeam(Class<? extends Team> clazz) throws Exception {
+ Constructor<? extends Team> constr = clazz.getConstructor(new Class<?>[] { Boolean.TYPE });
+ return constr.newInstance(new Object[] { Boolean.FALSE });
+ }
+
private URL jarURL(String workspace, String jarName) throws MalformedURLException{
- File file = new File(workspace + "/polepos/lib/" + jarName);
- if( file.exists()){
- return file.toURL();
- }
- file = new File(workspace + "/db4opolepos/lib/" + jarName);
- if( file.exists()){
- return file.toURL();
- }
+ for (File jarPath : libPaths()) {
+ File file = new File(jarPath, jarName);
+ if( file.exists()){
+ return file.toURL();
+ }
+ }
return null;
}
@@ -133,4 +138,20 @@
method.invoke(onObject, new Object[]{param});
}
+ protected File[] libPaths() {
+ File[] projectPaths = projectPaths();
+ File[] libPaths = new File[projectPaths.length];
+ for (int pathIdx = 0; pathIdx < projectPaths.length; pathIdx++) {
+ libPaths[pathIdx] = new File(projectPaths[pathIdx], "lib");
+ }
+ return libPaths;
+ }
+
+ protected File[] projectPaths() {
+ return new File[]{ workspaceFile("polepos"), workspaceFile("db4opolepos") };
+ }
+
+ private File workspaceFile(String path) {
+ return new File(workspace(), path);
+ }
}
Modified: trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java 2009-04-27 14:43:15 UTC (rev 86)
+++ trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java 2009-07-21 13:22:20 UTC (rev 87)
@@ -59,11 +59,17 @@
public static final String PATH = FOLDER + "/" + DB4O_FILE;
- public Db4oTeam() {
+ public Db4oTeam(boolean loadDrivers) {
_drivers = new ArrayList<Driver>();
- addDrivers();
+ if(loadDrivers) {
+ addDrivers();
+ }
}
-
+
+ public Db4oTeam() {
+ this(true);
+ }
+
private void addDrivers(){
addDriver(new MelbourneDb4o());
addDriver(new SepangDb4o());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|