blob: 1da4b60094372a8557e910f2d5c738a38bf8aaf4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.jelly.tags.core;
import org.apache.commons.jelly.JellyTagException;
import org.apache.commons.jelly.MissingAttributeException;
import org.apache.commons.jelly.TagSupport;
import org.apache.commons.jelly.XMLOutput;
import org.apache.commons.jelly.expression.Expression;
/**
* Executes the child <case> tag whose value equals my on attribute.
* Executes a child <default> tag when present and no <case> tag has
* yet matched.
*
* @see CaseTag
* @see DefaultTag
*
* @author Rodney Waldhoff
* @version $Revision$ $Date$
*/
public class SwitchTag extends TagSupport {
public SwitchTag() {
}
// Tag interface
//-------------------------------------------------------------------------
/**
* Sets the value to switch on.
* Note that the {@link Expression} is evaluated only once, when the
* <switch> tag is evaluated.
* @param on the value to switch on
*/
public void setOn(Expression on) {
this.on = on;
}
public void doTag(XMLOutput output) throws MissingAttributeException, JellyTagException {
this.defaultEncountered = false;
this.someCaseMatched = false;
this.fallingThru = false;
if(null == on) {
throw new MissingAttributeException("on");
} else {
value = on.evaluate(context);
invokeBody(output);
}
}
// Protected properties
//-------------------------------------------------------------------------
protected boolean hasSomeCaseMatched() {
return this.someCaseMatched;
}
protected void caseMatched() {
this.someCaseMatched = true;
}
protected boolean isFallingThru() {
return this.fallingThru;
}
protected void setFallingThru(boolean fallingThru) {
this.fallingThru = fallingThru;
}
protected Object getValue() {
return value;
}
protected boolean hasDefaultBeenEncountered() {
return defaultEncountered;
}
protected void defaultEncountered() {
this.defaultEncountered = true;
}
// Attributes
//-------------------------------------------------------------------------
private boolean someCaseMatched = false;
private boolean fallingThru = false;
private boolean defaultEncountered = false;
private Expression on = null;
private Object value = null;
}