package org.jboss.seam.maven.helper;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import org.apache.maven.plugin.logging.Log;
import org.w3c.dom.Element;
/**
*
* Generates JSF taglib descriptor for all Validators classes
*
* @author Rafael Benevides <https://community.jboss.org/people/rafabene>
* @author Marek Novotny <https://community.jboss.org/people/manaRH>
*
*/
public class ValidatorGenerator
{
private List<File> validatorXMLs = new ArrayList<File>();
private Log log;
private String targetDirectory;
private Map<String, String> validatorNames = new HashMap<String, String>();
public ValidatorGenerator(String targetDirectory, Log log)
{
this.targetDirectory = targetDirectory;
this.log = log;
validatorNames.put("formattedTextValidator.xml", "validateFormattedText");
validatorNames.put("modelValidator.xml", "validate");
}
public void addFile(File file) throws FileNotFoundException
{
if (fileIsValidatorXML(file))
{
validatorXMLs.add(file);
}
}
private boolean fileIsValidatorXML(File file) throws FileNotFoundException
{
if (file.getName().endsWith(".xml"))
{
Scanner scanner = new Scanner(file);
String find = scanner.findWithinHorizon("<validator>", 0);
if (find != null)
{
log.info("Identified " + file.getName() + " as Validator XML");
return true;
}
}
return false;
}
public void generateValidators() throws Exception
{
log.info("Generating Validators");
XMLGenerator xmlGenerator = new XMLGenerator(log);
File outXML = new File(targetDirectory + "/generated-sources/main/resources/META-INF", "s.taglib.xml");
List<Element> tagsToAdd = new ArrayList<Element>();
for (File xml : validatorXMLs)
{
Element tag = xmlGenerator.getFaceletsTagElementFromFacesconfig(xml, validatorNames.get(xml.getName()), "validator");
tagsToAdd.add(tag);
}
xmlGenerator.updateFile(outXML, tagsToAdd);
}
}