blob: 95d954da1fa1af3ea068c90702fcce5d4c3ff26e [file] [log] [blame]
/*
* Copyright 2002,2004 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.commons.jelly.tags.util;
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;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.lang.StringUtils;
import org.xml.sax.SAXException;
/**
* A tag that replaces occurrences of a character or string in its body or
* (or value) and places the result into the context
*
* @author dion
*/
public class ReplaceTag extends TagSupport {
/** The Log to which logging calls will be made. */
private static final Log log = LogFactory.getLog(ReplaceTag.class);
/** The variable name to export. */
private String var;
/** The expression to evaluate. */
private Expression value;
/** the old character to be replaced */
private String oldChar;
/** the new character that will replace the old */
private String newChar;
/** the old string to be replace */
private String oldString;
/** the new string that will replace the old */
private String newString;
// Tag interface
//-------------------------------------------------------------------------
public void doTag(XMLOutput output) throws MissingAttributeException, JellyTagException {
// check required properties
if (oldChar != null) {
oldString = oldChar.substring(0,1);
}
if (newChar != null) {
newString = newChar.substring(0,1);
}
if (oldString == null) {
throw new MissingAttributeException("oldChar or oldString must be provided");
}
if (newString == null) {
throw new MissingAttributeException("newChar or newString must be provided");
}
// get either the value or the body of the tag
Object answer = null;
if ( value != null ) {
answer = value.evaluateAsString(context);
} else {
answer = getBodyText(false);
}
// set the result in the context, or output it
if (answer != null) {
String stringAnswer = StringUtils.replace(answer.toString(), oldString, newString);
if ( var != null ) {
context.setVariable(var, stringAnswer);
} else {
try {
output.write(stringAnswer);
} catch (SAXException e) {
throw new JellyTagException(e);
}
}
}
}
/**
* Returns the newChar used in replacing. Should only be a single
* character.
* @return String
*/
public String getNewChar()
{
return newChar;
}
/**
* Returns the oldChar that will be replaced. Should only be a single
* character.
* @return String
*/
public String getOldChar()
{
return oldChar;
}
/**
* Returns the newString that will be replaced.
* @return String
*/
public String getNew()
{
return newString;
}
/**
* Returns the oldString that will be replaced.
* @return String
*/
public String getOld()
{
return oldString;
}
/**
* Returns the value.
* @return Expression
*/
public Expression getValue()
{
return value;
}
/**
* Returns the var.
* @return String
*/
public String getVar()
{
return var;
}
/**
* Sets the newChar.
* @param newChar The newChar to set
*/
public void setNewChar(String newChar)
{
this.newChar = newChar;
}
/**
* Sets the oldChar.
* @param oldChar The oldChar to set
*/
public void setOldChar(String oldChar)
{
this.oldChar = oldChar;
}
/**
* Sets the newString.
* @param newString The newString to set
*/
public void setNew(String newString)
{
this.newString = newString;
}
/**
* Sets the oldString.
* @param oldString The oldString to set
*/
public void setOld(String oldString)
{
this.oldString = oldString;
}
/**
* Sets the value.
* @param value The value to set
*/
public void setValue(Expression value)
{
this.value = value;
}
/**
* Sets the var.
* @param var The var to set
*/
public void setVar(String var)
{
this.var = var;
}
}