1 package org.columba.core.gui.toolbar; 19 20 import java.io.IOException ; 21 import java.io.InputStream ; 22 import java.util.Iterator ; 23 import java.util.logging.Logger ; 24 25 import org.columba.api.gui.frame.IFrameMediator; 26 import org.columba.api.plugin.IExtension; 27 import org.columba.api.plugin.IExtensionHandler; 28 import org.columba.api.plugin.IExtensionHandlerKeys; 29 import org.columba.api.plugin.PluginException; 30 import org.columba.api.plugin.PluginHandlerNotFoundException; 31 import org.columba.core.gui.action.AbstractColumbaAction; 32 import org.columba.core.logging.Logging; 33 import org.columba.core.plugin.PluginManager; 34 import org.jdom.Document; 35 import org.jdom.Element; 36 import org.jdom.JDOMException; 37 import org.jdom.input.SAXBuilder; 38 39 45 public class ToolBarXMLDecoder { 46 47 private static final Logger LOG = Logger 48 .getLogger("org.columba.core.gui.menu"); 49 50 private IExtensionHandler pluginHandler; 51 52 private IFrameMediator mediator; 53 54 public ToolBarXMLDecoder(IFrameMediator mediator) { 55 super(); 56 57 this.mediator = mediator; 58 59 try { 60 pluginHandler = PluginManager 61 .getInstance().getExtensionHandler(IExtensionHandlerKeys.ORG_COLUMBA_CORE_ACTION); 62 } catch (PluginHandlerNotFoundException e) { 63 e.printStackTrace(); 64 } 65 } 66 67 public ExtendableToolBar createToolBar(InputStream is) { 68 ExtendableToolBar toolBar = new ExtendableToolBar(); 69 70 extendToolBar(toolBar, is); 71 72 return toolBar; 73 } 74 75 public void extendToolBar(ExtendableToolBar toolBar, InputStream is) { 76 77 Document doc = retrieveDocument(is); 78 79 Element toolBarElement = doc.getRootElement(); 80 if (toolBarElement.getName().equals("toolbar") == false) { 81 LOG.severe("root element <toolbar> expected, but was "+toolBarElement.getName()); 82 return; 83 } 84 85 Iterator it = toolBarElement.getChildren().listIterator(); 86 while (it.hasNext()) { 87 Element menuElement = (Element) it.next(); 88 if (menuElement.getName().equals("button")) { 89 90 String actionId = menuElement.getAttributeValue("id"); 91 if (actionId == null) 93 actionId = menuElement.getAttributeValue("action"); 94 95 if (actionId.equals("Cancel")) 98 continue; 99 100 AbstractColumbaAction action = getAction(actionId, mediator); 101 if ( action == null ) continue; 102 103 toolBar.add(action); 104 105 } else if (menuElement.getName().equals("separator")) { 106 toolBar.addSeparator(); 107 } else 108 LOG 109 .severe("unkown element tag <" + menuElement.getName() 110 + ">"); 111 } 112 113 } 114 115 private AbstractColumbaAction getAction(String id, 116 IFrameMediator frameMediator) { 117 if (id == null) 118 throw new IllegalArgumentException ("id == null"); 119 if (frameMediator == null) 120 throw new IllegalArgumentException ("frameMediator == null"); 121 122 IExtension extension = pluginHandler.getExtension(id); 123 124 AbstractColumbaAction a = null; 125 126 try { 127 if (extension != null) 128 a = (AbstractColumbaAction) extension 129 .instanciateExtension(new Object [] { frameMediator }); 130 } catch (PluginException e) { 131 LOG.severe(e.getMessage()); 132 if (Logging.DEBUG) 133 e.printStackTrace(); 134 135 } 136 137 return a; 138 139 } 140 141 145 private Document retrieveDocument(InputStream is) { 146 SAXBuilder builder = new SAXBuilder(); 147 builder.setIgnoringElementContentWhitespace(true); 148 Document doc = null; 149 try { 150 doc = builder.build(is); 151 } catch (JDOMException e) { 152 LOG.severe(e.getMessage()); 153 e.printStackTrace(); 154 } catch (IOException e) { 155 LOG.severe(e.getMessage()); 156 e.printStackTrace(); 157 } 158 return doc; 159 } 160 } 161 | Popular Tags |