package com.intuit.tank.harness.functions; /* * #%L * Intuit Tank Agent (apiharness) * %% * Copyright (C) 2011 - 2015 Intuit Inc. * %% * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * #L% */ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.sun.istack.Nullable; /** * * DateFunctions functions that operate on dates. Functions start with #function and use dot notation to pass * parameters. The first parameter is the class of function. Valid values are: * <ul> * <li>currentdate - @see {@link DateFunctions#getCurrentDate(String)}</li> * <li>adddays - @see {@link DateFunctions#addDays(String, int)}</li> * </ul> * * @author dangleton * */ class DateFunctions { private static final Logger LOG = LogManager.getLogger(DateFunctions.class); /** * Is this a valid Date function request * * @param values * The command * @return TRUE if valid format; FALSE otherwise */ static public boolean isValid(String[] values) { try { if (values[2].equalsIgnoreCase("currentdate")) { return true; } else if (values[2].equalsIgnoreCase("adddays")) { if (!StringUtils.isEmpty(values[3])) { return true; } } return false; } catch (Exception ex) { return false; } } /** * Process the date request * * @param values * The command line * @return The requested value; NULL if there was an error * */ static public String executeFunction(String[] values) { try { if (values[2].equalsIgnoreCase("currentdate")) return DateFunctions.getCurrentDate(values[3]); else if (values[2].equalsIgnoreCase("adddays")) return DateFunctions.addDays(Integer.valueOf(values[3]), values[4]); return null; } catch (Exception ex) { return null; } } /** * Get the current date. * * #function.date.currentDate.06-01-2011 * * @param format * The format of the response (MM-dd-yyyy, MMddyyyy, etc) * @return The current date */ private static String getCurrentDate(@Nullable String format) { DateFormat formatter = getFormatter(format); return formatter.format(new Date()); } /** * @param format * @return */ private static DateFormat getFormatter(String format) { DateFormat formatter = null; try { formatter = StringUtils.isEmpty(format) ? DateFormat.getDateInstance() : new SimpleDateFormat(format); } catch (Exception e) { // bad format LOG.warn("Error parsing date format string: " + e.toString() + ". Using default format."); formatter = DateFormat.getDateInstance(); } return formatter; } /** * Get the date x days from now. * * e.g. #function.date.addDays.1.MM-dd-yyyy * * @param days * The number of days to add (negative number to remove) * @param format * The format of the response (MM-dd-yyyy, MMddyyyy, etc) * @return The new date */ private static String addDays(int days, @Nullable String format) { Calendar now = Calendar.getInstance(); now.add(Calendar.DAY_OF_YEAR, days); DateFormat formatter = getFormatter(format); return formatter.format(now.getTime()); } }