// ============================================================================ // // 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.dataprofiler.core.ui.utils; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.dataprofiler.core.ui.editor.preview.IndicatorUnit; import org.talend.dq.factory.ModelElementFileFactory; import org.talend.dq.helper.RepositoryNodeComparator; import org.talend.dq.indicators.ext.FrequencyExt; import orgomg.cwm.objectmodel.core.ModelElement; /** * The factory to build comparator. DOC zqin class global comment. Detailled comment */ public final class ComparatorsFactory { private ComparatorsFactory() { } public static final int FILEMODEL_COMPARATOR_ID = 0; public static final int MODELELEMENT_COMPARATOR_ID = 1; public static final int TEXT_STATISTICS_COMPARATOR_ID = 2; public static final int FILE_RESOURCE_COMPARATOR_ID = 3; public static final int FREQUENCY_COMPARATOR_ID = 4; public static final int LOW_FREQUENCY_COMPARATOR_ID = 5; // MOD mzhao 2009-03-23 Feature 6307 public static final int SOUNDEX_FREQUENCY_COMPARATOR_ID = 6; public static final int SOUNDEX_LOW_FREQUENCY_COMPARATOR_ID = 7; public static final int IREPOSITORYVIEWOBJECT_COMPARATOR_ID = 8; public static final int REPOSITORY_NODE_COMPARATOR_ID = 10; // ADDED yyin 2012-08-28 TDQ_5076 public static final int BENFORDLAW_FREQUENCY_COMPARATOR_ID = 11; /** * DOC zqin Comment method "sort". * * @param objects * @param comparatorId * @return */ @SuppressWarnings("unchecked") public static Object[] sort(Object[] objects, int comparatorId) { if (objects == null || objects.length <= 1) { return objects; } Arrays.sort(objects, ComparatorsFactory.buildComparator(comparatorId)); return objects; } /** * DOC zqin Comment method "sort". * * @param objects * @param comparatorId * @return */ @SuppressWarnings("unchecked") public static Collection sort(List objects, int comparatorId) { if (objects == null || objects.size() <= 1) { return objects; } Collections.sort(objects, ComparatorsFactory.buildComparator(comparatorId)); return objects; } @SuppressWarnings("unchecked") public static Comparator buildComparator(int comparatorId) { switch (comparatorId) { case FILEMODEL_COMPARATOR_ID: return new FileModelComparator(); case MODELELEMENT_COMPARATOR_ID: return new ModelElementComparator(); case TEXT_STATISTICS_COMPARATOR_ID: return new TextStatisticsComparator(); case FILE_RESOURCE_COMPARATOR_ID: return new FileResourceComparator(); case FREQUENCY_COMPARATOR_ID: return new FrequencyIndicatorComparator(); case LOW_FREQUENCY_COMPARATOR_ID: return new LowFrequencyIndicatorComparator(); // MOD mzhao 2009-03-23 Feature 6307 case SOUNDEX_FREQUENCY_COMPARATOR_ID: return new FrequencyIndicatorComparator(); case SOUNDEX_LOW_FREQUENCY_COMPARATOR_ID: return new LowFrequencyIndicatorComparator(); case IREPOSITORYVIEWOBJECT_COMPARATOR_ID: return new IRepositoryViewObjectComparator(); case REPOSITORY_NODE_COMPARATOR_ID: return new RepositoryNodeComparator(); case BENFORDLAW_FREQUENCY_COMPARATOR_ID:// ADDED yyin 2012-08-28 TDQ_5076 return new BenfordLawIndicatorComparator(); default: return new ModelElementComparator(); } } /** * Implements Comparator to implement custom sorting of {@link IResource} which contains {@link ModelElement} * elements. */ static class FileResourceComparator implements Comparator<IResource> { public int compare(IResource arg0, IResource arg1) { if (arg0 == null || arg1 == null) { return 0; } String name0; String name1; if (arg0.getType() == IResource.FILE) { name0 = ((IFile) arg0).getName(); } else { name0 = arg0.getName(); } if (arg1.getType() == IResource.FILE) { name1 = ((IFile) arg1).getName(); } else { name1 = arg1.getName(); } if (name0 == null || name1 == null) { return 0; } return name0.compareTo(name1); } } /** * Implements Comparator to implement custom sorting of {@link IResource} which contains {@link ModelElement} * elements. */ static class FileModelComparator implements Comparator<IResource> { public int compare(IResource arg0, IResource arg1) { if (arg0 == null || arg1 == null) { return 0; } String name0; String name1; if (arg0.getType() == IResource.FILE) { ModelElement modelElement0 = ModelElementFileFactory.getModelElement((IFile) arg0); name0 = modelElement0 == null ? arg0.getName() : modelElement0.getName(); } else { name0 = arg0.getName(); } if (arg1.getType() == IResource.FILE) { ModelElement modelElement1 = ModelElementFileFactory.getModelElement((IFile) arg1); name1 = modelElement1 == null ? arg1.getName() : modelElement1.getName(); } else { name1 = arg1.getName(); } if (name0 == null || name1 == null) { return 0; } return name0.compareTo(name1); } } /** * Implements Comparator to implement custom sorting of {@link ModelElement}. */ static class ModelElementComparator implements Comparator<Object> { public int compare(Object arg0, Object arg1) { if (arg0 == null || arg1 == null) { return 0; } String name0 = ((ModelElement) arg0).getName(); String name1 = ((ModelElement) arg1).getName(); if (name0 == null || name1 == null) { return 0; } return name0.compareTo(name1); } } /** * DOC zqin ComparatorsFactory class global comment. Detailled comment */ static class TextStatisticsComparator implements Comparator<IndicatorUnit> { public int compare(IndicatorUnit o1, IndicatorUnit o2) { if (o1.isExcuted() && o2.isExcuted()) { double value1 = Double.parseDouble(String.valueOf(o1.getValue())); double value2 = Double.parseDouble(String.valueOf(o2.getValue())); if (value1 <= value2) { return -1; } else { return 1; } } else { return 0; } } } /** * DOC Zqin ComparatorsFactory class global comment. Detailled comment */ static class FrequencyIndicatorComparator implements Comparator<FrequencyExt> { public int compare(FrequencyExt o1, FrequencyExt o2) { if (o1.getValue() < o2.getValue()) { return 1; } return -1; } } // ADDED yyin 2012-08-28 TDQ_5076 static class BenfordLawIndicatorComparator implements Comparator<FrequencyExt> { public int compare(FrequencyExt o1, FrequencyExt o2) { if (o1.getKey() == null || o2.getKey() == null) { return -1; } if ("0".equals(o1.getKey().toString())) { return 1; } if ("0".equals(o2.getKey().toString())) { return -1; } if (o1.getKey().toString().compareTo(o2.getKey().toString()) > 0) { return 1; } return -1; } }// ~ /** * DOC Zqin ComparatorsFactory class global comment. Detailled comment */ static class LowFrequencyIndicatorComparator implements Comparator<FrequencyExt> { public int compare(FrequencyExt o1, FrequencyExt o2) { if (o1.getValue() > o2.getValue()) { return 1; } return -1; } } /** * DOC zshen ComparatorsFactory class global comment. Detailled comment */ static class IRepositoryViewObjectComparator implements Comparator<Object> { /* * (non-Javadoc) * * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ // MOD qiongli 2010-12-28 bug 17922.handle folder under connection. public int compare(Object o1, Object o2) { if (o1 == null || o2 == null) { return 0; } String name1 = null; String name2 = null; if (o1 instanceof IRepositoryViewObject) { name1 = ((IRepositoryViewObject) o1).getLabel(); } else if (o1 instanceof IResource) { name1 = ((IResource) o1).getName(); } if (o2 instanceof IRepositoryViewObject) { name2 = ((IRepositoryViewObject) o2).getLabel(); } else if (o2 instanceof IResource) { name2 = ((IResource) o2).getName(); } // FIXME name1 might be null. return name1.compareTo(name2); } } }