// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.dataquality.record.linkage.ui.composite.table; import java.math.BigDecimal; import java.sql.Timestamp; import java.sql.Types; import java.text.ParseException; import org.apache.commons.lang.StringUtils; /** * DOC yyin class global comment. Detailled comment */ public abstract class SortComparator implements ISortComparator { public static ISortComparator getSortComparator(int javaDataType) throws ParseException { switch (javaDataType) { case Types.DATE: case Types.TIME: return new SortComparator() { @Override public int compareNotNull(Object value1, Object value2) throws ParseException { return java.sql.Date.valueOf(value1.toString()).compareTo(java.sql.Date.valueOf(value2.toString())); } }; case Types.TIMESTAMP: return new SortComparator() { @Override public int compareNotNull(Object value1, Object value2) throws ParseException { return Timestamp.valueOf(value1.toString()).compareTo(Timestamp.valueOf(value2.toString())); } }; case Types.DOUBLE: case Types.REAL: case Types.FLOAT: return new SortComparator() { @Override public int compareNotNull(Object value1, Object value2) throws ParseException { return Double.valueOf(value1.toString()).compareTo(Double.valueOf(value2.toString())); } }; case Types.INTEGER: case Types.TINYINT: case Types.SMALLINT: case Types.NUMERIC: return new SortComparator() { @Override public int compareNotNull(Object value1, Object value2) throws ParseException { return Integer.valueOf(value1.toString()).compareTo(Integer.valueOf(value2.toString())); } }; case Types.BIGINT: return new SortComparator() { @Override public int compareNotNull(Object value1, Object value2) throws ParseException { return Long.valueOf(value1.toString()).compareTo(Long.valueOf(value2.toString())); } }; case Types.DECIMAL: return new SortComparator() { @Override public int compareNotNull(Object value1, Object value2) throws ParseException { if (value1 instanceof BigDecimal) { return ((BigDecimal) value1).compareTo((BigDecimal) value2); } BigDecimal b1 = new BigDecimal(value1.toString()); BigDecimal b2 = new BigDecimal(value2.toString()); return b1.compareTo(b2); } }; case Types.BOOLEAN: case Types.BIT: return new SortComparator() { @Override public int compareNotNull(Object value1, Object value2) throws ParseException { return Boolean.valueOf(value1.toString()).compareTo(Boolean.valueOf(value2.toString())); } }; default:// String return new SortComparator() { @Override public int compareNotNull(Object value1, Object value2) throws ParseException { return value1.toString().compareTo(value2.toString()); } }; } } /* * (non-Javadoc) * * @see org.talend.dataquality.record.linkage.ui.composite.table.ISortComparator#compareTwo(java.lang.Object, * java.lang.Object) */ @Override public int compareTwo(Object value1, Object value2) { if (value1 == null || StringUtils.EMPTY.equals(value1)) { return -1; } else if (value2 == null || StringUtils.EMPTY.equals(value2)) { return 1; } try { return compareNotNull(value1, value2); } catch (ParseException e) { return 0; } } /** * compare the two object * * @param value1 * @param value2 * @return * @throws ParseException */ protected abstract int compareNotNull(Object value1, Object value2) throws ParseException; }