All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.datacleaner.windows.ReferenceDataDialog Maven / Gradle / Ivy

/**
 * DataCleaner (community edition)
 * Copyright (C) 2014 Free Software Foundation, Inc.
 *
 * 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.datacleaner.windows;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;

import javax.inject.Inject;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JScrollPane;

import org.datacleaner.bootstrap.WindowContext;
import org.datacleaner.guice.InjectorBuilder;
import org.datacleaner.panels.DCGlassPane;
import org.datacleaner.panels.DCPanel;
import org.datacleaner.panels.DictionaryListPanel;
import org.datacleaner.panels.StringPatternListPanel;
import org.datacleaner.panels.SynonymCatalogListPanel;
import org.datacleaner.util.IconUtils;
import org.datacleaner.util.ImageManager;
import org.datacleaner.util.WidgetFactory;
import org.datacleaner.util.WidgetUtils;
import org.datacleaner.widgets.Alignment;
import org.datacleaner.widgets.DescriptionLabel;
import org.datacleaner.widgets.tabs.CloseableTabbedPane;

import com.google.inject.Injector;

public final class ReferenceDataDialog extends AbstractDialog {

    public static final int REFERENCE_DATA_ITEM_MAX_WIDTH = 280;

    private static final long serialVersionUID = 1L;
    private static final ImageManager imageManager = ImageManager.get();

    private final CloseableTabbedPane _tabbedPane;
    private final DCGlassPane _glassPane;
    private final InjectorBuilder _injectorBuilder;
    private volatile int _selectedTab;

    @Inject
    protected ReferenceDataDialog(final WindowContext windowContext, final InjectorBuilder injectorBuilder) {
        super(windowContext, imageManager.getImage("images/window/banner-reference-data.png"));
        _glassPane = new DCGlassPane(this);
        _tabbedPane = new CloseableTabbedPane(true);
        _tabbedPane.bindTabTitleToBanner(getBanner());
        _injectorBuilder = injectorBuilder;
    }

    private JComponent scrolleable(final JComponent comp) {
        final JScrollPane scroll = WidgetUtils.scrolleable(comp);
        scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        return scroll;
    }

    public void selectDictionariesTab() {
        _selectedTab = 0;
        updateSelectedTab();
    }

    public void selectSynonymsTab() {
        _selectedTab = 1;
        updateSelectedTab();
    }

    public void selectStringPatternsTab() {
        _selectedTab = 2;
        updateSelectedTab();
    }

    private void updateSelectedTab() {
        if (_tabbedPane.getTabCount() > _selectedTab) {
            _tabbedPane.setSelectedIndex(_selectedTab);
        }
    }

    @Override
    protected String getBannerTitle() {
        return "Reference data";
    }

    @Override
    protected int getDialogWidth() {
        return 600;
    }

    @Override
    protected boolean isWindowResizable() {
        return true;
    }

    @Override
    protected JComponent getDialogContent() {
        final Injector injectorWithGlassPane = _injectorBuilder.with(DCGlassPane.class, _glassPane).createInjector();

        final DictionaryListPanel dictionaryListPanel = injectorWithGlassPane.getInstance(DictionaryListPanel.class);
        final SynonymCatalogListPanel synonymCatalogListPanel =
                injectorWithGlassPane.getInstance(SynonymCatalogListPanel.class);
        final StringPatternListPanel stringPatternListPanel =
                injectorWithGlassPane.getInstance(StringPatternListPanel.class);

        _tabbedPane.addTab("Dictionaries",
                new ImageIcon(imageManager.getImage(IconUtils.DICTIONARY_IMAGEPATH, IconUtils.ICON_SIZE_TAB)),
                scrolleable(dictionaryListPanel));
        _tabbedPane.addTab("Synonyms",
                new ImageIcon(imageManager.getImage(IconUtils.SYNONYM_CATALOG_IMAGEPATH, IconUtils.ICON_SIZE_TAB)),
                scrolleable(synonymCatalogListPanel));
        _tabbedPane.addTab("String patterns",
                new ImageIcon(imageManager.getImage(IconUtils.STRING_PATTERN_IMAGEPATH, IconUtils.ICON_SIZE_TAB)),
                scrolleable(stringPatternListPanel));

        _tabbedPane.setUnclosableTab(0);
        _tabbedPane.setUnclosableTab(1);
        _tabbedPane.setUnclosableTab(2);

        updateSelectedTab();

        _tabbedPane.setPreferredSize(new Dimension(getDialogWidth(), 550));

        final JButton closeButton = WidgetFactory.createPrimaryButton("Close", IconUtils.ACTION_CLOSE_BRIGHT);
        closeButton.addActionListener(e -> ReferenceDataDialog.this.dispose());

        final DCPanel panel = new DCPanel(WidgetUtils.COLOR_ALTERNATIVE_BACKGROUND);
        panel.setLayout(new BorderLayout());
        panel.add(new DescriptionLabel( "Reference data is used throughout DataCleaner. In this dialog you can set "
                + "up your own reference data items for identifying items in dictionaries "
                + "(whitelists and blacklists), synonym catalogs (usually used for replacement) and in "
                + "string patterns (used for pattern matching)."), BorderLayout.NORTH);
        panel.add(_tabbedPane, BorderLayout.CENTER);
        panel.add(DCPanel.flow(Alignment.CENTER, closeButton), BorderLayout.SOUTH);
        panel.setPreferredSize(getDialogWidth(), 500);
        return panel;
    }

    @Override
    public Image getWindowIcon() {
        return imageManager.getImage("images/model/reference-data.png");
    }

    @Override
    public String getWindowTitle() {
        return getBannerTitle();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy