/*
* GNetWatch
* Copyright 2006, 2007, 2008 Alexandre Fenyo
* gnetwatch@fenyo.net
*
* This file is part of GNetWatch.
*
* GNetWatch is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* GNetWatch 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNetWatch; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.fenyo.gnetwatch.GUI;
import java.net.UnknownHostException;
import net.fenyo.gnetwatch.AlgorithmException;
import net.fenyo.gnetwatch.GenericTools;
import net.fenyo.gnetwatch.targets.TargetIPv4Subnet;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.browser.*;
import org.apache.commons.configuration.*;
import org.apache.commons.configuration.tree.xpath.*;
import java.util.*;
/**
* This class manages the "IP options" dialog.
* @author Alexandre Fenyo
* @version $Id: DialogGeneric.java,v 1.3 2008/05/25 17:10:37 fenyo Exp $
*/
/*
* title
* command line
* filename
* working directory
* unit
*/
public class DialogGeneric extends Dialog {
private static Log log = LogFactory.getLog(DialogGeneric.class);
private final GUI gui;
private final int bglevel = 100;
private GridLayout layout = null;
private Composite groups_composite = null;
private Composite bottom_composite = null;
private RowLayout groups_composite_layout = null;
private RowLayout bottom_composite_layout = null;
private GridData groups_composite_grid_data = null;
private Group group_network_parameters = null;
private GridLayout group_network_parameters_layout = null;
private boolean ok_clicked = false;
private String title = "";
private String cmdline = "";
private String filename = "";
private String workdir = "";
private String unit = "";
public boolean isOK() {
return ok_clicked;
}
private java.util.List<String> parseConfigFile() {
java.util.List<String> values = new ArrayList();
try {
final XMLConfiguration initial = new XMLConfiguration(gui.getConfig().getProperty("genericconffile"));
initial.setExpressionEngine(new XPathExpressionEngine());
for (final HierarchicalConfiguration subconf : (java.util.List<HierarchicalConfiguration>)
initial.configurationsAt("/generic/template")) {
final String name = subconf.getString("name");
if (name != null) values.add(name);
}
} catch (final ConfigurationException ex) {
log.error("Exception", ex);
}
return values;
}
private Map<String, String> parseConfigFile(final String name) {
Map<String, String> values = new HashMap();
try {
final XMLConfiguration initial = new XMLConfiguration(gui.getConfig().getProperty("genericconffile"));
initial.setExpressionEngine(new XPathExpressionEngine());
for (final HierarchicalConfiguration subconf : (java.util.List<HierarchicalConfiguration>)
initial.configurationsAt("/generic/template")) {
final String subconf_name = subconf.getString("name");
if (subconf_name != null && subconf_name.equals(name)) {
for (final String key : new String [] { "name", "title", "cmdline", "filename", "workdir", "unit" })
values.put(key, subconf.getString(key));
return values;
}
}
} catch (final ConfigurationException ex) {
log.error("Exception", ex);
}
return null;
}
/**
* Constructor.
* @param gui current GUI instance.
* @param parent parent shell.
*/
public DialogGeneric(final GUI gui, final Shell parent) {
super(parent, 0);
this.gui = gui;
}
public String getTitle() {
return title;
}
public String getCommandLine() {
return cmdline;
}
public String getFilename() {
return filename;
}
public String getWorkdir() {
return workdir;
}
public String getUnit() {
return unit;
}
public void setTitle(final String title) {
this.title = title;
}
public void setCommandLine(final String cmdline) {
this.cmdline = cmdline;
}
public void setFilename(final String filename) {
this.filename = filename;
}
public void setWorkdir(final String workdir) {
this.workdir = workdir;
}
public void setUnit(final String unit) {
this.unit = unit;
}
/**
* Displays the dialog.
* @param none.
* @return void.
*/
public void open() {
final Shell parent = getParent();
final Display display = parent.getDisplay();
final Shell shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
shell.setText(gui.getConfig().getString("gnetwatch_generic_options"));
// shell.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_BLUE));
// Your code goes here (widget creation, set result, etc).
// Composite for groups at left
layout = new GridLayout();
layout.numColumns = 1;
layout.marginHeight = 2;
layout.marginWidth = 2;
layout.verticalSpacing = 1;
shell.setLayout(layout);
groups_composite = new Composite(shell, SWT.FLAT);
groups_composite_layout = new RowLayout(SWT.VERTICAL);
groups_composite_layout.fill = true;
groups_composite_layout.marginTop = 0;
groups_composite_layout.marginBottom = 0;
groups_composite.setLayout(groups_composite_layout);
groups_composite_grid_data = new GridData(GridData.FILL_VERTICAL);
groups_composite.setLayoutData(groups_composite_grid_data);
// Group for HTTP parameters
group_network_parameters = new Group(groups_composite, SWT.SHADOW_ETCHED_IN);
group_network_parameters_layout = new GridLayout();
group_network_parameters_layout.numColumns = 2;
group_network_parameters.setLayout(group_network_parameters_layout);
group_network_parameters.setText(gui.getConfig().getString("generic_parameters"));
final Label label_template = new Label(group_network_parameters, SWT.SHADOW_IN);
label_template.setText(gui.getConfig().getString("template"));
label_template.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Combo ctemplate = new Combo(group_network_parameters, SWT.SHADOW_IN | SWT.READ_ONLY);
ctemplate.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
ctemplate.add(gui.getConfig().getString("select_to_apply_template"));
ctemplate.setText(gui.getConfig().getString("select_to_apply_template"));
for (final String name : parseConfigFile()) ctemplate.add(name);
final Label label2 = new Label(group_network_parameters, SWT.SHADOW_IN);
label2.setText(gui.getConfig().getString("title"));
label2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Text group_title_value = new Text(group_network_parameters, SWT.SINGLE);
group_title_value.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_VERTICAL));
group_title_value.setBackground(new Color(display, bglevel, bglevel, bglevel));
group_title_value.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
group_title_value.setText(title);
final GC gc2 = new GC(group_title_value);
((GridData) (group_title_value.getLayoutData())).widthHint = gc2.stringExtent("aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc ").x;
final Label label3 = new Label(group_network_parameters, SWT.SHADOW_IN);
label3.setText(gui.getConfig().getString("cmdline"));
label3.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Text group_cmdline_value = new Text(group_network_parameters, SWT.SINGLE);
group_cmdline_value.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_VERTICAL));
group_cmdline_value.setBackground(new Color(display, bglevel, bglevel, bglevel));
group_cmdline_value.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
group_cmdline_value.setText(cmdline);
final GC gc3 = new GC(group_cmdline_value);
((GridData) (group_cmdline_value.getLayoutData())).widthHint = gc3.stringExtent("aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc ").x;
final Label label4 = new Label(group_network_parameters, SWT.SHADOW_IN);
label4.setText(gui.getConfig().getString("filename"));
label4.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Text group_filename_value = new Text(group_network_parameters, SWT.SINGLE);
group_filename_value.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_VERTICAL));
group_filename_value.setBackground(new Color(display, bglevel, bglevel, bglevel));
group_filename_value.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
group_filename_value.setText(filename);
final GC gc4 = new GC(group_filename_value);
((GridData) (group_filename_value.getLayoutData())).widthHint = gc4.stringExtent("aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc ").x;
final Label label5 = new Label(group_network_parameters, SWT.SHADOW_IN);
label5.setText(gui.getConfig().getString("workdir"));
label5.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Text group_workdir_value = new Text(group_network_parameters, SWT.SINGLE);
group_workdir_value.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_VERTICAL));
group_workdir_value.setBackground(new Color(display, bglevel, bglevel, bglevel));
group_workdir_value.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
group_workdir_value.setText(workdir);
final GC gc5 = new GC(group_workdir_value);
((GridData) (group_workdir_value.getLayoutData())).widthHint = gc5.stringExtent("aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc ").x;
final Label label6 = new Label(group_network_parameters, SWT.SHADOW_IN);
label6.setText(gui.getConfig().getString("unit"));
label6.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Text group_unit_value = new Text(group_network_parameters, SWT.SINGLE);
group_unit_value.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.FILL_VERTICAL));
group_unit_value.setBackground(new Color(display, bglevel, bglevel, bglevel));
group_unit_value.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
group_unit_value.setText(unit);
final GC gc6 = new GC(group_unit_value);
((GridData) (group_unit_value.getLayoutData())).widthHint = gc6.stringExtent("aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc ").x;
// bottom buttons
bottom_composite = new Composite(shell, SWT.FLAT);
bottom_composite_layout = new RowLayout();
bottom_composite_layout.fill = true;
bottom_composite_layout.marginTop = 0;
bottom_composite_layout.marginBottom = 0;
bottom_composite_layout.wrap = false;
bottom_composite_layout.pack = false;
bottom_composite_layout.justify = true;
bottom_composite_layout.type = SWT.HORIZONTAL;
bottom_composite_layout.marginLeft = 5;
bottom_composite_layout.marginTop = 5;
bottom_composite_layout.marginRight = 5;
bottom_composite_layout.marginBottom = 5;
bottom_composite_layout.spacing = 0;
bottom_composite.setLayout(bottom_composite_layout);
final GridData bottom_composite_grid_data = new GridData(GridData.FILL_HORIZONTAL);
bottom_composite.setLayoutData(bottom_composite_grid_data);
final Button button_ok = new Button(bottom_composite, SWT.PUSH);
button_ok.setText("Ok");
final DialogGeneric _this = this;
button_ok.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
_this.title = group_title_value.getText();
_this.cmdline = group_cmdline_value.getText();
_this.filename = group_filename_value.getText();
_this.workdir = group_workdir_value.getText();
_this.unit = group_unit_value.getText();
ok_clicked = true;
shell.dispose();
}
public void widgetSelected(SelectionEvent e) {
widgetDefaultSelected(e);
}
});
final Button button_cancel = new Button(bottom_composite, SWT.PUSH);
button_cancel.setText(gui.getConfig().getString("cancel"));
button_cancel.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
shell.dispose();
}
public void widgetSelected(SelectionEvent e) {
widgetDefaultSelected(e);
}
});
ctemplate.addModifyListener(new ModifyListener() {
public void modifyText(final ModifyEvent e) {
final Map<String, String> values = parseConfigFile(ctemplate.getText());
if (values != null) {
group_title_value.setText(values.get("title") != null ? values.get("title") : "");
group_cmdline_value.setText(values.get("cmdline") != null ? values.get("cmdline") : "");
group_filename_value.setText(values.get("filename") != null ? values.get("filename") : "");
group_workdir_value.setText(values.get("workdir") != null ? values.get("workdir") : "");
group_unit_value.setText(values.get("unit") != null ? values.get("unit") : "");
} else {
group_title_value.setText("");
group_cmdline_value.setText("");
group_filename_value.setText("");
group_workdir_value.setText("");
group_unit_value.setText("");
}
title = group_title_value.getText();
cmdline = group_cmdline_value.getText();
filename = group_filename_value.getText();
workdir = group_workdir_value.getText();
unit = group_unit_value.getText();
}
});
shell.pack(true);
shell.open();
while (!shell.isDisposed())
if (!display.readAndDispatch()) display.sleep();
}
}