diff --git a/plugins/testPluginGraphicalComponent/myicon.gif b/plugins/testPluginGraphicalComponent/myicon.gif new file mode 100644 index 0000000000000000000000000000000000000000..a0dcc05b53b2a1715e2f2de24a828b294ff083fd Binary files /dev/null and b/plugins/testPluginGraphicalComponent/myicon.gif differ diff --git a/src/main/java/common/ConfigurationTTool.java b/src/main/java/common/ConfigurationTTool.java index 2447c8843d063a39d9aaf9904caf950e0129576b..1ddec314028c14b632b6eb9e7da7f0dbd21022fe 100755 --- a/src/main/java/common/ConfigurationTTool.java +++ b/src/main/java/common/ConfigurationTTool.java @@ -149,6 +149,7 @@ public class ConfigurationTTool { // PLUGINS public static String PLUGIN_JAVA_CODE_GENERATOR = ""; + public static String[] PLUGIN_GRAPHICAL_COMPONENT = new String[0]; // URL for models public static String URL_MODEL = "http://ttool.telecom-paristech.fr/networkmodels/models.txt"; @@ -451,11 +452,14 @@ public class ConfigurationTTool { sb.append("Attack ontology website: " + AttackOntologyWebsite + "\n"); // Plugins - sb.append("Plugins:\n"); + sb.append("\nPlugins:\n"); sb.append("Plugin for java code generation: " + PLUGIN_JAVA_CODE_GENERATOR + "\n"); + for (int i=0; i<PLUGIN_GRAPHICAL_COMPONENT.length; i++) { + sb.append("Plugin for graphical component: " + PLUGIN_GRAPHICAL_COMPONENT[i] + "\n"); + } // URL - sb.append("URLs:\n"); + sb.append("\nURLs:\n"); sb.append("URL for loading models from network: " + URL_MODEL + "\n"); sb.append("\nCustom external commands:\n"); @@ -736,6 +740,10 @@ public class ConfigurationTTool { if (nl.getLength() > 0) PluginJavaCodeGenerator(nl); + nl = doc.getElementsByTagName("PLUGIN_GRAPHICAL_COMPONENT"); + if (nl.getLength() > 0) + PluginGraphicalComponent(nl); + nl = doc.getElementsByTagName("URL_MODEL"); if (nl.getLength() > 0) URLModel(nl); @@ -1423,6 +1431,18 @@ public class ConfigurationTTool { } } + private static void PluginGraphicalComponent(NodeList nl) throws MalformedConfigurationException { + PLUGIN_GRAPHICAL_COMPONENT = new String[nl.getLength()]; + try { + for (int i=0; i<nl.getLength(); i++) { + Element elt = (Element)(nl.item(i)); + PLUGIN_GRAPHICAL_COMPONENT[i] = elt.getAttribute("data"); + } + } catch (Exception e) { + throw new MalformedConfigurationException(e.getMessage()); + } + } + private static void URLModel(NodeList nl) throws MalformedConfigurationException { try { Element elt = (Element)(nl.item(0)); diff --git a/src/main/java/myutil/Plugin.java b/src/main/java/myutil/Plugin.java index b69e589b7e8c4be3cdecbc9b566339faee9fee32..31eb7c30ac1251ec40262891ac34220775efefb5 100755 --- a/src/main/java/myutil/Plugin.java +++ b/src/main/java/myutil/Plugin.java @@ -47,6 +47,8 @@ import java.net.URL; import java.net.URLClassLoader; import java.util.HashMap; +import javax.swing.*; + /** * Class Plugin * Creation: 24/05/2017 @@ -92,5 +94,35 @@ public class Plugin { } + public String executeRetStringMethod(String _className, String _methodName) { + // We have a valid plugin. We now need to get the Method + Method m = getMethod(_className, _methodName); + if (m == null) { + return null; + } + + try { + return (String)(m.invoke(null)); + } catch (Exception e) { + TraceManager.addDev("Exception occured when executing method " + _methodName); + return null; + } + } + + + public ImageIcon executeRetImageIconMethod(String _className, String _methodName) { + // We have a valid plugin. We now need to get the Method + Method m = getMethod(_className, _methodName); + if (m == null) { + return null; + } + + try { + return (ImageIcon)(m.invoke(null)); + } catch (Exception e) { + TraceManager.addDev("Exception occured when executing method " + _methodName); + return null; + } + } } diff --git a/src/main/java/myutil/PluginManager.java b/src/main/java/myutil/PluginManager.java index 64c54338624384f359fc629b57df1b07634e94ec..3f5ba6e3e46dd8a11dfc5d05e2033f085421cbbf 100755 --- a/src/main/java/myutil/PluginManager.java +++ b/src/main/java/myutil/PluginManager.java @@ -64,6 +64,15 @@ public class PluginManager { plugins.add(_plugin); } + public Plugin getPluginOrCreate(String _name) { + Plugin plug = getPlugin(_name); + if (plug != null) { + return plug; + } + + return createPlugin(_name); + } + public Plugin getPlugin(String _name) { for(Plugin plugin: plugins) { if (plugin.getName().compareTo(_name) == 0) { @@ -105,18 +114,9 @@ public class PluginManager { } } - // We have a valid plugin. We now need to get the Method - Method m = plugin.getMethod(_className, _methodName); - if (m == null) { - return null; - } + return plugin.executeRetStringMethod(_className, _methodName); - try { - return (String)(m.invoke(null)); - } catch (Exception e) { - TraceManager.addDev("Exception occured when executing method " + _methodName); - return null; - } + } diff --git a/src/main/java/ui/TGComponentPlugin.java b/src/main/java/ui/TGComponentPlugin.java index 6198ef508cb829f80f117477b22b6aa551ca56e7..66a99df2b36c618d5f52fa4c3f7de8917f57c756 100755 --- a/src/main/java/ui/TGComponentPlugin.java +++ b/src/main/java/ui/TGComponentPlugin.java @@ -56,11 +56,4 @@ public class TGComponentPlugin extends TGComponent { private Plugin componentPlugin; private String className; - - - - - - - } diff --git a/src/main/java/ui/TGUIAction.java b/src/main/java/ui/TGUIAction.java index 4ad2e771c56c10219edf5cbe80ecb2933b4558d9..e87746c9275b142c264f92ff198f228b3122a9a5 100755 --- a/src/main/java/ui/TGUIAction.java +++ b/src/main/java/ui/TGUIAction.java @@ -618,8 +618,6 @@ public class TGUIAction extends AbstractAction { public static final String LARGE_ICON = "LargeIcon"; - - public TGUIAction(int id) { if (actions[0] == null) { init(); diff --git a/src/main/java/ui/TToolBar.java b/src/main/java/ui/TToolBar.java index c3fb06ac7e065b27852525909a8e32726bfcc126..fd2176f88d6e1999f4962a9e9105100c5cb852b1 100755 --- a/src/main/java/ui/TToolBar.java +++ b/src/main/java/ui/TToolBar.java @@ -42,9 +42,12 @@ package ui; import javax.swing.*; -//import java.awt.*; +import java.util.*; //import java.awt.event.*; +import myutil.*; +import common.*; + /** * Class TToolBar @@ -55,6 +58,9 @@ import javax.swing.*; * @see TGComponent */ public abstract class TToolBar extends JToolBar { + + protected ArrayList<TAction> pluginActions; + //protected ActionListener buttonTB; protected MainGUI mgui; /*protected int typeSelected = TGComponentManager.EDIT; @@ -72,6 +78,26 @@ public abstract class TToolBar extends JToolBar { protected abstract void setButtons(); protected abstract void setActive(boolean b); + + protected void setPluginButtons(String diag) { + pluginActions = new ArrayList<TAction>(); + this.addSeparator(); + for(int i=0; i<ConfigurationTTool.PLUGIN_GRAPHICAL_COMPONENT.length; i++) { + Plugin p = PluginManager.pluginManager.getPluginOrCreate(ConfigurationTTool.PLUGIN_GRAPHICAL_COMPONENT[i]); + if (p != null) { + String shortText = p.executeRetStringMethod("CustomizerGraphicalComponent", "getShortText"); + String longText = p.executeRetStringMethod("CustomizerGraphicalComponent", "getLongText"); + String veryShortText = p.executeRetStringMethod("CustomizerGraphicalComponent", "veryShortText"); + ImageIcon img = p.executeRetImageIconMethod("CustomizerGraphicalComponent", "getImageIcon"); + TraceManager.addDev("Plugin: " + p.getName() + " short name:" + shortText); + TAction t = new TAction("command-" + i, shortText, img, img, veryShortText, longText, 0); + pluginActions.add(t); + /*JButton button = add(t); + button.addMouseListener(mgui.mouseHandler);*/ + + } + } + } } // Class diff --git a/src/main/java/ui/tmldd/TMLArchiDiagramToolBar.java b/src/main/java/ui/tmldd/TMLArchiDiagramToolBar.java index 1cd55b2d3bc9d4e4345800912dbab28f1d2b8f35..77d395def79194f95ef3aa3c9a7ce81f80f1d517 100755 --- a/src/main/java/ui/tmldd/TMLArchiDiagramToolBar.java +++ b/src/main/java/ui/tmldd/TMLArchiDiagramToolBar.java @@ -184,6 +184,8 @@ public class TMLArchiDiagramToolBar extends TToolBar implements ActionListener box = new JComboBox<>(viewInfos); this.add(box); box.addActionListener(this); + + setPluginButtons("TMLArchiDiagramPanel"); } public void setPanel(TMLArchiDiagramPanel _panel) {