/* * Copyright 2004-2010 Information & Software Engineering Group (188/1) * Institute of Software Technology and Interactive Systems * Vienna University of Technology, Austria * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.ifs.tuwien.ac.at/dm/somtoolbox/license.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package at.tuwien.ifs.somtoolbox.util; import java.util.Comparator; import org.apache.commons.lang.StringUtils; /** * Comparator for two Strings, with special Integer comparison if these Strings are actually Integer values. * * @author Rudolf Mayer * @version $Id: StringIntegerComparator.java 3590 2010-05-21 10:43:45Z mayer $ */ public class StringIntegerComparator implements Comparator<String> { boolean allIntegers = false; boolean checkedValues = false; public StringIntegerComparator() { allIntegers = false; checkedValues = false; } public StringIntegerComparator(String[] classNames) { allIntegers = true; for (String string : classNames) { if (!StringUtils.isNumeric(string.trim())) { allIntegers = false; break; } } checkedValues = true; } @Override public int compare(String o1, String o2) { if (checkedValues && allIntegers || // we checked before that we have only ints !checkedValues && StringUtils.isNumeric(o1.trim()) && StringUtils.isNumeric(o2.trim())) { // no // checking, // but both // in return Integer.valueOf(o1.trim()).compareTo(Integer.valueOf(o2.trim())); // => do integer comparison } else { // otherwise => string comparison return o1.compareTo(o2); } } }