![JAR search and dependency download from the Maven repository](/logo.png)
org.datacleaner.panels.fuse.CoalesceUnitPanel 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.fuse;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.Collection;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.border.EmptyBorder;
import org.datacleaner.api.InputColumn;
import org.datacleaner.components.fuse.CoalesceUnit;
import org.datacleaner.panels.DCPanel;
import org.datacleaner.util.IconUtils;
import org.datacleaner.util.WidgetFactory;
import org.datacleaner.util.WidgetUtils;
import org.datacleaner.widgets.DCComboBox;
import org.datacleaner.widgets.SchemaStructureComboBoxListRenderer;
import org.jdesktop.swingx.VerticalLayout;
/**
* Panel that presents and edits a single {@link CoalesceUnit}.
*/
public class CoalesceUnitPanel extends DCPanel {
private static final long serialVersionUID = 1L;
private final ColumnListMultipleCoalesceUnitPropertyWidget _parent;
private final DCComboBox> _comboBox;
private final Map, DCPanel> _inputColumnPanels;
private final List> _inputColumns;
private final DCPanel _columnListPanel;
private final DCPanel _outerPanel;
public CoalesceUnitPanel(final ColumnListMultipleCoalesceUnitPropertyWidget parent, final CoalesceUnit unit) {
_parent = parent;
_inputColumns = new ArrayList<>();
_inputColumnPanels = new IdentityHashMap<>();
_comboBox = new DCComboBox<>();
final SchemaStructureComboBoxListRenderer renderer = new SchemaStructureComboBoxListRenderer();
renderer.setNullText("- Add input column -");
_comboBox.setRenderer(renderer);
_comboBox.addListener(item -> {
if (item == null) {
return;
}
addInputColumn(item);
});
_columnListPanel = new DCPanel();
_columnListPanel.setLayout(new VerticalLayout(2));
_columnListPanel.setBorder(new EmptyBorder(4, 4, 4, 4));
final DCPanel comboBoxPanel = DCPanel.around(_comboBox);
comboBoxPanel.setBorder(new EmptyBorder(4, 4, 4, 4));
_outerPanel = new DCPanel();
_outerPanel.setLayout(new BorderLayout());
_outerPanel.add(_columnListPanel, BorderLayout.CENTER);
_outerPanel.add(comboBoxPanel, BorderLayout.SOUTH);
setLayout(new BorderLayout());
add(WidgetUtils.decorateWithShadow(_outerPanel), BorderLayout.CENTER);
final List> availableInputColumns = _parent.getAvailableInputColumns();
setAvailableInputColumns(availableInputColumns);
if (unit != null) {
final InputColumn>[] updatedInputColumns = unit.getUpdatedInputColumns(
availableInputColumns.toArray(new InputColumn[availableInputColumns.size()]), false);
for (final InputColumn> inputColumn : updatedInputColumns) {
addInputColumn(inputColumn);
}
}
}
public CoalesceUnitPanel(final ColumnListMultipleCoalesceUnitPropertyWidget parent) {
this(parent, null);
}
/**
* Called by the parent widget to update the list of available columns
*
* @param inputColumns
*/
public void setAvailableInputColumns(final Collection> inputColumns) {
final InputColumn>[] items = new InputColumn>[inputColumns.size() + 1];
int index = 1;
for (final InputColumn> inputColumn : inputColumns) {
items[index] = inputColumn;
index++;
}
final DefaultComboBoxModel> model = new DefaultComboBoxModel<>(items);
_comboBox.setModel(model);
}
public void addInputColumn(final InputColumn> item) {
final DCPanel panel = createInputColumnPanel(item);
_columnListPanel.add(panel);
_inputColumns.add(item);
_parent.onInputColumnPicked(item);
}
public void removeInputColumn(final InputColumn> item) {
final DCPanel panel = _inputColumnPanels.get(item);
if (panel == null) {
return;
}
_columnListPanel.remove(panel);
_inputColumns.remove(item);
_parent.onInputColumnReleased(item);
}
private DCPanel createInputColumnPanel(final InputColumn> item) {
final DCPanel panel = new DCPanel();
panel.setLayout(new BorderLayout());
panel.add(new JLabel(item.getName(), IconUtils.getColumnIcon(item, IconUtils.ICON_SIZE_SMALL), JLabel.LEFT),
BorderLayout.CENTER);
final JButton removeButton = WidgetFactory.createSmallButton(IconUtils.ACTION_REMOVE_DARK);
removeButton.addActionListener(e -> removeInputColumn(item));
panel.add(removeButton, BorderLayout.EAST);
_inputColumnPanels.put(item, panel);
return panel;
}
public boolean isSet() {
return !_inputColumns.isEmpty();
}
public CoalesceUnit getCoalesceUnit() {
if (_inputColumns.isEmpty()) {
return null;
}
return new CoalesceUnit(_inputColumns);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy