import java.io.*; import java.util.*; public class Explain { private final Map exts2handlers = new HashMap(); Explain() { use(MP3Handler.class); use(ImageHandler.class); } private void use(Class cls) { Handler h = null; try { h = cls.newInstance(); } catch (InstantiationException e) { Util.getInstance().handle("Couldn't create handler for class " + cls,e); return; } catch (IllegalAccessException e) { Util.getInstance().handle("Couldn't create handler for class " + cls,e); return; } for (String ext : h.extensions()) { exts2handlers.put(ext.toLowerCase(),h); } } private Handler get(File f) { String path = f.getAbsolutePath(); String ext = Util.getInstance().getExtension(f); Handler h = exts2handlers.get(ext); return h == null ? TextHandler.getInstance() : h; } // -------------------------------------------------- // Main // -------------------------------------------------- public static void main(String[] args) { new Explain().realMain(args); } public void realMain(String[] args) { if (args.length == 0) { System.out.println("I support the following formats:"); Set seen = new HashSet(); for (Handler h : exts2handlers.values()) { Class cls = h.getClass(); if (seen.contains(cls)) continue; seen.add(cls); System.out.println(" - " + h.extensions() + ": " + h.description()); } System.out.println("Everything else is handled as text"); return; } for (String infile : args) explain(infile); } private void explain(String infile) { File f = new File(infile); Handler h = null; try { h = get(f); } catch (IllegalArgumentException e) { Util.getInstance().log("Trouble creating handler for " + f); return; } Map hash = h.explain(f); System.out.println(); for (String key : h.keys()) { String val = hash.get(key); System.out.printf("%-30s: %s\n", key, val); } } }