package org.freeplane.features.filter.condition; import java.lang.reflect.Method; import javax.swing.JComponent; import javax.swing.JLabel; import org.freeplane.n3.nanoxml.XMLElement; public abstract class ASelectableCondition implements ICondition{ public static final float STRING_MIN_MATCH_PROB = 0.7F; transient private String description; transient private JComponent renderer; private String userName; private static Method EQUALS; private static Method HASH; static{ try{ final ClassLoader classLoader = ASelectableCondition.class.getClassLoader(); EQUALS = classLoader.loadClass("org.apache.commons.lang.builder.EqualsBuilder").getMethod("reflectionEquals", Object.class, Object.class); HASH = classLoader.loadClass("org.apache.commons.lang.builder.HashCodeBuilder").getMethod("reflectionHashCode", Object.class); } catch(Exception e){ } } public ASelectableCondition() { super(); } @Override public int hashCode() { if(HASH == null){ return super.hashCode(); } try { return (Integer) HASH.invoke(null, this); } catch (Exception e) { e.printStackTrace(); return super.hashCode(); } } @Override public boolean equals(Object obj) { if(EQUALS == null){ return super.equals(obj); } try { return (Boolean) EQUALS.invoke(null, this, obj); } catch (Exception e) { e.printStackTrace(); return super.equals(obj); } } protected abstract String createDescription(); final public JComponent getListCellRendererComponent() { if (renderer == null) { renderer = createRendererComponent(); if(userName != null){ final JCondition jCondition = new JCondition(); jCondition.add(new JLabel(userName + " : ")); jCondition.add(renderer); renderer = jCondition; } } return renderer; } protected JComponent createRendererComponent() { return ConditionFactory.createCellRendererComponent(toString()); } @Override final public String toString() { if (description == null) { description = createDescription(); } return description; } public void toXml(final XMLElement element) { final XMLElement child = new XMLElement(); child.setName(getName()); if(userName != null){ child.setAttribute("user_name", userName); } fillXML(child); element.addChild(child); } protected void fillXML(XMLElement element){} abstract protected String getName(); public void setUserName(String userName) { if(userName == this.userName || userName != null && userName.equals(this.userName)) return; this.userName = userName; renderer = null; } public String getUserName() { return userName; } protected JComponent createShortRendererComponent() { if(userName == null){ return createRendererComponent(); } final JLabel label = new JLabel('"' + userName + '"'); return label; } }