/** DOC sgandon Comment method "updateInstallModulesButtonState". */
 protected void updateInstallModulesButtonState() {
   List<ModuleToInstall> theInputList = tableViewerCreator.getInputList();
   boolean isEnable = false;
   if (!theInputList.isEmpty()) {
     for (ModuleToInstall module : theInputList) {
       if (!MavenConstants.DOWNLOAD_MANUAL.equals(module.getDistribution())) {
         isEnable = true;
         break;
       }
     }
   }
   installAllBtn.setEnabled(isEnable);
 }
 /** DOC sgandon Comment method "updateInstallModulesButtonState". */
 protected void updateInstallModulesButtonState() {
   List<ModuleToInstall> theInputList = tableViewerCreator.getInputList();
   boolean isEnable = false;
   if (!theInputList.isEmpty()) {
     for (ModuleToInstall module : theInputList) {
       if (module.getUrl_download() != null) {
         isEnable = true;
         break;
       }
     }
   }
   installAllBtn.setEnabled(isEnable);
 }
  /**
   * DOC sgandon Comment method "getModulesToBeInstalled".
   *
   * @return
   */
  protected List<ModuleToInstall> getModulesToBeInstalled() {
    List<ModuleToInstall> theInputList = tableViewerCreator.getInputList();

    List<ModuleToInstall> toInstall = new ArrayList<ModuleToInstall>();
    for (ModuleToInstall module : theInputList) {
      if (!MavenConstants.DOWNLOAD_MANUAL.equals(module.getDistribution())
          && !jarsInstalledSuccuss.contains(module.getName())
          && ELibraryInstallStatus.INSTALLED
              != ModuleStatusProvider.getStatusMap().get(module.getMavenUri())) {
        toInstall.add(module);
      }
    }
    return toInstall;
  }
  /**
   * DOC sgandon Comment method "getModulesToBeInstalled".
   *
   * @return
   */
  protected List<ModuleToInstall> getModulesToBeInstalled() {
    List<ModuleToInstall> theInputList = tableViewerCreator.getInputList();

    List<ModuleToInstall> toInstall = new ArrayList<ModuleToInstall>();
    if (!jarsInstalledSuccuss.isEmpty()) {
      for (ModuleToInstall module : theInputList) {
        if (!jarsInstalledSuccuss.contains(module.getName())) {
          toInstall.add(module);
        }
      }
    } else {
      toInstall.addAll(theInputList);
    }
    return toInstall;
  }
  // TODO the implementation of this method is horrible and creating too many widgets
  // table/column renderer/editor should be used instead should be used instead
  protected void addInstallButtons() {
    final AtomicInteger enabledButtonCount = new AtomicInteger(0);
    tableViewerCreator.getTableViewer().getControl().setRedraw(false);
    final Table table = tableViewerCreator.getTable();
    manualInstallButtonMap = new HashMap<ModuleToInstall, Button>();
    ILibrariesService librariesService = LibManagerUiPlugin.getDefault().getLibrariesService();

    disposePreviousEditors();
    for (final TableItem item : table.getItems()) {
      TableEditor editor = new TableEditor(table);
      installButtonsEditors.add(editor);
      Control control = null;
      Object obj = item.getData();
      if (obj instanceof ModuleToInstall) {
        final ModuleToInstall data = (ModuleToInstall) obj;
        boolean isInstalled = false;
        try {
          isInstalled =
              librariesService.getLibraryStatus(data.getName()) == ELibraryInstallStatus.INSTALLED;
        } catch (BusinessException e1) { // log the error and consider as unsinstalled
          log.error(e1);
        }
        boolean hasDownloadUrl = data.getUrl_description() != null;
        if (!MavenConstants.DOWNLOAD_MANUAL.equals(
            data.getDistribution())) { // add the button to download
          final Button button = new Button(table, SWT.FLAT);
          control = button;
          enabledButtonCount.incrementAndGet();
          button.setText(
              Messages.getString("ExternalModulesInstallDialog_Download")); // $NON-NLS-1$
          button.setData(item);
          button.addSelectionListener(
              new SelectionAdapter() {

                @Override
                public void widgetSelected(SelectionEvent e) {
                  table.select(table.indexOf(item));
                  launchIndividualDownload(enabledButtonCount, data, button);
                }
              });
          button.setEnabled(!isInstalled);
          button.setToolTipText(data.toString());
        } else { // add the link for manual download
          Composite composite = new Composite(table, SWT.NONE);
          composite.setBackground(color);
          control = composite;
          GridLayout layout = new GridLayout(hasDownloadUrl ? 2 : 1, false);
          layout.marginHeight = 0;
          layout.verticalSpacing = 1;
          composite.setLayout(layout);
          if (hasDownloadUrl) {
            Link openLink = new Link(composite, SWT.NONE);
            GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).applyTo(openLink);
            openLink.setBackground(color);
            // openLink.setLayoutData(gData);
            openLink.setText(
                "<a href=\"\">"
                    + Messages.getString("ExternalModulesInstallDialog.openInBrowser")
                    + "</a>"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
            openLink.addSelectionListener(
                new SelectionAdapter() {

                  @Override
                  public void widgetSelected(final SelectionEvent e) {
                    // Program.launch(data.getUrl_description());
                    openURL(data.getUrl_description());
                  }
                });
          } // else no download URL so just add the install buttonb
          enabledButtonCount.incrementAndGet();
          Button importButton = new Button(composite, SWT.FLAT);
          importButton.setImage(ImageProvider.getImage(ECoreImage.IMPORT_JAR));
          importButton.setToolTipText(
              Messages.getString("ImportExternalJarAction.title")); // $NON-NLS-1$
          importButton.addSelectionListener(
              new ImportButtonSelectionListener(enabledButtonCount, item));
          manualInstallButtonMap.put(data, importButton);
          GridDataFactory.fillDefaults()
              .align(SWT.RIGHT, SWT.CENTER)
              .grab(true, false)
              .applyTo(importButton);
          importButton.setEnabled(!isInstalled);
          importButton.setToolTipText(data.toString());
        }
        editor.grabHorizontal = true;
        editor.setEditor(control, item, tableViewerCreator.getColumns().indexOf(installcolumn));
        editor.layout();
        // url
        editor = new TableEditor(table);
        installButtonsEditors.add(editor);
        Composite composite = new Composite(table, SWT.NONE);
        composite.setBackground(color);
        // GridLayout layout = new GridLayout();
        FormLayout layout = new FormLayout();
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        composite.setLayout(layout);
        FormData gData = new FormData();
        gData.left = new FormAttachment(0);
        gData.right = new FormAttachment(100);
        gData.top = new FormAttachment(composite, 0, SWT.CENTER);
        final Link openLink = new Link(composite, SWT.NONE);
        openLink.setLayoutData(gData);
        openLink.setBackground(color);
        gData.height = new GC(composite).stringExtent(" ").y; // $NON-NLS-1$
        openLink.setText(
            "<a href=\"\">"
                + (hasDownloadUrl ? data.getUrl_description() : "")
                + "</a>"); //$NON-NLS-1$ //$NON-NLS-2$
        openLink.addSelectionListener(
            new SelectionAdapter() {

              @Override
              public void widgetSelected(final SelectionEvent e) {
                // Program.launch(data.getUrl_description());
                openURL(data.getUrl_description());
              }
            });
        editor.grabHorizontal = true;
        // editor.minimumHeight = 20;
        editor.setEditor(composite, item, tableViewerCreator.getColumns().indexOf(urlcolumn));
        editor.layout();
      }
    }
    tableViewerCreator.getTableViewer().getTable().layout();
    tableViewerCreator.getTableViewer().refresh(true);
    tableViewerCreator.getTableViewer().getControl().setRedraw(true);
  }