package org.openslx.dozmod.gui.configurator; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.changemonitor.GenericControlWindow; import org.openslx.dozmod.gui.control.QLabel; import org.openslx.dozmod.gui.control.table.ContainerBindMountTable; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.dozmod.gui.helper.I18n; import org.openslx.dozmod.gui.window.ContainerBindMountWindow; import org.openslx.virtualization.configuration.container.ContainerBindMount; import javax.swing.*; import javax.swing.event.ChangeListener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; public class ContainerBindMountConfigurator extends JPanel implements GenericControlWindow> { /** * Version for serialization. */ private static final long serialVersionUID = -3439578767452418382L; private final Logger LOGGER = LogManager.getLogger(ContainerBindMountConfigurator.class); private final ContainerBindMountTable bindMountTable; public ContainerBindMountConfigurator() { super(); GridManager grid = new GridManager(this, 3, false); QLabel lblBindMount = new QLabel(I18n.CONFIGURATOR.getString("ContainerBindMount.BindMount.text")); bindMountTable = new ContainerBindMountTable(); QScrollPane scrollPaneTable = new QScrollPane(bindMountTable); scrollPaneTable.setMinimumSize(Gui.getScaledDimension(0, 70)); scrollPaneTable.setPreferredSize(Gui.getScaledDimension(0, 70)); grid.add(lblBindMount).fill(false, false); grid.add(scrollPaneTable, 2).fill(true, false).expand(true, false); grid.nextRow(); JPanel buttonPanel = new JPanel(); buttonPanel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS)); JButton btnAddBindMount = new JButton( I18n.CONFIGURATOR.getString("ContainerBindMount.Button.AddBindMount.text")); JButton btnDelBindMount = new JButton( I18n.CONFIGURATOR.getString("ContainerBindMount.Button.DeleteBindMount.text")); // add glue box to move Buttons to the right border. buttonPanel.add(Box.createGlue()); buttonPanel.add(btnAddBindMount); buttonPanel.add(btnDelBindMount); grid.add(Box.createGlue()).fill(true, false); grid.add(buttonPanel, 2).fill(true, false); grid.finish(false); btnAddBindMount.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { addBindMount(); } }); btnDelBindMount.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { deleteBindMount(); } }); } private void addBindMount() { ContainerBindMountWindow.open(SwingUtilities.getWindowAncestor(this), bindMountTable); fireUserChangeEvent(); } private void deleteBindMount() { if (null == bindMountTable.getSelectedItem()) return; List data = new ArrayList<>(bindMountTable.getData()); if (data.remove(bindMountTable.getSelectedItem())) LOGGER.info("Bind Mount Entry Deleted"); bindMountTable.setData(data, true); fireUserChangeEvent(); } public void setData(List bindMountConfig) { setData(bindMountConfig, true); } public void setData(List bindMountConfig, boolean sort) { bindMountTable.setData(bindMountConfig, sort); } public List getData() { return bindMountTable.getData(); } /* ################################ For dialog change monitor ################################### */ @Override public List getState() { return bindMountTable.getData(); } void fireUserChangeEvent() { for (ChangeListener cl : listeners) { cl.stateChanged(null); } } private final List listeners = new ArrayList<>(1); @Override public void addChangeListener(ChangeListener l) { listeners.add(l); } }