package net.jhorstmann.i18n.xgettext.struts;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.el.ELException;
import net.jhorstmann.i18n.tools.MessageBundle;
import net.jhorstmann.i18n.tools.xgettext.AbstractExtractorHandler;
import net.jhorstmann.i18n.tools.xgettext.MessageExtractor;
import net.jhorstmann.i18n.tools.xgettext.MessageExtractorException;
import net.jhorstmann.i18n.tools.xml.XMLHelper;
import net.jhorstmann.jspparser.StreamingParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
public class StrutsHtmlMessageExtractor extends AbstractExtractorHandler implements MessageExtractor{
private static final Logger log = LoggerFactory.getLogger(StrutsHtmlMessageExtractor.class);
public StrutsHtmlMessageExtractor(MessageBundle bundle, boolean isXML) {
super(isXML ? XMLHelper.createXMLReader() : createJSPReader(), bundle);
}
private static XMLReader createJSPReader() {
return new StreamingParser();
}
@Override
public void startDocument() throws SAXException {
pushHandler(new StrutsHtmlHandler(this));
}
@Override
public void endDocument() throws SAXException {
popHandler();
}
@Override
public void extractMessages(File file) throws IOException, MessageExtractorException {
String systemId = file.getAbsolutePath();
log.debug("Extracting messages from {}", systemId);
InputStream in = new FileInputStream(file);
try {
InputSource input = new InputSource(in);
input.setSystemId(systemId);
extractMessages(input);
} finally {
in.close();
}
}
void extractMessages(InputSource input) throws IOException, MessageExtractorException {
XMLReader xmlreader = getXMLReader();
xmlreader.setContentHandler(this);
try {
xmlreader.parse(input);
} catch (SAXException ex) {
throw new MessageExtractorException(ex);
} catch (ELException ex) {
throw new MessageExtractorException(ex);
}
}
}