001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * Portions Copyright Apache Software Foundation.
007: *
008: * The contents of this file are subject to the terms of either the GNU
009: * General Public License Version 2 only ("GPL") or the Common Development
010: * and Distribution License("CDDL") (collectively, the "License"). You
011: * may not use this file except in compliance with the License. You can obtain
012: * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
013: * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific
014: * language governing permissions and limitations under the License.
015: *
016: * When distributing the software, include this License Header Notice in each
017: * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
018: * Sun designates this particular file as subject to the "Classpath" exception
019: * as provided by Sun in the GPL Version 2 section of the License file that
020: * accompanied this code. If applicable, add the following below the License
021: * Header, with the fields enclosed by brackets [] replaced by your own
022: * identifying information: "Portions Copyrighted [year]
023: * [name of copyright owner]"
024: *
025: * Contributor(s):
026: *
027: * If you wish your version of this file to be governed by only the CDDL or
028: * only the GPL Version 2, indicate your decision by adding "[Contributor]
029: * elects to include this software in this distribution under the [CDDL or GPL
030: * Version 2] license." If you don't indicate a single choice of license, a
031: * recipient has the option to distribute your version of this file under
032: * either the CDDL, the GPL Version 2 or to extend the choice of license to
033: * its licensees as provided above. However, if you add GPL Version 2 code
034: * and therefore, elected the GPL Version 2 license, then the option applies
035: * only if the new code is made subject to such option by the copyright
036: * holder.
037: */
038:
039: package javax.servlet.jsp.jstl.core;
040:
041: /**
042: * <p>Exposes the current status of
043: * an iteration. JSTL provides a mechanism for LoopTags to
044: * return information about the current index of the iteration and
045: * convenience methods to determine whether or not the current round is
046: * either the first or last in the iteration. It also lets authors
047: * use the status object to obtain information about the iteration range,
048: * step, and current object.</p>
049: *
050: * <p>Environments that require more status can extend this interface.</p>
051: *
052: * @author Shawn Bayern
053: */
054:
055: public interface LoopTagStatus {
056:
057: /**
058: * Retrieves the current item in the iteration. Behaves
059: * idempotently; calling getCurrent() repeatedly should return the same
060: * Object until the iteration is advanced. (Specifically, calling
061: * getCurrent() does <b>not</b> advance the iteration.)
062: *
063: * @return the current item as an object
064: */
065: public Object getCurrent();
066:
067: /**
068: * Retrieves the index of the current round of the iteration. If
069: * iteration is being performed over a subset of an underlying
070: * array, java.lang.Collection, or other type, the index returned
071: * is absolute with respect to the underlying collection. Indices
072: * are 0-based.
073: *
074: * @return the 0-based index of the current round of the iteration
075: */
076: public int getIndex();
077:
078: /**
079: * <p>Retrieves the "count" of the current round of the iteration. The
080: * count is a relative, 1-based sequence number identifying the
081: * current "round" of iteration (in context with all rounds the
082: * current iteration will perform).</p>
083: *
084: * <p>As an example, an iteration with begin = 5, end = 15, and step =
085: * 5 produces the counts 1, 2, and 3 in that order.</p>
086: *
087: * @return the 1-based count of the current round of the iteration
088: */
089: public int getCount();
090:
091: /**
092: * Returns information about whether the current round of the
093: * iteration is the first one. This current round may be the 'first'
094: * even when getIndex() != 0, for 'index' refers to the absolute
095: * index of the current 'item' in the context of its underlying
096: * collection. It is always that case that a true result from
097: * isFirst() implies getCount() == 1.
098: *
099: * @return <tt>true</tt> if the current round is the first in the
100: * iteration, <tt>false</tt> otherwise.
101: */
102: public boolean isFirst();
103:
104: /**
105: * Returns information about whether the current round of the
106: * iteration is the last one. As with isFirst(), subsetting is
107: * taken into account. isLast() doesn't necessarily refer to the
108: * status of the underlying Iterator; it refers to whether or not
109: * the current round will be the final round of iteration for the
110: * tag associated with this LoopTagStatus.
111: *
112: * @return <tt>true</tt> if the current round is the last in the
113: * iteration, <tt>false</tt> otherwise.
114: */
115: public boolean isLast();
116:
117: /**
118: * Returns the value of the 'begin' attribute for the associated tag,
119: * or null if no 'begin' attribute was specified.
120: *
121: * @return the 'begin' value for the associated tag, or null
122: * if no 'begin' attribute was specified
123: */
124: public Integer getBegin();
125:
126: /**
127: * Returns the value of the 'end' attribute for the associated tag,
128: * or null if no 'end' attribute was specified.
129: *
130: * @return the 'end' value for the associated tag, or null
131: * if no 'end' attribute was specified
132: */
133: public Integer getEnd();
134:
135: /**
136: * Returns the value of the 'step' attribute for the associated tag,
137: * or null if no 'step' attribute was specified.
138: *
139: * @return the 'step' value for the associated tag, or null
140: * if no 'step' attribute was specified
141: */
142: public Integer getStep();
143:
144: }
|