예제 #1
0
  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());
  }
    public void apply(final Object target) {
      DefaultServiceRegistry services = new DefaultServiceRegistry();
      services.add(ScriptPluginFactory.class, DefaultScriptPluginFactory.this);
      services.add(ScriptHandlerFactory.class, scriptHandlerFactory);
      services.add(ClassLoaderScope.class, targetScope);
      services.add(LoggingManagerInternal.class, loggingManagerFactory.create());
      services.add(Instantiator.class, instantiator);
      services.add(ScriptHandler.class, scriptHandler);
      services.add(FileLookup.class, fileLookup);
      services.add(ModelRuleSourceDetector.class, modelRuleSourceDetector);

      ScriptSource withImports = importsReader.withImports(scriptSource);

      PluginDependenciesService pluginDependenciesService =
          new PluginDependenciesService(getSource());
      services.add(PluginDependenciesService.class, pluginDependenciesService);

      ScriptCompiler compiler = scriptCompilerFactory.createCompiler(withImports);
      compiler.setClassloader(baseScope.getExportClassLoader());

      boolean supportsPluginsBlock = ProjectScript.class.isAssignableFrom(scriptType);
      String onPluginBlockError =
          supportsPluginsBlock ? null : "Only Project build scripts can contain plugins {} blocks";

      PluginsAndBuildscriptTransformer scriptBlockTransformer =
          new PluginsAndBuildscriptTransformer(
              classpathClosureName, onPluginBlockError, documentationRegistry);

      StatementExtractingScriptTransformer classpathScriptTransformer =
          new StatementExtractingScriptTransformer(classpathClosureName, scriptBlockTransformer);

      compiler.setTransformer(classpathScriptTransformer);

      ScriptRunner<? extends BasicScript> classPathScriptRunner = compiler.compile(scriptType);
      classPathScriptRunner.getScript().init(target, services);
      classPathScriptRunner.run();

      List<PluginRequest> pluginRequests = pluginDependenciesService.getRequests();
      PluginAwareInternal pluginAware =
          target instanceof PluginAwareInternal ? (PluginAwareInternal) target : null;
      pluginRequestApplicator.applyPlugins(pluginRequests, scriptHandler, pluginAware, targetScope);

      compiler.setClassloader(targetScope.getLocalClassLoader());

      BuildScriptTransformer transformer =
          new BuildScriptTransformer(
              "no_" + classpathScriptTransformer.getId(),
              classpathScriptTransformer.invert(),
              scriptSource);
      compiler.setTransformer(transformer);

      // TODO - find a less tangled way of getting this in here, see the verifier impl for why it's
      // needed
      compiler.setVerifier(new ClosureCreationInterceptingVerifier());

      ScriptRunner<? extends BasicScript> runner = compiler.compile(scriptType);

      BasicScript script = runner.getScript();
      script.init(target, services);
      if (ownerScript && target instanceof ScriptAware) {
        ((ScriptAware) target).setScript(script);
      }
      runner.run();
    }