2 * © 2009 David ‘Bombe’ Roden
4 package net.pterodactylus.arachne.parser;
6 import java.util.HashMap;
8 import java.util.logging.Level;
9 import java.util.logging.Logger;
11 import de.ina.util.data.InternetMediaType;
12 import de.ina.util.validation.Validation;
15 * Factory that can create {@link Parser} objects depending on a given content
18 * @author David ‘Bombe’ Roden <bombe@pterodactylus.net>
20 public class ParserFactory {
23 private static final Logger logger = Logger.getLogger(ParserFactory.class.getName());
25 /** Mapping from MIME type to parser classes. */
26 private final Map<InternetMediaType, Class<? extends Parser>> parsers = new HashMap<InternetMediaType, Class<? extends Parser>>();
29 * Creates a new parser factory using default parsers for common MIME types.
31 public ParserFactory() {
32 parsers.put(new InternetMediaType("text", "html"), HtmlEditorKitParser.class);
36 * Returns a {@link Parser} for the given content type.
40 * @return A parser for the content type, or <code>null</code> if no parser
41 * for the given content type could be found
43 public Parser getParser(String contentType) {
44 Validation.begin().isNotNull("contentType", (Object) contentType).check();
45 InternetMediaType internetMediaType = InternetMediaType.fromString(contentType);
46 Class<? extends Parser> parserClass = parsers.get(internetMediaType);
47 if (parserClass == null) {
51 Parser parser = parserClass.newInstance();
53 } catch (InstantiationException ie1) {
54 logger.log(Level.WARNING, "Could not instantiate parser “" + parserClass.getName() + "!", ie1);
55 } catch (IllegalAccessException iae1) {
56 logger.log(Level.WARNING, "Could not instantiate parser “" + parserClass.getName() + "!", iae1);