/*FreeMind - A Program for creating and viewing Mindmaps *Copyright (C) 2000-2006 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitri Polivaev and others. * *See COPYING for Details * *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 the Free Software Foundation; either version 2 *of the License, or (at your option) any later version. * *This program is distributed in the hope that it will be useful, *but WITHOUT ANY WARRANTY; without even the implied warranty of *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *GNU General Public License for more details. * *You should have received a copy of the GNU General Public License *along with this program; if not, write to the Free Software *Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Created on 17.05.2005 * */ package freemind.controller.filter.condition; import javax.swing.JComponent; import javax.swing.JLabel; import freemind.common.NamedObject; import freemind.main.Resources; import freemind.main.XMLElement; /** * @author dimitri 17.05.2005 */ public class ConditionFactory { static final String FILTER_ICON = "filter_icon"; static final String FILTER_NODE = "filter_node"; static final String FILTER_DOES_NOT_EXIST = "filter_does_not_exist"; static final String FILTER_EXIST = "filter_exist"; static final String FILTER_CONTAINS = "filter_contains"; static final String FILTER_NOT_CONTAINS = "filter_not_contains"; static final String FILTER_IS_NOT_EQUAL_TO = "filter_is_not_equal_to"; static final String FILTER_IS_EQUAL_TO = "filter_is_equal_to"; static final String FILTER_LE = "<="; static final String FILTER_LT = "<"; static final String FILTER_GE = ">="; static final String FILTER_GT = ">"; static final String FILTER_IGNORE_CASE = "filter_ignore_case"; /** * */ public ConditionFactory() { } static String createDescription(String attribute, String simpleCondition, String value, boolean ignoreCase) { String description = attribute + " " + simpleCondition + (value != null ? " \"" + value + "\"" : "") + (ignoreCase && value != null ? ", " + Resources.getInstance().getResourceString( FILTER_IGNORE_CASE) : ""); return description; } public Condition loadCondition(XMLElement element) { if (element.getName().equalsIgnoreCase(NodeContainsCondition.NAME)) return NodeContainsCondition.load(element); if (element.getName().equalsIgnoreCase( IgnoreCaseNodeContainsCondition.NAME)) return IgnoreCaseNodeContainsCondition.load(element); if (element.getName().equalsIgnoreCase(NodeCompareCondition.NAME)) return NodeCompareCondition.load(element); if (element.getName().equalsIgnoreCase(AttributeCompareCondition.NAME)) return AttributeCompareCondition.load(element); if (element.getName().equalsIgnoreCase(AttributeExistsCondition.NAME)) return AttributeExistsCondition.load(element); if (element.getName() .equalsIgnoreCase(AttributeNotExistsCondition.NAME)) return AttributeNotExistsCondition.load(element); if (element.getName().equalsIgnoreCase(IconContainedCondition.NAME)) return IconContainedCondition.load(element); if (element.getName().equalsIgnoreCase(IconNotContainedCondition.NAME)) return IconNotContainedCondition.load(element); if (element.getName().equalsIgnoreCase( ConditionNotSatisfiedDecorator.NAME)) { return ConditionNotSatisfiedDecorator.load(element); } if (element.getName().equalsIgnoreCase(ConjunctConditions.NAME)) { return ConjunctConditions.load(element); } if (element.getName().equalsIgnoreCase(DisjunctConditions.NAME)) { return DisjunctConditions.load(element); } return null; } public Condition createAttributeCondition(String attribute, NamedObject simpleCondition, String value, boolean ignoreCase) { if (simpleCondition.equals(FILTER_EXIST)) return new AttributeExistsCondition(attribute); if (simpleCondition.equals(FILTER_DOES_NOT_EXIST)) return new AttributeNotExistsCondition(attribute); if (ignoreCase) { if (simpleCondition.equals(FILTER_IS_EQUAL_TO)) return new AttributeCompareCondition(attribute, value, true, 0, true); if (simpleCondition.equals(FILTER_IS_NOT_EQUAL_TO)) return new AttributeCompareCondition(attribute, value, true, 0, false); if (simpleCondition.equals(FILTER_GT)) return new AttributeCompareCondition(attribute, value, true, 1, true); if (simpleCondition.equals(FILTER_GE)) return new AttributeCompareCondition(attribute, value, true, -1, false); if (simpleCondition.equals(FILTER_LT)) return new AttributeCompareCondition(attribute, value, true, -1, true); if (simpleCondition.equals(FILTER_LE)) return new AttributeCompareCondition(attribute, value, true, 1, false); } else { if (simpleCondition.equals(FILTER_IS_EQUAL_TO)) return new AttributeCompareCondition(attribute, value, false, 0, true); if (simpleCondition.equals(FILTER_IS_NOT_EQUAL_TO)) return new AttributeCompareCondition(attribute, value, false, 0, false); if (simpleCondition.equals(FILTER_GT)) return new AttributeCompareCondition(attribute, value, false, 1, true); if (simpleCondition.equals(FILTER_GE)) return new AttributeCompareCondition(attribute, value, false, -1, false); if (simpleCondition.equals(FILTER_LT)) return new AttributeCompareCondition(attribute, value, false, -1, true); if (simpleCondition.equals(FILTER_LE)) return new AttributeCompareCondition(attribute, value, false, 1, false); } return null; } public Condition createCondition(NamedObject attribute, NamedObject simpleCondition, String value, boolean ignoreCase) { if (attribute.equals(FILTER_ICON) && simpleCondition.equals(FILTER_CONTAINS)) return new IconContainedCondition(value); if (attribute.equals(FILTER_ICON) && simpleCondition.equals(FILTER_NOT_CONTAINS) ) return new IconNotContainedCondition(value); if (attribute.equals(FILTER_NODE)) { return createNodeCondition(simpleCondition, value, ignoreCase); } return null; } public NamedObject[] getNodeConditionNames() { return new NamedObject[] { // TranslatedString.create("filter_exist"), // TranslatedString.create("filter_does_not_exist"), Resources.getInstance().createTranslatedString(FILTER_CONTAINS), Resources.getInstance().createTranslatedString( FILTER_IS_EQUAL_TO), Resources.getInstance().createTranslatedString( FILTER_IS_NOT_EQUAL_TO), NamedObject.literal(FILTER_GT), NamedObject.literal(FILTER_GE), NamedObject.literal(FILTER_LE), NamedObject.literal(FILTER_LT), }; } public Object[] getIconConditionNames() { return new NamedObject[] { Resources.getInstance() .createTranslatedString(FILTER_CONTAINS), Resources.getInstance().createTranslatedString(FILTER_NOT_CONTAINS), }; } public NamedObject[] getAttributeConditionNames() { return new NamedObject[] { Resources.getInstance().createTranslatedString(FILTER_EXIST), Resources.getInstance().createTranslatedString( FILTER_DOES_NOT_EXIST), // TranslatedString.create("filter_contains"), Resources.getInstance().createTranslatedString( FILTER_IS_EQUAL_TO), Resources.getInstance().createTranslatedString( FILTER_IS_NOT_EQUAL_TO), NamedObject.literal(FILTER_GT), NamedObject.literal(FILTER_GE), NamedObject.literal(FILTER_LE), NamedObject.literal(FILTER_LT), }; } protected Condition createNodeCondition(NamedObject simpleCondition, String value, boolean ignoreCase) { if (ignoreCase) { if (simpleCondition.equals(FILTER_CONTAINS)) { if (value.equals("")) return null; return new IgnoreCaseNodeContainsCondition(value); } if (simpleCondition.equals(FILTER_IS_EQUAL_TO)) return new NodeCompareCondition(value, true, 0, true); if (simpleCondition.equals(FILTER_IS_NOT_EQUAL_TO)) return new NodeCompareCondition(value, true, 0, false); if (simpleCondition.equals(FILTER_GT)) return new NodeCompareCondition(value, true, 1, true); if (simpleCondition.equals(FILTER_GE)) return new NodeCompareCondition(value, true, -1, false); if (simpleCondition.equals(FILTER_LT)) return new NodeCompareCondition(value, true, -1, true); if (simpleCondition.equals(FILTER_LE)) return new NodeCompareCondition(value, true, 1, false); } else { if (simpleCondition.equals(FILTER_CONTAINS)) { if (value.equals("")) return null; return new NodeContainsCondition(value); } if (simpleCondition.equals(FILTER_IS_EQUAL_TO)) return new NodeCompareCondition(value, false, 0, true); if (simpleCondition.equals(FILTER_IS_NOT_EQUAL_TO)) return new NodeCompareCondition(value, false, 0, false); if (simpleCondition.equals(FILTER_GT)) return new NodeCompareCondition(value, false, 1, true); if (simpleCondition.equals(FILTER_GE)) return new NodeCompareCondition(value, false, -1, false); if (simpleCondition.equals(FILTER_LT)) return new NodeCompareCondition(value, false, -1, true); if (simpleCondition.equals(FILTER_LE)) return new NodeCompareCondition(value, false, 1, false); } return null; } static public JComponent createCellRendererComponent(String description) { JCondition component = new JCondition(); JLabel label = new JLabel(description); component.add(label); return component; } }