001 /*
002 Licensed to the Apache Software Foundation (ASF) under one
003 or more contributor license agreements. See the NOTICE file
004 distributed with this work for additional information
005 regarding copyright ownership. The ASF licenses this file
006 to you under the Apache License, Version 2.0 (the
007 "License"); you may not use this file except in compliance
008 with the License. You may obtain a copy of the License at
009
010 http://www.apache.org/licenses/LICENSE-2.0
011
012 Unless required by applicable law or agreed to in writing,
013 software distributed under the License is distributed on an
014 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 KIND, either express or implied. See the License for the
016 specific language governing permissions and limitations
017 under the License.
018 */
019 package org.apache.wiki.tags;
020
021 import java.io.IOException;
022
023 import javax.servlet.jsp.JspWriter;
024 import javax.servlet.jsp.JspException;
025
026 import org.apache.wiki.WikiEngine;
027 import org.apache.wiki.api.exceptions.NoSuchVariableException;
028 import org.apache.wiki.util.TextUtil;
029
030 /**
031 * Returns the value of an Wiki variable.
032 *
033 * <P><B>Attributes</B></P>
034 * <UL>
035 * <LI>var - Name of the variable. Required.
036 * <LI>default - Revert to this value, if the value of "var" is null.
037 * If left out, this tag will produce a concise error message
038 * if the named variable is not found. Set to empty (default="")
039 * to hide the message.
040 * </UL>
041 *
042 * <P>A default value implies <I>failmode='quiet'</I>.
043 *
044 * @since 2.0
045 */
046 public class VariableTag
047 extends WikiTagBase
048 {
049 private static final long serialVersionUID = 0L;
050
051 private String m_var = null;
052 private String m_default = null;
053
054 public void initTag()
055 {
056 super.initTag();
057 m_var = m_default = null;
058 }
059
060 public String getVar()
061 {
062 return m_var;
063 }
064
065 public void setVar( String arg )
066 {
067 m_var = arg;
068 }
069
070 public void setDefault( String arg )
071 {
072 m_default = arg;
073 }
074
075 public final int doWikiStartTag()
076 throws JspException,
077 IOException
078 {
079 WikiEngine engine = m_wikiContext.getEngine();
080 JspWriter out = pageContext.getOut();
081 String msg = null;
082 String value = null;
083
084 try
085 {
086 value = engine.getVariableManager().getValue( m_wikiContext,
087 getVar() );
088 }
089 catch( NoSuchVariableException e )
090 {
091 msg = "No such variable: "+e.getMessage();
092 }
093 catch( IllegalArgumentException e )
094 {
095 msg = "Incorrect variable name: "+e.getMessage();
096 }
097
098 if( value == null )
099 {
100 value = m_default;
101 }
102
103 if( value == null )
104 {
105 value = msg;
106 }
107 out.write( TextUtil.replaceEntities(value) );
108 return SKIP_BODY;
109 }
110 }