blob: 92ac1fe03fb1560285b0a48f954c0a9ec40ecf01 [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.jasper.tagplugins.jstl.core;
import org.apache.jasper.compiler.tagplugin.TagPlugin;
import org.apache.jasper.compiler.tagplugin.TagPluginContext;
public final class Out implements TagPlugin {
public void doTag(TagPluginContext ctxt) {
//these two data member are to indicate
//whether the corresponding attribute is specified
boolean hasDefault=false, hasEscapeXml=false;
hasDefault = ctxt.isAttributeSpecified("default");
hasEscapeXml = ctxt.isAttributeSpecified("escapeXml");
//strValName, strEscapeXmlName & strDefName are two variables' name
//standing for value, escapeXml and default attribute
String strValName = ctxt.getTemporaryVariableName();
String strDefName = ctxt.getTemporaryVariableName();
String strEscapeXmlName = ctxt.getTemporaryVariableName();
//according to the tag file, the value attribute is mandatory.
ctxt.generateJavaSource("String " + strValName + " = null;");
ctxt.generateJavaSource("if(");
ctxt.generateAttribute("value");
ctxt.generateJavaSource("!=null){");
ctxt.generateJavaSource(" " + strValName + " = (");
ctxt.generateAttribute("value");
ctxt.generateJavaSource(").toString();");
ctxt.generateJavaSource("}");
//initiate the strDefName with null.
//if the default has been specified, then assign the value to it;
ctxt.generateJavaSource("String " + strDefName + " = null;\n");
if(hasDefault){
ctxt.generateJavaSource("if(");
ctxt.generateAttribute("default");
ctxt.generateJavaSource(" != null){");
ctxt.generateJavaSource(strDefName + " = (");
ctxt.generateAttribute("default");
ctxt.generateJavaSource(").toString();");
ctxt.generateJavaSource("}");
}
//initiate the strEscapeXmlName with true;
//if the escapeXml is specified, assign the value to it;
ctxt.generateJavaSource("boolean " + strEscapeXmlName + " = true;");
if(hasEscapeXml){
ctxt.generateJavaSource(strEscapeXmlName + " = Boolean.parseBoolean((");
ctxt.generateAttribute("default");
ctxt.generateJavaSource(").toString());");
}
//main part.
ctxt.generateJavaSource("if(null != " + strValName +"){");
ctxt.generateJavaSource(" if(" + strEscapeXmlName + "){");
ctxt.generateJavaSource(" " + strValName + " = org.apache.jasper.tagplugins.jstl.Util.escapeXml(" + strValName + ");");
ctxt.generateJavaSource(" }");
ctxt.generateJavaSource(" out.write(" + strValName + ");");
ctxt.generateJavaSource("}else{");
ctxt.generateJavaSource(" if(null != " + strDefName + "){");
ctxt.generateJavaSource(" if(" + strEscapeXmlName + "){");
ctxt.generateJavaSource(" " + strDefName + " = org.apache.jasper.tagplugins.jstl.Util.escapeXml(" + strDefName + ");");
ctxt.generateJavaSource(" }");
ctxt.generateJavaSource(" out.write(" + strDefName + ");");
ctxt.generateJavaSource(" }else{");
ctxt.generateBody();
ctxt.generateJavaSource(" }");
ctxt.generateJavaSource("}");
}
}