// ============================================================================ // // 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.survivorship.services; import java.util.HashMap; import org.talend.survivorship.model.Attribute; import org.talend.survivorship.model.DataSet; /** * Service to determine the longest, shortest value, etc. of a given column. */ public class NumberService extends AbstractService { protected HashMap<String, Number> largestValueMap; protected HashMap<String, Number> smallestValueMap; protected HashMap<String, Number> secondLargestValueMap; protected HashMap<String, Number> secondSmallestValueMap; /** * StringService constructor. * * @param dataset */ public NumberService(DataSet dataset) { super(dataset); largestValueMap = new HashMap<>(); smallestValueMap = new HashMap<>(); secondLargestValueMap = new HashMap<>(); secondSmallestValueMap = new HashMap<>(); } /** * Put attribute values into the longest/shortest value map of a given column. * * @param column * @return */ public void putAttributeValues(String column) { Number max = null; Number min = null; Number secondMax = null; Number secondMin = null; for (Attribute attr : dataset.getAttributesByColumn(column)) { if (attr.isAlive()) { Number value = (Number) attr.getValue(); if (value == null) { continue; } if (max == null || min == null || secondMin == null || secondMax == null) { max = value; min = value; secondMax = value; secondMin = value; } else { if (value.doubleValue() > max.doubleValue()) { secondMax = max; max = value; // second input data is max then do that if (secondMax.equals(min)) { secondMin = max; } } else if (value.doubleValue() < min.doubleValue()) { secondMin = min; min = value; // second input data is min then do that if (secondMin.equals(max)) { secondMax = min; } } if (value.doubleValue() < max.doubleValue() && secondMax.doubleValue() < value.doubleValue()) { secondMax = value; } if (value.doubleValue() > min.doubleValue() && secondMin.doubleValue() > value.doubleValue()) { secondMin = value; } } } } largestValueMap.put(column, max); smallestValueMap.put(column, min); secondLargestValueMap.put(column, secondMax); secondSmallestValueMap.put(column, secondMin); } /** * Determine if an object is the longest value of a given column. * * @param var * @param column * @return */ public boolean isLargestValue(Object var, String column) { if (largestValueMap.get(column) == null) { putAttributeValues(column); } return largestValueMap.get(column).equals(var); } /** * Determine if an object is the shortest value of a given column. * * @param var * @param column * @return */ public boolean isSmallestValue(Object var, String column) { if (smallestValueMap.get(column) == null) { putAttributeValues(column); } return smallestValueMap.get(column).equals(var); } /** * Determine if an object is the second largest value of a given column. * * @param var * @param column * @return */ public boolean isSecondLargestValue(Object var, String column) { if (secondLargestValueMap.get(column) == null) { putAttributeValues(column); } return secondLargestValueMap.get(column).equals(var); } /** * Determine if an object is the second smallest value of a given column. * * @param var * @param column * @return */ public boolean isSecondSmallestValue(Object var, String column) { if (secondSmallestValueMap.get(column) == null) { putAttributeValues(column); } return secondSmallestValueMap.get(column).equals(var); } /* * (non-Javadoc) * * @see org.talend.survivorship.services.AbstractService#init() */ @Override public void init() { largestValueMap.clear(); smallestValueMap.clear(); secondLargestValueMap.clear(); secondSmallestValueMap.clear(); } }