From 75bf443c2c7f007dc4a8467431da6fbe59cbd43d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr>
Date: Thu, 16 Jan 2014 20:25:53 +0000
Subject: [PATCH] - improved reflect use

---
 .../inrialpes/exmo/align/cli/EvalAlign.java   |  8 +-
 src/fr/inrialpes/exmo/align/cli/GenPlot.java  |  3 +-
 .../inrialpes/exmo/align/cli/GroupAlign.java  | 10 +--
 .../inrialpes/exmo/align/cli/GroupEval.java   |  3 +-
 .../exmo/align/cli/ParserPrinter.java         | 15 ++--
 .../inrialpes/exmo/align/cli/Procalign.java   | 14 ++--
 src/fr/inrialpes/exmo/align/cli/TestGen.java  |  7 +-
 .../exmo/align/impl/BasicRelation.java        | 75 +++++++++----------
 .../impl/method/StringDistAlignment.java      | 13 ++--
 .../exmo/align/service/AlignmentService.java  |  2 +-
 10 files changed, 69 insertions(+), 81 deletions(-)

diff --git a/src/fr/inrialpes/exmo/align/cli/EvalAlign.java b/src/fr/inrialpes/exmo/align/cli/EvalAlign.java
index 45a5c4c9..49b25402 100644
--- a/src/fr/inrialpes/exmo/align/cli/EvalAlign.java
+++ b/src/fr/inrialpes/exmo/align/cli/EvalAlign.java
@@ -41,6 +41,7 @@ import java.io.FileOutputStream;
 import java.io.PrintWriter;
 import java.io.BufferedWriter;
 import java.io.OutputStreamWriter;
+import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 
 import org.slf4j.Logger;
@@ -140,11 +141,10 @@ public class EvalAlign extends CommonCLI {
 	    if ( classname != null ) {
 		// Create evaluator object
 		try {
+		    Class[] cparams = { Alignment.class, Alignment.class };
+		    Class<?> evaluatorClass = Class.forName(classname);
+		    Constructor evaluatorConstructor = evaluatorClass.getConstructor(cparams);
 		    Object [] mparams = {(Object)align1, (Object)align2};
-		    Class<?> oClass = Class.forName("org.semanticweb.owl.align.Alignment");
-		    Class[] cparams = { oClass, oClass };
-		    Class<?> evaluatorClass =  Class.forName(classname);
-		    java.lang.reflect.Constructor evaluatorConstructor = evaluatorClass.getConstructor(cparams);
 		    eval = (Evaluator)evaluatorConstructor.newInstance(mparams);
 		} catch (ClassNotFoundException ex) {
 		    logger.debug( "IGNORED Exception", ex );
diff --git a/src/fr/inrialpes/exmo/align/cli/GenPlot.java b/src/fr/inrialpes/exmo/align/cli/GenPlot.java
index 13847d3e..5bb8a6a5 100644
--- a/src/fr/inrialpes/exmo/align/cli/GenPlot.java
+++ b/src/fr/inrialpes/exmo/align/cli/GenPlot.java
@@ -160,8 +160,7 @@ public class GenPlot extends CommonCLI {
 
 	// JE: This is not used
 	Class<?> evalClass = Class.forName( evalCN );
-	Class<?> alClass = Class.forName( "org.semanticweb.owl.align.Alignment" );
-	Class[] caparams = { alClass, alClass };
+	Class[] caparams = { Alignment.class, Alignment.class };
 	evalConstructor = evalClass.getConstructor( caparams );
 
 	// Collect correspondences from alignments in all directories
diff --git a/src/fr/inrialpes/exmo/align/cli/GroupAlign.java b/src/fr/inrialpes/exmo/align/cli/GroupAlign.java
index 01298e58..8310916d 100644
--- a/src/fr/inrialpes/exmo/align/cli/GroupAlign.java
+++ b/src/fr/inrialpes/exmo/align/cli/GroupAlign.java
@@ -43,6 +43,7 @@ import java.lang.Long;
 import java.util.Hashtable;
 import java.util.Enumeration;
 import java.util.Properties;
+import java.lang.reflect.Constructor;
 
 import org.xml.sax.SAXException;
 
@@ -205,8 +206,7 @@ public class GroupAlign extends CommonCLI {
 		Object[] mparams = {};
 		Class[] cparams = {};
 		Class<?> alignmentClass = Class.forName( alignmentClassName );
-		java.lang.reflect.Constructor alignmentConstructor =
-		    alignmentClass.getConstructor(cparams);
+		Constructor alignmentConstructor = alignmentClass.getConstructor(cparams);
 		result = (AlignmentProcess)alignmentConstructor.newInstance( mparams );
 		result.init( uri1, uri2 );
 	    } catch (Exception ex) {
@@ -232,10 +232,10 @@ public class GroupAlign extends CommonCLI {
 	    AlignmentVisitor renderer = null;
 
 	    try {
-		Object[] mparams = { (Object)writer };
-		Class[] cparams = { Class.forName("java.io.PrintWriter") };
-		java.lang.reflect.Constructor rendererConstructor =
+		Class[] cparams = { PrintWriter.class };
+		Constructor rendererConstructor =
 		    Class.forName(rendererClass).getConstructor(cparams);
+		Object[] mparams = { (Object)writer };
 		renderer = (AlignmentVisitor)rendererConstructor.newInstance(mparams);
 	    } catch (Exception ex) {
 		logger.debug( "Cannot create renderer {}", rendererClass );
diff --git a/src/fr/inrialpes/exmo/align/cli/GroupEval.java b/src/fr/inrialpes/exmo/align/cli/GroupEval.java
index d858439a..942daabf 100644
--- a/src/fr/inrialpes/exmo/align/cli/GroupEval.java
+++ b/src/fr/inrialpes/exmo/align/cli/GroupEval.java
@@ -153,8 +153,7 @@ public class GroupEval extends CommonCLI {
 	}
 
 	Class<?> evalClass = Class.forName( classname );
-	Class<?> alClass = Class.forName( "org.semanticweb.owl.align.Alignment" );
-	Class[] cparams = { alClass, alClass };
+	Class[] cparams = { Alignment.class, Alignment.class };
 	evalConstructor = evalClass.getConstructor( cparams );
 
 	print( iterateDirectories() );
diff --git a/src/fr/inrialpes/exmo/align/cli/ParserPrinter.java b/src/fr/inrialpes/exmo/align/cli/ParserPrinter.java
index 33247689..a395bee7 100644
--- a/src/fr/inrialpes/exmo/align/cli/ParserPrinter.java
+++ b/src/fr/inrialpes/exmo/align/cli/ParserPrinter.java
@@ -1,7 +1,7 @@
 /*
  * $Id$
  *
- * Copyright (C) INRIA, 2003-2004, 2007-2008, 2011-2013
+ * Copyright (C) INRIA, 2003-2004, 2007-2008, 2011-2014
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -32,6 +32,7 @@ import java.io.FileOutputStream;
 import java.io.PrintWriter;
 import java.io.BufferedWriter;
 import java.io.OutputStreamWriter;
+import java.lang.reflect.Constructor;
 
 import org.xml.sax.SAXException;
 
@@ -148,7 +149,7 @@ public class ParserPrinter extends CommonCLI {
 	    else {
 		try {
 		    Class[] cparams = {};
-		    java.lang.reflect.Constructor parserConstructor =
+		    Constructor parserConstructor =
 			Class.forName(parserClass).getConstructor(cparams);
 		    Object[] mparams = {};
 		    aparser = (AlignmentParser) parserConstructor.newInstance(mparams);
@@ -190,12 +191,10 @@ public class ParserPrinter extends CommonCLI {
 	    if ( rendererClass == null ) renderer = new RDFRendererVisitor( writer );
 	    else {
 		try {
-		    Object[] mparams = {(Object) writer };
-		    // JE: Not terrible: use the right constructor
-		    java.lang.reflect.Constructor[] rendererConstructors =
-			Class.forName(rendererClass).getConstructors();
-		    renderer =
-			(AlignmentVisitor) rendererConstructors[0].newInstance(mparams);
+		    Class[] cparams = { PrintWriter.class };
+		    Constructor rendererConstructor = Class.forName(rendererClass).getConstructor( cparams );
+		    Object[] mparams = { (Object)writer };
+		    renderer = (AlignmentVisitor) rendererConstructor.newInstance( mparams );
 		} catch (Exception ex) {
 		    logger.error( "Cannot create renderer {}", rendererClass );
 		    usage();
diff --git a/src/fr/inrialpes/exmo/align/cli/Procalign.java b/src/fr/inrialpes/exmo/align/cli/Procalign.java
index 7bac26a6..85784391 100644
--- a/src/fr/inrialpes/exmo/align/cli/Procalign.java
+++ b/src/fr/inrialpes/exmo/align/cli/Procalign.java
@@ -1,7 +1,7 @@
 /*
  * $Id$
  *
- * Copyright (C) 2003-2008, 2010-2013 INRIA
+ * Copyright (C) 2003-2008, 2010-2014 INRIA
  * Copyright (C) 2004, Université de Montréal
  *
  * This program is free software; you can redistribute it and/or
@@ -167,7 +167,7 @@ public class Procalign extends CommonCLI {
 	    Class[] cparams = {};
 	    Constructor alignmentConstructor = alignmentClass.getConstructor(cparams);
 	    Object[] mparams = {};
-	    result = (AlignmentProcess)alignmentConstructor.newInstance(mparams);
+	    result = (AlignmentProcess)alignmentConstructor.newInstance( mparams );
 	    result.init( onto1, onto2 );
 	} catch ( Exception ex ) {
 	    logger.error( "Cannot create alignment {}", alignmentClassName );
@@ -202,12 +202,10 @@ public class Procalign extends CommonCLI {
 
 	    // Result printing (to be reimplemented with a default value)
 	    try {
-		Object[] mparams = {(Object) writer };
-		java.lang.reflect.Constructor[] rendererConstructors =
-		    Class.forName(rendererClass).getConstructors();
-		// JE: Not terrible: use the right constructor
-		renderer =
-		    (AlignmentVisitor) rendererConstructors[0].newInstance(mparams);
+		Class[] cparams = { PrintWriter.class };
+		Constructor rendererConstructor = Class.forName(rendererClass).getConstructor( cparams );
+		    Object[] mparams = { (Object)writer };
+		    renderer = (AlignmentVisitor) rendererConstructor.newInstance( mparams );
 	    } catch (Exception ex) {
 		logger.error( "Cannot create renderer {}", rendererClass );
 		usage();
diff --git a/src/fr/inrialpes/exmo/align/cli/TestGen.java b/src/fr/inrialpes/exmo/align/cli/TestGen.java
index b5077d29..2ed9f133 100644
--- a/src/fr/inrialpes/exmo/align/cli/TestGen.java
+++ b/src/fr/inrialpes/exmo/align/cli/TestGen.java
@@ -22,6 +22,7 @@
 package fr.inrialpes.exmo.align.cli;
 
 import java.util.Properties;
+import java.lang.reflect.Constructor;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -123,11 +124,11 @@ public class TestGen extends CommonCLI {
 	} 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);
+		Constructor testSetConstructor = testSetClass.getConstructor(cparams);
+		Object[] mparams = {};
+		tset = (TestSet)testSetConstructor.newInstance( mparams );
 	    } catch (Exception ex) {
 		logger.error("Cannot create TestSet {}", methodName );
 		logger.error("Caught error", ex );
diff --git a/src/fr/inrialpes/exmo/align/impl/BasicRelation.java b/src/fr/inrialpes/exmo/align/impl/BasicRelation.java
index f1dc9691..5edd37af 100644
--- a/src/fr/inrialpes/exmo/align/impl/BasicRelation.java
+++ b/src/fr/inrialpes/exmo/align/impl/BasicRelation.java
@@ -1,7 +1,7 @@
 /*
  * $Id$
  *
- * Copyright (C) INRIA, 2003-2005, 2007, 2009-2013
+ * Copyright (C) INRIA, 2003-2005, 2007, 2009-2014
  *
  * 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
@@ -22,6 +22,14 @@ package fr.inrialpes.exmo.align.impl;
 
 import fr.inrialpes.exmo.align.parser.TypeCheckingVisitor;
 
+import fr.inrialpes.exmo.align.impl.rel.EquivRelation;
+import fr.inrialpes.exmo.align.impl.rel.SubsumedRelation;
+import fr.inrialpes.exmo.align.impl.rel.SubsumeRelation;
+import fr.inrialpes.exmo.align.impl.rel.IncompatRelation;
+import fr.inrialpes.exmo.align.impl.rel.InstanceOfRelation;
+import fr.inrialpes.exmo.align.impl.rel.HasInstanceRelation;
+import fr.inrialpes.exmo.align.impl.rel.NonTransitiveImplicationRelation;
+
 import org.semanticweb.owl.align.AlignmentException;
 import org.semanticweb.owl.align.AlignmentVisitor;
 import org.semanticweb.owl.align.Relation;
@@ -30,7 +38,6 @@ import org.xml.sax.ContentHandler;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
-import java.lang.ClassNotFoundException;
 import java.io.PrintWriter;
 import java.util.HashMap;
 import java.util.Map;
@@ -55,44 +62,32 @@ public class BasicRelation implements Relation {
 	    throw new NullPointerException("The string to search must not be null");
 	if ( classIndex == null ){
 	    classIndex = new HashMap<String, Class<?>>();
-	    try {
-		Class<?> eq = Class.forName("fr.inrialpes.exmo.align.impl.rel.EquivRelation");
-		Class<?> sub = Class.forName("fr.inrialpes.exmo.align.impl.rel.SubsumedRelation");
-		Class<?> sup = Class.forName("fr.inrialpes.exmo.align.impl.rel.SubsumeRelation");
-		Class<?> dis = Class.forName("fr.inrialpes.exmo.align.impl.rel.IncompatRelation");
-		Class<?> ins = Class.forName("fr.inrialpes.exmo.align.impl.rel.InstanceOfRelation");
-		Class<?> has = Class.forName("fr.inrialpes.exmo.align.impl.rel.HasInstanceRelation");
-		Class<?> nti = Class.forName("fr.inrialpes.exmo.align.impl.rel.NonTransitiveImplicationRelation");
-		
-		classIndex.put( "Equivalence", eq );
-		classIndex.put( "=", eq );
-		classIndex.put( "equivalence", eq );
-		classIndex.put( "ClassMapping", eq );
-		
-		classIndex.put( "Subsumes", sup );
-		classIndex.put( ">", sup );
-		classIndex.put( "&gt;", sup );
-		
-		classIndex.put( "SubsumedBy", sub );
-		classIndex.put( "<", sub );
-		classIndex.put( "&lt;", sub );
-		
-		classIndex.put("><", dis );
-		classIndex.put("%", dis );
-		classIndex.put("DisjointFrom",dis);
-		classIndex.put("Disjoint",dis);
-		classIndex.put("disjointFrom",dis);
-		classIndex.put("disjoint",dis);
+	    classIndex.put( "Equivalence", EquivRelation.class );
+	    classIndex.put( "=", EquivRelation.class );
+	    classIndex.put( "equivalence", EquivRelation.class );
+	    classIndex.put( "ClassMapping", EquivRelation.class );
+	    
+	    classIndex.put( "Subsumes", SubsumeRelation.class );
+	    classIndex.put( ">", SubsumeRelation.class );
+	    classIndex.put( "&gt;", SubsumeRelation.class );
+	    
+	    classIndex.put( "SubsumedBy", SubsumedRelation.class );
+	    classIndex.put( "<", SubsumedRelation.class );
+	    classIndex.put( "&lt;", SubsumedRelation.class );
 	    
-		classIndex.put( "InstanceOf", ins );
+	    classIndex.put("><", IncompatRelation.class );
+	    classIndex.put("%", IncompatRelation.class );
+	    classIndex.put("DisjointFrom",IncompatRelation.class);
+	    classIndex.put("Disjoint",IncompatRelation.class);
+	    classIndex.put("disjointFrom",IncompatRelation.class);
+	    classIndex.put("disjoint",IncompatRelation.class);
 	    
-		classIndex.put( "HasInstance", has );
+	    classIndex.put( "InstanceOf", InstanceOfRelation.class );
+	    
+	    classIndex.put( "HasInstance", HasInstanceRelation.class );
 
-		classIndex.put( "~>", nti );
-		classIndex.put( "~&gt;", nti );
-	    } catch ( ClassNotFoundException cnfe ) {
-		logger.debug( "IGNORED Exception (should never occur)", cnfe );
-	    }
+	    classIndex.put( "~>", NonTransitiveImplicationRelation.class );
+	    classIndex.put( "~&gt;", NonTransitiveImplicationRelation.class );
 	}
 	return classIndex.get(label);
     }
@@ -172,11 +167,9 @@ public class BasicRelation implements Relation {
 
     /** Are the two relations equal **/
     public boolean equals( Relation r ) {
-	if ( r instanceof BasicRelation ){
+	if ( r instanceof BasicRelation )
 	    return ( relation.equals( ((BasicRelation)r).getRelation() ) );
-	} else {
-	    return false;
-	}
+	return false;
     }
     public int hashCode() {
 	return 19+relation.hashCode();
diff --git a/src/fr/inrialpes/exmo/align/impl/method/StringDistAlignment.java b/src/fr/inrialpes/exmo/align/impl/method/StringDistAlignment.java
index 78b76d4a..0c3cb66f 100644
--- a/src/fr/inrialpes/exmo/align/impl/method/StringDistAlignment.java
+++ b/src/fr/inrialpes/exmo/align/impl/method/StringDistAlignment.java
@@ -1,7 +1,7 @@
 /*
  * $Id$
  *
- * Copyright (C) INRIA, 2003-2011, 2013
+ * Copyright (C) INRIA, 2003-2011, 2013-2014
  *
  * 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
@@ -31,6 +31,8 @@ import org.semanticweb.owl.align.Alignment;
 import org.semanticweb.owl.align.AlignmentProcess;
 import org.semanticweb.owl.align.AlignmentException;
 
+import fr.inrialpes.exmo.ontosim.string.StringDistances;
+
 import fr.inrialpes.exmo.align.impl.DistanceAlignment;
 import fr.inrialpes.exmo.align.impl.MatrixMeasure;
 
@@ -102,12 +104,9 @@ public class StringDistAlignment extends DistanceAlignment implements AlignmentP
 	String f = params.getProperty("stringFunction");
 	try {
 	    if ( f != null ) methodName = f.trim();
-	    Class sClass = Class.forName("java.lang.String");
-	    Class[] mParams = { sClass, sClass };
-	    dissimilarity = Class.forName("fr.inrialpes.exmo.ontosim.string.StringDistances").getMethod( methodName, mParams );
-	} catch (ClassNotFoundException e) {
-	    logger.debug( "IGNORED (never happens)", e ); // never happens
-	} catch (NoSuchMethodException e) {
+	    Class[] mParams = { String.class, String.class };
+	    dissimilarity = StringDistances.class.getMethod( methodName, mParams );
+	} catch ( NoSuchMethodException e ) {
 	    throw new AlignmentException( "Unknown method for StringDistAlignment : "+params.getProperty("stringFunction"), e );
 	}
 
diff --git a/src/fr/inrialpes/exmo/align/service/AlignmentService.java b/src/fr/inrialpes/exmo/align/service/AlignmentService.java
index 152b088e..4d6c641f 100644
--- a/src/fr/inrialpes/exmo/align/service/AlignmentService.java
+++ b/src/fr/inrialpes/exmo/align/service/AlignmentService.java
@@ -238,7 +238,7 @@ public class AlignmentService extends CommonCLI {
     }
 
     protected Object loadInstance( String className ) throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
-	Class<?> cl = Class.forName(className);
+	Class<?> cl = Class.forName( className );
 	java.lang.reflect.Constructor constructor = cl.getConstructor( (Class[])null );
 	return constructor.newInstance( (Object[])null );
     }
-- 
GitLab