001/*
002 * Copyright 2002-2018 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      https://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017package org.springframework.scheduling.support;
018
019import java.util.Date;
020
021import org.springframework.lang.Nullable;
022import org.springframework.scheduling.TriggerContext;
023
024/**
025 * Simple data holder implementation of the {@link TriggerContext} interface.
026 *
027 * @author Juergen Hoeller
028 * @since 3.0
029 */
030public class SimpleTriggerContext implements TriggerContext {
031
032        @Nullable
033        private volatile Date lastScheduledExecutionTime;
034
035        @Nullable
036        private volatile Date lastActualExecutionTime;
037
038        @Nullable
039        private volatile Date lastCompletionTime;
040
041
042        /**
043         * Create a SimpleTriggerContext with all time values set to {@code null}.
044         */
045        public SimpleTriggerContext() {
046        }
047
048        /**
049         * Create a SimpleTriggerContext with the given time values.
050         * @param lastScheduledExecutionTime last <i>scheduled</i> execution time
051         * @param lastActualExecutionTime last <i>actual</i> execution time
052         * @param lastCompletionTime last completion time
053         */
054        public SimpleTriggerContext(Date lastScheduledExecutionTime, Date lastActualExecutionTime, Date lastCompletionTime) {
055                this.lastScheduledExecutionTime = lastScheduledExecutionTime;
056                this.lastActualExecutionTime = lastActualExecutionTime;
057                this.lastCompletionTime = lastCompletionTime;
058        }
059
060
061        /**
062         * Update this holder's state with the latest time values.
063         * @param lastScheduledExecutionTime last <i>scheduled</i> execution time
064         * @param lastActualExecutionTime last <i>actual</i> execution time
065         * @param lastCompletionTime last completion time
066         */
067        public void update(Date lastScheduledExecutionTime, Date lastActualExecutionTime, Date lastCompletionTime) {
068                this.lastScheduledExecutionTime = lastScheduledExecutionTime;
069                this.lastActualExecutionTime = lastActualExecutionTime;
070                this.lastCompletionTime = lastCompletionTime;
071        }
072
073
074        @Override
075        @Nullable
076        public Date lastScheduledExecutionTime() {
077                return this.lastScheduledExecutionTime;
078        }
079
080        @Override
081        @Nullable
082        public Date lastActualExecutionTime() {
083                return this.lastActualExecutionTime;
084        }
085
086        @Override
087        @Nullable
088        public Date lastCompletionTime() {
089                return this.lastCompletionTime;
090        }
091
092}