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.
*
*/
/**
* CIRRWindow
*
* CIRRWindow provides the base window class for the IRR
* applet/applications it handles setup, data and request
* handling, and layout management
*
* Modification History:
* Port to jdk1.1.
* @version 1.1.
* @date 11 June 1998.
* @author Sushila Subramanian.
*
* @version 1.0
* @date
* @author Aaron Klink.
*/
import java.awt.*;
import java.util.*;
import java.lang.*;
import ipma.Window.*;
public class CIRRWindow extends CPopupWindow {
TextField tf1;
static final int FRAME_WIDTH = 640;
static final int FRAME_HEIGHT = 800;
static final Font FONT = new Font("Courier", Font.PLAIN, 12);
static final String WINDOW_TITLE = "IRR";
static final String CLOSE_STRING = "Close";
static final String NEW_OBJECT_STRING = "Create New Object";
static final String STRING_rs = new String("Route Searches");
static final String STRING_ga = new String("Get aut-num object");
static final String STRING_gr = new String("Get Route with Origin");
static final String STRING_gm = new String("Get Maintainer");
static final String STRING_gc = new String("Get Routes with Community");
static final String STRING_cm = new String("Send Command");
static final String ISEP_CHAR = new String(": ");
Hashtable choices = new Hashtable();
Hashtable choicesReverse = new Hashtable();
Hashtable labelH = new Hashtable();
Choice specificC = new Choice();
Choice queryTypeChoice = new Choice();
Button submitButton;
// infoLabel changes when the user selects a new query
Label infoLabel = new Label();
// status provides the server status messages
Status status = new Status();
// Forward and back buttons
Button buttonB = new Button("B");
Button buttonF = new Button("F");
//
Display mainDisplay = new Display();
/** Setup: Initial setup of window, including choices,
* buttons etc.
*/
public void Setup(){
super.setTitle(WINDOW_TITLE);
// Set up choice for specifics
specificC.addItem("Less Specific");
specificC.addItem("Specific");
specificC.addItem("More Specific");
// Set up the hash for the labels
labelH.put(STRING_rs,"Specify a route number, such as 141.212.10.2/24");
labelH.put(STRING_ga,"Specify an AS number, such as 1234, or AS1234");
labelH.put(STRING_gr,"Specify an AS number, such as 1234, or AS1234");
labelH.put(STRING_gm,"Specify a maintainer such as AS1800");
labelH.put(STRING_gc,"Specify a community, such as COMM_NSFNET");
labelH.put(STRING_cm,"Send an arbitrary command, such as !gAS1234");
// Set up the hash for the choices
choices.put(STRING_cm," ");
choices.put(STRING_rs,"!r");
choices.put(STRING_ga,"!man,AS");
choices.put(STRING_gr,"!gAS");
choices.put(STRING_gm,"!mmt,MAINT-AS");
choices.put(STRING_gc,"!h");
Enumeration e = choices.keys();
String str = new String();
while(e.hasMoreElements()){
str = (String)e.nextElement();
choicesReverse.put(choices.get(str),str);
}
// Make the info label info come up red
infoLabel.setForeground(Color.red);
// Setup the layout
newLayout();
}
public void newLayout(){
Panel p;
setLayout(new BorderLayout());
// Setup canvas
p = new Panel();
p.setLayout(new BorderLayout());
mainDisplay.setSize(400,400);
p.add("Center",mainDisplay);
p.add("East",mainDisplay.scroll_up);
add("Center",p);
p = new Panel();
Enumeration e = choices.keys() ;
String s = (String)e.nextElement();
queryTypeChoice.addItem(s);
infoLabel.setText((String)labelH.get(s));
while(e.hasMoreElements())
queryTypeChoice.addItem((String)e.nextElement());
Panel p1 = new Panel();
p1.add(queryTypeChoice);
tf1 = new TextField(20);
p1.add(tf1);
submitButton = new Button("Submit");
p1.add(submitButton);
Panel p2 = new Panel();
p2.setLayout(new FlowLayout());
p2.add(buttonB);
p2.add(buttonF);
p2.add(specificC);
p.setLayout(new BorderLayout());
p.add("North",p1);
p.add("Center",p2);
infoLabel.setAlignment(Label.CENTER);
p.add("South",infoLabel);
add("North",p);
p = new Panel();
status.setSize(475,20);
p.add(status);
add("South",p);
queryTypeChoice.select(STRING_rs);
infoLabel.setText((String)labelH.get(STRING_rs));
specificC.setEnabled(true);
}
/** displayRequest : depending on what line we click at,
* display appropriate result.
* @param b String to switch on.
*/
public void displayRequest(String b,String prefix, int num){
String result = new String();
String str,type;
char c = b.charAt(0);
prefix = (String)choicesReverse.get(prefix);
/* apparently a Character and a char are not the same..cannot use isDigit()..grr! */
if ( c == '1' || c == '2' || c == '3' || c == '4' || c == '5' ||
c == '6' || c == '7' || c == '8' || c == '9' || c == ' '){
result = b.replace(' ','\n');
mainDisplay.displayRoutes(result,prefix, num);
return;
}
mainDisplay.display(b,prefix, num);
return;
}
} // End of Class Definition
class Status extends Canvas{
String string = "";
public void paint(Graphics g) {
update(g);
}
public void update(Graphics g) {
int w = getSize().width;
int h = getSize().height;
g.clearRect(0, 0, w, h);
g.drawString(string,0,15);
}
public void draw(String str){
this.string = str;
repaint();
}
}
// End of CIRRWindow declaration
syntax highlighted by Code2HTML, v. 0.9.1