/*******************************************************************************
* Copyright (c) 2011 Subgraph.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Subgraph - initial API and implementation
******************************************************************************/
package com.subgraph.vega.ui.scanner.wizards;
import java.net.HttpCookie;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import com.subgraph.vega.ui.scanner.Activator;
import com.subgraph.vega.ui.util.ImageCache;
public class NewScanWizardPage2 extends WizardPage {
private final ImageCache imageCache = new ImageCache(Activator.PLUGIN_ID);
private final static String VEGA_LOGO = "icons/vega_small.png";
private Table cookiesTable;
private Table exclusionsTable;
public NewScanWizardPage2() {
super("Create a New Scan");
setTitle("Create a New Scan");
setDescription("Cookie and Exclusions");
setImageDescriptor(ImageDescriptor.createFromImage(imageCache.get(VEGA_LOGO)));
}
@Override
public void createControl(Composite parent) {
Composite container = new Composite(parent, SWT.NULL);
container.setLayout(new GridLayout());
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.widthHint = 140;
gd.heightHint = 60;
createCookiesPart(container, gd);
createExclusionsPart(container, gd);
setControl(container);
setPageComplete(true);
}
private void createCookiesPart(Composite parent, GridData exlusionTableLayoutData) {
final Label cookieLabel = new Label(parent, SWT.NULL);
cookieLabel.setText("Set-Cookie or Set-Cookie2 value:");
final Text cookieText = new Text(parent, SWT.BORDER | SWT.SINGLE);
cookieText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Button addButton = new Button(parent, SWT.PUSH);
addButton.setText("Add cookie");
addButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
if (event.widget == addButton) {
final String value = cookieText.getText();
if (value != null) {
TableItem items[] = cookiesTable.getItems();
for (TableItem t: items) {
if (cookieText.getText().equals(t.getText())) {
return;
}
}
try {
HttpCookie.parse(cookieText.getText());
} catch (Exception e) {
setErrorMessage("Cookie error: " + e.getMessage());
return;
}
TableItem newCookie = new TableItem(cookiesTable, SWT.NONE);
newCookie.setText(cookieText.getText());
}
}
}
});
cookiesTable = new Table(parent, SWT.BORDER | SWT.MULTI);
cookiesTable.setLayoutData(exlusionTableLayoutData);
final Button removeButton = new Button(parent, SWT.PUSH);
removeButton.setText("Remove selected cookie(s)");
removeButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
cookiesTable.remove(cookiesTable.getSelectionIndices());
}
});
}
private void createExclusionsPart(Composite parent, GridData exlusionTableLayoutData) {
final Label exclusionLabel = new Label(parent, SWT.NULL);
exclusionLabel.setText("Set scan exclusion patterns:");
final Text exclusionText = new Text(parent, SWT.BORDER | SWT.SINGLE);
exclusionText.setMessage("regular expression");
exclusionText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Button addButton = new Button(parent, SWT.PUSH);
addButton.setText("Add exclusion");
addButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
if (event.widget == addButton) {
final String value = exclusionText.getText();
if (value != null) {
TableItem items[] = exclusionsTable.getItems();
for (TableItem t: items) {
if (exclusionText.getText().equals(t.getText())) {
return;
}
}
TableItem newExclusion = new TableItem(exclusionsTable, SWT.NONE);
newExclusion.setText(exclusionText.getText());
}
}
}
});
exclusionsTable = new Table(parent, SWT.BORDER | SWT.MULTI);
exclusionsTable.setLayoutData(exlusionTableLayoutData);
final Button removeButton = new Button(parent, SWT.PUSH);
removeButton.setText("Remove selected exclusion(s)");
removeButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
exclusionsTable.remove(exclusionsTable.getSelectionIndices());
}
});
}
public List<String> getCookieStringList() {
return getTableItemsAsString(cookiesTable);
}
public List<String> getExclusions() {
return getTableItemsAsString(exclusionsTable);
}
private List<String> getTableItemsAsString(Table table) {
ArrayList<String> list = new ArrayList<String>();
for (TableItem t: table.getItems()) {
list.add(t.getText());
}
return list;
}
}