package net.jhorstmann.i18n.xgettext.struts;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.jhorstmann.i18n.tools.xml.DefaultContentHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
public class StrutsHtmlHandler extends DefaultContentHandler {
private static final String NAMESPACE_JAKARTA_HTML = "http://jakarta.apache.org/struts/tags-html";
private static final String NAMESPACE_STRUTS_HTML = "http://struts.apache.org/struts/tags-html";
private static final String NAMESPACE_JAKARTA_BEAN = "http://jakarta.apache.org/struts/tags-bean";
private static final String NAMESPACE_STRUTS_BEAN = "http://struts.apache.org/struts/tags-bean";
private static final String NAMESPACE_WEBINF_HTML = "/WEB-INF/struts-html.tld";
private static final String NAMESPACE_WEBINF_BEAN = "/WEB-INF/struts-bean.tld";
private static final String NAMESPACE_JSTL_FMT = "http://java.sun.com/jstl/fmt";
private static final HashMap<String, Map<String, List<String>>> ATTRS = new HashMap<String, Map<String, List<String>>>();
static {
HashMap<String, List<String>> html = new HashMap<String, List<String>>();
HashMap<String, List<String>> bean = new HashMap<String, List<String>>();
HashMap<String, List<String>> fmt = new HashMap<String, List<String>>();
List<String> key = Arrays.asList("key");
List<String> title = Arrays.asList("titleKey");
List<String> alttitle = Arrays.asList("altKey", "titleKey");
List<String> srcalttitle = Arrays.asList("srcKey", "altKey", "titleKey");
html.put("button", alttitle);
html.put("cancel", alttitle);
html.put("checkbox", alttitle);
html.put("file", alttitle);
html.put("frame", title);
html.put("hidden", alttitle);
html.put("image", srcalttitle);
html.put("img", srcalttitle);
html.put("link", title);
html.put("multibox", alttitle);
html.put("option", key);
html.put("password", alttitle);
html.put("radio", alttitle);
html.put("reset", alttitle);
html.put("select", alttitle);
html.put("submit", alttitle);
html.put("text", alttitle);
html.put("textarea", alttitle);
html.put("messages", Arrays.asList("footer", "header"));
html.put("errors", Arrays.asList("footer", "header", "prefix", "suffix"));
bean.put("message", key);
fmt.put("message", key);
ATTRS.put(NAMESPACE_STRUTS_HTML, html);
ATTRS.put(NAMESPACE_JAKARTA_HTML, html);
ATTRS.put(NAMESPACE_WEBINF_HTML, html);
ATTRS.put(NAMESPACE_STRUTS_BEAN, bean);
ATTRS.put(NAMESPACE_JAKARTA_BEAN, bean);
ATTRS.put(NAMESPACE_WEBINF_BEAN, bean);
ATTRS.put(NAMESPACE_JSTL_FMT, fmt);
}
private StrutsHtmlMessageExtractor extractor;
public StrutsHtmlHandler(StrutsHtmlMessageExtractor extractor) {
this.extractor = extractor;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
Map<String, List<String>> map = ATTRS.get(uri);
if (map != null) {
List<String> keys = map.get(localName);
if (keys != null) {
for (String key : keys) {
String value = atts.getValue(key);
if (value != null) {
extractor.addMessage(value);
}
}
}
}
super.startElement(uri, localName, qName, atts);
}
}