View Javadoc

    1   /*
    2    * Copyright 2002,2004 The Apache Software Foundation.
    3    *
    4    * Licensed under the Apache License, Version 2.0 (the "License");
    5    * you may not use this file except in compliance with the License.
    6    * You may obtain a copy of the License at
    7    *
    8    *      http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  package org.apache.commons.jelly.tags.core;
    17
    18  import org.apache.commons.jelly.JellyTagException;
    19  import org.apache.commons.jelly.MissingAttributeException;
    20  import org.apache.commons.jelly.TagSupport;
    21  import org.apache.commons.jelly.XMLOutput;
    22  import org.apache.commons.jelly.expression.Expression;
    23
    24
    25  /***
    26   * Executes the child &lt;case&gt; tag whose value equals my on attribute.
    27   * Executes a child &lt;default&gt; tag when present and no &lt;case&gt; tag has
    28   * yet matched.
    29   *
    30   * @see CaseTag
    31   * @see DefaultTag
    32   *
    33   * @author Rodney Waldhoff
    34   * @version $Revision: 155420 $ $Date: 2005-02-27 00:06:03 +1100 (Sun, 27 Feb 2005) $
    35   */
    36  public class SwitchTag extends TagSupport {
    37
    38      public SwitchTag() {
    39      }
    40
    41      // Tag interface
    42      //-------------------------------------------------------------------------
    43
    44      /***
    45       * Sets the value to switch on.
    46       * Note that the {@link Expression} is evaluated only once, when the
    47       * &lt;switch&gt; tag is evaluated.
    48       * @param on the value to switch on
    49       */
    50      public void setOn(Expression on) {
    51          this.on = on;
    52      }
    53
    54      public void doTag(XMLOutput output) throws MissingAttributeException, JellyTagException {
    55          this.defaultEncountered = false;
    56          this.someCaseMatched = false;
    57          this.fallingThru = false;
    58
    59          if(null == on) {
    60              throw new MissingAttributeException("on");
    61          } else {
    62              value = on.evaluate(context);
    63              invokeBody(output);
    64          }
    65      }
    66
    67      // Protected properties
    68      //-------------------------------------------------------------------------
    69      protected boolean hasSomeCaseMatched() {
    70          return this.someCaseMatched;
    71      }
    72
    73      protected void caseMatched() {
    74          this.someCaseMatched = true;
    75      }
    76
    77      protected boolean isFallingThru() {
    78          return this.fallingThru;
    79      }
    80
    81      protected void setFallingThru(boolean fallingThru) {
    82          this.fallingThru = fallingThru;
    83      }
    84
    85      protected Object getValue() {
    86          return value;
    87      }
    88
    89      protected boolean hasDefaultBeenEncountered() {
    90          return defaultEncountered;
    91      }
    92
    93      protected void defaultEncountered() {
    94          this.defaultEncountered = true;
    95      }
    96
    97      // Attributes
    98      //-------------------------------------------------------------------------
    99      private boolean someCaseMatched = false;
    100     private boolean fallingThru = false;
    101     private boolean defaultEncountered = false;
    102     private Expression on = null;
    103     private Object value = null;
    104
    105 }