/*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 freemind.main.Resources;
import freemind.main.Tools;
import freemind.main.XMLElement;
abstract class CompareConditionAdapter extends NodeCondition {
static final String IGNORE_CASE = "ignore_case";
static final String VALUE = "value";
private String conditionValue;
private boolean ignoreCase;
CompareConditionAdapter(String value, boolean ignoreCase) {
super();
this.conditionValue = value;
this.ignoreCase = ignoreCase;
}
protected int compareTo(String nodeValue) throws NumberFormatException {
try {
int i2 = Integer.parseInt(conditionValue);
int i1 = Integer.parseInt(nodeValue);
return i1 < i2 ? -1 : (i1 == i2 ? 0 : 1);
} catch (NumberFormatException fne) {
}
;
double d2;
try {
d2 = Double.parseDouble(conditionValue);
} catch (NumberFormatException fne) {
return ignoreCase ? nodeValue.compareToIgnoreCase(conditionValue)
: nodeValue.compareTo(conditionValue);
}
;
double d1 = Double.parseDouble(nodeValue);
return Double.compare(d1, d2);
}
public void saveAttributes(XMLElement child) {
super.saveAttributes(child);
child.setAttribute(VALUE, conditionValue);
child.setAttribute(IGNORE_CASE, Tools.BooleanToXml(ignoreCase));
}
public String createDescription(String attribute, int comparationResult,
boolean succeed) {
String simpleCondition;
switch (comparationResult) {
case -1:
simpleCondition = succeed ? ConditionFactory.FILTER_LT
: ConditionFactory.FILTER_GE;
break;
case 0:
simpleCondition = Resources.getInstance().getResourceString(
succeed ? ConditionFactory.FILTER_IS_EQUAL_TO
: ConditionFactory.FILTER_IS_NOT_EQUAL_TO);
break;
case 1:
simpleCondition = succeed ? ConditionFactory.FILTER_GT
: ConditionFactory.FILTER_LE;
break;
default:
throw new IllegalArgumentException();
}
return ConditionFactory.createDescription(attribute, simpleCondition,
conditionValue, ignoreCase);
}
}