// ============================================================================ // // 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.Date; import java.util.HashMap; import org.talend.survivorship.model.Attribute; import org.talend.survivorship.model.DataSet; /** * Time Service to determine the latest, earliest value of a given column by predefined date format. */ public class TimeService extends AbstractService { protected HashMap<String, Date> latestValueMap; protected HashMap<String, Date> earliestValueMap; protected HashMap<String, Date> secondLatestValueMap; protected HashMap<String, Date> secondEarliestValueMap; /** * StringService constructor. * * @param dataset */ public TimeService(DataSet dataset) { super(dataset); latestValueMap = new HashMap<String, Date>(); earliestValueMap = new HashMap<String, Date>(); secondLatestValueMap = new HashMap<String, Date>(); secondEarliestValueMap = new HashMap<String, Date>(); } /** * Put attribute values into the longest/shortest value map of a given column. * * @param column * @return */ public void putAttributeValues(String column) { Date latest = null; Date earliest = null; Date secondLatest = null; Date secondEarliest = null; for (Attribute attr : dataset.getAttributesByColumn(column)) { if (attr.isAlive()) { Date value = (Date) attr.getValue(); if (value == null) { continue; } if (latest == null || earliest == null || secondLatest == null || secondEarliest == null) { latest = value; earliest = value; secondLatest = value; secondEarliest = value; } else { if (value.after(latest)) { secondLatest = latest; latest = value; // second input data is max then do that if (secondLatest.equals(earliest)) { secondEarliest = latest; } } else if (value.before(earliest)) { secondEarliest = earliest; earliest = value; // second input data is max then do that if (secondEarliest.equals(latest)) { secondLatest = earliest; } } if (value.before(latest) && value.after(secondLatest)) { secondLatest = value; } if (value.after(earliest) && value.before(secondEarliest)) { secondEarliest = value; } } } } latestValueMap.put(column, latest); earliestValueMap.put(column, earliest); secondLatestValueMap.put(column, secondLatest); secondEarliestValueMap.put(column, secondEarliest); } /** * Determine if an object is the latest value of a given column. * * @param var * @param column * @return */ public boolean isLatestValue(Object var, String column) { if (latestValueMap.get(column) == null) { putAttributeValues(column); } return var.equals(latestValueMap.get(column)); } /** * Determine if an object is the earliest value of a given column. * * @param var * @param column * @return */ public boolean isSecondEarliestValue(Object var, String column) { if (secondEarliestValueMap.get(column) == null) { putAttributeValues(column); } return var.equals(secondEarliestValueMap.get(column)); } /** * Determine if an object is the second latest value of a given column. * * @param var * @param column * @return */ public boolean isSecondLatestValue(Object var, String column) { if (secondLatestValueMap.get(column) == null) { putAttributeValues(column); } return var.equals(secondLatestValueMap.get(column)); } /** * Determine if an object is the second earliest value of a given column. * * @param var * @param column * @return */ public boolean isEarliestValue(Object var, String column) { if (earliestValueMap.get(column) == null) { putAttributeValues(column); } return var.equals(earliestValueMap.get(column)); } /* * (non-Javadoc) * * @see org.talend.survivorship.services.AbstractService#init() */ @Override public void init() { latestValueMap.clear(); earliestValueMap.clear(); secondLatestValueMap.clear(); secondEarliestValueMap.clear(); } }