From 0eb7131484a66922fbcddf11c7926999143f9b97 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr>
Date: Fri, 25 Nov 2011 11:40:58 +0000
Subject: [PATCH] - gen reengineering: simplified TestGenerator

---
 .../exmo/align/gen/ArbitraryTest.java         | 161 ----------
 .../exmo/align/gen/GenerateBenchmark.java     | 274 +++++-------------
 .../exmo/align/gen/OntologyModifier.java      |  57 ++--
 src/fr/inrialpes/exmo/align/gen/TestGen.java  |  53 ++--
 .../exmo/align/gen/TestGenerator.java         | 245 ++++++++++------
 .../gen/inter/AlignedOntologyGenerator.java   |   8 +-
 6 files changed, 280 insertions(+), 518 deletions(-)
 delete mode 100644 src/fr/inrialpes/exmo/align/gen/ArbitraryTest.java

diff --git a/src/fr/inrialpes/exmo/align/gen/ArbitraryTest.java b/src/fr/inrialpes/exmo/align/gen/ArbitraryTest.java
deleted file mode 100644
index bcb870d0..00000000
--- a/src/fr/inrialpes/exmo/align/gen/ArbitraryTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (C) 2011, INRIA
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Generates an arbitrary test.
- * The days of this class are counted: it is highly redundant with the first part of
- * GenerateBenchmark and should be merged with TestGenerator.
- */
-
-package fr.inrialpes.exmo.align.gen;
-
-//Java classes
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.File;
-import java.io.OutputStreamWriter;
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.nio.charset.Charset;
-import java.util.Properties;
-
-//Jena API classes
-import com.hp.hpl.jena.ontology.OntModel;
-import com.hp.hpl.jena.ontology.OntModelSpec;
-import com.hp.hpl.jena.rdf.model.ModelFactory;
-import com.hp.hpl.jena.rdf.model.RDFWriter;
-import com.hp.hpl.jena.util.FileManager;
-
-// Alignment API implementation classes
-import fr.inrialpes.exmo.align.impl.renderer.RDFRendererVisitor;
-import fr.inrialpes.exmo.ontowrap.jena25.JENAOntology;
-
-import org.semanticweb.owl.align.Alignment;
-import org.semanticweb.owl.align.AlignmentVisitor;
-
-public class ArbitraryTest {
-    //private String fileName;                                                    //the initial file
-    //private String testNumber;                                                  //the test number
-    //private Properties parameters;                                              //the parameters
-    public final String namespace = "http://oaei.ontologymatching.org/2011/gen/";
-
-    //constructor
-    public ArbitraryTest() {
-        //this.fileName = fileName;
-        //this.testNumber = testNumber;
-        //parameters = params;
-    }
-
-    //get the prefix to build the namespace
-    public String getPrefix( String fileName ) {
-        return fileName.substring(0, fileName.lastIndexOf("."));
-    }
-
-    //get the uri
-    public String getURI( String fileName, String testNumber ) {
-        return this.namespace + getPrefix(fileName) + "/" + testNumber + "/" + fileName + "#";
-    }
-
-    //load ontology
-    public OntModel loadOntology ( String fileName ) {
-        InputStream in = FileManager.get().open( fileName );
-        OntModel model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );
-        model.read( in, null );
-        return model;
-    }
-
-    //write ontology
-    public static void writeOntology( OntModel model, String destFile, String ns ) {
-        try {
-            File f = new File(destFile);
-            FileOutputStream fout = new FileOutputStream(f);
-            Charset defaultCharset = Charset.forName("UTF8");
-            RDFWriter writer = model.getWriter("RDF/XML-ABBREV");
-            writer.setProperty("showXmlDeclaration","true");
-            model.setNsPrefix("", ns);
-
-            model.createOntology(ns);
-            
-            writer.setProperty( "xmlbase", ns );
-            writer.write(model.getBaseModel(), new OutputStreamWriter(fout, defaultCharset), "");
-            fout.close();
-        } catch (Exception ex) {
-            System.err.println("Exception " + ex.getMessage());
-        }
-    }
-
-    // JE: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> THE REAL STUFF
-
-    // JE: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> WE SHOULD HAVE INCREMENTAL HERE IN THE SAME WAY!
-
-    //modify ontology
-    public void modifyOntology( String fileName, String testNumber, Properties params ) {
-        //modify the model
-        try {
-            OntModel model = loadOntology(fileName);                      //load the initial ontology
-            JENAOntology onto = new JENAOntology();                         //cast the model into Ontology
-            onto.setOntology( (OntModel)model );
-            //set the TestGenerator ontology
-            TestGenerator t = new TestGenerator();                          //build an instance of TestGenerator
-            t.setOntology(onto);
-            //set the namespace
-            t.setNamespace( getURI( fileName, testNumber) );
-            //t.setNamespace( "http://oaei.ontologymatching.org/2011/gen/onto/101/onto.rdf#" );
-
-            Alignment align = t.generate( onto, params );                 //generate the alignment
-
-            JENAOntology modified = (JENAOntology)t.getModifiedOntology();  //get the modified ontology
-
-
-            //build the directory to save the file
-            boolean create;
-            create = new File(testNumber).mkdir();
-            if ( create )   System.err.println(" Succesufully created the directory ");
-            else            System.err.println(" Error creating the directory ");
-
-            //new File(testNumber).mkdir();
-            //write the ontology into the directory
-            if ( modified.getOntology() instanceof OntModel )
-                writeOntology(modified.getOntology(), testNumber + "/" + fileName, getURI( fileName, testNumber ));            //write the ontology
-            //write the alignment into the directory
-            OutputStream stream = new FileOutputStream( testNumber + "/" + "refalign.rdf" );
-            // Outputing
-            PrintWriter  writer = new PrintWriter (
-                                    new BufferedWriter(
-                                         new OutputStreamWriter( stream, "UTF-8" )), true);
-            AlignmentVisitor renderer = new RDFRendererVisitor( writer );
-            align.render(renderer);
-            writer.flush();
-            writer.close();
-        }
-        catch ( Exception ex ) {
-            System.err.println( "Error " + ex.getMessage()  );
-        }
-
-        System.err.println( "***" );
-        System.err.println( "END" );
-        System.err.println( "***" );
-    }
-
-
-}
diff --git a/src/fr/inrialpes/exmo/align/gen/GenerateBenchmark.java b/src/fr/inrialpes/exmo/align/gen/GenerateBenchmark.java
index e6d9f0f7..8fc03710 100644
--- a/src/fr/inrialpes/exmo/align/gen/GenerateBenchmark.java
+++ b/src/fr/inrialpes/exmo/align/gen/GenerateBenchmark.java
@@ -29,182 +29,50 @@
 
 package fr.inrialpes.exmo.align.gen;
 
-//Java classes
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.File;
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.OutputStreamWriter;
-import java.nio.charset.Charset;
 import java.util.Properties;
 
-//Jena API classes
-import com.hp.hpl.jena.ontology.OntModel;
-import com.hp.hpl.jena.ontology.OntModelSpec;
-import com.hp.hpl.jena.rdf.model.ModelFactory;
-import com.hp.hpl.jena.rdf.model.RDFWriter;
-import com.hp.hpl.jena.util.FileManager;
-
-// Alignment API implementation classes
-import fr.inrialpes.exmo.align.impl.renderer.RDFRendererVisitor;
-import fr.inrialpes.exmo.ontowrap.jena25.JENAOntology;
-
-import org.semanticweb.owl.align.Alignment;
-import org.semanticweb.owl.align.AlignmentVisitor;
-
 public class GenerateBenchmark {
-    private String urlprefix = "http://example.com/"; // Prefix (before testnumber) of test URL
-    private String dirprefix = "";                    // Prefix (idem) of directory
-    private String filename = "onto.rdf";             // name of ontology to generate
-    private String alignname = "refalign.rdf";        // name of alignment to generate
-
-    private String fileName;                                                    //the initial file
-    //private String testNumber;                                                  //the test number
-    private Properties parameters;                                              //the parameters
-    public final String namespace = "http://oaei.ontologymatching.org/2011/gen/";
-    private TestGenerator generator;                                  //build an instance of TestGenerator
+
+    private String initOntoFile;                                                    //the initial file
+    private Properties align;                                              //the alignment parameter
+    private TestGenerator generator;                                  // a TestGenerator
     private boolean debug = false;
 
     static String FULL = "1.0f";
 
     //constructor
     public  GenerateBenchmark( String fileName ) {
-        this.fileName = fileName;
+        initOntoFile = fileName;
 	generator = new TestGenerator();
     }
 
-    //gets the URI
-    public String getURI( String testNumber ) {
-        return urlprefix + "/" + testNumber + "/" + filename + "#"; // Do not like this #...
-        //return urlprefix + getPrefix(fileName) + "/" + testNumber + "/" + fileName + "#";
-    }
-
-    private String directoryName( String dir, String suffix ) {
-	if ( suffix == null ) return dir;
-	else return dir+"-"+suffix;
-    }
-
-    //loads ontology
-    public OntModel loadOntology ( String file ) {
-        InputStream in = FileManager.get().open( file );
-        OntModel model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );
-        model.read( in, null );
-        return model;
-    }
-
-    //writes ontology
-    public static void writeOntology( OntModel model, String destFile, String ns ) {
-        try {
-            File f = new File( destFile );
-            FileOutputStream fout = new FileOutputStream( f );
-            Charset defaultCharset = Charset.forName("UTF8");
-            RDFWriter writer = model.getWriter("RDF/XML-ABBREV");
-            writer.setProperty( "showXmlDeclaration","true" );
-            model.setNsPrefix( "", ns );
-            model.createOntology(ns);
-
-            writer.setProperty( "xmlbase", ns );
-            writer.write(model.getBaseModel(), new OutputStreamWriter(fout, defaultCharset), "");
-            fout.close();
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-    }
-
-    private void outputTestDirectory( JENAOntology onto, Alignment align, String testnumber, Properties params ) {
-	// build the directory to save the file
-	boolean create = new File( dirprefix+"/"+testnumber ).mkdir();
-	/* if ( create )   System.err.println(" Succesufully created the directory ");
-	   else            System.err.println(" Error creating the directory "); */
-	
-	// write the ontology into the directory
-	if ( onto.getOntology() instanceof OntModel )
-	    writeOntology( onto.getOntology(), dirprefix+"/"+testnumber+"/"+filename, getURI( testnumber ));
-	
-	try {
-	    //write the alignment into the directory
-	    OutputStream stream = new FileOutputStream( dirprefix+"/"+testnumber+"/"+alignname );
-	    // Outputing
-	    PrintWriter  writer = new PrintWriter (
-						   new BufferedWriter(
-								      new OutputStreamWriter( stream, "UTF-8" )), true);
-	    AlignmentVisitor renderer = new RDFRendererVisitor( writer );
-	    align.render( renderer );
-	    writer.flush();
-	    writer.close();
-        } catch ( Exception ex ) {
-            ex.printStackTrace();
-        }
-    }
-
-    //modifies an ontology
-    public Properties modifyOntology( String file, String testNumber, Properties params) {
-	System.err.println( "Source: "+file+" generate "+testNumber );
-        //modify the model
-	if ( debug ) System.err.println( "From test " + file );
-	if ( debug ) System.err.println( "Test " + testNumber );
-	OntModel model = loadOntology( file );                            //load the initial ontology
-	JENAOntology onto = new JENAOntology();                             //cast the model into Ontology
-	onto.setOntology( (OntModel)model );
-	//set the TestGenerator ontology
-	generator.setOntology( onto );
-	//set the namespace
-	generator.setNamespace( getURI( testNumber ) );
-	Alignment align = null;
-	if ( file.equals(this.fileName) ) // JE: In my opinion this test is tricky... (and all should be in params)
-	    align = generator.generate( onto, params );                               //generate the alignment
-	else
-	    align = generator.generate( onto, params, parameters );              //generate the alignment
-	
-	JENAOntology modified = (JENAOntology)generator.getModifiedOntology();      //get the modified ontology
-	
-	outputTestDirectory( modified, align, testNumber, params );
-	//retrieve the parameters
-	//parameters = generator.getParameters();
-	return generator.getParameters();
-    }
-
-    //modifies an ontology from an existing test
-    public Properties incrementModifyOntology( String pKey, String pVal, String suffix, String prevTest, String testNb ) {
-	Properties p = new Properties();
-	p.setProperty( pKey, pVal );
-	String prevDirName = directoryName( prevTest, suffix );
-	String crtDirName = directoryName( testNb, suffix );
-	return modifyOntology( dirprefix+"/"+prevDirName+"/"+this.fileName, crtDirName, p );
-    }
-
-
     //generates the Benchmark
     public void generate( Properties params ) {
 	// Process params
-	if ( params.getProperty( "urlprefix" ) != null ) urlprefix = params.getProperty( "urlprefix" );
-	if ( params.getProperty( "outdir" )!= null ) dirprefix = params.getProperty( "outdir" );
-	if ( params.getProperty( "filename" ) != null ) filename = params.getProperty( "filename" );
-	if ( params.getProperty( "alignname" ) != null ) alignname = params.getProperty( "alignname" );
+	if ( params.getProperty( "urlprefix" ) != null ) generator.setURLPrefix( params.getProperty( "urlprefix" ) );
+	if ( params.getProperty( "outdir" )!= null )  generator.setDirPrefix( params.getProperty( "outdir" ) );
+	String ontoname = params.getProperty( "ontoname" );
+	if ( ontoname != null ) {
+	    generator.setOntoFilename( params.getProperty( "ontoname" ) );
+	} else {
+	    ontoname = "onto.rdf"; // could be better
+	}
+	if ( params.getProperty( "alignname" ) != null ) generator.setAlignFilename( params.getProperty( "alignname" ) );
 
-	System.err.println( urlprefix+" / "+dirprefix+" / "+filename+" / "+alignname );
+	debug = ( params.getProperty( "debug" ) != null );
+	generator.setDebug( debug );
 
 	//private String testnumber = ""; // will not work if no number...
 	//testnumber = params.getProperty( "testNumber" );
 	//if ( testnumber == null ) 
 
-	// JE: All this should have been solved before
-
-
         //keep track of the alignment
-        Properties paramsRenameResources;           Properties paramsNoComments;
-        Properties paramsNoInstance;                Properties paramsNoProperty;
-        Properties paramsFlatten;                   Properties paramsExpand;
-        Properties paramsInitial;
+        Properties alignRenameResources;
+        Properties alignInitial;
 
         Properties p = new Properties();                                        //modify the ontology according to this parameters
-        this.parameters = new Properties();
         
         String prevDirName;
-        String crtDirName;
 
 	String mod = params.getProperty( "modality" ); // "mult"
 	String hard = params.getProperty( "increment" );
@@ -213,28 +81,21 @@ public class GenerateBenchmark {
 
 	String SUFFIX = null;
 
-    // JE : >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SO FAR SO GOOD
         /*
          * Test 101
-	 * Here it would be good to change the :
+	 * Generate the initial situation
          */
-        parameters = modifyOntology( fileName, "101", p ); // JE ~~> The strange thing: it will generate the init
-                                                           // Because it calls with the "p", this is the second case, 
-	                                                   // Where the initial alignment is generated
-        paramsInitial = (Properties)parameters.clone();
-        paramsRenameResources = (Properties)parameters.clone();
+        align = generator.modifyOntology( initOntoFile, (Properties)null, "101", p );
+        alignInitial = (Properties)align.clone();
+        alignRenameResources = (Properties)align.clone();
         prevDirName = "101"+"/";
 
         /*
          * Tests 201, 202, 248, 249, 253, 258, 259, 250, 254,
          *       262, 257, 260, 265, 261, 266, 251, 252
          */
-	// Increment from 20 to 20
-        //for ( float i1=0.20f; i1<=1.00f; i1+=0.20f ) {
-	// Increment from x to remaining
 	// JE: look at the (Float).toString() below...
 	boolean multModality = (mod != null && mod.startsWith( "mult" ));
-	//float i1 = 0.20f;
 	float i1 = 0.0f;
 	int maximum = Integer.parseInt( "5" );
 	float incr = Float.parseFloat( "0.2" );
@@ -244,9 +105,9 @@ public class GenerateBenchmark {
 	    ex.printStackTrace(); // continue with the default
 	}
 	for ( int i = 0; i1 < 1.00f ; i++ ) { // && i < maximum
-	    //System.err.println( " **************************** "+i+": i1 = "+i1 );
 	    if ( !multModality ) i1 += incr; // traditional
 	    else i1 += (1. - i1) * incr; // hardened
+	    if ( debug ) System.err.println( " ******************************************************** "+i+": i1 = "+i1 );
 
 	    if ( i1 < 1.0f ) {
 		SUFFIX = ((Float)i1).toString().substring(2, 3);
@@ -259,136 +120,139 @@ public class GenerateBenchmark {
             p = new Properties();
             p.setProperty( ParametersIds.RENAME_CLASSES, ((Float)i1).toString() );
             p.setProperty( ParametersIds.RENAME_PROPERTIES, ((Float)i1).toString() );
-            parameters = modifyOntology( dirprefix+"/"+prevDirName+this.fileName, directoryName( "201", SUFFIX ), p);
+	    // This dirprefix business could have been solved before...
+	    String dirprefix = params.getProperty( "outdir" );
+	    if (dirprefix != null ) { dirprefix = dirprefix+"/"; } else { dirprefix = ""; }
+	    align = generator.modifyOntology( dirprefix+prevDirName+ontoname, align, generator.directoryName( "201", SUFFIX ), p);
 
                /* 202-x *** no names + no comments */
-	       parameters = incrementModifyOntology( ParametersIds.REMOVE_COMMENTS, FULL, SUFFIX, "201", "202" );
+	       align = generator.incrementModifyOntology( ParametersIds.REMOVE_COMMENTS, FULL, SUFFIX, "201", align, "202" );
 
                     /* 248-x *** no names + no comments +  no hierarchy */
-	            parameters = incrementModifyOntology( ParametersIds.NO_HIERARCHY, ParametersIds.NO_HIERARCHY, SUFFIX, "202", "248" );
+	            align = generator.incrementModifyOntology( ParametersIds.NO_HIERARCHY, ParametersIds.NO_HIERARCHY, SUFFIX, "202", align, "248" );
 
                         /* 253-x *** no names + no comments + no hierarchy + no instance */
-	                parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "248", "253" );
+	                align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "248", align, "253" );
 
                      /* 249-x *** no names + no comments + no instance */
-	             parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "202", "249" );
+	             align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "202", align, "249" );
 
                      ////get the parameters
-                     paramsRenameResources = (Properties)this.parameters.clone();
+                     alignRenameResources = (Properties)align.clone();
 
                      /* 250-x *** no names + no comments + no property */
- 	             parameters = incrementModifyOntology( ParametersIds.REMOVE_PROPERTIES, FULL, SUFFIX, "202", "250" );
+ 	             align = generator.incrementModifyOntology( ParametersIds.REMOVE_PROPERTIES, FULL, SUFFIX, "202", align, "250" );
 
                          /* 254-x *** no names + no comments + no property + no hierarchy */
- 	                 parameters = incrementModifyOntology( ParametersIds.NO_HIERARCHY, ParametersIds.NO_HIERARCHY, SUFFIX, "250", "254" );
+ 	                 align = generator.incrementModifyOntology( ParametersIds.NO_HIERARCHY, ParametersIds.NO_HIERARCHY, SUFFIX, "250", align, "254" );
 
                              /* 262-x *** no names + no comments + no property + no hierarchy + no instance */
- 	                     parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "254", "262" );
+ 	                     align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "254", align, "262" );
 
                          /* 257-x *** no names + no comments + no property + no instance */
- 	                 parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "250", "257" );
+ 	                 align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "250", align, "257" );
 
                          /* 261-x *** no names + no comments + no property + expand */
- 	                 parameters = incrementModifyOntology( ParametersIds.ADD_CLASSES, FULL, SUFFIX, "250", "261" );
+ 	                 align = generator.incrementModifyOntology( ParametersIds.ADD_CLASSES, FULL, SUFFIX, "250", align, "261" );
 
                              /* 266-x *** no names + no comments + no property + expand + no instance */
-  	                    parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "261", "266" );
+  	                    align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "261", align, "266" );
 
                          /* 260-x *** no names + no comments + no property + flatten */
-			    parameters = incrementModifyOntology( ParametersIds.LEVEL_FLATTENED, "2", SUFFIX, "250", "260" );
+			    align = generator.incrementModifyOntology( ParametersIds.LEVEL_FLATTENED, "2", SUFFIX, "250", align, "260" );
 
                              /* 265-x *** no names + no comments + no property + flatten + no instance */
-   	                    parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "260", "265" );
+   	                    align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "260", align, "265" );
 
                      //re-establish the parameters
-                     parameters = (Properties)paramsRenameResources.clone();
+                     align = (Properties)alignRenameResources.clone();
 
                      /* 251-x *** no names + no comments + flatten */
-   	             parameters = incrementModifyOntology( ParametersIds.LEVEL_FLATTENED, "2", SUFFIX, "202", "251" );
+   	             align = generator.incrementModifyOntology( ParametersIds.LEVEL_FLATTENED, "2", SUFFIX, "202", align, "251" );
 
                          /* 258-x *** no names + no comments + flatten + no instance */
-   	                 parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "251", "258" );
+   	                 align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "251", align, "258" );
 
                      //re-establish the parameters
-                     parameters = (Properties)paramsRenameResources.clone();
+                     align = (Properties)alignRenameResources.clone();
 
                      /* 252-x *** no names + no comments + expand */
-   	             parameters = incrementModifyOntology( ParametersIds.ADD_CLASSES, FULL, SUFFIX, "202", "252" );
+   	             align = generator.incrementModifyOntology( ParametersIds.ADD_CLASSES, FULL, SUFFIX, "202", align, "252" );
 
                          /* 259-x *** no names + no comments + expand + no instance */
-   	                 parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "252", "259" );
+   	                 align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "252", align, "259" );
 
-//           paramsNoProperty = modifier.getProperties();                           //get the modifed properties
+//           alignNoProperty = modifier.getProperties();                           //get the modifed properties
 
-            parameters = (Properties)paramsRenameResources.clone();
-            prevDirName = directoryName( "201", SUFFIX ) + "/";
+            align = (Properties)alignRenameResources.clone();
+            prevDirName = generator.directoryName( "201", SUFFIX ) + "/";
         }
 
         //re-establish the parameters
 	SUFFIX = null;
-        parameters = (Properties)paramsInitial.clone();
+        align = (Properties)alignInitial.clone();
 
         /* Tests 221, 232, 233, 241 */
 
         /* 221 *** no hierarchy */
-	parameters = incrementModifyOntology( ParametersIds.NO_HIERARCHY, ParametersIds.NO_HIERARCHY, SUFFIX, "101", "221" );
+	align = generator.incrementModifyOntology( ParametersIds.NO_HIERARCHY, ParametersIds.NO_HIERARCHY, SUFFIX, "101", align, "221" );
 
             /* 232 *** no hierarchy + no instance */
-	    parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "221", "232" );
+	    align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "221", align, "232" );
 
             /* 233 *** no hierarchy + no property */
-	    parameters = incrementModifyOntology( ParametersIds.REMOVE_PROPERTIES, FULL, SUFFIX, "221", "233" );
+	    align = generator.incrementModifyOntology( ParametersIds.REMOVE_PROPERTIES, FULL, SUFFIX, "221", align, "233" );
 
                 /* 241 *** no hierarchy + no property + no instance */
-	        parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "233", "241" );
+	        align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "233", align, "241" );
 
-        //re-establish the parameters
-        parameters = (Properties)paramsInitial.clone();
+        //re-establish the align
+        align = (Properties)alignInitial.clone();
 
         /* Tests 222, 237 */
 
         /* 222 *** flatten */
-	parameters = incrementModifyOntology( ParametersIds.LEVEL_FLATTENED, "2", SUFFIX, "101", "222" );
+	align = generator.incrementModifyOntology( ParametersIds.LEVEL_FLATTENED, "2", SUFFIX, "101", align, "222" );
 
             /* 237 *** flatten + no instance */
-	    parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "222", "237" );
+	    align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "222", align, "237" );
                    
 
         //re-establish the parameters
-        parameters = (Properties)paramsInitial.clone();
+        align = (Properties)alignInitial.clone();
 
         /* Tests 223, 238 */
 
         /* 223 *** expand */
-	parameters = incrementModifyOntology( ParametersIds.ADD_CLASSES, FULL, SUFFIX, "101", "223" );
+	align = generator.incrementModifyOntology( ParametersIds.ADD_CLASSES, FULL, SUFFIX, "101", align, "223" );
 
             /* 238 *** expand + no instance */
-	    parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "223", "238" );
+	    align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "223", align, "238" );
 
         /* 224 *** no instance */
-	parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "101", "224" );
+	align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "101", align, "224" );
 
         /* 225 *** no restrictions */
-	parameters = incrementModifyOntology( ParametersIds.REMOVE_RESTRICTIONS, FULL, SUFFIX, "101", "225" );
+	align = generator.incrementModifyOntology( ParametersIds.REMOVE_RESTRICTIONS, FULL, SUFFIX, "101", align, "225" );
 
         /* Tests 228, 239, 246, 236, 240, 247 */
 
         /* 228 *** no property */
-	parameters = incrementModifyOntology( ParametersIds.REMOVE_PROPERTIES, FULL, SUFFIX, "101", "228" );
+	align = generator.incrementModifyOntology( ParametersIds.REMOVE_PROPERTIES, FULL, SUFFIX, "101", align, "228" );
 
             /* 236 *** no property + no instance */
-	    parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "228", "236" );
+	    align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "228", align, "236" );
 
             /* 240 *** no property + expand */
-	    parameters = incrementModifyOntology( ParametersIds.ADD_CLASSES, FULL, SUFFIX, "228", "240" );
+	    align = generator.incrementModifyOntology( ParametersIds.ADD_CLASSES, FULL, SUFFIX, "228", align, "240" );
 
                 /* 247 *** no property + expand + no instance */
-	        parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "240", "247" );
+	        align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "240", align, "247" );
 
             /* 239 *** no property + flatten */
-	    parameters = incrementModifyOntology( ParametersIds.LEVEL_FLATTENED, FULL, SUFFIX, "228", "239" );
+	    align = generator.incrementModifyOntology( ParametersIds.LEVEL_FLATTENED, FULL, SUFFIX, "228", align, "239" );
 
                 /* 246 *** no property + flatten + no instance */
-	        parameters = incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "239", "246" );
+	        align = generator.incrementModifyOntology( ParametersIds.REMOVE_INDIVIDUALS, FULL, SUFFIX, "239", align, "246" );
     }
 }
diff --git a/src/fr/inrialpes/exmo/align/gen/OntologyModifier.java b/src/fr/inrialpes/exmo/align/gen/OntologyModifier.java
index 87bbbbed..324223c9 100644
--- a/src/fr/inrialpes/exmo/align/gen/OntologyModifier.java
+++ b/src/fr/inrialpes/exmo/align/gen/OntologyModifier.java
@@ -88,6 +88,7 @@ import edu.smu.tspell.wordnet.WordNetDatabase;
 
 public class OntologyModifier {
     private ClassHierarchy classHierarchy;                                      //the class hierarchy
+    // JE: In all this class, model is useless!
     private OntModel model;                                                     //the model - the original Ontology
     private OntModel modifiedModel;						//the modified 	Ontology
     private String namespace;							//the Namespace
@@ -95,15 +96,15 @@ public class OntologyModifier {
     private Alignment alignment;						//the alignment of the two Ontologies
     private Properties params;							//the alignment
     private boolean isBuild;							//keep track if the class hierarchy is build
-    private boolean isAlign;							//keep track it the initial alignment has already been computed
+    private boolean isAlign;							//keep track if the initial alignment has already been computed
     private boolean isChanged;                                                  //keep track if the namespace of the new ontology is changed
-    public static String fileName = "refalign.rdf";                             //the reference alignment
     private String base;                                                        //
 
     //Ontology init, Ontology modified, Alignment align
-    public OntologyModifier ( OntModel model, OntModel modifiedModel, Alignment alignment ) {
+    // JE: Here the alignment is useless... it is used only if nothing is computed!
+    public OntologyModifier ( OntModel model, Alignment alignment ) {
         this.model = model;
-        this.modifiedModel = modifiedModel;
+        this.modifiedModel = model;
 	this.alignment = alignment;
 	this.isBuild = false;
 	this.isAlign = false;
@@ -1315,7 +1316,22 @@ public class OntologyModifier {
             res.remove();
     }
 
+    // isAlign is a not so good way to test initialisation
+    // (initialisation with an empty Properties is done in the initialiser)
+    // but the "params" is used everywhere...
+
     //the initial reference alignment
+    // JE: !!!: no order guarantee in properties !!!
+    public void initializeAlignment( Properties params ) {
+        this.params = params;
+
+        Enumeration e = this.params.propertyNames();
+        String aux = (String)e.nextElement();
+        base = aux.substring(0, aux.lastIndexOf("#")+1);
+
+        this.isAlign = true;
+    }
+
     public void initializeAlignment() {
         List<OntClass> classes       = this.modifiedModel.listNamedClasses().toList();//all classes
         List<OntProperty> properties = this.modifiedModel.listAllOntProperties().toList();//all properties
@@ -1360,29 +1376,6 @@ public class OntologyModifier {
                 //System.out.println( "[" + key + "][" + value + "]" );
                 this.alignment.addAlignCell( uri1, uri2, "=", 1 );
             }
-
-            /*
-            OutputStream stream ;//= new FileOutputStream(filename);
-            if ( fileName == null ) {
-                stream = System.out;
-            } else {
-                stream = new FileOutputStream( fileName );
-            }
-            
-            // Outputing
-            PrintWriter  writer = new PrintWriter (
-                                    new BufferedWriter(
-                                        new OutputStreamWriter( stream, "UTF-8" )), true);
-            AlignmentVisitor renderer = new RDFRendererVisitor( writer );
-            this.alignment.render(renderer);
-
-            //RDFRendererVisitor renderer = new RDFRendererVisitor(writer);
-            //renderer.visit(this.alignment);
-            
-            writer.flush();
-            writer.close();
-             * 
-             */
         } catch (AlignmentException aex)  { System.out.println( "Exception " + aex.getMessage() );
         } catch (Exception ex) {  System.err.println("Exception " + ex.getMessage());
         }
@@ -1499,16 +1492,6 @@ public class OntologyModifier {
         return this.params;
     }
 
-    public void setProperties( Properties params ) {
-        this.params = params;
-
-        Enumeration e = this.params.propertyNames();
-        String aux = (String)e.nextElement();
-        base = aux.substring(0, aux.lastIndexOf("#")+1);
-
-        this.isAlign = true;
-    }
-
     //returns the alignment
     public Alignment getAlignment() {
         return this.alignment;
diff --git a/src/fr/inrialpes/exmo/align/gen/TestGen.java b/src/fr/inrialpes/exmo/align/gen/TestGen.java
index ce4894be..18ad49cc 100644
--- a/src/fr/inrialpes/exmo/align/gen/TestGen.java
+++ b/src/fr/inrialpes/exmo/align/gen/TestGen.java
@@ -67,20 +67,22 @@ public class TestGen {
     }
 
       public void run(String[] args) throws Exception {
-          LongOpt[] longopts = new LongOpt[8];
+          LongOpt[] longopts = new LongOpt[10];
           params = new Properties();
 
           longopts[0] = new LongOpt("method", LongOpt.REQUIRED_ARGUMENT, null, 'm');
-          longopts[1] = new LongOpt("fileName", LongOpt.REQUIRED_ARGUMENT, null, 'n');
+          longopts[1] = new LongOpt("init", LongOpt.REQUIRED_ARGUMENT, null, 'i');
           longopts[2] = new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h');
           longopts[3] = new LongOpt("testNumber", LongOpt.REQUIRED_ARGUMENT, null, 't');
 	  longopts[4] = new LongOpt("debug", LongOpt.OPTIONAL_ARGUMENT, null, 'd');
 	  longopts[5] = new LongOpt("outdir", LongOpt.REQUIRED_ARGUMENT, null, 'o');
 	  longopts[6] = new LongOpt("urlprefix", LongOpt.REQUIRED_ARGUMENT, null, 'u');
-	  longopts[7] = new LongOpt("D", LongOpt.REQUIRED_ARGUMENT, null, 'D');
+	  longopts[7] = new LongOpt("ontoname", LongOpt.REQUIRED_ARGUMENT, null, 'n');
+	  longopts[8] = new LongOpt("alignname", LongOpt.REQUIRED_ARGUMENT, null, 'a');
+	  longopts[9] = new LongOpt("D", LongOpt.REQUIRED_ARGUMENT, null, 'D');
           
 
-          Getopt g = new Getopt("", args, "d::o:u:h:m:n:D:t", longopts);
+          Getopt g = new Getopt("", args, "d::o:u:h:m:n:i:a:D:t", longopts);
           int c;
           String arg;
 
@@ -93,31 +95,33 @@ public class TestGen {
                       methodName = g.getOptarg();
                       System.err.println("method " + "[" + methodName + "]");
                       break;
-                  case 'n':
+                  case 'i':
                       fileName = g.getOptarg();
 		      params.setProperty( "filename", fileName );
                       System.err.println("fileName " + "[" + fileName + "]");
                       break;
+                  case 'n':
+		      params.setProperty( "ontoname", g.getOptarg() );
+                      break;
+                  case 'a':
+		      params.setProperty( "alignname", g.getOptarg() );
+                      break;
                   case 't':
                       testNumber = g.getOptarg();
                       System.err.println("testNumber " + "[" + testNumber + "]");
                       break;
-	      case 'o' :
-		  /* Use output directory */
+	      case 'o' : /* Use output directory */
 		  params.setProperty( "outdir", g.getOptarg() );
 		  break;
-	      case 'u' :
-		  /* URLPrefix */
+	      case 'u' : /* URLPrefix */
 		  params.setProperty( "urlprefix", g.getOptarg() );
 		  break;
-	      case 'd' :
-		  /* Debug level  */
+	      case 'd' : /* Debug level  */
 		  arg = g.getOptarg();
-		  if ( arg != null ) debug = Integer.parseInt(arg.trim());
-		  else debug = 4;
+		  if ( arg != null ) params.setProperty( "debug", arg.trim() );
+		  else 		  params.setProperty( "debug", "4" );
 		  break;
-	      case 'D' :
-		  /* Parameter definition: could be used for all parameters */
+	      case 'D' : /* Parameter definition: could be used for all parameters */
 		  arg = g.getOptarg();
 		  int index = arg.indexOf('=');
 		  if ( index != -1 ) {
@@ -132,13 +136,10 @@ public class TestGen {
               }
           }
 
-          //generate an arbitrary test
-          if ( methodName.equals( ARBITRARY_TEST ) ) {
-              //build an ArbitraryTest object and modify the ontology according to it
-              ArbitraryTest at = new ArbitraryTest();
-              at.modifyOntology( fileName, testNumber, params );
-          } else if ( methodName.equals( GENERATE_BENCHMARK ) ) {
-	      //generate the benchmark
+          if ( methodName.equals( ARBITRARY_TEST ) ) { //generate an arbitrary test
+	      TestGenerator tg = new TestGenerator();
+              tg.modifyOntology( fileName, (Properties)null, testNumber, params );
+          } else if ( methodName.equals( GENERATE_BENCHMARK ) ) { //generate the benchmark
               GenerateBenchmark gb = new GenerateBenchmark( fileName );
               gb.generate( params );
           }
@@ -149,8 +150,14 @@ public class TestGen {
          System.out.println("TestGen [options]");
          System.out.println("options are");
          System.out.println("--method=methodName, where methodName can be \""+ARBITRARY_TEST+"\" or \""+GENERATE_BENCHMARK+"\"");
-         System.out.println("--fileName=file [default: onto.rdf]");
+         System.out.println("--initonto=filename (initial ontology)");
+         System.out.println("--alignname=filename [default: refalign.rdf]");
+         System.out.println("--ontoname=filename [default: onto.rdf]");
+         System.out.println("--urlprefix=url");
+         System.out.println("--outdir=directory [default: .]");
          System.out.println("--testNumber=number, if the arbitraryTest is chosen");
+         System.out.println("--help");
+         System.out.println("--debug=number [default: 0]");
          System.out.println("-Dparameter=value");
          System.out.println("where the parameters are");
          System.out.println( "[--------------------------------------------------------------------------]" );
diff --git a/src/fr/inrialpes/exmo/align/gen/TestGenerator.java b/src/fr/inrialpes/exmo/align/gen/TestGenerator.java
index 844502fd..fb6cfbb6 100644
--- a/src/fr/inrialpes/exmo/align/gen/TestGenerator.java
+++ b/src/fr/inrialpes/exmo/align/gen/TestGenerator.java
@@ -30,127 +30,196 @@
 
 package fr.inrialpes.exmo.align.gen;
 
-import com.hp.hpl.jena.ontology.OntModel;
+// Alignment API implementation classes
 import fr.inrialpes.exmo.align.gen.inter.AlignedOntologyGenerator;
 import fr.inrialpes.exmo.align.impl.URIAlignment;
-import fr.inrialpes.exmo.ontowrap.Ontology;
-import fr.inrialpes.exmo.ontowrap.jena25.JENAOntology;
-import java.util.Properties;
+import fr.inrialpes.exmo.align.impl.renderer.RDFRendererVisitor;
+
 import org.semanticweb.owl.align.Alignment;
+import org.semanticweb.owl.align.AlignmentVisitor;
+
+//Java classes
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.File;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.OutputStreamWriter;
+import java.nio.charset.Charset;
+import java.util.Properties;
+
+//Jena API classes
+import com.hp.hpl.jena.ontology.OntModel;
+import com.hp.hpl.jena.ontology.OntModelSpec;
+import com.hp.hpl.jena.rdf.model.ModelFactory;
+import com.hp.hpl.jena.rdf.model.RDFWriter;
+import com.hp.hpl.jena.util.FileManager;
+
+import java.util.Properties;
 
 public class TestGenerator implements AlignedOntologyGenerator {
-    private Properties parameters;                                              //the set of parameters
+    private String urlprefix = "http://example.com/"; // Prefix (before testnumber) of test URL
+    private String dirprefix = "";                    // Prefix (idem) of directory
+    private String ontoname = "onto.rdf";             // name of ontology to generate
+    private String alignname = "refalign.rdf";        // name of alignment to generate
+
     private Properties params;                                                  //the modifications
-    private OntModel model;                                                     //initial ontology
-    private OntModel modifiedModel;                                             //modified ontology
-    private Alignment alignment;                                                //the reference alignment
-     private String namespace = "";                                             //the namespace
+    private OntModel modifiedOntology;                                             //modified ontology
+    private Alignment resultAlignment;                                                //the reference alignment
+    private String namespace = "";                                             //the namespace
     private OntologyModifier modifier = null;                                   //the modifier
+    private boolean debug = false;
 
     public TestGenerator() {}
 
+    // ******************************************************* SETTERS
+    public void setURLPrefix( String u ) { urlprefix = u; }
+
+    public void setDirPrefix( String d ) { dirprefix = d; }
+
+    public void setOntoFilename( String o ) { ontoname = o; }
+
+    public void setAlignFilename( String a ) { alignname = a; }
+
+    public void setDebug( boolean d ) { debug = d; }
+
     //returns the modified ontology
-    public Ontology getModifiedOntology() {
-        JENAOntology onto = new JENAOntology();                                 //cast the model into Ontology
-        onto.setOntology( this.modifiedModel );
-        return onto;                                                            //return the ontology
+    public OntModel getModifiedOntology() { return modifiedOntology ; }
+
+    public void setNamespace( String ns ) { namespace = ns; }
+    //return the newNamespace
+    public String getNamespace() { return namespace; }
+
+    // ******************************************************* GB STUFF
+
+    //gets the URI
+    public String getURI( String testNumber ) {
+        return urlprefix + "/" + testNumber + "/" + ontoname + "#"; // Do not like this #...
+        //return urlprefix + getPrefix(ontoname) + "/" + testNumber + "/" + ontoname + "#";
     }
 
-    //set the initial ontology
-    public void setOntology( Ontology o ) {
-        if ( o instanceof JENAOntology ) {
-            this.model = ((JENAOntology)o).getOntology();
-            this.modifiedModel = ((JENAOntology)o).getOntology();
-        } else {
-            System.err.println("Error : The object given is not an OntModel");
-            System.exit(-1);
-        }
+    public static String directoryName( String dir, String suffix ) {
+	if ( suffix == null ) return dir;
+	else return dir+"-"+suffix;
     }
 
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
+    // ******************************************************* FACILITIES
+
+    public OntModel loadOntology ( String file ) {
+        InputStream in = FileManager.get().open( file );
+        OntModel model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );
+        model.read( in, null );
+	return model;
     }
 
-    //return the newNamespace
-    public String getNamespace() {
-        return this.namespace;
+    //writes ontology
+    public static void writeOntology( OntModel model, String destFile, String ns ) {
+        try {
+            File f = new File( destFile );
+            FileOutputStream fout = new FileOutputStream( f );
+            Charset defaultCharset = Charset.forName("UTF8");
+            RDFWriter writer = model.getWriter("RDF/XML-ABBREV");
+            writer.setProperty( "showXmlDeclaration","true" );
+            model.setNsPrefix( "", ns ); // JE: what about it?
+            writer.setProperty( "xmlbase", ns );
+            model.createOntology( ns );
+            writer.write( model.getBaseModel(), new OutputStreamWriter(fout, defaultCharset), "");
+            fout.close();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
     }
 
-    //set the parameters
-    // JE: modifier may not have been initialised
-    public void setParameters(Properties p) {
-        parameters = p;
-        modifier.setProperties(parameters);
+    private void outputTestDirectory( OntModel onto, Alignment align, String testnumber ) {
+	// build the directory to save the file
+	boolean create = new File( dirprefix+"/"+testnumber ).mkdir();
+	/* if ( create )   System.err.println(" Succesufully created the directory ");
+	   else            System.err.println(" Error creating the directory "); */
+	
+	// write the ontology into the directory
+	writeOntology( onto, dirprefix+"/"+testnumber+"/"+ontoname, getURI( testnumber ));
+	
+	try {
+	    //write the alignment into the directory
+	    OutputStream stream = new FileOutputStream( dirprefix+"/"+testnumber+"/"+alignname );
+	    // Outputing
+	    PrintWriter  writer = new PrintWriter (
+						   new BufferedWriter(
+								      new OutputStreamWriter( stream, "UTF-8" )), true);
+	    AlignmentVisitor renderer = new RDFRendererVisitor( writer );
+	    align.render( renderer );
+	    writer.flush();
+	    writer.close();
+        } catch ( Exception ex ) {
+            ex.printStackTrace();
+        }
     }
 
-    //get the parameters
-    public Properties getParameters() {
-        parameters = modifier.getProperties();                             //get the properties
-        return parameters;
+    //modifies an ontology from an existing test
+    /**
+     * Generate a test by altering an existing test
+     */
+    public Properties incrementModifyOntology( String pKey, String pVal, String suffix, String prevTest, Properties al, String testNb ) {
+	Properties p = new Properties();
+	p.setProperty( pKey, pVal );
+	String prevDirName = directoryName( prevTest, suffix );
+	String crtDirName = directoryName( testNb, suffix );
+	return modifyOntology( dirprefix+"/"+prevDirName+"/"+ontoname, al, crtDirName, p );
     }
 
-    //generate the alingnment
+    //modifies an ontology
     /**
-     * This in fact is dependent on:
-     * - p
-     * - model
-     * - modifiedModel
-     * - alignment
+     * Generate a test from an ontology
      */
-    public Alignment generate( Ontology o, Properties p ) {
-        this.params = p;
-        this.alignment  = new URIAlignment();
+    public Properties modifyOntology( String file, Properties al, String testNumber, Properties params) {
+	if ( debug ) System.err.println( "Source: "+file+" generate "+testNumber );
+	//set the TestGenerator ontology
+	OntModel onto = loadOntology( file ); // who needs model?
+	//set the namespace
+	setNamespace( getURI( testNumber ) );
+	Alignment align = null;
+	if ( al == null )
+	    align = generate( onto, params );
+	else
+	    align = generate( onto, params, al );
+	
+	outputTestDirectory( getModifiedOntology(), align, testNumber );
+	return modifier.getProperties();
+    }
+
+    // ******************************************************* GENERATOR
+    //generate the alingnment
+    public Alignment generate( OntModel onto, Properties p, Properties initalign ) {
+	if ( debug ) System.err.println( urlprefix+" / "+dirprefix+" / "+ontoname+" / "+alignname );
+        params = p;
 	// Initialise the modifier class
-        modifier = new OntologyModifier( this.model, this.modifiedModel, this.alignment);   //build the ontology modifier for the first time
-        modifier.setNewNamespace( this.namespace );
-	// JE: This should be put OUT of the modifier (this generate Properties... instead of alignments...)
-        modifier.initializeAlignment();                                         // initialize the reference alignment
+        modifier = new OntologyModifier( onto, new URIAlignment());   //build the ontology modifier for the first time
+        modifier.setNewNamespace( namespace );
+	// Initialize the reference alignment
+        if ( initalign == null ) {
+	    modifier.initializeAlignment();                                         
+	} else {
+	    modifier.initializeAlignment( initalign );
+	}
 
 	// Apply all modifications
-        //System.out.println( "[-------------------------------------------------]" );
-        for( String key : this.params.stringPropertyNames() ) {
-            String value = this.params.getProperty(key);
-	    //System.out.println( "[" +key + "] => [" + value + "]");
+        if ( debug ) System.out.println( "[-------------------------------------------------]" );
+        for( String key : params.stringPropertyNames() ) {
+            String value = params.getProperty(key);
+	    if ( debug ) System.out.println( "[" +key + "] => [" + value + "]");
 	    modifier.modifyOntology( key, value );					//modify the ontology according to it
         }
-        //System.out.println( "[-------------------------------------------------]" );
 
-        // JE: this refalign should be variabilised
 	//saves the alignment into the file "refalign.rdf", null->System.out
-        modifier.computeAlignment( "refalign.rdf" );                  //at the end, compute the reference alignment
-        this.alignment = modifier.getAlignment();                               //get the reference alignment
-        this.modifiedModel = modifier.getModifiedOntology();                    //get the modified ontology
-        return this.alignment;
+        modifier.computeAlignment( alignname );                  //at the end, compute the reference alignment
+        resultAlignment = modifier.getAlignment();                               //get the reference alignment
+        modifiedOntology = modifier.getModifiedOntology();                    //get the modified ontology
+        return resultAlignment;
     }
 
-    //generate the alingnment
-    //newParams => keeps track of the previous modifications
-    public Alignment generate(Ontology o, Properties p, Properties newParams) {
-        this.params = p;
-        this.alignment  = new URIAlignment();
-        modifier = new OntologyModifier( this.model, this.modifiedModel, this.alignment);   //build the ontology modifier for the first time
-	// JE: These two lines (one commented and the next one) are the only difference with the other
-	// The first one is a different between incremental (an alignment has been initialised)
-        //modifier.initializeAlignment();                                         //initialize the reference alignment
-
-        modifier.setProperties(newParams);
-        //set the new namespace
-        modifier.setNewNamespace( this.namespace );
-
-        //System.out.println( "[-------------------------------------------------]" );
-        for( String key : this.params.stringPropertyNames() ) {
-            String value = this.params.getProperty(key);
-	    //System.out.println( "[" +key + "] => [" + value + "]");
-            modifier.modifyOntology( key, value );					//modify the ontology according to it
-        }
-        //System.out.println( "[-------------------------------------------------]" );
-
-                                                                                //saves the alignment into the file "referenceAlignment.rdf", null->System.out
-        modifier.computeAlignment( "refalign.rdf" );                            //at the end, compute the reference alignment
-        this.alignment = modifier.getAlignment();                               //get the reference alignment
-        this.modifiedModel = modifier.getModifiedOntology();                    //get the modified ontology
-        return this.alignment;
+    public Alignment generate( OntModel onto, Properties p ) {
+	return generate( onto, p, (Properties)null );
     }
-
-
 }
diff --git a/src/fr/inrialpes/exmo/align/gen/inter/AlignedOntologyGenerator.java b/src/fr/inrialpes/exmo/align/gen/inter/AlignedOntologyGenerator.java
index 065e59c0..881679d2 100644
--- a/src/fr/inrialpes/exmo/align/gen/inter/AlignedOntologyGenerator.java
+++ b/src/fr/inrialpes/exmo/align/gen/inter/AlignedOntologyGenerator.java
@@ -22,13 +22,13 @@
 
 package fr.inrialpes.exmo.align.gen.inter;
 
-import fr.inrialpes.exmo.ontowrap.Ontology;
-import java.util.Properties;
+import com.hp.hpl.jena.ontology.OntModel;
 import org.semanticweb.owl.align.Alignment;
+import java.util.Properties;
 
 public interface AlignedOntologyGenerator {
 
-        //generate an Alignment refering to the generated Ontology as onto2 (to be saved)
-    public Alignment generate(Ontology o, Properties p);;
+    //generate an Alignment refering to the generated Ontology as onto2 (to be saved)
+    public Alignment generate( OntModel o, Properties p );
 
 }
-- 
GitLab