* @return a <code>Digester<code> instance suitable for parsing
* faces-config documents
*/
protected Digester digester(boolean validateXml) {
Digester digester;
DigesterFactory.VersionListener listener = null;
final JSFVersionTracker tracker = getJSFVersionTracker();
if (null != tracker) {
listener =
new DigesterFactory.VersionListener() {
public void takeActionOnGrammar(String grammar) {
tracker.pushJSFVersionNumberFromGrammar(grammar);
}
public void takeActionOnArtifact(String artifactName) {
tracker.putTrackedClassName(artifactName);
}
};
}
try {
if (null != listener) {
digester = DigesterFactory.newInstance(validateXml,
listener).createDigester();
}
else {
digester = DigesterFactory.newInstance(validateXml).createDigester();
}
}
catch (RuntimeException e) {
Object [] args = { "Digester" };
String message =
MessageUtils.getExceptionMessageString(MessageUtils.CANT_INSTANTIATE_CLASS_ERROR_MESSAGE_ID, args);
LOGGER.log(Level.SEVERE, message);
throw e;
}
// Configure parsing rules
// PENDING - Read from file?
digester.addRuleSet(new FacesConfigRuleSet(false, false, true));
// Push an initial FacesConfigBean onto the stack
digester.push(new FacesConfigBean());
return (digester);
}