Package org.eobjects.datacleaner.panels

Source Code of org.eobjects.datacleaner.panels.ExtensionPackagesPanel

/**
* eobjects.org DataCleaner
* Copyright (C) 2010 eobjects.org
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA  02110-1301  USA
*/
package org.eobjects.datacleaner.panels;

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.List;

import javax.inject.Inject;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JToolBar;
import javax.swing.border.EmptyBorder;

import org.eobjects.datacleaner.user.DCConfiguration;
import org.eobjects.datacleaner.user.ExtensionPackage;
import org.eobjects.datacleaner.user.UserPreferences;
import org.eobjects.datacleaner.util.ExtensionFilter;
import org.eobjects.datacleaner.util.ImageManager;
import org.eobjects.datacleaner.util.WidgetFactory;
import org.eobjects.datacleaner.util.WidgetUtils;
import org.eobjects.datacleaner.widgets.DCFileChooser;
import org.eobjects.datacleaner.widgets.DCLabel;
import org.jdesktop.swingx.VerticalLayout;
import org.jdesktop.swingx.action.OpenBrowserAction;

import cern.colt.Arrays;

/**
* Panel for configuring extension packages.
*
* @author Kasper Sørensen
*/
public class ExtensionPackagesPanel extends DCPanel {

  private static final long serialVersionUID = 1L;

  private final UserPreferences _userPreferences;
  private final ImageManager imageManager = ImageManager.getInstance();

  @Inject
  protected ExtensionPackagesPanel(UserPreferences userPreferences) {
    super(WidgetUtils.BG_COLOR_BRIGHT, WidgetUtils.BG_COLOR_BRIGHTEST);
    _userPreferences = userPreferences;

    setLayout(new BorderLayout());

    updateComponents();
  }

  private void updateComponents() {
    removeAll();

    final List<ExtensionPackage> extensionPackages = _userPreferences.getExtensionPackages();

    final JButton addExtensionButton = new JButton("Add extension package",
        imageManager.getImageIcon("images/actions/add.png"));
    addExtensionButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        final JMenuItem extensionSwapMenuItem = new JMenuItem("Browse the ExtensionSwap", imageManager
            .getImageIcon("images/actions/website.png"));
        extensionSwapMenuItem.addActionListener(new OpenBrowserAction("http://datacleaner.eobjects.org/extensions"));

        final JMenuItem manualInstallMenuItem = new JMenuItem("Manually install JAR file", imageManager
            .getImageIcon("images/filetypes/archive.png"));
        manualInstallMenuItem.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            final DCFileChooser fileChooser = new DCFileChooser(_userPreferences.getConfiguredFileDirectory());
            fileChooser.setMultiSelectionEnabled(true);
            fileChooser.setFileFilter(new ExtensionFilter("DataCleaner extension JAR file (.jar)", ".jar"));
            int result = fileChooser.showOpenDialog(ExtensionPackagesPanel.this);
            if (result == DCFileChooser.APPROVE_OPTION) {

              final File[] files = fileChooser.getSelectedFiles();

              final String suggestedPackageName = ExtensionPackage.autoDetectPackageName(files[0]);
              final String packageName = JOptionPane.showInputDialog(
                  "Please provide the package name of the extension", suggestedPackageName);

              final StringBuilder extensionNameBuilder = new StringBuilder();
              for (File file : files) {
                if (extensionNameBuilder.length() > 0) {
                  extensionNameBuilder.append(", ");
                }
                extensionNameBuilder.append(file.getName());
              }
              final String extensionName = extensionNameBuilder.toString();
              final ExtensionPackage userExtensionPackage = new ExtensionPackage(extensionName, packageName,
                  true, files);
              userExtensionPackage.loadExtension(DCConfiguration.get().getDescriptorProvider());
              extensionPackages.add(userExtensionPackage);

              updateComponents();
            }
          }
        });

        final JPopupMenu popup = new JPopupMenu("Add extension");
        popup.add(extensionSwapMenuItem);
        popup.add(manualInstallMenuItem);
        popup.show(addExtensionButton, 0, addExtensionButton.getHeight());
      }
    });

    final JToolBar toolBar = WidgetFactory.createToolBar();
    toolBar.add(WidgetFactory.createToolBarSeparator());
    toolBar.add(addExtensionButton);

    final DCPanel listPanel = new DCPanel();
    listPanel.setLayout(new VerticalLayout(4));
    listPanel.setBorder(new EmptyBorder(0, 10, 10, 0));

    final ImageIcon pluginIcon = imageManager.getImageIcon("images/component-types/plugin.png");
    final ImageIcon errorIcon = imageManager.getImageIcon("images/status/error.png");

    for (final ExtensionPackage extensionPackage : extensionPackages) {
      File[] files = extensionPackage.getFiles();
      boolean valid = true;
      for (File file : files) {
        if (!file.exists()) {
          valid = false;
        }
      }

      final DCLabel extensionLabel;
      if (valid) {
        extensionLabel = DCLabel.dark("<html><b>" + extensionPackage.getName() + "</b><br/>Loaded: "
            + extensionPackage.getLoadedAnalyzers() + " Analyzers, " + extensionPackage.getLoadedTransformers()
            + " Transformers, " + extensionPackage.getLoadedFilters() + " Filters.<br/>Root package: '"
            + extensionPackage.getScanPackage() + "'.</html>");
        extensionLabel.setIcon(pluginIcon);
      } else {
        extensionLabel = DCLabel.dark("<html><b>" + extensionPackage.getName()
            + "</b><br/>Error loading extension files:<br/>" + Arrays.toString(files) + "</html>");
        extensionLabel.setIcon(errorIcon);
      }

      final JButton removeButton = WidgetFactory.createSmallButton("images/actions/remove.png");
      removeButton.setToolTipText("Remove extension");
      removeButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
          extensionPackages.remove(extensionPackage);
          removeButton.setEnabled(false);
          extensionLabel.setText("*** Removal requires application restart ***");
        }
      });

      final DCPanel extensionPanel = new DCPanel();
      extensionPanel.setBorder(WidgetUtils.BORDER_LIST_ITEM);

      WidgetUtils.addToGridBag(extensionLabel, extensionPanel, 0, 0, 1.0, 0.0);
      WidgetUtils.addToGridBag(removeButton, extensionPanel, 1, 0, GridBagConstraints.EAST);

      listPanel.add(extensionPanel);
    }

    if (extensionPackages.isEmpty()) {
      listPanel.add(DCLabel.dark("(none)"));
    }

    add(toolBar, BorderLayout.NORTH);
    add(listPanel, BorderLayout.CENTER);

    updateUI();
  }
}
TOP

Related Classes of org.eobjects.datacleaner.panels.ExtensionPackagesPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.