Java tutorial
/* * Copyright 2015 Collective, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.collective.celos.trigger; import com.collective.celos.database.StateDatabaseConnection; import org.joda.time.DateTime; import com.collective.celos.ScheduledTime; /** * A trigger that signals data availability for a given scheduled time * only if it is a configurable number of seconds past the current time. * * In combination with an AND trigger, this allows to delay the firing * of another trigger, for example to clean up data after a day. * * The following example shows a trigger that only fires if the given * HDFS path is available, and the current time is one day after * the workflow's scheduled time. * * var oneDay = 60 * 60 * 24; * andTrigger(delayTrigger(oneDay), hdfsCheckTrigger("/${year}/${month}/${day}/...")) */ public class DelayTrigger extends Trigger { private final int seconds; public DelayTrigger(int seconds) throws Exception { this.seconds = seconds; } @Override public TriggerStatus getTriggerStatus(StateDatabaseConnection connection, ScheduledTime now, ScheduledTime scheduledTime) throws Exception { DateTime nowDT = now.getDateTime(); DateTime waitUntilDT = scheduledTime.getDateTime().plusSeconds(getSeconds()); boolean ready = nowDT.isAfter(waitUntilDT); return makeTriggerStatus(ready, humanReadableDescription(ready, waitUntilDT)); } private String humanReadableDescription(boolean ready, DateTime waitUntilDT) { if (ready) { return "Ready since " + waitUntilDT.toString(); } else { return "Delayed until " + waitUntilDT.toString(); } } public int getSeconds() { return seconds; } }