private void register(ModeController modeController) { modeController.addExtension( IScriptEditorStarter.class, new IScriptEditorStarter() { public String startEditor(final String pScriptInput) { final ScriptModel scriptModel = new ScriptModel(pScriptInput); final ScriptEditorPanel scriptEditorPanel = new ScriptEditorPanel(scriptModel, false); scriptEditorPanel.setVisible(true); return scriptModel.getScript(); } public ComboBoxEditor createComboBoxEditor(Dimension minimumSize) { final ScriptComboBoxEditor scriptComboBoxEditor = new ScriptComboBoxEditor(); if (minimumSize != null) scriptComboBoxEditor.setMinimumSize(minimumSize); return scriptComboBoxEditor; } }); modeController.addExtension( IScriptStarter.class, new IScriptStarter() { public void executeScript(NodeModel node, String script) { ScriptingEngine.executeScript(node, script); } }); registerScriptAddOns(); if (!modeController.getController().getViewController().isHeadless()) { final IUserInputListenerFactory userInputListenerFactory = modeController.getUserInputListenerFactory(); addPropertiesToOptionPanel(); final MenuBuilder menuBuilder = userInputListenerFactory.getMenuBuilder(); modeController.addAction(new ScriptEditor()); modeController.addAction(new ExecuteScriptForAllNodes()); modeController.addAction(new ExecuteScriptForSelectionAction()); final ManageAddOnsAction manageAddOnsAction = new ManageAddOnsAction(); modeController.addAction(manageAddOnsAction); modeController.addExtension( AddOnInstaller.class, new AddOnInstaller() { public void install(final URL url) { final ManageAddOnsDialog dialog = manageAddOnsAction.getDialog(); // FIXME: method does not exist --> boercher // dialog.install(url); } }); final ScriptingConfiguration configuration = new ScriptingConfiguration(); ScriptingEngine.setClasspath(configuration.getClasspath()); ScriptCompiler.compileScriptsOnPath(configuration.getClasspath()); modeController.addMenuContributor( new IMenuContributor() { public void updateMenus(ModeController modeController, MenuBuilder builder) { registerScripts(menuBuilder, configuration); } }); createUserScriptsDirectory(); } FilterController.getCurrentFilterController() .getConditionFactory() .addConditionController(10, new ScriptConditionController()); }
private void registerScripts( final MenuBuilder menuBuilder, ScriptingConfiguration configuration) { final HashSet<String> registeredLocations = new HashSet<String>(); for (final String scriptsParentLocation : ScriptingConfiguration.getScriptsParentLocations()) { final String scriptsLocation = ScriptingConfiguration.getScriptsLocation(scriptsParentLocation); addSubMenu( menuBuilder, scriptsParentLocation, scriptsLocation, TextUtils.getText("ExecuteScripts.text")); registeredLocations.add(scriptsLocation); if (configuration.getNameScriptMap().isEmpty()) { final String message = "<html><body><em>" + TextUtils.getText("ExecuteScripts.noScriptsAvailable") + "</em></body></html>"; menuBuilder.addElement(scriptsLocation, new JMenuItem(message), 0); } for (final Entry<String, String> entry : configuration.getNameScriptMap().entrySet()) { final String scriptName = entry.getKey(); final ScriptMetaData metaData = configuration.getNameScriptMetaDataMap().get(scriptName); // in the worst case three actions will cache a script - should not matter that much since // it's unlikely // that one script is used in multiple modes by the same user for (final ExecutionMode executionMode : metaData.getExecutionModes()) { final String titleKey; final String scriptLocation; String location = metaData.getMenuLocation(executionMode); // FIXME: reduce code duplication (VB) if (location == null) { location = scriptsLocation + "/" + scriptName; if (!registeredLocations.contains(location)) { final String parentMenuTitle = pimpMenuTitle(metaData.getScriptName()); addSubMenu(menuBuilder, parentLocation(location), location, parentMenuTitle); registeredLocations.add(location); } titleKey = metaData.getTitleKey(executionMode); scriptLocation = location + "/" + titleKey; } else { if (!registeredLocations.contains(location)) { addSubMenu(menuBuilder, parentLocation(location), location, getMenuTitle(location)); registeredLocations.add(location); } titleKey = metaData.getTitleKey(executionMode); scriptLocation = location + "/" + titleKey; } if (!registeredLocations.contains(scriptLocation)) { addMenuItem(menuBuilder, location, entry, executionMode, titleKey, metaData); registeredLocations.add(scriptLocation); } } } } }