    001    // Copyright 2010 The Apache Software Foundation
    002    //
    003    // Licensed under the Apache License, Version 2.0 (the "License");
    004    // you may not use this file except in compliance with the License.
    005    // You may obtain a copy of the License at
    006    //
    007    // http://www.apache.org/licenses/LICENSE-2.0
    008    //
    009    // Unless required by applicable law or agreed to in writing, software
    010    // distributed under the License is distributed on an "AS IS" BASIS,
    011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    012    // See the License for the specific language governing permissions and
    013    // limitations under the License.
    014
    015    package org.apache.tapestry5.func;
    016
    017    /**
    018     * The result of the evaluation of a {@link LazyFunction}.
    019     *
    020     * @since 5.2.0
    021     */
    022    public class LazyContinuation<T>
    023    {
    024        private final LazyValue<T> nextValue;
    025
    026        private final LazyFunction<T> nextFunction;
    027
    028        public LazyContinuation(T nextValue, LazyFunction<T> nextFunction)
    029        {
    030            this(new StaticValue<T>(nextValue), nextFunction);
    031        }
    032
    033        public LazyContinuation(LazyValue<T> nextValue, LazyFunction<T> nextFunction)
    034        {
    035            assert nextValue != null;
    036            assert nextFunction != null;
    037
    038            this.nextValue = nextValue;
    039            this.nextFunction = nextFunction;
    040        }
    041
    042        /**
    043         * Returns, indirectly, the next value computed by the lazy function. The LazyValue represents
    044         * a deferred computation.
    045         */
    046        public LazyValue<T> nextValue()
    047        {
    048            return nextValue;
    049        }
    050
    051        /** Returns a new lazy function that will return the next continuation. */
    052        public LazyFunction<T> nextFunction()
    053        {
    054            return nextFunction;
    055        }
    056
    057    }