| /* |
| * Copyright 1999,2005 The Apache Software Foundation. |
| * |
| * Licensed 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("}"); |
| } |
| } |