package irr;
/*
* Copyright (c) 1997, 1998
* The Regents of the University of Michigan ("The Regents").
* All rights reserved.
*
* Contact: ipma-support@merit.edu
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* Michigan and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
/* Options Menu
*
* Basic per session options such as Query server, submit server, password,
* databases.
*
* 5/3/99
* Jon Poland
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.net.*;
import java.io.*;
import ipma.Window.*;
import netscape.security.PrivilegeManager;
public class OptionsMenu extends CWindow{
GetRequest gr; /* passed in during creation, used to change servers */
IRRWindow irrw; /* the parent IRRWindow */
private Font f = new Font("Courier", Font.PLAIN, 12);
Label DBLabel = new Label("Query Databases");
Label QportLabel = new Label("Query Port ");
Label QserverLabel = new Label("Query Server ");
Label SserverLabel = new Label("Submit Server");
Label SportLabel = new Label("Submit port");
Label pwdLabel = new Label("Mntner Password");
Label pgpPwdLabel = new Label("PGP Password ");
Label pgpUidLabel = new Label("PGP User ID ");
Label pgpExecLabel = new Label("PGP executable ");
Label pgpPathLabel = new Label("Absolute path to PGP rings");
redLabel statLabel = new redLabel();
Label availableLabel = new Label("Available Databases");
Label selectedLabel = new Label("Selected DB's(search top to bottom)");
TextField QtfServer = new TextField(20);
TextField QtfPort = new TextField(5);
TextField StfServer = new TextField(20);
TextField StfPort = new TextField(5);
TextField Passwd = new TextField(15);
TextField pgpPwd = new TextField(15);
TextField pgpUid = new TextField(15);
TextField pgpExec = new TextField(15);
TextField pgpPath = new TextField(25);
// Connection stuff
private InetAddress ia;
// Listener stuff
protected ActionListener al = new InnerActionListener();
// String constants
private String SUBMIT_STRING = "Ok";
private String CLOSE_STRING = "Cancel";
private String DEFAULT_STRING = "Load Defaults";
static final String WINDOW_TITLE = "General Options";
//private final String DEFAULT_SERVER = "radb1.merit.edu";
// private final String DEFAULT_QPORT = "43";
private final String DEFAULT_SPORT = "8888";
private final String DB_REQUEST = "!s-lc";
private final String DB_RESET = "!s-*";
private final String DB_SELECT = "!s";
//Strings for saving state, for cancel button
private String old_qserver;
private String old_sserver;
private String old_qport;
private String old_sport;
private String old_pwd;
private String[] old_available;
private String[] old_selected;
/*protected ItemListener il = new InnerItemListener ();;*/
/* New */
/* TextArea db_available = new TextArea("", 8, 20,
TextArea.SCROLLBARS_VERTICAL_ONLY);
TextArea db_selected = new TextArea("",8, 20,
TextArea.SCROLLBARS_VERTICAL_ONLY);*/
List db_available = new List(7, true);
List db_selected = new List(7, true);
public OptionsMenu(GetRequest g_r, IRRWindow irr_win){
super.setTitle(WINDOW_TITLE);
gr = g_r;
irrw = irr_win;
Passwd.setEchoChar('*');
pgpPwd.setEchoChar('*');
int bytes = gr.getNewRequest(DB_REQUEST);
if (bytes < 1) return;
String s = gr.getBuffer();
if (s == null) return;
BuildLayout(s.trim());
addWindowListener(new InnerWindowAdapter ());
old_qserver = QtfServer.getText();
old_sserver = StfServer.getText();
old_qport = QtfPort.getText();
old_sport = StfPort.getText();
old_pwd = Passwd.getText();
// old_available = db_available.getText();
// old_selected = db_selected.getText();
old_available = db_available.getItems();
old_selected = db_selected.getItems();
// db_available.setEditable(false);
// db_selected.setEditable(false);
pack();
show();
}
protected void BuildLayout(String s){
Panel p = new Panel();
GridBagLayout g = new GridBagLayout();
p.setLayout(g);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.anchor = GridBagConstraints.WEST;
String str;
int index=0;
Panel db_p = new Panel();
//db_selected.setText(s.replace(',', '\n'));
StringTokenizer strTok = new StringTokenizer(s, ",", false);
while(strTok.hasMoreTokens())
db_selected.addItem(strTok.nextToken());
Panel left_p = new Panel();
left_p.setLayout(new BorderLayout());
left_p.add(availableLabel, "North");
left_p.add(db_available, "South");
db_p.add(left_p);
Panel mid_button = new Panel();
mid_button.setLayout(new BorderLayout());
Button tmpButton = new Button("-->");
mid_button.add(tmpButton, "North");
tmpButton.addActionListener(al);
tmpButton = new Button("<--");
mid_button.add(tmpButton, "South");
tmpButton.addActionListener(al);
db_p.add(mid_button);
Panel right_p = new Panel();
right_p.setLayout(new BorderLayout());
right_p.add(selectedLabel, "North");
right_p.add(db_selected, "South");
db_p.add(right_p);
add(db_p, "North");
Panel serverP = new Panel();
serverP.add(QserverLabel);
QtfServer.setText(gr.getSockInfo());
serverP.add(QtfServer);
QtfPort.setText(gr.getPort());
serverP.add(QportLabel);
serverP.add(QtfPort);
g.setConstraints(serverP, gbc);
p.add(serverP);
Panel S = new Panel();
S.add(SserverLabel);
StfServer.setText(gr.getSockInfo());
StfPort.setText(DEFAULT_SPORT);
S.add(StfServer);
S.add(SportLabel);
S.add(StfPort);
g.setConstraints(S, gbc);
p.add(S);
Panel Pass = new Panel();
Pass.add(pwdLabel);
Pass.add(Passwd);
g.setConstraints(Pass, gbc);
p.add(Pass);
Pass = new Panel();
Pass.add(pgpPwdLabel);
Pass.add(pgpPwd);
g.setConstraints(Pass, gbc);
p.add(Pass);
Pass = new Panel();
Pass.add(pgpUidLabel);
Pass.add(pgpUid);
g.setConstraints(Pass, gbc);
p.add(Pass);
Pass = new Panel();
Pass.add(pgpExecLabel);
Pass.add(pgpExec);
g.setConstraints(Pass, gbc);
p.add(Pass);
Pass = new Panel();
Pass.add(pgpPathLabel);
Pass.add(pgpPath);
g.setConstraints(Pass, gbc);
p.add(Pass);
p.add(statLabel);
add(p);
p = new Panel();
tmpButton = new Button(SUBMIT_STRING);
tmpButton.addActionListener(al);
p.add(tmpButton);
tmpButton = new Button(CLOSE_STRING);
tmpButton.addActionListener(al);
p.add(tmpButton);
tmpButton = new Button(DEFAULT_STRING);
tmpButton.addActionListener(al);
p.add(tmpButton);
add("South",p);
}
public void updateLayout(){
statLabel.invalidate();
validateTree();
}
public void showAgain(){
old_qserver = QtfServer.getText();
old_sserver = StfServer.getText();
old_qport = QtfPort.getText();
old_sport = StfPort.getText();
old_pwd = Passwd.getText();
// old_available = db_available.getText();
// old_selected = db_selected.getText();
old_available = db_available.getItems();
old_selected = db_selected.getItems();
setVisible (true);
}
protected void changeDB(){
String[] selected = db_selected.getItems();
String request = new String();
for(int i = 0; i < selected.length; i++)
request += selected[i] + ',';
if ( gr.getNewRequest(DB_SELECT+request) > 0)
setVisible(false);
else{
statLabel.setText("ERROR: No sources selected");
updateLayout();
return;
}
}
protected void handleSubmit(){
if( !(gr.getSockInfo().equals(QtfServer.getText().trim())) ||
!(gr.getPort().equals(QtfPort.getText().trim())) ){
/**** Netscape Security stuff */
try {
PrivilegeManager.enablePrivilege ("UniversalConnect");
}
catch (netscape.security.ForbiddenTargetException err) {
System.out.print("*Access Denied to connect, exiting*\n");
statLabel.setText("Access Denied to connect*");
return;
}
/* ******************************/
int newPort = getPort(QtfPort.getText().trim());
if(newPort > 65535 || newPort <= 0){
newPort = getPort(gr.getPort());
QtfPort.setText(Integer.toString(newPort));
return;
}
try{
InetAddress Qserv = InetAddress.getByName(QtfServer.getText().trim());
}
catch(UnknownHostException e){
statLabel.setText("Invalid Query host entered");
updateLayout();
return;
}
try{
InetAddress Sserv = InetAddress.getByName(StfServer.getText().trim());
}
catch(UnknownHostException e){
statLabel.setText("Invalid Submit host entered");
updateLayout();
return;
}
irrw.changeServer(QtfServer.getText().trim(), newPort);
newPort = getPort(StfPort.getText().trim());
if(newPort > 65535 || newPort <= 0){
newPort = getPort(gr.getPort());
StfPort.setText(Integer.toString(newPort));
return;
}
gr = irrw.gr;
updateDbList();
setVisible(false);
}
else
changeDB();
/*setVisible(false);*/
}
/* called to rebuild the list of available databases after a server change */
public void updateDbList(){
int bytes = gr.getNewRequest(DB_RESET);
bytes = gr.getNewRequest(DB_REQUEST);
if (bytes < 1) return;
String s = gr.getBuffer();
if (s == null) return;
//db_selected.setText(s.replace(',', '\n'));
StringTokenizer strTok = new StringTokenizer(s, ",", false);
while(strTok.hasMoreTokens())
db_selected.addItem(strTok.nextToken());
}
public int getPort(String p){
int i;
try{
i = Integer.valueOf(p).intValue();
}
catch(NumberFormatException f){
i = getPort(gr.getPort());
}
return i;
}
public void Close(){
super.Close();
}
class InnerActionListener implements ActionListener {
public void actionPerformed (ActionEvent e) {
String label = e.getActionCommand ();
if (label.equals (CLOSE_STRING)) {
QtfServer.setText(old_qserver);
StfServer.setText(old_sserver);
QtfPort.setText( old_qport );
StfPort.setText(old_sport);
Passwd.setText(old_pwd);
// db_selected.setText(old_selected);
// db_available.setText(old_available);
db_selected.removeAll();
db_available.removeAll();
for(int i = 0; i < old_selected.length; i++)
db_selected.addItem(old_selected[i]);
for(int i = 0; i < old_available.length; i++)
db_available.addItem(old_available[i]);
statLabel.setText("");
setVisible (false);
}
else if (label.equals (SUBMIT_STRING)) {
statLabel.setText("");
handleSubmit();
}
else if (label.equals ( DEFAULT_STRING)) {
QtfServer.setText(irrw.DEFAULT_SERVER);
QtfPort.setText(Integer.toString(irrw.DEFAULT_PORT));
StfServer.setText (irrw.DEFAULT_SERVER);
StfPort.setText (DEFAULT_SPORT);
//db_available.setText("");
db_available.removeAll();
updateDbList();
updateLayout();
}
else if (label.equals ( "-->" )){/*
String s = db_available.getSelectedText();
System.out.print("Selected: " + s + "\n");
StringTokenizer sst = new StringTokenizer(s, " \t\r\n", false);
//String s;
while(sst.hasMoreTokens()){
s = sst.nextToken();
System.out.print("Token: " + s + "\n");
String str = db_available.getText();
System.out.print("Available: " + str + "\n");
StringTokenizer st = new StringTokenizer(str, " \t\r\n", false);
db_available.setText("");
//String str;
while(st.hasMoreTokens()){
str = st.nextToken();
System.out.print("Compare to token: " + str + "\n");
if(str.equals(s))
db_selected.append(s + "\n");
else
db_available.append(str + "\n");
}
}
*/
String[] s = db_available.getSelectedItems();
for(int i = 0; i < s.length; i++){
db_available.remove(s[i]);
db_selected.addItem(s[i]);
}
}
else if (label.equals ("<--" )){
/* StringTokenizer sst = new
StringTokenizer(db_selected.getSelectedText().trim());
String s;
while(sst.hasMoreTokens()){
s = sst.nextToken();
StringTokenizer st = new StringTokenizer(db_selected.getText());
db_selected.setText("");
String str;
while(st.hasMoreTokens()){
str = st.nextToken();
if(str.equals(s))
db_available.append(s + "\n");
else
db_selected.append(str + "\n");
}
} */
String[] s = db_selected.getSelectedItems();
for(int i = 0; i < s.length; i++){
db_selected.remove(s[i]);
db_available.addItem(s[i]);
}
}
}
}
class InnerWindowAdapter extends WindowAdapter {
public void windowClosing (WindowEvent e) {
QtfServer.setText(old_qserver);
StfServer.setText(old_sserver);
QtfPort.setText( old_qport );
StfPort.setText(old_sport);
Passwd.setText(old_pwd);
//db_selected.setText(old_selected);
//db_available.setText(old_available);
db_selected.removeAll();
db_available.removeAll();
for(int i = 0; i < old_selected.length; i++)
db_selected.addItem(old_selected[i]);
for(int i = 0; i < old_available.length; i++)
db_available.addItem(old_available[i]);
statLabel.setText("");
setVisible (false);
}
}
} // End of class definition
syntax highlighted by Code2HTML, v. 0.9.1