    001// Copyright 2008, 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
    015package org.apache.tapestry5;
    016
    017import java.util.Optional;
    018
    019/**
    020 * A collection of parameters that may eventually be passed to an event handler method. Includes the
    021 * ability to coerce
    022 * or encode parameters as needed.
    023 *
    024 * @see org.apache.tapestry5.commons.services.TypeCoercer
    025 * @see org.apache.tapestry5.ValueEncoder
    026 */
    027public interface EventContext
    028{
    029    /**
    030     * Returns the number of parameter values that can be extracted.
    031     */
    032    int getCount();
    033
    034    /**
    035     * Returns {@code true} if this context contains no elements.
    036     * @since 5.8.2
    037     */
    038    boolean isEmpty();
    039
    040    /**
    041     * Extracts a parameter value and coerces or decodes it to the desired type.
    042     *
    043     * @param desiredType
    044     *            the type of value required
    045     * @param index
    046     *            identifies which parameter value to extract
    047     * @return the value extracted and converted or coerced
    048     * @throws RuntimeException
    049     *             if the value can't be converted or the index is out of range
    050     */
    051    <T> T get(Class<T> desiredType, int index);
    052
    053    /**
    054     * Tries to extract a parameter value and coerces or decodes it to the desired type.
    055     *
    056     * @param desiredType
    057     *            the type of value required
    058     * @param index
    059     *            identifies which parameter value to extract
    060     * @return the value extracted and converted or coerced, wrapped in an Optional, or {@link Optional#empty()}
    061     *         if index is out of bounds, or the value can't be converted.
    062     * @since 5.8.2
    063     */
    064    <T> Optional<T> tryGet(Class<T> desiredType, int index);
    065
    066    /**
    067     * Extracts the value of each context value as a string.
    068     *
    069     * @return context values
    070     * @since 5.2.0
    071     */
    072    String[] toStrings();
    073}