diff --git a/src/eva2/gui/BeanInspector.java b/src/eva2/gui/BeanInspector.java index de1b86d9..e8b35bce 100644 --- a/src/eva2/gui/BeanInspector.java +++ b/src/eva2/gui/BeanInspector.java @@ -1,20 +1,9 @@ package eva2.gui; -/* - * Title: EvA2 - * Description: - * Copyright: Copyright (c) 2003 - * Company: University of Tuebingen, Computer Architecture - * @author Holger Ulmer, Felix Streichert, Hannes Planatscher - * @version: $Revision: 202 $ - * $Date: 2007-10-25 16:12:49 +0200 (Thu, 25 Oct 2007) $ - * $Author: mkron $ - */ -/*==========================================================================* - * IMPORTS - *==========================================================================*/ + import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; +import java.beans.MethodDescriptor; import java.beans.PropertyDescriptor; import java.lang.reflect.Array; import java.lang.reflect.Method; @@ -24,37 +13,19 @@ import java.util.List; import eva2.server.go.populations.Population; import eva2.tools.Pair; import eva2.tools.SelectedTag; +import eva2.tools.StringTools; import eva2.tools.Tag; -/* - * ==========================================================================* - * CLASS DECLARATION - * ========================================================================== +/** + * Some miscellaneous functions to help with Beans, reflection, conversion and generic display. + * + * @author mkron, Holger Ulmer, Felix Streichert, Hannes Planatscher + * */ public class BeanInspector { public static boolean TRACE = false; -// public static int step = 0; -// public static String check(String s) { - -// s=s.replace('$','_'); -// s=s.replace(';','_'); -//// String ret = null; -//// try { -//// RE r = new RE("\\["); -//// ret = r.subst(s,""); -//// //ret.substring(); -//// //ret -//// } catch (Exception e) {e.getMessage();}; -//// System.out.println("s="+s+" ret"+ret); -// if (s.equals("[D")) return "Double_Array"; -// if (s.startsWith("[D")) return s.substring(2); -// if (s.startsWith("[L")) return s.substring(2); - -// return s; -// } - /** * Check for equality based on bean properties of two target objects. */ @@ -354,7 +325,7 @@ public class BeanInspector { * @return the return value of the called method or null */ public static Object callIfAvailable(Object obj, String mName, Object[] args) { - Method meth = hasMethod(obj, mName); + Method meth = hasMethod(obj, mName, toClassArray(args)); if (meth != null) { try { return meth.invoke(obj, args); @@ -367,18 +338,63 @@ public class BeanInspector { } /** - * Check whether an object has a method by the given name. Return + * Produce an array of Class instances matching the types of + * the given object array. + * + * @param o + * @return + */ + public static Class[] toClassArray(Object[] o) { + if (o==null) return null; + Class[] clz = new Class[o.length]; + for (int i=0; i cls = obj.getClass(); Method[] meths = cls.getMethods(); for (Method method : meths) { - if (method.getName().equals(mName)) return method; + if (method.getName().equals(mName)) { // name match + Class[] methParamTypes = method.getParameterTypes(); + if (paramTypes==null && methParamTypes.length==0) return method; // full match + else { + if (paramTypes!=null && (methParamTypes.length==paramTypes.length)) { + boolean mismatch = false; int i=0; + while ((i 0) result = tempTip.substring(0, ci); + } + } catch (Exception ex) { + } + break; + } + } + } // end for looking for tiptext + if (toHTMLLen > 0) return StringTools.toHTML(result, toHTMLLen); + else return result; + } + + /** + * This method simply looks for an appropriate tool tip text + * + * @param name The name of the property + * @param methods A list of methods to search. + * @param target The target object + * @return String for the tooltip. + */ + public static String getToolTipText(String name, MethodDescriptor[] methods, Object target) { + return getToolTipText(name, methods, target, false, 0); + } } diff --git a/src/eva2/gui/PropertySheetPanel.java b/src/eva2/gui/PropertySheetPanel.java index 40c3e53d..ebdd017b 100644 --- a/src/eva2/gui/PropertySheetPanel.java +++ b/src/eva2/gui/PropertySheetPanel.java @@ -45,7 +45,6 @@ import javax.swing.JTextArea; import javax.swing.SwingConstants; import eva2.tools.EVAHELP; -import eva2.tools.StringTools; /*==========================================================================* * CLASS DECLARATION *==========================================================================*/ @@ -278,7 +277,7 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener } editor.setValue(value); - m_TipTexts[i] = getToolTipText(name, m_Methods, m_Target, tipTextLineLen); + m_TipTexts[i] = BeanInspector.getToolTipText(name, m_Methods, m_Target, stripToolTipToFirstPoint, tipTextLineLen); // System.out.println("PSP editor class: " + editor.getClass()); newView = getView(editor); @@ -923,39 +922,6 @@ public class PropertySheetPanel extends JPanel implements PropertyChangeListener } } } - - /** This method simply looks for an appropriate tiptext - * @param name The name of the property - * @param methods A list of methods to search. - * @param target The target object - * @return String for the tooltip. - */ - private String getToolTipText(String name, MethodDescriptor[] methods, Object target, int toHTMLLen) { - String result = ""; - String tipName = name + "TipText"; - for (int j = 0; j < methods.length; j++) { - String mname = methods[j].getDisplayName(); - Method meth = methods[j].getMethod(); - if (mname.equals(tipName)) { - if (meth.getReturnType().equals(String.class)) { - try { - Object args[] = { }; - String tempTip = (String)(meth.invoke(target, args)); - result = tempTip; - if (stripToolTipToFirstPoint) { - int ci = tempTip.indexOf('.'); - if (ci > 0) result = tempTip.substring(0, ci); - } - } catch (Exception ex) { - } - break; - } - } - } // end for looking for tiptext - if (toHTMLLen > 0) return StringTools.toHTML(result, toHTMLLen); - else return result; - } - } diff --git a/src/eva2/server/go/individuals/AbstractEAIndividual.java b/src/eva2/server/go/individuals/AbstractEAIndividual.java index 9b4f5825..92f100db 100644 --- a/src/eva2/server/go/individuals/AbstractEAIndividual.java +++ b/src/eva2/server/go/individuals/AbstractEAIndividual.java @@ -954,7 +954,7 @@ public abstract class AbstractEAIndividual implements IndividualInterface, java. sb.append(b[i].getStringRepresentation()); if ((i+1) < b.length) sb.append(separator); } - } else if (BeanInspector.hasMethod(individual, "toString") != null) { + } else if (BeanInspector.hasMethod(individual, "toString", null) != null) { EVAERROR.errorMsgOnce("warning in AbstractEAIndividual::getDefaultDataString: type " + individual.getClass() + " has no default data representation, using toString..."); return individual.toString(); } else { diff --git a/src/eva2/server/go/operators/paramcontrol/ParameterControlManager.java b/src/eva2/server/go/operators/paramcontrol/ParameterControlManager.java index 4fa181ff..351855f0 100644 --- a/src/eva2/server/go/operators/paramcontrol/ParameterControlManager.java +++ b/src/eva2/server/go/operators/paramcontrol/ParameterControlManager.java @@ -162,7 +162,7 @@ public class ParameterControlManager implements InterfaceParameterControl, Seria for (int i=0; i