/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2015 The ZAP Development Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.zaproxy.zap.view;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import org.parosproxy.paros.Constant;
import org.zaproxy.zap.utils.Orderable;
/**
* An {@code AbstractMultipleOptionsBaseTablePanel} that allows to order the elements.
*
* @param <E> the type of elements in this table
*/
public abstract class AbstractMultipleOrderedOptionsBaseTablePanel<E extends Orderable> extends
AbstractMultipleOptionsBaseTablePanel<E> {
private static final long serialVersionUID = 8297404899024654579L;
private JButton moveTopButton;
private JButton moveUpButton;
private JButton moveDownButton;
private JButton moveBottomButton;
public AbstractMultipleOrderedOptionsBaseTablePanel(AbstractMultipleOrderedOptionsBaseTableModel<E> model) {
this(model, true);
}
protected AbstractMultipleOrderedOptionsBaseTablePanel(
AbstractMultipleOrderedOptionsBaseTableModel<E> model,
boolean allowModification) {
super(model, allowModification);
}
protected void addMoveButtons() {
addButtonSpacer();
moveTopButton = new JButton(Constant.messages.getString("multiple.options.panel.ordered.move.top.button.label"));
moveTopButton.setToolTipText(Constant.messages.getString("multiple.options.panel.ordered.move.top.button.tooltip"));
moveTopButton.setEnabled(false);
moveTopButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getMultipleOptionsModel().moveTop(getSelectedRow());
int finalRow = getTable().convertRowIndexToView(0);
getTable().getSelectionModel().setSelectionInterval(finalRow, finalRow);
}
});
addButton(moveTopButton);
moveUpButton = new JButton(Constant.messages.getString("multiple.options.panel.ordered.move.up.button.label"));
moveUpButton.setToolTipText(Constant.messages.getString("multiple.options.panel.ordered.move.up.button.tooltip"));
moveUpButton.setEnabled(false);
moveUpButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int row = getSelectedRow();
getMultipleOptionsModel().moveUp(row);
int finalRow = getTable().convertRowIndexToView(row - 1);
getTable().getSelectionModel().setSelectionInterval(finalRow, finalRow);
}
});
addButton(moveUpButton);
moveDownButton = new JButton(Constant.messages.getString("multiple.options.panel.ordered.move.down.button.label"));
moveDownButton.setToolTipText(Constant.messages.getString("multiple.options.panel.ordered.move.down.button.tooltip"));
moveDownButton.setEnabled(false);
moveDownButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int row = getSelectedRow();
getMultipleOptionsModel().moveDown(row);
int finalRow = getTable().convertRowIndexToView(row + 1);
getTable().getSelectionModel().setSelectionInterval(finalRow, finalRow);
}
});
addButton(moveDownButton);
moveBottomButton = new JButton(Constant.messages.getString("multiple.options.panel.ordered.move.bottom.button.label"));
moveBottomButton.setToolTipText(Constant.messages.getString("multiple.options.panel.ordered.move.bottom.button.tooltip"));
moveBottomButton.setEnabled(false);
moveBottomButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getMultipleOptionsModel().moveBottom(getSelectedRow());
int finalRow = getTable().convertRowIndexToView(getModel().getRowCount() - 1);
getTable().getSelectionModel().setSelectionInterval(finalRow, finalRow);
}
});
addButton(moveBottomButton);
addButtonSpacer();
}
@Override
protected AbstractMultipleOrderedOptionsBaseTableModel<E> getMultipleOptionsModel() {
return (AbstractMultipleOrderedOptionsBaseTableModel<E>) super.getMultipleOptionsModel();
}
/**
* {@inheritDoc}
* <p>
* Overridden to also enable/disable the "move" buttons ("Top", "Up", "Down" and "Bottom").
*/
@Override
public void setComponentEnabled(boolean enabled) {
super.setComponentEnabled(enabled);
boolean enable = enabled && getTable().getSelectionModel().getMinSelectionIndex() >= 0;
if (enable) {
updateMoveButtons();
} else {
disableMoveButtons();
}
}
/**
* {@inheritDoc}
* <p>
* Overridden to update the enabled state of the "move" buttons ("Top", "Up", "Down" and "Bottom").
*/
@Override
protected void selectionChanged(boolean entrySelected) {
super.selectionChanged(entrySelected);
if (!entrySelected) {
disableMoveButtons();
}
updateMoveButtons();
}
protected void updateMoveButtons() {
int selectedRow = getSelectedRow();
if (selectedRow == -1 || getModel().getRowCount() == 1) {
disableMoveButtons();
return;
}
int positionSelected = getMultipleOptionsModel().getElement(selectedRow).getOrder();
if (positionSelected == 1) {
moveTopButton.setEnabled(false);
moveUpButton.setEnabled(false);
moveDownButton.setEnabled(true);
moveBottomButton.setEnabled(true);
} else if (positionSelected == getModel().getRowCount()) {
moveTopButton.setEnabled(true);
moveUpButton.setEnabled(true);
moveDownButton.setEnabled(false);
moveBottomButton.setEnabled(false);
} else {
moveTopButton.setEnabled(true);
moveUpButton.setEnabled(true);
moveDownButton.setEnabled(true);
moveBottomButton.setEnabled(true);
}
}
protected void disableMoveButtons() {
moveTopButton.setEnabled(false);
moveUpButton.setEnabled(false);
moveDownButton.setEnabled(false);
moveBottomButton.setEnabled(false);
}
}