private static void openURL(String strURL) {
   if (Program.launch(strURL)) {
     return;
   }
   URL openURL = null;
   try {
     openURL = new URL(strURL);
     PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL(openURL);
   } catch (PartInitException e) {
     // if no default browser (like on linux), try to open directly with firefox.
     try {
       Runtime.getRuntime().exec("firefox " + openURL.toString()); // $NON-NLS-1$
     } catch (IOException e2) {
       if (PlatformUI.getWorkbench().getBrowserSupport().isInternalWebBrowserAvailable()) {
         IWebBrowser browser;
         try {
           browser =
               PlatformUI.getWorkbench()
                   .getBrowserSupport()
                   .createBrowser("registrationId"); // $NON-NLS-1$
           browser.openURL(openURL);
         } catch (PartInitException e1) {
           ExceptionHandler.process(e);
         }
       } else {
         ExceptionHandler.process(e);
       }
     }
   } catch (MalformedURLException e) {
     ExceptionHandler.process(e);
   }
 }
 private void lockObject(IRepositoryViewObject object) {
   IProxyRepositoryFactory repositoryFactory =
       CorePlugin.getDefault().getRepositoryService().getProxyRepositoryFactory();
   try {
     repositoryFactory.lock(object);
   } catch (PersistenceException e) {
     ExceptionHandler.process(e);
   } catch (BusinessException e) {
     ExceptionHandler.process(e);
   }
 }
  public void buildNewJar() {
    try {
      String tmpFoler = getTmpFolder();
      // ZipToFile.unZipFile(zipFile, tmpFoler);
      // init jobFolder File
      initJobFolder();
      // bug 21473
      // change the .bat file & .sh file
      if (batFile != null) {
        changeScriptFile(batFile);
      }
      if (shFile != null) {
        changeScriptFile(shFile);
      }
      if (jobFolder == null) {
        return;
      }
      String newJarPath = jobFolder.getAbsolutePath() + "/" + CLASSPATH_JAR; // $NON-NLS-1$
      NewJarBuilder jarBuilder = new NewJarBuilder(tmpFoler, newJarPath);
      jarBuilder.buildJar();

      // delete non used jar files
      // deleteNonUsedJar();

    } catch (Exception e) {
      ExceptionHandler.process(e);
    }
  }
 /*
  * (non-Javadoc)
  *
  * @see org.talend.core.ui.ILastVersionChecker#isLastVersion(org.talend.core.model.properties.Item)
  */
 public boolean isLastVersion(Item item) {
   if (item.getProperty() != null) {
     if (item.getProperty().getId() == null) {
       return true;
     }
     try {
       List<IRepositoryViewObject> allVersion =
           ProxyRepositoryFactory.getInstance().getAllVersion(item.getProperty().getId());
       if (allVersion != null && !allVersion.isEmpty()) {
         String lastVersion = VersionUtils.DEFAULT_VERSION;
         for (IRepositoryViewObject object : allVersion) {
           if (VersionUtils.compareTo(object.getVersion(), lastVersion) > 0) {
             lastVersion = object.getVersion();
           }
         }
         if (VersionUtils.compareTo(item.getProperty().getVersion(), lastVersion) == 0) {
           return true;
         }
       }
     } catch (PersistenceException e) {
       ExceptionHandler.process(e);
     }
   }
   return false;
 }
  @Override
  public ExecutionResult execute(Item item) {
    ProcessType processType = getProcessType(item);
    String[] tmomCompNames = {"tMomInput", "tMomInputLoop", "tMomOutput"}; // $NON-NLS-1$

    IComponentConversion changeActiveMqDriverJarType =
        new IComponentConversion() {
          public void transform(NodeType node) {
            ElementParameterType mq_drivers =
                ComponentUtilities.getNodeProperty(node, PROPERTY_TO_REMOVE); // $NON-NLS-2$
            if (mq_drivers != null) {
              ComponentUtilities.removeNodeProperty(node, PROPERTY_TO_REMOVE);
            }
          }
        };

    for (String name : tmomCompNames) {
      IComponentFilter filter = new NameComponentFilter(name); // $NON-NLS-4$
      try {
        ModifyComponentsAction.searchAndModify(
            item,
            processType,
            filter,
            Arrays.<IComponentConversion>asList(changeActiveMqDriverJarType));
      } catch (PersistenceException e) {
        ExceptionHandler.process(e);
        return ExecutionResult.FAILURE;
      }
    }

    return ExecutionResult.SUCCESS_NO_ALERT;
  }
  public ExecutionResult execute(Item item) {
    ProcessType processType = getProcessType(item);
    if (processType == null) {
      return ExecutionResult.NOTHING_TO_DO;
    }

    try {
      IComponentFilter filter1 = new NameComponentFilter("tFileInputCSV"); // $NON-NLS-1$

      IComponentConversion addProperty = new AddPropertyCSVOptionConversion();
      IComponentConversion renameComponent =
          new RenameComponentConversion("tFileInputDelimited"); // $NON-NLS-1$

      ModifyComponentsAction.searchAndModify(
          item,
          processType,
          filter1,
          Arrays.<IComponentConversion>asList(addProperty, renameComponent));

      return ExecutionResult.SUCCESS_WITH_ALERT;
    } catch (Exception e) {
      ExceptionHandler.process(e);
      return ExecutionResult.FAILURE;
    }
  }
  @Override
  public void createPartControl(Composite parent) {
    try {
      browser = new Browser(parent, SWT.NONE);
      browser.setText(StartingHelper.getHelper().getHtmlContent());
      browser.addLocationListener(new BrowserDynamicPartLocationListener());
      return;
    } catch (IOException e) {
      ExceptionHandler.process(e);
    } catch (Throwable t) {

      Exception ex =
          new Exception(
              "The internal web browser can not be access,the starting page won't be displayed");
      ExceptionHandler.process(ex);
    }
  }
 @Override
 public ExecutionResult execute(Item item) {
   try {
     replaceHostAndPort(item);
     return ExecutionResult.SUCCESS_NO_ALERT;
   } catch (Exception e) {
     ExceptionHandler.process(e);
     return ExecutionResult.FAILURE;
   }
 }
  /**
   * Gets all demo projects information.
   *
   * @return a list of <code>DemoProjectBean</code>
   */
  public static List<DemoProjectBean> getAllDemoProjects() {
    SAXReader reader = new SAXReader();
    Document doc = null;
    List<DemoProjectBean> demoProjectList = new ArrayList<DemoProjectBean>();
    DemoProjectBean demoProject = null;
    List<File> xmlFilePath = getXMLFilePath();
    for (int t = 0; t < xmlFilePath.size(); t++) {
      try {
        doc = reader.read(xmlFilePath.get(t));
      } catch (DocumentException e) {
        ExceptionHandler.process(e);
        return null;
      }

      Element demoProjectsInfo = doc.getRootElement();

      IBrandingService brandingService =
          (IBrandingService) GlobalServiceRegister.getDefault().getService(IBrandingService.class);
      String[] availableLanguages =
          brandingService.getBrandingConfiguration().getAvailableLanguages();

      for (Iterator<DemoProjectBean> i = demoProjectsInfo.elementIterator("project");
          i.hasNext(); ) { // $NON-NLS-1$
        Element demoProjectElement = (Element) i.next();
        demoProject = new DemoProjectBean();
        demoProject.setProjectName(demoProjectElement.attributeValue("name")); // $NON-NLS-1$
        String language = demoProjectElement.attributeValue("language"); // $NON-NLS-1$

        if (!ArrayUtils.contains(availableLanguages, language)) {
          // if the language is not available in current branding, don't display this demo project
          continue;
        }

        demoProject.setLanguage(ECodeLanguage.getCodeLanguage(language));
        String demoProjectFileType =
            demoProjectElement.attributeValue("demoProjectFileType"); // $NON-NLS-1$
        demoProject.setDemoProjectFileType(
            EDemoProjectFileType.getDemoProjectFileTypeName(demoProjectFileType));
        demoProject.setDemoProjectFilePath(
            demoProjectElement.attributeValue("demoFilePath")); // $NON-NLS-1$
        demoProject.setDescriptionFilePath(
            demoProjectElement.attributeValue("descriptionFilePath")); // $NON-NLS-1$
        // get the demo plugin Id
        demoProject.setPluginId(demoProjectElement.attributeValue("pluginId")); // $NON-NLS-1$
        if (demoProject.getProjectName().equals("ESBDEMOS")) {
          if (!PluginChecker.isPluginLoaded("org.talend.repository.services")) {
            continue;
          }
        }
        demoProjectList.add(demoProject);
      }
    }
    return demoProjectList;
  }
  /** qzhang Comment method "runPreviewCode". */
  public Process runPreviewCode() {
    getProcess();
    if (jobContextManager == null) {
      // proc.getContextManager().setListContext(component.getProcess().getContextManager().getListContext());
      proc.getContextManager()
          .setDefaultContext(component.getProcess().getContextManager().getDefaultContext());
    } else {
      // proc.getContextManager().setListContext(jobContextManager.getListContext());
      proc.getContextManager().setDefaultContext(jobContextManager.getDefaultContext());
    }
    // IContext context2 = new org.talend.core.model.context.JobContext(PREVIEW);
    // if (UIManager.isJavaProject()) {
    // List<IContextParameter> params = new ArrayList<IContextParameter>();
    // JobContextParameter contextParameter = new JobContextParameter();
    // contextParameter.setContext(context2);
    // contextParameter.setName(PREVIEW);
    // contextParameter.setValue(PREVIEW);
    // contextParameter.setType("String");
    // params.add(contextParameter);
    // context2.setContextParameterList(params);
    // }

    // generate context files.
    IProcessor contextProcessor = ProcessorUtilities.getProcessor(proc, null);
    contextProcessor.setContext(proc.getContextManager().getDefaultContext());
    try {
      contextProcessor.cleanBeforeGenerate(TalendProcessOptionConstants.CLEAN_CONTEXTS);
      contextProcessor.generateContextCode();
    } catch (ProcessorException pe) {
      ExceptionHandler.process(pe);
    }

    IProcessor processor =
        ProcessorUtilities.getProcessor(proc, null, proc.getContextManager().getDefaultContext());
    try {
      return processor.run(IProcessor.NO_STATISTICS, IProcessor.NO_TRACES, null);
    } catch (Exception e) {
      ExceptionHandler.process(e);
      return null;
    }
  }
  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.jface.action.Action#run()
   */
  public void run() {
    IWorkbench workbench = PlatformUI.getWorkbench();
    IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage();
    try {
      page.showView(getViewId());

    } catch (PartInitException e) {
      // TODO Auto-generated catch block
      // e.printStackTrace();
      ExceptionHandler.process(e);
    }
  }
  /*
   * (non-Javadoc)
   *
   * @see
   * org.talend.core.model.migration.TXMLMapChangeAllInOneValueMigrationTask
   * (org .talend.core.model.properties.Item)
   */
  @Override
  public ExecutionResult execute(Item item) {

    IProxyRepositoryFactory factory =
        CorePlugin.getDefault().getRepositoryService().getProxyRepositoryFactory();
    ProcessType processType = getProcessType(item);
    boolean modified = false;

    if (processType != null) {
      for (Object obj : processType.getNode()) {
        NodeType nodeType = (NodeType) obj;
        if (nodeType.getComponentName().startsWith("tXMLMap")) {
          XmlMapData xmlMapdata = (XmlMapData) nodeType.getNodeData();
          EList<OutputXmlTree> outputTables = xmlMapdata.getOutputTrees();
          EList<InputXmlTree> inputTables = xmlMapdata.getInputTrees();
          boolean hasDocumentInTheMainInputTable = false;
          for (InputXmlTree inputTable : inputTables) {
            if (!(inputTable.isLookup())) {
              for (TreeNode inputEntry : inputTable.getNodes()) {
                if ("id_Document".equals(inputEntry.getType())) {
                  hasDocumentInTheMainInputTable = true;
                }
              }
            }
          }
          if (hasDocumentInTheMainInputTable) {
            for (OutputXmlTree outputTable : outputTables) {
              for (TreeNode outputEntry : outputTable.getNodes()) {
                if ("id_Document".equals(outputEntry.getType())) {
                  if (!outputTable.isAllInOne()) {
                    outputTable.setAllInOne(true);
                    modified = true;
                    break;
                  }
                }
              }
            }
          }
        }
      }
    }
    try {
      if (modified) {
        factory.save(item, true);
        return ExecutionResult.SUCCESS_WITH_ALERT;
      } else {
        return ExecutionResult.SUCCESS_NO_ALERT;
      }
    } catch (Exception e) {
      ExceptionHandler.process(e);
      return ExecutionResult.FAILURE;
    }
  }
Beispiel #13
0
 @Override
 public RootContainer<String, IRepositoryViewObject> getRootContainerFromType(
     Project project, ERepositoryObjectType type) {
   if (project == null || type == null) {
     return null;
   }
   try {
     return getObjectFromFolder(project, type, true);
   } catch (PersistenceException e) {
     ExceptionHandler.process(e);
   }
   return null;
 }
 public IEditorPart openEditor(IWorkbenchPage page, IFile file, Item item, boolean forceReadOnly) {
   try {
     IEditorDescriptor editorDesc = IDE.getEditorDescriptor(file);
     RepositoryEditorInput repositoryEditorInput = new RepositoryEditorInput(file, item);
     repositoryEditorInput.setReadOnly(forceReadOnly);
     repositoryEditorInput.setRepositoryNode(null);
     IEditorPart editorPart = IDE.openEditor(page, repositoryEditorInput, editorDesc.getId());
     editors.put(editorPart, repositoryEditorInput);
     return editorPart;
   } catch (PartInitException e) {
     // e.printStackTrace();
     ExceptionHandler.process(e);
   }
   return null;
 }
 /**
  * DOC mhelleboid Comment method "getTempFolder".
  *
  * @param project TODO
  * @return
  */
 private IPath getTempFolderPath(Project project) {
   IProject iProject;
   IFolder iFolder = null;
   try {
     iProject = ResourceModelHelper.getProject(project);
     iFolder = ResourceUtils.getFolder(iProject, RepositoryConstants.TEMP_DIRECTORY, false);
     if (!iFolder.exists()) {
       ResourceUtils.createFolder(iFolder);
     }
   } catch (PersistenceException e) {
     // e.printStackTrace();
     ExceptionHandler.process(e);
   }
   return iFolder.getFullPath();
 }
  @SuppressWarnings({"rawtypes", "unchecked"})
  private static Class<Item>[] retrieveClasses(IConfigurationElement parent) {
    IConfigurationElement[] children = parent.getChildren("Item"); // $NON-NLS-1$
    List<Class<Item>> list = new ArrayList<Class<Item>>();

    for (IConfigurationElement ce : children) {
      String className = ce.getAttribute("clazz"); // $NON-NLS-1$
      try {
        Class clazz = Class.forName(className);
        list.add(clazz);
      } catch (ClassNotFoundException e) {
        ExceptionHandler.process(e);
      }
    }
    return list.toArray(new Class[0]);
  }
 @Override
 public ExecutionResult execute(Item item) {
   ProcessType processType = getProcessType(item);
   if (getProject().getLanguage() == ECodeLanguage.JAVA && processType != null) {
     try {
       ModifyComponentsAction.searchAndRename(
           item, processType, "tBuffer", "tBufferOutput"); // $NON-NLS-1$ //$NON-NLS-2$
       return ExecutionResult.SUCCESS_WITH_ALERT;
     } catch (Exception e) {
       ExceptionHandler.process(e);
       return ExecutionResult.FAILURE;
     }
   } else {
     return ExecutionResult.NOTHING_TO_DO;
   }
 }
  /**
   * Gets the path of demo projects xml file.
   *
   * @return String
   */
  private static List<File> getXMLFilePath() {
    List<File> xmlListFile = new ArrayList<File>();
    String[] pluginIDs =
        new String[] {
          ResourcesPlugin.PLUGIN_ID,
          "org.talend.resources.perl", //$NON-NLS-1$
          ResourcesPlugin.TDQ_PLUGIN_ID,
          getMDMDemoPluginId()
        }; //$NON-NLS-1$

    for (int i = 0; i < pluginIDs.length; i++) {
      Bundle bundle = Platform.getBundle(pluginIDs[i]);
      if (bundle != null) {
        URL url = null;

        String fullPath = XML_FILE_PATH;
        if (ResourcesPlugin.TDQ_PLUGIN_ID.equals(pluginIDs[i])) {
          fullPath = PluginConstant.EMPTY_STRING;
        }
        URL fileUrl = FileLocator.find(bundle, new Path(fullPath), null);
        try {
          if (fileUrl != null) {
            url = FileLocator.toFileURL(fileUrl);
          }
        } catch (IOException e) {
          ExceptionHandler.process(e);
        }
        if (url == null) continue;
        File xmlFilePath = new File(url.getPath());
        if (xmlFilePath.exists()) {
          String files[] =
              xmlFilePath.list(
                  new FilenameFilter() {

                    public boolean accept(File arg0, String arg1) {
                      return XmlUtil.isXMLFile(arg1);
                    }
                  });
          for (String file : files) {
            File xml = new File(url.getPath() + "/" + file); // $NON-NLS-1$
            xmlListFile.add(xml);
          }
        }
      }
    }
    return xmlListFile;
  }
 /**
  * Get the absolute installation path of plugin.
  *
  * @param pluginId
  * @return the plugin path or an empty string when it's not found.
  */
 public static String getPluginInstallPath(String pluginId) {
   String pluginPath = "";
   try {
     boolean running = Platform.isRunning();
     if (!running) {
       return pluginPath;
     }
     URL url = FileLocator.resolve(Platform.getBundle(pluginId).getEntry("/")); // $NON-NLS-1$
     if (url == null) {
       return pluginPath;
     }
     pluginPath = url.getFile();
     String protoPath = url.getProtocol();
     if (pluginPath.startsWith("file:")) { // $NON-NLS-1$
       pluginPath = pluginPath.substring(pluginPath.indexOf("file:") + 6); // $NON-NLS-1$
     }
     if ("jar".equals(protoPath) && pluginPath.endsWith("!/")) { // $NON-NLS-1$ //$NON-NLS-2$
       pluginPath = pluginPath.substring(0, pluginPath.lastIndexOf("!/")); // $NON-NLS-1$
     }
   } catch (IOException e) {
     ExceptionHandler.process(e);
   }
   return pluginPath;
 }
  /**
   * yzhang Comment method "run".
   *
   * @param refresh
   * @param number
   * @return
   */
  public List<List<String>> run(final Button refresh, String number) {
    this.number = number;
    results.clear();
    IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
    try {
      progressService.runInUI(
          PlatformUI.getWorkbench().getProgressService(),
          new IRunnableWithProgress() {

            public void run(final IProgressMonitor monitor) {
              monitor.beginTask(
                  Messages.getString("RowGenPreivewCodeMain.Process.Generate"),
                  IProgressMonitor.UNKNOWN); // $NON-NLS-1$
              try {
                try {
                  process = runPreviewCode();
                  if (process == null) {
                    return;
                  }

                  StringBuffer out = new StringBuffer();
                  StringBuffer err = new StringBuffer();

                  createResultThread(process.getErrorStream(), err).start();
                  createResultThread(process.getInputStream(), out).start();

                  process.waitFor();

                  if (out.length() > 0) {
                    convert(out.toString());
                  }
                  if (err.length() > 0) {
                    String mainMsg =
                        Messages.getString("RowGenPreivewCodeMain.PerlRun.Error"); // $NON-NLS-1$
                    new ErrorDialogWidthDetailArea(
                        Display.getCurrent().getActiveShell(),
                        PluginUtils.PLUGIN_ID,
                        mainMsg,
                        Messages.getString(
                            "RowGenProcessMain.checkParameter", err.toString())); // $NON-NLS-1$
                  }
                } catch (Exception e) {
                  ExceptionHandler.process(e);
                  kill();
                }
              } finally {
                monitor.done();
                refresh.setText(
                    Messages.getString("RowGenPreivewCodeMain.PreviewBtn.Text")); // $NON-NLS-1$
              }
            }
          },
          null);

    } catch (Exception ex) {
      ExceptionHandler.process(ex);
    } finally {
      proc.reconnection();
    }
    return results;
  }
  @Override
  public ExecutionResult execute(Item item) {
    try {
      ProcessType processType = getProcessType(item);
      if (getProject().getLanguage() == ECodeLanguage.JAVA || processType == null) {

        return ExecutionResult.NOTHING_TO_DO;

      } else {

        List<String> namesList = new ArrayList<String>();

        for (Object o : processType.getNode()) {
          NodeType nt = (NodeType) o;
          namesList.add(ComponentUtilities.getNodeUniqueName(nt));
        }
        for (Object o : processType.getConnection()) {
          ConnectionType currentConnection = (ConnectionType) o;
          int lineStyle = currentConnection.getLineStyle();
          EConnectionType connectionType = EConnectionType.getTypeFromId(lineStyle);
          if (connectionType.hasConnectionCategory(EConnectionType.FLOW)) {
            namesList.add(currentConnection.getLabel());
          }
        }
        final String[] namesArrays = namesList.toArray(new String[0]);

        IComponentFilter filter1 =
            new IComponentFilter() {

              /*
               * (non-Javadoc)
               *
               * @see org.talend.core.model.components.filters.IComponentFilter#accept(org.talend.designer.core.model.utils.emf.talendfile.NodeType)
               */
              public boolean accept(NodeType node) {
                return true;
              }
            };

        IComponentConversion componentConversion =
            new IComponentConversion() {

              RefArraySyntaxReplacerForPerl parser = new RefArraySyntaxReplacerForPerl();

              /*
               * (non-Javadoc)
               *
               * @see org.talend.core.model.components.conversions.IComponentConversion#transform(org.talend.designer.core.model.utils.emf.talendfile.NodeType)
               */
              public void transform(NodeType node) {

                for (Object o : node.getElementParameter()) {
                  ElementParameterType pType = (ElementParameterType) o;
                  if (pType.getField().equals("TABLE")) { // $NON-NLS-1$
                    for (ElementValueType elementValue :
                        (List<ElementValueType>) pType.getElementValue()) {
                      elementValue.getValue();
                      String value = elementValue.getValue();
                      if (value != null) {
                        String newValue = parser.processReplacementOperations(value, namesArrays);
                        elementValue.setValue(newValue);
                      }
                    }
                  } else {
                    String value = pType.getValue();
                    if (value != null) {
                      String newValue = parser.processReplacementOperations(value, namesArrays);
                      pType.setValue(newValue);
                    }
                  }
                }
              }
            };

        ModifyComponentsAction.searchAndModify(
            item, processType, filter1, Arrays.<IComponentConversion>asList(componentConversion));

        return ExecutionResult.SUCCESS_WITH_ALERT;
      }
    } catch (Exception e) {
      ExceptionHandler.process(e);
      return ExecutionResult.FAILURE;
    }
  }
  public void run(String[] refreshTypes, final String pageToDispaly) {
    List typesToRefresh = null;

    if (refreshTypes == null || refreshTypes.length == 0) {
      typesToRefresh = new ArrayList();
      typesToRefresh.add(REFRESH_ALL);
    } else {
      typesToRefresh = Arrays.asList(refreshTypes);
    }

    if (typesToRefresh.contains(REFRESH_ALL) || typesToRefresh.contains(REFRESH_AVAILABLES)) {
      try {
        final RefreshJob job = new RefreshJob();
        job.addJobChangeListener(
            new JobChangeAdapter() {

              @Override
              public void done(final IJobChangeEvent event) {

                Display.getDefault()
                    .syncExec(
                        new Runnable() {

                          @Override
                          public void run() {
                            updateUI(job, event);
                            String toDisplay =
                                pageToDispaly == null
                                    ? ContentConstants.UL_LIST_AVAILABLE_EXTENSIONS
                                    : pageToDispaly;
                            ExchangeManager.getInstance()
                                .generateXHTMLPage(
                                    toDisplay,
                                    new String[] {ContentConstants.INSERT_EXTENSION_DATA});
                          }
                        });
              }
            });
        ExchangeUtils.scheduleUserJob(job);

      } catch (Exception e) {
        ExceptionHandler.process(e);
      }
    }

    // Show Installed Extensions
    if (typesToRefresh.contains(REFRESH_ALL) || typesToRefresh.contains(REFRESH_INSTALLED)) {
      try {
        final ShowInstalledExtensionsJob showInstalledJob = new ShowInstalledExtensionsJob();
        showInstalledJob.addJobChangeListener(
            new JobChangeAdapter() {

              @Override
              public void done(final IJobChangeEvent event) {

                Display.getDefault()
                    .syncExec(
                        new Runnable() {

                          @Override
                          public void run() {
                            updateInstalledUI(showInstalledJob, event);
                            ExchangeManager.getInstance()
                                .generateXHTMLPage(
                                    pageToDispaly,
                                    new String[] {ContentConstants.DOWNLOADEXTENSION_DATA});
                          }
                        });
              }
            });
        ExchangeUtils.scheduleUserJob(showInstalledJob);

      } catch (Exception e) {
        ExceptionHandler.process(e);
      }
    }

    // Show Contributed Extensions
    if (typesToRefresh.contains(REFRESH_ALL) || typesToRefresh.contains(REFRESH_MY_EXTENSIONS)) {
      try {
        final ShowContributedExtensionsJob showContributedJob = new ShowContributedExtensionsJob();
        showContributedJob.addJobChangeListener(
            new JobChangeAdapter() {

              @Override
              public void done(final IJobChangeEvent event) {

                Display.getDefault()
                    .syncExec(
                        new Runnable() {

                          @Override
                          public void run() {
                            updateContributedUI(showContributedJob, event);
                            ExchangeManager.getInstance()
                                .generateXHTMLPage(
                                    pageToDispaly,
                                    new String[] {ContentConstants.LIST_MY_EXTENSION});
                          }
                        });
              }
            });
        ExchangeUtils.scheduleUserJob(showContributedJob);

      } catch (Exception e) {
        ExceptionHandler.process(e);
      }
    }

    //
    getVersionRevisionsAndCategorys();
    // refreshHTML();

  }
  /** Constructs a new FileInputNode. */
  public FileInputDelimitedNode(
      String filename,
      String rowSep,
      String fieldSep,
      int limitRows,
      int headerRows,
      int footerRows,
      String escapeChar,
      String textEnclosure,
      boolean removeEmptyRow,
      boolean spitRecord,
      String encoding,
      EShadowProcessType fileType) {
    super("tFileInputDelimited"); // $NON-NLS-1$

    boolean csvoption = false;
    String languageName = LanguageManager.getCurrentLanguage().getName();
    switch (fileType) {
      case FILE_DELIMITED:
        csvoption = false;

        if (languageName.equals("perl")) { // $NON-NLS-1$
          int max =
              getColumnCount(
                  filename,
                  rowSep,
                  fieldSep,
                  limitRows,
                  headerRows,
                  escapeChar,
                  textEnclosure,
                  EShadowProcessType.FILE_DELIMITED);
          this.setColumnNumber(max);

        } else {

          int max = 0;
          try {

            max =
                FileInputDelimited.getMaxColumnCount(
                    trimParameter(filename),
                    trimParameter(encoding),
                    trimParameter(StringUtils.loadConvert(fieldSep, languageName)),
                    trimParameter(StringUtils.loadConvert(rowSep, languageName)),
                    true,
                    spitRecord,
                    headerRows,
                    limitRows);

          } catch (IOException e) {
            // e.printStackTrace();
            ExceptionHandler.process(e);
          }
          if (max > 0) {
            this.setColumnNumber(max);
          }
        }
        break;

      case FILE_CSV:
        csvoption = true;
        if (languageName.equals("perl")) { // $NON-NLS-1$
          int max =
              getColumnCount(
                  filename,
                  rowSep,
                  fieldSep,
                  limitRows,
                  headerRows,
                  escapeChar,
                  textEnclosure,
                  EShadowProcessType.FILE_CSV);
          this.setColumnNumber(max);
        } else {
          CSVFileColumnConnter cr = null;
          try {
            cr = new CSVFileColumnConnter();
            cr.setSeperator(
                trimParameter(StringUtils.loadConvert(fieldSep, languageName)).charAt(0));
            int columnCount = 0;
            columnCount =
                cr.countMaxColumnNumber(
                    new File(TalendTextUtils.removeQuotes(filename)), limitRows);
            if (columnCount > 0) {
              this.setColumnNumber(columnCount);
            }
          } catch (UnsupportedEncodingException e) {
            ExceptionHandler.process(e);
          } catch (FileNotFoundException e) {
            ExceptionHandler.process(e);
          } catch (IOException e) {
            ExceptionHandler.process(e);
          }
        }
        break;

      default:
        break;
    }

    String[] paramNames = null;

    if (!csvoption) {
      paramNames =
          new String[] {
            "FILENAME",
            "ROWSEPARATOR",
            "FIELDSEPARATOR",
            "LIMIT",
            "HEADER",
            "FOOTER", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
                      // //$NON-NLS-6$
            "ESCAPE_CHAR",
            "TEXT_ENCLOSURE",
            "REMOVE_EMPTY_ROW",
            "ENCODING",
            "CSV_OPTION",
            "SPLITRECORD"
          }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
    } else {
      paramNames =
          new String[] {
            "FILENAME",
            "CSVROWSEPARATOR",
            "FIELDSEPARATOR",
            "LIMIT",
            "HEADER",
            "FOOTER", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
                      // //$NON-NLS-6$
            "ESCAPE_CHAR",
            "TEXT_ENCLOSURE",
            "REMOVE_EMPTY_ROW",
            "ENCODING",
            "CSV_OPTION",
            "SPLITRECORD"
          }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
    }
    String[] paramValues =
        new String[] {
          filename,
          rowSep,
          fieldSep,
          Integer.toString(limitRows),
          Integer.toString(headerRows),
          Integer.toString(footerRows),
          escapeChar,
          textEnclosure,
          Boolean.toString(removeEmptyRow),
          encoding,
          Boolean.toString(csvoption),
          Boolean.toString(spitRecord)
        };

    IComponent component =
        ComponentsFactoryProvider.getInstance()
            .get(
                "tFileInputDelimited", //$NON-NLS-1$
                ComponentCategory.CATEGORY_4_DI.getName());
    this.setElementParameters(component.createElementParameters(this));
    for (int i = 0; i < paramNames.length; i++) {
      if (paramValues[i] != null) {
        IElementParameter param = this.getElementParameter(paramNames[i]);
        if (param != null) {
          param.setValue(paramValues[i]);
        }
      }
    }
  }
  @SuppressWarnings("unchecked")
  private static String getDisplayValue(final IElementParameter param) {
    Object value = param.getValue();

    if (value instanceof String) {

      if (param.getName().equals("PROCESS_TYPE_VERSION")
          && value.equals(RelationshipItemBuilder.LATEST_VERSION)) { // $NON-NLS-1$
        String jobId =
            (String)
                param
                    .getParentParameter()
                    .getChildParameters()
                    .get("PROCESS_TYPE_PROCESS")
                    .getValue(); //$NON-NLS-1$
        ProcessItem processItem = ItemCacheManager.getProcessItem(jobId);
        if (processItem == null) {
          return ""; //$NON-NLS-1$
        }
        return processItem.getProperty().getVersion();
      }
      if (param.getName().equals("PROCESS_TYPE_CONTEXT")) { // $NON-NLS-1$
        String jobId =
            (String)
                param
                    .getParentParameter()
                    .getChildParameters()
                    .get("PROCESS_TYPE_PROCESS")
                    .getValue(); //$NON-NLS-1$
        ProcessItem processItem = ItemCacheManager.getProcessItem(jobId);
        if (processItem == null) {
          return ""; //$NON-NLS-1$
        }
        // check if the selected context exists, if not, use the default context of the job.
        boolean contextExists = false;
        for (Object object : processItem.getProcess().getContext()) {
          if (object instanceof ContextType) {
            if (((ContextType) object).getName() != null
                && ((ContextType) object).getName().equals(value)) {
              contextExists = true;
              continue;
            }
          }
        }
        if (!contextExists) {
          return processItem.getProcess().getDefaultContext();
        }
        return (String) value;
      }
      // hywang add for 6484
      if ("SELECTED_FILE".equals(param.getRepositoryValue())) { // $NON-NLS-N$ //$NON-NLS-1$
        IElementParameter propertyParam =
            param
                .getElement()
                .getElementParameter(
                    "PROPERTY:REPOSITORY_PROPERTY_TYPE"); // $NON-NLS-N$ //$NON-NLS-1$
        if (propertyParam != null
            && propertyParam.getValue() != null
            && !propertyParam.getValue().equals("")) { // $NON-NLS-1$
          try {
            IRepositoryViewObject object =
                CoreRuntimePlugin.getInstance()
                    .getProxyRepositoryFactory()
                    .getLastVersion((String) propertyParam.getValue());
            if (object != null) {
              Item item = object.getProperty().getItem();
              String extension = null;

              String rule = ""; // $NON-NLS-1$
              String processLabelAndVersion = null;
              if (item instanceof RulesItem) {
                RulesItem rulesItem = (RulesItem) item;
                extension = rulesItem.getExtension();
                if (param.getElement() instanceof INode) {
                  INode node = (INode) param.getElement();
                  IProcess process = node.getProcess();
                  String jobLabel = process.getName();
                  String jobVersion = process.getVersion();
                  processLabelAndVersion =
                      JavaResourcesHelper.getJobFolderName(jobLabel, jobVersion);
                }

                rule =
                    "rules/final/"
                        + processLabelAndVersion
                        + "/"
                        + rulesItem.getProperty().getLabel() // $NON-NLS-1$ //$NON-NLS-2$
                        + rulesItem.getProperty().getVersion()
                        + extension;
              }
              return TalendQuoteUtils.addQuotes(rule);
            } else {
              return param.getValue().toString();
            }
          } catch (Exception e) {
            ExceptionHandler.process(e);
          }
        }
      }

      return (String) value;
    }
    if (param.getFieldType() == EParameterFieldType.RADIO
        || param.getFieldType() == EParameterFieldType.CHECK
        || param.getFieldType() == EParameterFieldType.AS400_CHECK) {
      if (value instanceof Boolean) {
        return ((Boolean) param.getValue()).toString();
      } else {
        return Boolean.FALSE.toString();
      }
    }

    if (param.getFieldType() == EParameterFieldType.TABLE) {
      List<Map<String, Object>> tableValues = (List<Map<String, Object>>) param.getValue();
      String[] items = param.getListItemsDisplayCodeName();
      String stringValues = "{"; // $NON-NLS-1$
      for (int i = 0; i < tableValues.size(); i++) {
        Map<String, Object> lineValues = tableValues.get(i);
        stringValues += "["; // $NON-NLS-1$
        for (int j = 0; j < items.length; j++) {

          Object currentValue = lineValues.get(items[j]);
          if (currentValue instanceof Integer) {
            IElementParameter tmpParam = (IElementParameter) param.getListItemsValue()[j];
            if (tmpParam.getListItemsDisplayName().length != 0) {
              stringValues += tmpParam.getListItemsDisplayName()[(Integer) currentValue];
            }
          } else {
            stringValues += currentValue;
          }

          if (j != (items.length - 1)) {
            stringValues += ","; // $NON-NLS-1$
          }
        }
        stringValues += "]"; // $NON-NLS-1$
        if (i != (tableValues.size() - 1)) {
          stringValues += ","; // $NON-NLS-1$
        }
      }
      stringValues += "}"; // $NON-NLS-1$
      return stringValues;
    }

    return new String(""); // $NON-NLS-1$
  }
  private static void init() {
    IExtensionRegistry registry = Platform.getExtensionRegistry();
    IConfigurationElement[] configurationElements =
        registry.getConfigurationElementsFor(
            "org.talend.core.runtime.repositoryComponent_provider"); //$NON-NLS-1$
    List<String> repositoryComponentNames = new ArrayList<String>();
    List<String> dndFilterIds = new ArrayList<String>();
    List<String> componentIds = new ArrayList<String>();

    for (int i = 0; i < configurationElements.length; i++) {
      IConfigurationElement element = configurationElements[i];
      if (element.getName().equals("ExtensionFilter")) { // $NON-NLS-1$
        //
        List<String> filterAttrs =
            getFilterAttrs(
                element,
                "RepositoryComponentFilter", //$NON-NLS-1$
                "repositoryComponentName"); //$NON-NLS-1$
        repositoryComponentNames.addAll(filterAttrs);

        //
        filterAttrs =
            getFilterAttrs(
                element,
                "DragAndDropFilterFilter", //$NON-NLS-1$
                "dndFilterId"); //$NON-NLS-1$
        dndFilterIds.addAll(filterAttrs);

        //
        filterAttrs =
            getFilterAttrs(
                element,
                "SortedComponentFilter", //$NON-NLS-1$
                "componentId"); //$NON-NLS-1$
        componentIds.addAll(filterAttrs);
      }
    }

    for (int i = 0; i < configurationElements.length; i++) {
      IConfigurationElement element = configurationElements[i];
      if (element.getName().equals("RepositoryComponent")) { // $NON-NLS-1$
        String name = element.getAttribute("name"); // $NON-NLS-1$
        if (repositoryComponentNames.contains(name)) {
          continue; // filter
        }
        String type = element.getAttribute("type"); // $NON-NLS-1$
        boolean withSchema =
            Boolean.parseBoolean(element.getAttribute("withSchema")); // $NON-NLS-1$
        String input = element.getAttribute("input"); // $NON-NLS-1$
        String output = element.getAttribute("output"); // $NON-NLS-1$
        String def = element.getAttribute("default"); // $NON-NLS-1$

        IRepositoryComponentAgent agent = null;
        if (element.getAttribute("agent") != null) { // $NON-NLS-1$
          try {
            Object object = element.createExecutableExtension("agent"); // $NON-NLS-1$
            if (object != null && (object instanceof IRepositoryComponentAgent)) {
              agent = (IRepositoryComponentAgent) object;
            }
          } catch (Exception e) {
            //
          }
        }

        RepositoryComponentSetting setting = new RepositoryComponentSetting();
        setting.setName(name);
        setting.setRepositoryType(type);
        setting.setWithSchema(withSchema);
        setting.setInputComponent(input);
        setting.setOutputComponent(output);
        setting.setDefaultComponent(def);
        setting.setClasses(retrieveClasses(element));
        setting.setDbTypes(retrieveDBTypes(element));
        setting.setAgent(agent);

        repComponentSettings.add(setting);
      } else if (element.getName().equals("DragAndDropFilter")) { // $NON-NLS-1$
        String id = element.getAttribute("id"); // $NON-NLS-1$
        if (dndFilterIds.contains(id)) {
          continue; // filter
        }
        String name = element.getAttribute("name"); // $NON-NLS-1$
        int level = parserLevel(element.getAttribute("level")); // $NON-NLS-1$
        IRepositoryComponentDndFilter filter = null;
        try {
          Object object = element.createExecutableExtension("clazz"); // $NON-NLS-1$
          if (object == null || !(object instanceof IRepositoryComponentDndFilter)) {
            throw new IllegalArgumentException("the argument of clazz is wrong"); // $NON-NLS-1$
          }
          filter = (IRepositoryComponentDndFilter) object;
        } catch (Exception e) {
          ExceptionHandler.process(e);
        }

        RepositoryComponentDndFilterSetting dndSetting = new RepositoryComponentDndFilterSetting();

        dndSetting.setId(id);
        dndSetting.setName(name);
        dndSetting.setLevel(level);
        dndSetting.setFilter(filter);

        repComponentDndFilterSettings.add(dndSetting);
      } else if (element.getName().equals("SortedComponents")) { // $NON-NLS-1$

        retrieveSortedComponent(
            componentIds, sortedComponentSetting, element, "Component"); // $NON-NLS-1$
        retrieveSortedComponent(
            componentIds,
            specialSortedComponentSetting,
            element,
            "SpecialComponent"); //$NON-NLS-1$
      }
    }
  }
  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.jface.action.Action#run()
   */
  protected void doRun() {
    RepositoryNode node =
        (RepositoryNode) ((IStructuredSelection) getSelection()).getFirstElement();

    final Item item = node.getObject().getProperty().getItem();
    if (item == null) {
      return;
    }
    String initialFileName = null;
    String initialExtension = null;
    if (item instanceof DocumentationItem) {
      DocumentationItem documentationItem = (DocumentationItem) item;
      initialFileName = documentationItem.getName();
      if (documentationItem.getExtension() != null) {
        initialExtension = documentationItem.getExtension();
      }
    } else if (item instanceof LinkDocumentationItem) { // link documenation
      LinkDocumentationItem linkDocItem = (LinkDocumentationItem) item;

      if (!LinkUtils.validateLink(linkDocItem.getLink())) {
        MessageDialog.openError(
            Display.getCurrent().getActiveShell(),
            Messages.getString("ExtractDocumentationAction.fileErrorTitle"), // $NON-NLS-1$
            Messages.getString("ExtractDocumentationAction.fileErrorMessages")); // $NON-NLS-1$
        return;
      }

      initialFileName = linkDocItem.getName();
      if (linkDocItem.getExtension() != null) {
        initialExtension = linkDocItem.getExtension();
      }
    }
    if (initialFileName != null) {
      FileDialog fileDlg = new FileDialog(Display.getCurrent().getActiveShell(), SWT.SAVE);

      if (initialExtension != null) {
        initialFileName = initialFileName + LinkUtils.DOT + initialExtension; // $NON-NLS-1$
        fileDlg.setFilterExtensions(
            new String[] {"*." + initialExtension, "*.*"}); // $NON-NLS-1$ //$NON-NLS-2$
      }
      fileDlg.setFileName(initialFileName);
      String filename = fileDlg.open();
      if (filename != null) {
        final File file = new File(filename);

        ProgressDialog progressDialog =
            new ProgressDialog(Display.getCurrent().getActiveShell()) {

              @Override
              public void run(IProgressMonitor monitor)
                  throws InvocationTargetException, InterruptedException {
                try {
                  if (item instanceof DocumentationItem) {
                    DocumentationItem documentationItem = (DocumentationItem) item;
                    documentationItem.getContent().setInnerContentToFile(file);
                  } else if (item instanceof LinkDocumentationItem) { // link documenation
                    LinkDocumentationItem linkDocItem = (LinkDocumentationItem) item;
                    ByteArray byteArray = LinkDocumentationHelper.getLinkItemContent(linkDocItem);
                    if (byteArray != null) {
                      byteArray.setInnerContentToFile(file);
                    }
                  }

                } catch (IOException ioe) {
                  MessageBoxExceptionHandler.process(ioe);
                }
              }
            };
        try {
          progressDialog.executeProcess();
        } catch (InvocationTargetException e) {
          ExceptionHandler.process(e);
        } catch (InterruptedException e) {
          // Nothing to do
        }
      }
    }
  }
  @Override
  public ExecutionResult execute(Item item) {
    ProcessType processType = getProcessType(item);
    String[] oracleCompNames = {
      "tOracleBulkExec",
      "tOracleClose",
      "tOracleCommit",
      "tOracleConnection",
      "tOracleInput", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
      "tOracleOutput",
      "tOracleOutputBulk",
      "tOracleOutputBulkExec",
      "tOracleRollback",
      "tOracleRow",
      "tOracleSCD", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
                    // //$NON-NLS-6$
      "tOracleSCDELT",
      "tOracleSP",
      "tOracleTableList",
      "tAmazonOracleClose",
      "tAmazonOracleCommit", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
      "tAmazonOracleConnection",
      "tAmazonOracleInput",
      "tAmazonOracleOutput",
      "tAmazonOracleRollback", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
      "tAmazonOracleRow",
      "tMondrianInput",
      "tCreateTable",
      "tOracleInvalidRows", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
      "tOracleValidRows",
      "tELTOracleMap",
      "tOracleCDC",
      "tOracleSCDELT"
    }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$

    IComponentConversion changeOracleDriverJarType =
        new IComponentConversion() {

          public void transform(NodeType node) {
            ElementParameterType dbVersion =
                ComponentUtilities.getNodeProperty(node, "DB_VERSION"); // $NON-NLS-1$
            if (dbVersion != null) {
              String jarValue = dbVersion.getValue();
              if ("ojdbc6.jar".equalsIgnoreCase(jarValue)) { // $NON-NLS-1$
                dbVersion.setValue("ORACLE_11-6"); // $NON-NLS-1$
              } else if ("ojdbc5.jar".equalsIgnoreCase(jarValue)) { // $NON-NLS-1$
                dbVersion.setValue("ORACLE_11"); // $NON-NLS-1$
              } else if ("ojdbc14.jar".equalsIgnoreCase(jarValue)) { // $NON-NLS-1$
                dbVersion.setValue("ORACLE_10"); // $NON-NLS-1$
              } else if ("ojdbc14-9i.jar".equalsIgnoreCase(jarValue)) { // $NON-NLS-1$
                dbVersion.setValue("ORACLE_9"); // $NON-NLS-1$
              } else if ("ojdbc12.jar".equalsIgnoreCase(jarValue)) { // $NON-NLS-1$
                dbVersion.setValue("ORACLE_8"); // $NON-NLS-1$
              }
            }
          }
        };

    for (String name : oracleCompNames) {
      IComponentFilter filter = new NameComponentFilter(name);

      try {
        ModifyComponentsAction.searchAndModify(
            item,
            processType,
            filter,
            Arrays.<IComponentConversion>asList(changeOracleDriverJarType));
      } catch (PersistenceException e) {
        // TODO Auto-generated catch block
        ExceptionHandler.process(e);
        return ExecutionResult.FAILURE;
      }
    }

    return ExecutionResult.SUCCESS_NO_ALERT;
  }
  /**
   * change .sh & .bat file's contents
   *
   * @throws FileNotFoundException
   */
  private void changeScriptFile(File file) {
    // change batFile
    BufferedReader br = null;
    BufferedWriter bw = null;
    try {
      br = new BufferedReader(new FileReader(file));
      StringBuffer changedContent = new StringBuffer();

      // write all the lines before the java command
      String line = br.readLine();
      while (line != null
          && !line.contains("java")) { // $NON-NLS-N$  hywang modify for 6484 //$NON-NLS-1$
        changedContent.append(line + "\n"); // $NON-NLS-1$
        line = br.readLine();
      }
      if (line == null) line = "";
      // get java command line
      String line1 = line.trim();
      String[] strs = line1.split("\\s"); // $NON-NLS-1$
      int pos = -1;
      for (int i = 0; i < strs.length; i++) {
        if ("-cp".equalsIgnoreCase(strs[i])
            || "-classpath".equalsIgnoreCase(strs[i])) { // $NON-NLS-1$ //$NON-NLS-2$
          pos = i;
        }
      }
      if (pos != -1) {
        if (file.getName().endsWith(".sh")) { // $NON-NLS-1$
          strs[pos + 1] = CLASSPATH_JAR + ":"; // $NON-NLS-1$
        }
        if (file.getName().endsWith(".bat")) { // $NON-NLS-1$
          // bug 21473
          needModuleJarStrs = strs[pos + 1];
          strs[pos + 1] = CLASSPATH_JAR + ";"; // $NON-NLS-1$
        }
      }

      for (String s : strs) {
        changedContent.append(s).append(" "); // $NON-NLS-1$
      }
      // see bug 7181. add addition lines
      String line2 = br.readLine();
      while (line2 != null) {
        changedContent.append(('\n')).append(line2); // $NON-NLS-1$
        line2 = br.readLine();
      }
      bw = new BufferedWriter(new FileWriter(file));
      // rewrite the changed content to file
      bw.write(changedContent.toString());
      bw.flush();
      // br.close();
      // bw.close();
    } catch (Exception e) {
      ExceptionHandler.process(e);
    } finally {
      if (br != null) {
        try {
          br.close();
        } catch (IOException e) {
          ExceptionHandler.process(e);
        }
      }
      if (bw != null) {
        try {
          bw.close();
        } catch (IOException e) {
          ExceptionHandler.process(e);
        }
      }
    }
  }
  @Override
  public void run() {
    SaveAsBusinessModelWizard businessModelWizard = new SaveAsBusinessModelWizard(editorPart);

    WizardDialog dlg = new WizardDialog(Display.getCurrent().getActiveShell(), businessModelWizard);
    if (dlg.open() == Window.OK) {

      try {

        BusinessProcessItem businessProcessItem = businessModelWizard.getBusinessProcessItem();

        IRepositoryNode repositoryNode =
            RepositoryNodeUtilities.getRepositoryNode(
                businessProcessItem.getProperty().getId(), false);

        // because step1, the fresh will unload the resource(EMF), so, assign a new one...
        businessProcessItem =
            (BusinessProcessItem) repositoryNode.getObject().getProperty().getItem();

        IWorkbenchPage page = getActivePage();

        DiagramResourceManager diagramResourceManager =
            new DiagramResourceManager(page, new NullProgressMonitor());
        IFile file = businessModelWizard.getTempFile();
        // Set readonly to false since created job will always be editable.
        RepositoryEditorInput newBusinessModelEditorInput =
            new RepositoryEditorInput(file, businessProcessItem);

        newBusinessModelEditorInput.setRepositoryNode(repositoryNode);

        // here really do the normal save as function
        IDocumentProvider provider =
            ((BusinessDiagramEditor) this.editorPart).getDocumentProvider();

        provider.aboutToChange(newBusinessModelEditorInput);
        provider.saveDocument(
            null,
            newBusinessModelEditorInput,
            provider.getDocument(this.editorPart.getEditorInput()),
            true);
        provider.changed(newBusinessModelEditorInput);

        // copy back from the *.business_diagram file to *.item file.
        // @see:BusinessDiagramEditor.doSave(IProgressMonitor progressMonitor)
        diagramResourceManager.updateFromResource(
            businessProcessItem, newBusinessModelEditorInput.getFile());

        // notice: here, must save it, save the item to disk, otherwise close the editor
        // without any modification, there won't save the
        // model again, so, will lost the graphic when reopen it.
        ProxyRepositoryFactory.getInstance().save(businessProcessItem);

        // close the old editor
        page.closeEditor(this.editorPart, false);

        // open the new editor, because at the same time, there will update the
        // jobSetting/componentSetting view
        IEditorPart openEditor =
            page.openEditor(newBusinessModelEditorInput, BusinessDiagramEditor.ID, true);

      } catch (Exception e) {
        MessageDialog.openError(
            Display.getCurrent().getActiveShell(),
            "Error",
            "Business model could not be saved" + " : " + e.getMessage());
        ExceptionHandler.process(e);
      }
    }
  }
  private int getColumnCount(
      String filename,
      String rowSep,
      String fieldSep,
      int limitRows,
      int headerRows,
      String escapeChar,
      String textEnclosure,
      EShadowProcessType fileType) {

    File config =
        new File(
            CorePlugin.getDefault()
                    .getPreferenceStore()
                    .getString(ITalendCorePrefConstants.FILE_PATH_TEMP)
                + "/conf.pl"); //$NON-NLS-1$
    if (config.exists()) {
      config.delete();
    }
    String modulepath = LibrariesManagerUtils.getLibrariesPath(ECodeLanguage.PERL);
    FileWriter filewriter;
    String str = "0"; // $NON-NLS-1$
    File resultFile =
        new File(
            CorePlugin.getDefault()
                    .getPreferenceStore()
                    .getString(ITalendCorePrefConstants.FILE_PATH_TEMP)
                + "/result.txt"); //$NON-NLS-1$

    if (resultFile.exists()) {
      resultFile.delete();
    }

    try {
      filewriter = new FileWriter(config, true);
      switch (fileType) {
        case FILE_DELIMITED:
          filewriter.write("$conf{filename} = " + filename + ";"); // $NON-NLS-1$ //$NON-NLS-2$
          filewriter.write("$conf{row_separator} = " + rowSep + ";"); // $NON-NLS-1$ //$NON-NLS-2$
          filewriter.write(
              "$conf{field_separator} = " + fieldSep + ";"); // $NON-NLS-1$ //$NON-NLS-2$
          filewriter.write("$conf{header} = " + headerRows + ";"); // $NON-NLS-1$ //$NON-NLS-2$
          filewriter.write("$conf{limit} = " + limitRows + ";"); // $NON-NLS-1$ //$NON-NLS-2$
          filewriter.write(
              "$conf{result_file} =\'"
                  + resultFile.toString()
                  + "\';"); //$NON-NLS-1$ //$NON-NLS-2$
          filewriter.write("$conf{type} = \'delimited\';"); // $NON-NLS-1$
          break;
        case FILE_CSV:
          filewriter.write("$conf{filename} = " + filename + ";"); // $NON-NLS-1$ //$NON-NLS-2$
          filewriter.write("$conf{row_separator} = " + rowSep + ";"); // $NON-NLS-1$ //$NON-NLS-2$
          filewriter.write(
              "$conf{field_separator} = " + fieldSep + ";"); // $NON-NLS-1$ //$NON-NLS-2$
          filewriter.write("$conf{escape_char} = " + escapeChar + ";"); // $NON-NLS-1$ //$NON-NLS-2$
          filewriter.write(
              "$conf{text_enclosure} = " + textEnclosure + ";"); // $NON-NLS-1$ //$NON-NLS-2$
          filewriter.write("$conf{header} = " + headerRows + ";"); // $NON-NLS-1$ //$NON-NLS-2$
          filewriter.write("$conf{limit} = " + limitRows + ";"); // $NON-NLS-1$ //$NON-NLS-2$
          filewriter.write(
              "$conf{result_file} =\'"
                  + resultFile.toString()
                  + "\';"); //$NON-NLS-1$ //$NON-NLS-2$
          filewriter.write("$conf{type} = \'CSV\';"); // $NON-NLS-1$
          break;
        default:
          break;
      }

      filewriter.close();
      modulepath = modulepath + "/column_counter_delimited.pl"; // $NON-NLS-1$
      StringBuffer out = new StringBuffer();
      StringBuffer err = new StringBuffer();

      IRunProcessService service =
          (IRunProcessService)
              GlobalServiceRegister.getDefault().getService(IRunProcessService.class);
      service.perlExec(
          out,
          err,
          new Path(modulepath),
          null,
          Level.DEBUG,
          "",
          null,
          -1,
          -1,
          new String[] {
            "--conf=" //$NON-NLS-1$ //$NON-NLS-2$
                + config
          });

      FileReader filereader = new FileReader(resultFile);
      BufferedReader reader = new BufferedReader(filereader);
      str = reader.readLine();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      // e.printStackTrace();
      ExceptionHandler.process(e);
    } catch (ProcessorException e) {
      // TODO Auto-generated catch block
      // e.printStackTrace();
      ExceptionHandler.process(e);
    }
    return Integer.parseInt(str);
  }