![JAR search and dependency download from the Maven repository](/logo.png)
org.datacleaner.panels.AddDatastorePanel 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.panels;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.List;
import javax.inject.Provider;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.border.EmptyBorder;
import org.datacleaner.bootstrap.WindowContext;
import org.datacleaner.configuration.ServerInformationCatalog;
import org.datacleaner.connection.Datastore;
import org.datacleaner.connection.DatastoreCatalog;
import org.datacleaner.connection.DatastoreDescriptor;
import org.datacleaner.connection.DatastoreDescriptors;
import org.datacleaner.connection.JdbcDatastore;
import org.datacleaner.database.DatabaseDriverCatalog;
import org.datacleaner.database.DatabaseDriverDescriptor;
import org.datacleaner.guice.DCModule;
import org.datacleaner.user.DatastoreSelectedListener;
import org.datacleaner.user.UserPreferences;
import org.datacleaner.util.IconUtils;
import org.datacleaner.util.WidgetFactory;
import org.datacleaner.util.WidgetUtils;
import org.datacleaner.widgets.Alignment;
import org.datacleaner.widgets.Dropzone;
import org.datacleaner.widgets.PopupButton;
import org.datacleaner.windows.AbstractDatastoreDialog;
import org.datacleaner.windows.JdbcDatastoreDialog;
import org.datacleaner.windows.OptionsDialog;
import com.google.inject.Injector;
public class AddDatastorePanel extends DCPanel {
private static final long serialVersionUID = 1L;
private final DCModule _dcModule;
private final DatastoreSelectedListener _datastoreSelectedListener;
private final Dropzone _dropzone;
private final DatastoreCatalog _datastoreCatalog;
private final DatabaseDriverCatalog _databaseDriverCatalog;
public AddDatastorePanel(final DatastoreCatalog datastoreCatalog,
final ServerInformationCatalog serverInformationCatalog, final DatabaseDriverCatalog databaseDriverCatalog,
final DCModule dcModule, final DatastoreSelectedListener datastoreSelectedListener,
final UserPreferences userPreferences, final boolean showExistingDatastoresButton) {
super();
setLayout(new GridBagLayout());
setBorder(new EmptyBorder(10, 10, 10, 10));
_datastoreCatalog = datastoreCatalog;
_databaseDriverCatalog = databaseDriverCatalog;
_dcModule = dcModule;
_datastoreSelectedListener = datastoreSelectedListener;
final Injector injector = dcModule.createInjectorBuilder().createInjector();
final WindowContext windowContext = injector.getInstance(WindowContext.class);
final Provider optionsDialogProvider = injector.getProvider(OptionsDialog.class);
_dropzone = new Dropzone(datastoreCatalog, serverInformationCatalog, datastoreSelectedListener, userPreferences,
windowContext, optionsDialogProvider);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.weightx = 1.0;
c.insets = new Insets(0, 0, 10, 0);
c.fill = GridBagConstraints.BOTH;
add(_dropzone, c);
final PopupButton databaseButton = createDatabaseButton();
final PopupButton cloudButton = createCloudButton();
final DCPanel buttonPanel;
if (showExistingDatastoresButton) {
final PopupButton existingDatastoresButton = createExistingDatastoresButton();
buttonPanel = DCPanel.flow(Alignment.CENTER, databaseButton, cloudButton, existingDatastoresButton);
} else {
buttonPanel = DCPanel.flow(Alignment.CENTER, databaseButton, cloudButton);
}
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 2;
c.weightx = 1.0;
c.insets = new Insets(0, 5, 0, 0);
c.fill = GridBagConstraints.HORIZONTAL;
add(buttonPanel, c);
}
private PopupButton createExistingDatastoresButton() {
final PopupButton existingDatastoresButton =
WidgetFactory.createDefaultPopupButton("Existing datastores", IconUtils.FILE_FOLDER);
final JPopupMenu menu = existingDatastoresButton.getMenu();
final String[] datastoreNames = _datastoreCatalog.getDatastoreNames();
for (final String datastoreName : datastoreNames) {
final Datastore datastore = _datastoreCatalog.getDatastore(datastoreName);
final JMenuItem menuItem = WidgetFactory.createMenuItem(datastoreName,
IconUtils.getDatastoreIcon(datastore, IconUtils.ICON_SIZE_MENU_ITEM));
menuItem.addActionListener(e -> _datastoreSelectedListener.datastoreSelected(datastore));
menu.add(menuItem);
}
return existingDatastoresButton;
}
private PopupButton createCloudButton() {
final PopupButton cloudButton =
WidgetFactory.createDefaultPopupButton("Cloud service", IconUtils.CLOUD_IMAGEPATH);
cloudButton.setFont(WidgetUtils.FONT_HEADER2);
final List cloudDatastores =
new DatastoreDescriptors(_databaseDriverCatalog).getAvailableCloudBasedDatastoreDescriptors();
for (final DatastoreDescriptor datastoreDescriptor : cloudDatastores) {
cloudButton.getMenu()
.add(createNewDatastoreButton(datastoreDescriptor.getName(), datastoreDescriptor.getDescription(),
datastoreDescriptor.getIconPath(), datastoreDescriptor.getDatastoreClass(),
datastoreDescriptor.getDatastoreDialogClass()));
}
return cloudButton;
}
private PopupButton createDatabaseButton() {
final PopupButton databaseButton =
WidgetFactory.createDefaultPopupButton("Database", IconUtils.GENERIC_DATASTORE_IMAGEPATH);
databaseButton.setFont(WidgetUtils.FONT_HEADER2);
final List databaseBasedDatastores =
new DatastoreDescriptors(_databaseDriverCatalog).getAvailableDatabaseBasedDatastoreDescriptors();
for (final DatastoreDescriptor datastoreDescriptor : databaseBasedDatastores) {
if (datastoreDescriptor.getDatastoreClass().equals(JdbcDatastore.class)) {
databaseButton.getMenu().add(createNewJdbcDatastoreButton(datastoreDescriptor.getName()));
} else {
databaseButton.getMenu().add(createNewDatastoreButton(datastoreDescriptor.getName(),
datastoreDescriptor.getDescription(), datastoreDescriptor.getIconPath(),
datastoreDescriptor.getDatastoreClass(), datastoreDescriptor.getDatastoreDialogClass()));
}
}
return databaseButton;
}
private JMenuItem createNewJdbcDatastoreButton(final String databaseName) {
final DatabaseDriverDescriptor driverDescriptor =
DatabaseDriverCatalog.getDatabaseDriverByDriverDatabaseName(databaseName);
final JMenuItem item = WidgetFactory.createMenuItem(databaseName, driverDescriptor.getIconImagePath());
item.setToolTipText("Connect to " + databaseName);
item.addActionListener(event -> {
final Injector injectorWithDatastore =
_dcModule.createInjectorBuilder().with(JdbcDatastore.class, null).createInjector();
final JdbcDatastoreDialog dialog = injectorWithDatastore.getInstance(JdbcDatastoreDialog.class);
dialog.setSelectedDatabase(databaseName);
dialog.setVisible(true);
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(final WindowEvent e) {
if (dialog.getSavedDatastore() != null) {
_datastoreSelectedListener.datastoreSelected(dialog.getSavedDatastore());
}
}
});
});
return item;
}
private JMenuItem createNewDatastoreButton(final String title, final String description,
final String imagePath, final Class datastoreClass,
final Class extends AbstractDatastoreDialog extends Datastore>> dialogClass) {
final JMenuItem item = WidgetFactory.createMenuItem(title, imagePath);
item.setToolTipText(description);
item.addActionListener(event -> {
final Injector injectorWithNullDatastore =
_dcModule.createInjectorBuilder().with(datastoreClass, null).createInjector();
final AbstractDatastoreDialog extends Datastore> dialog =
injectorWithNullDatastore.getInstance(dialogClass);
dialog.setVisible(true);
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(final WindowEvent e) {
if (dialog.getSavedDatastore() != null) {
_datastoreSelectedListener.datastoreSelected(dialog.getSavedDatastore());
}
}
});
});
return item;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy