/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2014 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.CardLayout;
import java.awt.GridBagLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import org.parosproxy.paros.Constant;
import org.parosproxy.paros.model.Model;
import org.parosproxy.paros.model.Session;
import org.parosproxy.paros.view.AbstractParamPanel;
import org.zaproxy.zap.model.Context;
public class ContextListPanel extends AbstractParamPanel {
private static final long serialVersionUID = -8337361808959321380L;
private JPanel panelContext = null;
private JTable tableExt = null;
private JScrollPane jScrollPane = null;
private ContextListTableModel model = new ContextListTableModel();
public ContextListPanel() {
super();
initialize();
}
/**
* This method initializes this
*/
private void initialize() {
this.setLayout(new CardLayout());
this.setName(Constant.messages.getString("context.list"));
this.add(getPanelSession(), getPanelSession().getName());
}
/**
* This method initializes panelSession
*
* @return javax.swing.JPanel
*/
private JPanel getPanelSession() {
if (panelContext == null) {
panelContext = new JPanel();
panelContext.setLayout(new GridBagLayout());
panelContext.setName(Constant.messages.getString("context.list"));
if (Model.getSingleton().getOptionsParam().getViewParam().getWmUiHandlingOption() == 0) {
panelContext.setSize(180, 101);
}
panelContext.add(getJScrollPane(), LayoutHelper.getGBC(0, 0, 4, 1.0D, 1.0D));
}
return panelContext;
}
/**
* This method initializes jScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setViewportView(getTableExtension());
jScrollPane.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
}
return jScrollPane;
}
/**
* This method initializes tableAuth
*
* @return javax.swing.JTable
*/
private JTable getTableExtension() {
if (tableExt == null) {
tableExt = new JTable();
tableExt.setModel(this.model);
tableExt.getColumnModel().getColumn(0).setPreferredWidth(30);
tableExt.getColumnModel().getColumn(1).setPreferredWidth(320);
tableExt.getColumnModel().getColumn(2).setPreferredWidth(50);
// Issue 954: Force the JTable cell to auto-save when the focus changes.
// Example, edit cell, click OK for a panel dialog box, the data will get saved.
tableExt.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
// Disable for now - would be useful but had some problems with this ;)
/*
ListSelectionListener sl = new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
if (tableExt.getSelectedRow() > -1) {
Context ctx = ((ContextListTableModel)tableExt.getModel()).getContext(
tableExt.getSelectedRow());
if (ctx != null) {
try {
extName.setText(ext.getName());
extDescription.setText(ext.getDescription());
if (ext.getAuthor() != null) {
extAuthor.setText(ext.getAuthor());
} else {
extAuthor.setText("");
}
if (ext.getURL() != null) {
extURL.setText(ext.getURL().toString());
getUrlLaunchButton().setEnabled(true);
} else {
extURL.setText("");
getUrlLaunchButton().setEnabled(false);
}
} catch (Exception e) {
// Just to be safe
log.error(e.getMessage(), e);
}
}
}
}};
tableExt.getSelectionModel().addListSelectionListener(sl);
tableExt.getColumnModel().getSelectionModel().addListSelectionListener(sl);
*/
}
return tableExt;
}
@Override
public void initParam(Object obj) {
Session session = (Session) obj;
List<Object[]> values = new ArrayList<>();
List<Context> contexts = session.getContexts();
for (Context context : contexts) {
values.add(new Object[] {context.getIndex(), context.getName(), context.isInScope()});
}
this.model.setValues(values);
}
@Override
public void saveParam (Object obj) throws Exception {
// Nothing to do, the table does not allow to edit its values.
// NOTE: If changed to be editable it should be in sync with the view state (share view models?) of
// ContextGeneralPanel(s), the context name and "in scope" state is also shown (and editable) there.
}
@Override
public String getHelpIndex() {
return "ui.dialogs.contexts";
}
}