/*
* Copyright 2003 Federal Chancellery Austria
* MOA-ID has been developed in a cooperation between BRZ, the Federal
* Chancellery Austria - ICT staff unit, and Graz University of Technology.
*
* Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
* the European Commission - subsequent versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
* http://www.osor.eu/eupl/
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and
* limitations under the Licence.
*
* This product combines work with different licenses. See the "NOTICE" text
* file for details on the various modules and licenses.
* The "NOTICE" text file is part of the distribution. Any derivative works
* that you distribute must include a readable copy of the "NOTICE" text file.
*/
package at.gv.egovernment.moa.id.auth.builder;
import at.gv.egovernment.moa.id.BuildException;
import at.gv.egovernment.moa.util.StringUtils;
/**
* Base class for HTML/XML builders providing commonly useful functions.
*
* @author Paul Ivancsics
* @version $Id$
*/
public class Builder {
/**
* Replaces a given number of occurences of a special tag in an XML or HTML template by a value.
* @param template html template
* @param tag special tag
* @param value value replacing the tag
* @param expected specifies if the tag is expected to present; if true
and the tag
* is not present, an exception is thrown; if false
and the tag is
* not present, the original string is returned
* @param maxreplacements Set -1 to replace each occurence of tag, or limit replacements by a given positive number
* @return XML or HTML code, the tag replaced
* @throws BuildException when template does not contain the tag
*/
protected String replaceTag(
String template,
String tag,
String value,
boolean expected,
int maxreplacements)
throws BuildException
{
String result = template;
int index = result.indexOf(tag);
if (index < 0) {
if (expected) {
// Substring not found but should
throw new BuildException(
"builder.01",
new Object[] {"<" + tag.substring(1, tag.length() - 1) + ">"});
}
} else {
// replace each occurence
if (maxreplacements == -1) {
return StringUtils.replaceAll(template, tag, value);
} else {
int found = 1;
while (index > -1 && (found <= maxreplacements)) {
result = result.substring(0, index) + value + result.substring(index + tag.length());
index = result.indexOf(tag);
if (index > -1) found += 1;
}
}
}
return result;
}
}