package org.openjump.core.ui.enablecheck; import java.lang.reflect.Method; import javax.swing.JComponent; import com.vividsolutions.jump.workbench.plugin.EnableCheck; import com.vividsolutions.jump.workbench.ui.ErrorHandler; public class PropertyEnableCheck implements EnableCheck { String disabledMessage = ""; /** The check method. */ private Method method; /** The object to invoke the method on. */ private Object object; /** The expected value to be returned for the check to be enabled. */ private Object expectedValue; private ErrorHandler errorHandler; private boolean invert; public PropertyEnableCheck(Object object, String checkMethodName, Object expectedValue, boolean invert, ErrorHandler errorHandler) { this(object, checkMethodName, expectedValue, errorHandler); this.invert = invert; } /** * @param object The object to invoke the method on. * @param checkMethodName The name of the check method which returns a boolean * value. * @param expectedValue The expected value to be returned for the check to be * enabled. */ public PropertyEnableCheck(final Object object, final String checkMethodName, final Object expectedValue, ErrorHandler errorHandler) { Class clazz = object.getClass(); this.object = object; this.expectedValue = expectedValue; this.errorHandler = errorHandler; try { method = clazz.getMethod(checkMethodName, new Class[] {}); } catch (Throwable e) { errorHandler.handleThrowable(e); } } public String check(JComponent component) { try { Object result = method.invoke(object, new Object[0]); if (result == expectedValue) { return getResult(true); } else if (result == null) { return getResult(false); } else if (expectedValue == null) { return getResult(false); } else if (result.equals(expectedValue)) { return getResult(true); } else { return getResult(false); } } catch (Throwable e) { errorHandler.handleThrowable(e); return e.getMessage(); } } private String getResult(boolean equal) { if (equal || invert) { return null; } else { return disabledMessage; } } }