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( ">", sup ); - - classIndex.put( "SubsumedBy", sub ); - classIndex.put( "<", sub ); - classIndex.put( "<", 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( ">", SubsumeRelation.class ); + + classIndex.put( "SubsumedBy", SubsumedRelation.class ); + classIndex.put( "<", SubsumedRelation.class ); + classIndex.put( "<", 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( "~>", nti ); - } catch ( ClassNotFoundException cnfe ) { - logger.debug( "IGNORED Exception (should never occur)", cnfe ); - } + classIndex.put( "~>", NonTransitiveImplicationRelation.class ); + classIndex.put( "~>", 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