From 371285601e79a052db71a1f2c17eef2b9ef492de Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr>
Date: Wed, 7 Mar 2012 16:07:46 +0000
Subject: [PATCH] - modified command line interface - simplified TestSet
 interface (less variables)

---
 src/fr/inrialpes/exmo/align/cli/TestGen.java  | 246 +++++++++---------
 .../exmo/align/gen/BenchmarkGenerator.java    |   2 +-
 .../exmo/align/gen/DiscriminantGenerator.java |   4 +-
 src/fr/inrialpes/exmo/align/gen/TestSet.java  |   3 +-
 4 files changed, 127 insertions(+), 128 deletions(-)

diff --git a/src/fr/inrialpes/exmo/align/cli/TestGen.java b/src/fr/inrialpes/exmo/align/cli/TestGen.java
index 1d0e3eb4..33be1e29 100644
--- a/src/fr/inrialpes/exmo/align/cli/TestGen.java
+++ b/src/fr/inrialpes/exmo/align/cli/TestGen.java
@@ -28,7 +28,7 @@ import java.util.Properties;
 
 import fr.inrialpes.exmo.align.gen.TestGenerator;
 import fr.inrialpes.exmo.align.gen.BenchmarkGenerator;
-import fr.inrialpes.exmo.align.gen.DiscriminantGenerator;
+import fr.inrialpes.exmo.align.gen.TestSet;
 import fr.inrialpes.exmo.align.gen.ParametersIds;
 
 /** 
@@ -36,18 +36,13 @@ import fr.inrialpes.exmo.align.gen.ParametersIds;
     It can either generate a single test or a whole test suite from a single ontology.
     
     <pre>
-    java -cp procalign.jar fr.inrialpes.exmo.align.gen.TestGen [options]
+    java -cp procalign.jar fr.inrialpes.exmo.align.gen.TestGen [options] filename
     </pre>
 
-    where the options are:
+    where filename is the seed ontology,
+    and the options are:
     <pre>
-        --method=methodName         --> arbitraryTest
-                                    --> generateBenchmark
-
-        --fileName=file             --> the file name of the ontology
-
         --debug[=n] -d [n]          --> Report debug info at level n,
-        --testNumber=number         --> the number of the generated test
    </pre>
 
 */
@@ -55,13 +50,10 @@ import fr.inrialpes.exmo.align.gen.ParametersIds;
 public class TestGen {
     private Properties params = null;
     private String methodName = null;                                           //the name of the method
-    private String testNumber = null;                                           //the number of the generated test
     private String fileName   = null;                                           //the name of the input file
-    private String dir        = null;                                           //the name of the input file
+    private String dir        = ".";                                           //
+    private String url;                                                        //
     private int debug         = 0;
-    public static String ARBITRARY_TEST = "arbitraryTest";                      //generate an arbitrary test
-    public static String GENERATE_BENCHMARK = "generateBenchmark";              //generate the Benchmark dataset
-    public static String DISCRIMINANT_BENCHMARK = "disc";              //generate the Benchmark dataset
 
     public TestGen() {
 	fileName = "onto.rdf";
@@ -72,117 +64,125 @@ public class TestGen {
         catch ( Exception ex ) { ex.printStackTrace(); };
     }
 
-      public void run(String[] args) throws Exception {
-          LongOpt[] longopts = new LongOpt[10];
-          params = new Properties();
-
-          longopts[0] = new LongOpt("method", LongOpt.REQUIRED_ARGUMENT, null, 'm');
-          longopts[1] = new LongOpt("initonto", 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("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');
+    public void run(String[] args) throws Exception {
+	LongOpt[] longopts = new LongOpt[10];
+	params = new Properties();
+	
+	longopts[0] = new LongOpt("testset", LongOpt.REQUIRED_ARGUMENT, null, 't');
+	longopts[1] = new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h');
+	longopts[2] = new LongOpt("debug", LongOpt.OPTIONAL_ARGUMENT, null, 'd');
+	longopts[3] = new LongOpt("outdir", LongOpt.REQUIRED_ARGUMENT, null, 'o');
+	longopts[4] = new LongOpt("urlprefix", LongOpt.REQUIRED_ARGUMENT, null, 'u');
+	longopts[5] = new LongOpt("ontoname", LongOpt.REQUIRED_ARGUMENT, null, 'n');
+	longopts[6] = new LongOpt("alignname", LongOpt.REQUIRED_ARGUMENT, null, 'a');
+	longopts[7] = new LongOpt("D", LongOpt.REQUIRED_ARGUMENT, null, 'D');
           
-
-          Getopt g = new Getopt("", args, "d::o:u:h:m:n:i:a:D:t", longopts);
-          int c;
-          String arg;
-
-          while ((c = g.getopt()) != -1) {
-              switch (c) {
-	      case 'h':
-		  printUsage();
-		  return;
-	      case 'm':
-		  methodName = g.getOptarg();
-		  break;
-	      case 'i':
-		  fileName = g.getOptarg();
-		  params.setProperty( "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 */
-		  params.setProperty( "outdir", g.getOptarg() );
-		  break;
-	      case 'u' : /* URLPrefix */
-		  params.setProperty( "urlprefix", g.getOptarg() );
-		  break;
-	      case 'd' : /* Debug level  */
-		  arg = g.getOptarg();
-		  if ( arg != null ) params.setProperty( "debug", arg.trim() );
-		  else 		  params.setProperty( "debug", "4" );
-		  break;
-	      case 'D' : /* Parameter definition: could be used for all parameters */
-		  arg = g.getOptarg();
-		  int index = arg.indexOf('=');
-		  if ( index != -1 ) {
-		      params.setProperty( arg.substring( 0, index), 
-					  arg.substring(index+1));
-		  } else {
-		      System.err.println("Bad parameter syntax: "+g);
-		      printUsage();
-		      System.exit(0);
-		  }
-		  break;
-              }
-          }
-
-	  if ( debug > 0 ) System.err.println( " >>>> "+methodName+" from "+fileName );
-
-          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
-              BenchmarkGenerator gb = new BenchmarkGenerator();
-              gb.generate( params );
-	  } else if ( methodName.equals( DISCRIMINANT_BENCHMARK ) ) { //generate the benchmark
-              DiscriminantGenerator gb = new DiscriminantGenerator();
-              gb.generate( params );
-          }
+	Getopt g = new Getopt("", args, "d::o:u:m:n:a:D:t:h", longopts);
+	int c;
+	String arg;
+
+	while ((c = g.getopt()) != -1) {
+	    switch (c) {
+	    case 'h':
+		usage();
+		return;
+	    case 't':
+		methodName = g.getOptarg();
+		break;
+	    case 'n':
+		params.setProperty( "ontoname", g.getOptarg() );
+		break;
+	    case 'a':
+		params.setProperty( "alignname", g.getOptarg() );
+		break;
+	    case 'o' : /* Use output directory */
+		dir = g.getOptarg();
+		params.setProperty( "outdir", dir );
+		break;
+	    case 'u' : /* URLPrefix */
+		url = g.getOptarg();
+		params.setProperty( "urlprefix", url );
+		break;
+	    case 'd' : /* Debug level  */
+		arg = g.getOptarg();
+		if ( arg != null ) params.setProperty( "debug", arg.trim() );
+		else 		  params.setProperty( "debug", "4" );
+		break;
+	    case 'D' : /* Parameter definition: could be used for all parameters */
+		arg = g.getOptarg();
+		int index = arg.indexOf('=');
+		if ( index != -1 ) {
+		    params.setProperty( arg.substring( 0, index), 
+					arg.substring(index+1));
+		} else {
+		    System.err.println("Bad parameter syntax: "+g);
+		    usage();
+		    System.exit(0);
+		}
+		break;
+	    }
+	}
+
+	// We need an ontology
+	int i = g.getOptind();
+	
+	if ( args.length > i ) {
+	    fileName = args[i];
+	    params.setProperty( "filename", fileName );
+	} else {
+	    System.out.println("Require the seed ontology filename");
+	    usage();
+	    return;
+	}
+
+	if ( debug > 0 ) System.err.println( " >>>> "+methodName+" from "+fileName );
+
+	if ( methodName == null ) { // generate one test
+	    TestGenerator tg = new TestGenerator();
+	    tg.setDirPrefix( dir );
+	    tg.setURLPrefix( url );
+	    tg.modifyOntology( fileName, (Properties)null, (String)null, params );
+	} else { // generate a test set
+	    TestSet tset = null;
+	    try {
+		Object[] mparams = {};
+		Class<?> testSetClass = Class.forName( methodName );
+		Class[] cparams = {};
+		java.lang.reflect.Constructor testSetConstructor = testSetClass.getConstructor(cparams);
+		tset = (TestSet)testSetConstructor.newInstance(mparams);
+	    } catch (Exception ex) {
+		System.err.println("Cannot create TestSet "+methodName+"\n"+ex.getMessage());
+		usage();
+		throw ex;
+	    }
+	    tset.generate( params );
+	}
     }
 
-     public void printUsage() {
-         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("--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( "[--------------------------------------------------------------------------]" );
-         System.out.println( "[------------- The list of all modification is the following: --------------]" );
-         System.out.println( "[1. Remove percentage subclasses       \""+ParametersIds.REMOVE_CLASSES+"\"    --------------]" );
-         System.out.println( "[2. Remove percentage properties       \""+ParametersIds.REMOVE_PROPERTIES+"\"    --------------]" );
-         System.out.println( "[3. Remove percentage comments         \""+ParametersIds.REMOVE_COMMENTS+"\"     --------------]" );
-         System.out.println( "[4. Remove percentage restrictions     \""+ParametersIds.REMOVE_RESTRICTIONS+"\" --------------]" );
-         System.out.println( "[5. Remove individuals                 \""+ParametersIds.REMOVE_INDIVIDUALS+"\"   ------------]" );
-         System.out.println( "[6. Add percentage subclasses          \""+ParametersIds.ADD_CLASSES+"\"       --------------]" );
-         System.out.println( "[7. Add percentage properties          \""+ParametersIds.ADD_PROPERTIES+"\"       --------------]" );
-         System.out.println( "[8. Rename percentage classes          \""+ParametersIds.RENAME_CLASSES+"\"     --------------]" );
-         System.out.println( "[9. Rename percentage properties       \""+ParametersIds.RENAME_PROPERTIES+"\"  --------------]" );
-         System.out.println( "[10. noHierarchy                       \""+ParametersIds.NO_HIERARCHY+"\"    ---------------]" );
-         System.out.println( "[11. Level flattened                   \""+ParametersIds.LEVEL_FLATTENED+"\"   ---------------]" );
-         System.out.println( "[12. Add nbClasses to a specific level \""+ParametersIds.ADD_CLASSESLEVEL+"\"       ---------------]" );
-         System.out.println( "[--------------------------------------------------------------------------]" );
+    public void usage() {
+	System.out.println("TestGen [options] filename");
+	System.out.println("such that filename is the filename of the seed ontology\n");
+	System.out.println("options are:");
+	System.out.println("\t--urlprefix=url");
+	System.out.println("\t--testset=classname, where classname is the name of an implementation of TestSet");
+	System.out.println("\t--alignname=filename [default: refalign.rdf]");
+	System.out.println("\t--ontoname=filename [default: onto.rdf]");
+	System.out.println("\t--outdir=directory [default: .]");
+	System.out.println("\t--help");
+	System.out.println("\t--debug=number [default: 0]");
+	System.out.println("\t-Dparameter=value");
+	System.out.println("where the parameters are");
+	System.out.println( "\tRemove percentage subclasses       \""+ParametersIds.REMOVE_CLASSES+"\"" );
+	System.out.println( "\tRemove percentage properties       \""+ParametersIds.REMOVE_PROPERTIES+"\"" );
+	System.out.println( "\tRemove percentage comments         \""+ParametersIds.REMOVE_COMMENTS+"\"" );
+	System.out.println( "\tRemove percentage restrictions     \""+ParametersIds.REMOVE_RESTRICTIONS+"\"" );
+	System.out.println( "\tRemove individuals                 \""+ParametersIds.REMOVE_INDIVIDUALS+"\"" );
+	System.out.println( "\tAdd percentage subclasses          \""+ParametersIds.ADD_CLASSES+"\"" );
+	System.out.println( "\tAdd percentage properties          \""+ParametersIds.ADD_PROPERTIES+"\"" );
+	System.out.println( "\tRename percentage classes          \""+ParametersIds.RENAME_CLASSES+"\"" );
+	System.out.println( "\tRename percentage properties       \""+ParametersIds.RENAME_PROPERTIES+"\"" );
+	System.out.println( "\tnoHierarchy                        \""+ParametersIds.NO_HIERARCHY+"\"" );
+	System.out.println( "\tLevel flattened                    \""+ParametersIds.LEVEL_FLATTENED+"\"" );
+	System.out.println( "\tAdd nbClasses to a specific level  \""+ParametersIds.ADD_CLASSESLEVEL+"\"" );
     }
-    
 }
diff --git a/src/fr/inrialpes/exmo/align/gen/BenchmarkGenerator.java b/src/fr/inrialpes/exmo/align/gen/BenchmarkGenerator.java
index f35d5935..10a35ea5 100644
--- a/src/fr/inrialpes/exmo/align/gen/BenchmarkGenerator.java
+++ b/src/fr/inrialpes/exmo/align/gen/BenchmarkGenerator.java
@@ -54,7 +54,7 @@ public class BenchmarkGenerator extends TestSet {
 	if ( debug ) System.err.println( " Mod: "+mod+" / Incr: "+incr+" / Max: "+maximum );
 
         /* Test 101 Generate the initial situation */
-	root = initTests( "101" );
+	initTests( "101" );
 	String PREVTEST = "101";
 
 	String SUFFIX = null;
diff --git a/src/fr/inrialpes/exmo/align/gen/DiscriminantGenerator.java b/src/fr/inrialpes/exmo/align/gen/DiscriminantGenerator.java
index baa26df5..54a9347a 100644
--- a/src/fr/inrialpes/exmo/align/gen/DiscriminantGenerator.java
+++ b/src/fr/inrialpes/exmo/align/gen/DiscriminantGenerator.java
@@ -58,7 +58,7 @@ public class DiscriminantGenerator extends TestSet {
 	if ( debug ) System.err.println( " STEP: "+STEP+" / INCR: "+INCR );
 
         /* Test 000 Generate the initial situation */
-	root = initTests( "000" );
+	initTests( "000" );
 
 	for ( int i = 0; i < STEP; i++ ) {
 	    String label1 = i+"00";
@@ -83,6 +83,4 @@ public class DiscriminantGenerator extends TestSet {
 	    }
 	}
     }
-
-
 }
diff --git a/src/fr/inrialpes/exmo/align/gen/TestSet.java b/src/fr/inrialpes/exmo/align/gen/TestSet.java
index a70e471b..de5b7e5d 100644
--- a/src/fr/inrialpes/exmo/align/gen/TestSet.java
+++ b/src/fr/inrialpes/exmo/align/gen/TestSet.java
@@ -1,7 +1,7 @@
 /*
  * $Id$
  *
- * Copyright (C) 2011, INRIA
+ * Copyright (C) 2011-2012, INRIA
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -66,6 +66,7 @@ public abstract class TestSet {
     public TestCase initTests( String name ) {
 	TestCase c = TestCase.initTestTree( name );
 	tests.put( name, c );
+	root = c;
 	return c;
     }
 
-- 
GitLab