![JAR search and dependency download from the Maven repository](/logo.png)
org.datacleaner.widgets.ResourceSelector 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.widgets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.filechooser.FileFilter;
import org.apache.metamodel.util.Resource;
import org.datacleaner.configuration.DataCleanerConfiguration;
import org.datacleaner.configuration.ServerInformationCatalog;
import org.datacleaner.panels.DCPanel;
import org.datacleaner.user.UserPreferences;
import org.datacleaner.util.WidgetUtils;
import org.datacleaner.util.convert.ResourceConverter;
import org.datacleaner.util.convert.ResourceConverter.ResourceStructure;
import org.datacleaner.util.convert.ResourceConverter.ResourceTypeHandler;
/**
* A widget which allows the user to select/enter a {@link Resource} to use for some file-like operation.
*/
public class ResourceSelector extends DCPanel implements ResourceTypePresenter {
private static final long serialVersionUID = 1L;
private final DCComboBox _resourceTypeComboBox;
private final ResourceConverter _resourceConverter;
private final UserPreferences _userPreferences;
private final Map> _resourceTypePresenters;
private boolean _openMode;
private ResourceTypePresenter> _currentPresenter;
private ServerInformationCatalog _serverInformationCatalog;
public ResourceSelector(final DataCleanerConfiguration configuration, final UserPreferences userPreferences,
final boolean openMode) {
this(configuration, new ResourceConverter(configuration), userPreferences, openMode);
}
public ResourceSelector(final DataCleanerConfiguration configuration, final ResourceConverter resourceConverter,
final UserPreferences userPreferences, final boolean openMode) {
_resourceConverter = resourceConverter;
_userPreferences = userPreferences;
_openMode = openMode;
_resourceTypePresenters = new HashMap<>();
_serverInformationCatalog = configuration.getServerInformationCatalog();
final List schemes = new ArrayList<>();
final Collection> resourceTypeHandlers = _resourceConverter.getResourceTypeHandlers();
for (final ResourceTypeHandler> resourceTypeHandler : resourceTypeHandlers) {
final String scheme = resourceTypeHandler.getScheme();
schemes.add(scheme);
final ResourceTypePresenter> presenter = createResourceTypePresenter(scheme, resourceTypeHandler);
_resourceTypePresenters.put(scheme, presenter);
}
_resourceTypeComboBox = new DCComboBox<>(schemes);
_resourceTypeComboBox.addListener(this::onSchemeSelected);
setScheme("file");
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
add(_resourceTypeComboBox);
add(Box.createHorizontalStrut(WidgetUtils.DEFAULT_PADDING));
for (final ResourceTypePresenter> presenter : getResourceTypePresenters()) {
add(presenter.getWidget());
}
}
protected ResourceTypePresenter> createResourceTypePresenter(final String scheme,
final ResourceTypeHandler> resourceTypeHandler) {
final ResourceTypePresenter> presenter;
switch (scheme) {
case "file":
presenter = new FilenameTextField(_userPreferences.getConfiguredFileDirectory(), _openMode);
break;
case "hdfs":
presenter = new HdfsResourceTypePresenter(_serverInformationCatalog);
break;
default:
presenter = new TextFieldResourceTypePresenter(resourceTypeHandler);
break;
}
return presenter;
}
public void setScheme(final String scheme) {
_resourceTypeComboBox.setSelectedItem(scheme);
}
private void onSchemeSelected(final String item) {
final Collection> presenters = _resourceTypePresenters.values();
for (final ResourceTypePresenter> presenter : presenters) {
presenter.getWidget().setVisible(false);
}
final ResourceTypePresenter> presenter = _resourceTypePresenters.get(item);
presenter.getWidget().setVisible(true);
updateUI();
_currentPresenter = presenter;
}
public Resource getResource() {
if (_currentPresenter == null) {
return null;
}
return _currentPresenter.getResource();
}
public void setResource(final Resource resource) {
final String stringRepresentation = _resourceConverter.toString(resource);
final ResourceStructure structure = _resourceConverter.parseStructure(stringRepresentation);
final String scheme = structure.getScheme();
setScheme(scheme);
// we need to do this ugly cast in order to call setResource(...) with a
// generic argument
@SuppressWarnings("unchecked") final ResourceTypePresenter presenter =
(ResourceTypePresenter) _currentPresenter;
presenter.setResource(resource);
}
public ResourceTypePresenter> getResourceTypePresenter(final String scheme) {
return _resourceTypePresenters.get(scheme);
}
public Collection> getResourceTypePresenters() {
return _resourceTypePresenters.values();
}
@Override
public JComponent getWidget() {
return this;
}
@Override
public void addListener(final Listener listener) {
final Collection> presenters = getResourceTypePresenters();
for (final ResourceTypePresenter> presenter : presenters) {
presenter.addListener(listener);
}
}
@Override
public void removeListener(final Listener listener) {
final Collection> presenters = getResourceTypePresenters();
for (final ResourceTypePresenter> presenter : presenters) {
presenter.removeListener(listener);
}
}
@Override
public void addChoosableFileFilter(final FileFilter fileFilter) {
final Collection> presenters = getResourceTypePresenters();
for (final ResourceTypePresenter> presenter : presenters) {
presenter.addChoosableFileFilter(fileFilter);
}
}
@Override
public void removeChoosableFileFilter(final FileFilter fileFilter) {
final Collection> presenters = getResourceTypePresenters();
for (final ResourceTypePresenter> presenter : presenters) {
presenter.removeChoosableFileFilter(fileFilter);
}
}
@Override
public void setSelectedFileFilter(final FileFilter fileFilter) {
final Collection> presenters = getResourceTypePresenters();
for (final ResourceTypePresenter> presenter : presenters) {
presenter.setSelectedFileFilter(fileFilter);
}
}
public String getResourcePath() {
final Resource resource = getResource();
if (resource == null) {
return null;
}
return _resourceConverter.toString(resource);
}
public void setResourcePath(final String path) {
final Resource resource = _resourceConverter.fromString(Resource.class, path);
if (resource != null) {
setResource(resource);
}
}
public void setCurrentPresenter(final ResourceTypePresenter> currentPresenter) {
_currentPresenter = currentPresenter;
}
public void setVisibleResourceTypeCombox(final boolean isVisible) {
_resourceTypeComboBox.setVisible(isVisible);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy