package tundra;
// -----( IS Java Code Template v1.2
// -----( CREATED: 2017-05-06 15:05:01 EST
// -----( ON-HOST: 192.168.66.129
import com.wm.data.*;
import com.wm.util.Values;
import com.wm.app.b2b.server.Service;
import com.wm.app.b2b.server.ServiceException;
// --- <<IS-START-IMPORTS>> ---
import java.util.Date;
import java.util.Calendar;
import permafrost.tundra.data.IDataHelper;
import permafrost.tundra.lang.BooleanHelper;
import permafrost.tundra.lang.ExceptionHelper;
import permafrost.tundra.time.DateTimeHelper;
import permafrost.tundra.time.DurationHelper;
// --- <<IS-END-IMPORTS>> ---
public final class datetime
{
// ---( internal utility methods )---
final static datetime _instance = new datetime();
static datetime _newInstance() { return new datetime(); }
static datetime _cast(Object o) { return (datetime)o; }
// ---( server methods )---
public static final void add (IData pipeline)
throws ServiceException
{
// --- <<IS-START(add)>> ---
// @sigtype java 3.5
// [i] field:0:optional $datetime
// [i] field:0:optional $datetime.pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $duration
// [i] field:0:optional $duration.pattern {"xml","milliseconds","seconds","minutes","hours","days","weeks","months","years"}
// [o] field:0:optional $datetime
IDataCursor cursor = pipeline.getCursor();
try {
String datetime = IDataHelper.get(cursor, "$datetime", String.class);
String datetimePattern = IDataHelper.get(cursor, "$datetime.pattern", String.class);
// support $pattern to be backwards compatible
if (datetimePattern == null) datetimePattern = IDataHelper.get(cursor, "$pattern", String.class);
String duration = IDataHelper.get(cursor, "$duration", String.class);
String durationPattern = IDataHelper.get(cursor, "$duration.pattern", String.class);
String result = DateTimeHelper.add(datetime, datetimePattern, duration, durationPattern);
IDataHelper.put(cursor, "$datetime", result, false);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void compare (IData pipeline)
throws ServiceException
{
// --- <<IS-START(compare)>> ---
// @sigtype java 3.5
// [i] field:0:optional $datetime.x
// [i] field:0:optional $datetime.y
// [i] field:0:optional $pattern.x {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $pattern.y {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [o] field:0:required $before?
// [o] field:0:required $equal?
// [o] field:0:required $after?
IDataCursor cursor = pipeline.getCursor();
try {
String date1 = IDataHelper.get(cursor, "$datetime.x", String.class);
String date2 = IDataHelper.get(cursor, "$datetime.y", String.class);
String pattern1 = IDataHelper.get(cursor, "$pattern.x", String.class);
String pattern2 = IDataHelper.get(cursor, "$pattern.y", String.class);
// support $pattern for backwards compatibility
String pattern = IDataHelper.get(cursor, "$pattern", String.class);
if (pattern1 == null) pattern1 = pattern;
if (pattern2 == null) pattern2 = pattern;
int comparison = DateTimeHelper.compare(date1, pattern1, date2, pattern2);
IDataHelper.put(cursor, "$before?", comparison < 0, String.class);
IDataHelper.put(cursor, "$equal?", comparison == 0, String.class);
IDataHelper.put(cursor, "$after?", comparison > 0, String.class);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void concatenate (IData pipeline)
throws ServiceException
{
// --- <<IS-START(concatenate)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] field:0:optional $date
// [i] field:0:optional $time
// [i] field:0:optional $pattern.date {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $pattern.time {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $pattern.datetime {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $timezone.input
// [i] field:0:optional $timezone.output
// [o] field:0:optional $datetime
IDataCursor cursor = pipeline.getCursor();
try {
String date = IDataHelper.get(cursor, "$date", String.class);
String time = IDataHelper.get(cursor, "$time", String.class);
String datePattern = IDataHelper.get(cursor, "$pattern.date", String.class);
String timePattern = IDataHelper.get(cursor, "$pattern.time", String.class);
String datetimePattern = IDataHelper.get(cursor, "$pattern.datetime", String.class);
String inTimeZone = IDataHelper.get(cursor, "$timezone.input", String.class);
String outTimeZone = IDataHelper.get(cursor, "$timezone.output", String.class);
String datetime = DateTimeHelper.emit(DateTimeHelper.concatenate(DateTimeHelper.parse(date, datePattern, inTimeZone), DateTimeHelper.parse(time, timePattern, inTimeZone)), datetimePattern, outTimeZone);
IDataHelper.put(cursor, "$datetime", datetime, false);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void duration (IData pipeline)
throws ServiceException
{
// --- <<IS-START(duration)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] field:0:optional $datetime.start
// [i] field:0:optional $datetime.end
// [i] field:0:optional $datetime.pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $duration.pattern {"xml","milliseconds","seconds","minutes","hours","days","weeks","months","years"}
// [o] field:0:optional $duration
IDataCursor cursor = pipeline.getCursor();
try {
String start = IDataHelper.get(cursor, "$datetime.start", String.class);
String end = IDataHelper.get(cursor, "$datetime.end", String.class);
String datetimePattern = IDataHelper.get(cursor, "$datetime.pattern", String.class);
// support $pattern to be backwards compatible
if (datetimePattern == null) datetimePattern = IDataHelper.get(cursor, "$pattern", String.class);
String durationPattern = IDataHelper.get(cursor, "$duration.pattern", String.class);
String duration = DurationHelper.emit(DateTimeHelper.duration(DateTimeHelper.parse(start, datetimePattern), DateTimeHelper.parse(end, datetimePattern)), durationPattern);
IDataHelper.put(cursor, "$duration", duration, false);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void earlier (IData pipeline)
throws ServiceException
{
// --- <<IS-START(earlier)>> ---
// @sigtype java 3.5
// [i] field:0:optional $datetime.pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $duration
// [i] field:0:optional $duration.pattern {"xml","milliseconds","seconds","minutes","hours","days","weeks","months","years"}
// [i] field:0:optional $timezone
// [o] field:0:required $datetime
IDataCursor cursor = pipeline.getCursor();
try {
String datetimePattern = IDataHelper.get(cursor, "$datetime.pattern", String.class);
String duration = IDataHelper.get(cursor, "$duration", String.class);
String durationPattern = IDataHelper.get(cursor, "$duration.pattern", String.class);
String timezone = IDataHelper.get(cursor, "$timezone", String.class);
String datetime = DateTimeHelper.emit(DateTimeHelper.earlier(DurationHelper.parse(duration, durationPattern)), datetimePattern, timezone);
IDataHelper.put(cursor, "$datetime", datetime);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void emit (IData pipeline)
throws ServiceException
{
// --- <<IS-START(emit)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] object:0:optional $datetime.object
// [i] field:0:optional $pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $timezone
// [o] field:0:optional $datetime
IDataCursor cursor = pipeline.getCursor();
try {
Date date = IDataHelper.get(cursor, "$datetime.object", Date.class);
String pattern = IDataHelper.get(cursor, "$pattern", String.class);
String timezone = IDataHelper.get(cursor, "$timezone", String.class);
String datetime = DateTimeHelper.emit(date, pattern, timezone);
IDataHelper.put(cursor, "$datetime", datetime, false);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void format (IData pipeline)
throws ServiceException
{
// --- <<IS-START(format)>> ---
// @sigtype java 3.5
// [i] field:0:optional $datetime
// [i] field:0:optional $pattern.input {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:1:optional $patterns.input
// [i] field:0:optional $pattern.output {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $timezone.input
// [i] field:0:optional $timezone.output
// [o] field:0:optional $datetime
IDataCursor cursor = pipeline.getCursor();
try {
String datetime = IDataHelper.get(cursor, "$datetime", String.class);
String inPattern = IDataHelper.get(cursor, "$pattern.input", String.class);
String[] inPatterns = IDataHelper.get(cursor, "$patterns.input", String[].class);
String outPattern = IDataHelper.get(cursor, "$pattern.output", String.class);
String inTimeZone = IDataHelper.get(cursor, "$timezone.input", String.class);
String outTimeZone = IDataHelper.get(cursor, "$timezone.output", String.class);
if (datetime != null) {
if (inPatterns == null) {
datetime = DateTimeHelper.format(datetime, inPattern, inTimeZone, outPattern, outTimeZone);
} else {
datetime = DateTimeHelper.format(datetime, inPatterns, inTimeZone, outPattern, outTimeZone);
}
IDataHelper.put(cursor, "$datetime", datetime);
}
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void later (IData pipeline)
throws ServiceException
{
// --- <<IS-START(later)>> ---
// @sigtype java 3.5
// [i] field:0:optional $datetime.pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $duration
// [i] field:0:optional $duration.pattern {"xml","milliseconds","seconds","minutes","hours","days","weeks","months","years"}
// [i] field:0:optional $timezone
// [o] field:0:required $datetime
IDataCursor cursor = pipeline.getCursor();
try {
String datetimePattern = IDataHelper.get(cursor, "$datetime.pattern", String.class);
String duration = IDataHelper.get(cursor, "$duration", String.class);
String durationPattern = IDataHelper.get(cursor, "$duration.pattern", String.class);
String timezone = IDataHelper.get(cursor, "$timezone", String.class);
String datetime = DateTimeHelper.emit(DateTimeHelper.later(DurationHelper.parse(duration, durationPattern)), datetimePattern, timezone);
IDataUtil.put(cursor, "$datetime", datetime);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void maximum (IData pipeline)
throws ServiceException
{
// --- <<IS-START(maximum)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] field:1:optional $datetimes
// [i] field:0:optional $pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [o] field:0:optional $datetime
IDataCursor cursor = pipeline.getCursor();
try {
String[] datetimes = IDataHelper.get(cursor, "$datetimes", String[].class);
String pattern = IDataHelper.get(cursor, "$pattern", String.class);
String datetime = DateTimeHelper.emit(DateTimeHelper.maximum(DateTimeHelper.parse(datetimes, pattern)), pattern);
IDataHelper.put(cursor, "$datetime", datetime, false);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void minimum (IData pipeline)
throws ServiceException
{
// --- <<IS-START(minimum)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] field:1:optional $datetimes
// [i] field:0:optional $pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [o] field:0:optional $datetime
IDataCursor cursor = pipeline.getCursor();
try {
String[] datetimes = IDataHelper.get(cursor, "$datetimes", String[].class);
String pattern = IDataHelper.get(cursor, "$pattern", String.class);
String datetime = DateTimeHelper.emit(DateTimeHelper.minimum(DateTimeHelper.parse(datetimes, pattern)), pattern);
IDataHelper.put(cursor, "$datetime", datetime, false);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void now (IData pipeline)
throws ServiceException
{
// --- <<IS-START(now)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] field:0:optional $pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $timezone
// [o] field:0:required $datetime
IDataCursor cursor = pipeline.getCursor();
try {
String pattern = IDataHelper.get(cursor, "$pattern", String.class);
String timezone = IDataHelper.get(cursor, "$timezone", String.class);
IDataHelper.put(cursor, "$datetime", DateTimeHelper.now(pattern, timezone));
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void parse (IData pipeline)
throws ServiceException
{
// --- <<IS-START(parse)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] field:0:optional $datetime
// [i] field:0:optional $pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:1:optional $patterns
// [i] field:0:optional $timezone
// [o] object:0:optional $datetime.object
IDataCursor cursor = pipeline.getCursor();
try {
String datetime = IDataHelper.get(cursor, "$datetime", String.class);
String pattern = IDataHelper.get(cursor, "$pattern", String.class);
String[] patterns = IDataHelper.get(cursor, "$patterns", String[].class);
String timezone = IDataHelper.get(cursor, "$timezone", String.class);
if (datetime != null) {
Calendar calendar;
if (patterns == null) {
calendar = DateTimeHelper.parse(datetime, pattern, timezone);
} else {
calendar = DateTimeHelper.parse(datetime, patterns, timezone);
}
IDataHelper.put(cursor, "$datetime.object", calendar.getTime());
}
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void subtract (IData pipeline)
throws ServiceException
{
// --- <<IS-START(subtract)>> ---
// @sigtype java 3.5
// [i] field:0:optional $datetime
// [i] field:0:optional $datetime.pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $duration
// [i] field:0:optional $duration.pattern {"xml","milliseconds","seconds","minutes","hours","days","weeks","months","years"}
// [o] field:0:optional $datetime
IDataCursor cursor = pipeline.getCursor();
try {
String datetime = IDataHelper.get(cursor, "$datetime", String.class);
String datetimePattern = IDataHelper.get(cursor, "$datetime.pattern", String.class);
// support $pattern to be backwards compatible
if (datetimePattern == null) datetimePattern = IDataHelper.get(cursor, "$pattern", String.class);
String duration = IDataHelper.get(cursor, "$duration", String.class);
String durationPattern = IDataHelper.get(cursor, "$duration.pattern", String.class);
String result = DateTimeHelper.emit(DateTimeHelper.subtract(DateTimeHelper.parse(datetime, datetimePattern), DurationHelper.parse(duration, durationPattern)), datetimePattern);
IDataHelper.put(cursor, "$datetime", result, false);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void today (IData pipeline)
throws ServiceException
{
// --- <<IS-START(today)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] field:0:optional $pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $timezone
// [o] field:0:required $datetime
IDataCursor cursor = pipeline.getCursor();
try {
String pattern = IDataHelper.get(cursor, "$pattern", String.class);
String timezone = IDataHelper.get(cursor, "$timezone", String.class);
String datetime = DateTimeHelper.today(pattern, timezone);
IDataUtil.put(cursor, "$datetime", datetime);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void tomorrow (IData pipeline)
throws ServiceException
{
// --- <<IS-START(tomorrow)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] field:0:optional $pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $timezone
// [o] field:0:required $datetime
IDataCursor cursor = pipeline.getCursor();
try {
String pattern = IDataHelper.get(cursor, "$pattern", String.class);
String timezone = IDataHelper.get(cursor, "$timezone", String.class);
String datetime = DateTimeHelper.tomorrow(pattern, timezone);
IDataHelper.put(cursor, "$datetime", datetime);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void validate (IData pipeline)
throws ServiceException
{
// --- <<IS-START(validate)>> ---
// @sigtype java 3.5
// [i] field:0:required $datetime
// [i] field:0:optional $pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $raise? {"false","true"}
// [o] field:0:required $valid?
IDataCursor cursor = pipeline.getCursor();
boolean valid = false, raise = false;
try {
String datetime = IDataHelper.get(cursor, "$datetime", String.class);
String pattern = IDataHelper.get(cursor, "$pattern", String.class);
raise = IDataHelper.getOrDefault(cursor, "$raise?", Boolean.class, false);
// attempt to parse the datetime string, if no exception is thrown then the string is valid
DateTimeHelper.parse(datetime, pattern);
valid = true;
} catch (IllegalArgumentException ex) {
if (raise) ExceptionHelper.raise(ex);
} finally {
IDataHelper.put(cursor, "$valid?", valid, String.class);
cursor.destroy();
}
// --- <<IS-END>> ---
}
public static final void yesterday (IData pipeline)
throws ServiceException
{
// --- <<IS-START(yesterday)>> ---
// @subtype unknown
// @sigtype java 3.5
// [i] field:0:optional $pattern {"datetime","datetime.db2","datetime.jdbc","date","date.jdbc","time","time.jdbc","milliseconds"}
// [i] field:0:optional $timezone
// [o] field:0:required $datetime
IDataCursor cursor = pipeline.getCursor();
try {
String pattern = IDataHelper.get(cursor, "$pattern", String.class);
String timezone = IDataHelper.get(cursor, "$timezone", String.class);
String datetime = DateTimeHelper.yesterday(pattern, timezone);
IDataHelper.put(cursor, "$datetime", datetime);
} finally {
cursor.destroy();
}
// --- <<IS-END>> ---
}
}