1 package org.columba.core.gui.globalactions; 19 20 import java.awt.event.ActionEvent ; 21 import java.awt.event.ActionListener ; 22 import java.util.Enumeration ; 23 import java.util.Vector ; 24 25 import javax.swing.JMenuItem ; 26 27 import org.columba.api.gui.frame.IFrameMediator; 28 import org.columba.api.plugin.IExtension; 29 import org.columba.api.plugin.IExtensionHandler; 30 import org.columba.api.plugin.IExtensionHandlerKeys; 31 import org.columba.api.plugin.PluginException; 32 import org.columba.api.plugin.PluginHandlerNotFoundException; 33 import org.columba.api.plugin.PluginLoadingFailedException; 34 import org.columba.core.gui.action.AbstractColumbaAction; 35 import org.columba.core.gui.base.CMenuItem; 36 import org.columba.core.gui.frame.FrameManager; 37 import org.columba.core.gui.menu.IMenu; 38 import org.columba.core.plugin.PluginManager; 39 40 public class NewSubmenu extends IMenu implements ActionListener { 41 42 public NewSubmenu(IFrameMediator controller) { 43 super(controller, controller.getString("menu", "mainframe", 44 "menu_file_new"), "NewSubMenu"); 45 46 IExtensionHandler frameHandler = null; 47 try { 48 frameHandler = PluginManager.getInstance().getExtensionHandler( 49 IExtensionHandlerKeys.ORG_COLUMBA_CORE_FRAME); 50 } catch (PluginHandlerNotFoundException e) { 51 e.printStackTrace(); 52 return; 53 } 54 55 IExtensionHandler newItemHandler = null; 56 try { 57 newItemHandler = PluginManager.getInstance().getExtensionHandler( 58 IExtensionHandlerKeys.ORG_COLUMBA_CORE_NEWITEM); 59 } catch (PluginHandlerNotFoundException e) { 60 e.printStackTrace(); 61 return; 62 } 63 64 String [] managedFrames = getManagedFrames(frameHandler); 66 for (int i = 0; i < managedFrames.length; i++) { 67 JMenuItem menu = createMenu(managedFrames[i], managedFrames[i]); 68 add(menu); 69 } 70 71 addSeparator(); 72 73 String [] ids = getAllItems(newItemHandler); 75 for ( int i=0; i<ids.length; i++) { 76 JMenuItem item = createNewItemMenuItem(newItemHandler, ids[i]); 77 if ( item == null ) continue; 78 add(item); 79 } 80 81 } 82 83 private JMenuItem createNewItemMenuItem(IExtensionHandler newItemHandler, String id) { 84 AbstractColumbaAction action = null; 85 IExtension extension = newItemHandler.getExtension(id); 86 if ( extension == null ) return null; 87 88 try { 89 action = (AbstractColumbaAction) extension.instanciateExtension(new Object []{getFrameMediator()}); 90 return new CMenuItem(action); 91 } catch (PluginException e) { 92 e.printStackTrace(); 93 return null; 94 } 95 } 96 97 private JMenuItem createMenu(String name, String actionCommand) { 98 JMenuItem menu = new CMenuItem(name); 99 menu.setActionCommand(actionCommand); 100 menu.addActionListener(this); 101 return menu; 102 } 103 104 public String [] getManagedFrames(IExtensionHandler handler) { 105 Vector <String > result = new Vector <String >(); 106 Enumeration _enum = handler.getExtensionEnumeration(); 107 while (_enum.hasMoreElements()) { 108 IExtension extension = (IExtension) _enum.nextElement(); 109 String managed = extension.getMetadata().getAttribute("managed"); 110 if (managed == null) 111 managed = "false"; 112 113 if (managed.equals("true")) 114 result.add(extension.getMetadata().getId()); 115 } 116 return (String []) result.toArray(new String [0]); 117 } 118 119 public String [] getAllItems(IExtensionHandler handler) { 120 Vector <String > result = new Vector <String >(); 121 Enumeration _enum = handler.getExtensionEnumeration(); 122 while (_enum.hasMoreElements()) { 123 IExtension extension = (IExtension) _enum.nextElement(); 124 result.add(extension.getMetadata().getId()); 125 } 126 return (String []) result.toArray(new String [0]); 127 } 128 129 public void actionPerformed(ActionEvent event) { 130 final String action = event.getActionCommand(); 131 132 try { 133 FrameManager.getInstance().openView(action); 134 } catch (PluginLoadingFailedException e) { 135 e.printStackTrace(); 136 } 137 138 } 139 140 } 141 | Popular Tags |