/** * DataCleaner (community edition) * Copyright (C) 2014 Neopost - Customer Information Management * * 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.net.URI; import java.util.ArrayList; import java.util.List; import javax.swing.JComponent; import javax.swing.event.DocumentEvent; import javax.swing.filechooser.FileFilter; import org.apache.metamodel.util.HdfsResource; import org.datacleaner.configuration.ServerInformationCatalog; import org.datacleaner.panels.DCPanel; import org.datacleaner.server.HadoopClusterInformation; import org.datacleaner.util.DCDocumentListener; import org.datacleaner.util.HadoopResource; import org.datacleaner.util.WidgetFactory; import org.datacleaner.util.convert.HadoopResourceBuilder; import org.jdesktop.swingx.JXTextField; /** * {@link ResourceTypePresenter} for {@link HdfsResource}s. */ public class HdfsResourceTypePresenter implements ResourceTypePresenter<HadoopResource> { private final JXTextField _pathTextField; private final DCPanel _panel; private final List<ResourceTypePresenter.Listener> _listeners = new ArrayList<>(1); private final List<FileFilter> _fileFilters = new ArrayList<>(); private final HadoopClusterInformation _defaultCluster; private final ServerInformationCatalog _serverInformationCatalog; public HdfsResourceTypePresenter(final ServerInformationCatalog serverInformationCatalog) { _serverInformationCatalog = serverInformationCatalog; _defaultCluster = getDefaultEnvironmentCluster(_serverInformationCatalog); _pathTextField = WidgetFactory.createTextField("path", 12); _pathTextField.setText("/"); final DCDocumentListener documentListener = new DCDocumentListener() { @Override protected void onChange(final DocumentEvent event) { onInputChanged(); } }; _pathTextField.getDocument().addDocumentListener(documentListener); _panel = DCPanel.flow(Alignment.LEFT, 2, 0, _pathTextField); } private HadoopClusterInformation getDefaultEnvironmentCluster( final ServerInformationCatalog serverInformationCatalog) { if (serverInformationCatalog.containsServer(HadoopResource.DEFAULT_CLUSTERREFERENCE)) { return (HadoopClusterInformation) serverInformationCatalog .getServer(HadoopResource.DEFAULT_CLUSTERREFERENCE); } return null; } private void onInputChanged() { final HdfsResource resource = getResource(); TextFieldResourceTypePresenter.handleResourceCandidate(resource, this, _listeners, _fileFilters); } @Override public JComponent getWidget() { return _panel; } @Override public HadoopResource getResource() { final String path = _pathTextField.getText(); if (path.length() < 2) { return null; } final URI uri = URI.create(path.replace(" ", "%20")); if (_defaultCluster == null || uri.isAbsolute()) { final HadoopResourceBuilder builder = new HadoopResourceBuilder(_serverInformationCatalog, path); return builder.build(); } return new HadoopResource(uri, _defaultCluster); } @Override public void setResource(final HadoopResource resource) { if (resource == null) { return; } final String qualifiedPath = resource.getQualifiedPath(); if (resource.getClusterReferenceName() == null) { _pathTextField.setText(qualifiedPath); } else { _pathTextField.setText(URI.create(qualifiedPath.replace(" ", "%20")).getPath()); } } @Override public void addListener(final ResourceTypePresenter.Listener listener) { _listeners.add(listener); } @Override public void removeListener(final ResourceTypePresenter.Listener listener) { _listeners.remove(listener); } @Override public void addChoosableFileFilter(final FileFilter fileFilter) { _fileFilters.add(fileFilter); } @Override public void removeChoosableFileFilter(final FileFilter fileFilter) { _fileFilters.remove(fileFilter); } @Override public void setSelectedFileFilter(final FileFilter fileFilter) { _fileFilters.remove(fileFilter); _fileFilters.add(0, fileFilter); } }