cdev-1.7.2n
This commit is contained in:
592
extensions/cdevGenericServer/NameServer/java/rsvcDisplay.java
Normal file
592
extensions/cdevGenericServer/NameServer/java/rsvcDisplay.java
Normal file
@@ -0,0 +1,592 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 1994,1995 Southeastern Universities Research Association,
|
||||
// Continuous Electron Beam Accelerator Facility
|
||||
//
|
||||
// This software was developed under a United States Government license
|
||||
// described in the NOTICE file included as part of this distribution.
|
||||
//
|
||||
// Jefferson Lab HPC Group, 12000 Jefferson Ave., Newport News, VA 23606
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Description:
|
||||
// JAVA Applet for rsvc name server
|
||||
//
|
||||
// Author:
|
||||
// Jie Chen
|
||||
// Jefferson Lab HPC Group
|
||||
//
|
||||
// Revision History:
|
||||
// $Log: rsvcDisplay.java,v $
|
||||
// Revision 1.1.1.1 2000/05/23 15:12:50 pal
|
||||
// cdev_psi_1.7.2
|
||||
//
|
||||
// Revision 1.3 1999/12/14 15:38:16 chen
|
||||
// Add scrollbar to display
|
||||
//
|
||||
// Revision 1.2 1999/10/18 17:16:06 chen
|
||||
// minor changes
|
||||
//
|
||||
// Revision 1.1 1999/10/18 17:12:42 chen
|
||||
// *** empty log message ***
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
import java.io.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.applet.*;
|
||||
import java.net.*;
|
||||
import rsvcData;
|
||||
import rsvcDataEntry;
|
||||
import rsvcClient;
|
||||
import rsvcEventHandler;
|
||||
import rsvcConfig;
|
||||
|
||||
public class rsvcDisplay extends Applet implements Runnable, rsvcEventHandler
|
||||
{
|
||||
// display tag names
|
||||
private final String[] tags_ = {"name","domain","status","host", "port", "owner"};
|
||||
private final int numtags_ = 6;
|
||||
|
||||
// top level scroll pane
|
||||
private ScrollPane sclp_ = null;
|
||||
// top level panel
|
||||
private Panel dpanel_ = null;
|
||||
|
||||
// title field of display
|
||||
private Label title_ = null;
|
||||
// information field of display
|
||||
private Label info_ = null;
|
||||
|
||||
// maximum number of entries
|
||||
private final int size_ = 40;
|
||||
|
||||
// current number of entries
|
||||
private int num_ = 0;
|
||||
|
||||
// category filed labels
|
||||
private Label nameLabel_ = null;
|
||||
private Label domainLabel_ = null;
|
||||
private Label statusLabel_ = null;
|
||||
private Label hostLabel_ = null;
|
||||
private Label portLabel_ = null;
|
||||
private Label userLabel_ = null;
|
||||
|
||||
|
||||
// diffrent fields
|
||||
private TextField[] name_;
|
||||
private TextField[] domain_;
|
||||
private TextField[] status_;
|
||||
private TextField[] host_;
|
||||
private TextField[] port_;
|
||||
private TextField[] user_;
|
||||
|
||||
// layout
|
||||
private GridBagLayout layout_ = null;
|
||||
private GridBagConstraints c_ = null;
|
||||
|
||||
// network connection
|
||||
private rsvcClient client_ = null;
|
||||
private String serverHost_ = null;
|
||||
private int serverPort_ = 0;
|
||||
|
||||
// seperate thread to handle clean up information box
|
||||
private Thread timerThread_ = null;
|
||||
|
||||
public void setServerHost (String host)
|
||||
{
|
||||
serverHost_ = host;
|
||||
}
|
||||
|
||||
public void setServerPort (int p)
|
||||
{
|
||||
serverPort_ = p;
|
||||
}
|
||||
|
||||
private void startTimerThread ()
|
||||
{
|
||||
if (timerThread_ == null) {
|
||||
timerThread_ = new Thread (this);
|
||||
timerThread_.start();
|
||||
}
|
||||
else
|
||||
timerThread_.resume ();
|
||||
|
||||
}
|
||||
|
||||
private void createLabel (String label)
|
||||
{
|
||||
Font lfont = new Font ("times", Font.BOLD, 14);
|
||||
Color lc = Color.blue;
|
||||
|
||||
c_.weightx = 0;
|
||||
c_.gridwidth = GridBagConstraints.REMAINDER;
|
||||
title_ = new Label (label, Label.CENTER);
|
||||
title_.setFont (lfont);
|
||||
title_.setForeground (lc);
|
||||
layout_.setConstraints(title_, c_);
|
||||
dpanel_.add(title_);
|
||||
}
|
||||
|
||||
private void createInfoLabel ()
|
||||
{
|
||||
Font lfont = new Font ("times", Font.BOLD, 12);
|
||||
|
||||
c_.weightx = 0;
|
||||
c_.gridwidth = GridBagConstraints.REMAINDER;
|
||||
info_ = new Label ();
|
||||
info_.setFont (lfont);
|
||||
layout_.setConstraints(info_, c_);
|
||||
dpanel_.add (info_);
|
||||
}
|
||||
|
||||
private void setInformation (String info)
|
||||
{
|
||||
info_.setText (info);
|
||||
}
|
||||
|
||||
private void clearInformation ()
|
||||
{
|
||||
info_.setText (null);
|
||||
}
|
||||
|
||||
private void createFieldLabels ()
|
||||
{
|
||||
Font lfont = new Font ("helvetica", Font.ITALIC, 12);
|
||||
c_.weightx = 1;
|
||||
c_.gridwidth = 1;
|
||||
nameLabel_ = new Label ("Name", Label.CENTER);
|
||||
nameLabel_.setFont (lfont);
|
||||
layout_.setConstraints(nameLabel_, c_);
|
||||
dpanel_.add(nameLabel_);
|
||||
|
||||
domainLabel_ = new Label ("Domain", Label.CENTER);
|
||||
domainLabel_.setFont (lfont);
|
||||
layout_.setConstraints(domainLabel_, c_);
|
||||
dpanel_.add(domainLabel_);
|
||||
|
||||
statusLabel_ = new Label ("Status", Label.CENTER);
|
||||
statusLabel_.setFont (lfont);
|
||||
layout_.setConstraints(statusLabel_, c_);
|
||||
dpanel_.add(statusLabel_);
|
||||
|
||||
c_.gridwidth = 2;
|
||||
hostLabel_ = new Label ("Host", Label.CENTER);
|
||||
hostLabel_.setFont (lfont);
|
||||
layout_.setConstraints(hostLabel_, c_);
|
||||
dpanel_.add(hostLabel_);
|
||||
|
||||
c_.gridwidth = 1;
|
||||
portLabel_ = new Label ("Port", Label.CENTER);
|
||||
portLabel_.setFont (lfont);
|
||||
layout_.setConstraints(portLabel_, c_);
|
||||
dpanel_.add(portLabel_);
|
||||
|
||||
c_.gridwidth = GridBagConstraints.REMAINDER;
|
||||
userLabel_ = new Label ("User Name", Label.CENTER);
|
||||
userLabel_.setFont (lfont);
|
||||
layout_.setConstraints(userLabel_, c_);
|
||||
dpanel_.add(userLabel_);
|
||||
}
|
||||
|
||||
private void createEmptyFields (int index)
|
||||
{
|
||||
c_.gridwidth = 1;
|
||||
|
||||
name_[index] = new TextField (10);
|
||||
name_[index].setEditable (false);
|
||||
layout_.setConstraints(name_[index], c_);
|
||||
dpanel_.add(name_[index]);
|
||||
|
||||
domain_[index] = new TextField (10);
|
||||
domain_[index].setEditable (false);
|
||||
layout_.setConstraints(domain_[index], c_);
|
||||
dpanel_.add(domain_[index]);
|
||||
|
||||
status_[index] = new TextField (10);
|
||||
status_[index].setEditable (false);
|
||||
layout_.setConstraints(status_[index], c_);
|
||||
dpanel_.add(status_[index]);
|
||||
|
||||
c_.gridwidth = 2;
|
||||
host_[index] = new TextField (20);
|
||||
host_[index].setEditable (false);
|
||||
layout_.setConstraints(host_[index], c_);
|
||||
dpanel_.add(host_[index]);
|
||||
|
||||
port_[index] = new TextField (10);
|
||||
port_[index].setEditable (false);
|
||||
layout_.setConstraints(port_[index], c_);
|
||||
dpanel_.add(port_[index]);
|
||||
|
||||
|
||||
c_.gridwidth = GridBagConstraints.REMAINDER;
|
||||
user_[index] = new TextField (10);
|
||||
user_[index].setEditable (false);
|
||||
layout_.setConstraints(user_[index], c_);
|
||||
dpanel_.add(user_[index]);
|
||||
|
||||
// force to display
|
||||
validate ();
|
||||
}
|
||||
|
||||
private void updateEntryAt (rsvcData data, int index)
|
||||
{
|
||||
String dispval = null;
|
||||
int i = 0;
|
||||
|
||||
rsvcDataEntry dentry = data.get (tags_[i++]);
|
||||
dentry = data.get (tags_[i++]);
|
||||
|
||||
dentry = data.get (tags_[i++]);
|
||||
int statusval;
|
||||
if (dentry != null) {
|
||||
statusval = dentry.intValue ();
|
||||
if (statusval == 0) {
|
||||
status_[index].setBackground (Color.green);
|
||||
status_[index].setText ("Alive");
|
||||
}
|
||||
else if (statusval == 2) {
|
||||
status_[index].setBackground (Color.red);
|
||||
status_[index].setText ("Dead");
|
||||
}
|
||||
else if (statusval == 1) {
|
||||
status_[index].setBackground (Color.yellow);
|
||||
status_[index].setText ("Dormant");
|
||||
}
|
||||
else {
|
||||
status_[index].setBackground (Color.white);
|
||||
status_[index].setText ("Unknown");
|
||||
}
|
||||
}
|
||||
|
||||
dentry = data.get (tags_[i++]);
|
||||
if (dentry != null) {
|
||||
dispval = dentry.stringValue ();
|
||||
host_[index].setText (dispval);
|
||||
}
|
||||
|
||||
dentry = data.get (tags_[i++]);
|
||||
if (dentry != null) {
|
||||
dispval = dentry.stringValue ();
|
||||
port_[index].setText (dispval);
|
||||
}
|
||||
|
||||
|
||||
dentry = data.get (tags_[i++]);
|
||||
if (dentry != null) {
|
||||
dispval = dentry.stringValue ();
|
||||
user_[index].setText (dispval);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void updateEntry (rsvcData data, boolean create)
|
||||
{
|
||||
int i = 0;
|
||||
String dispval = null;
|
||||
String name = null;
|
||||
String domain = null;
|
||||
|
||||
rsvcDataEntry dentry = data.get (tags_[i++]);
|
||||
if (dentry != null) {
|
||||
dispval = dentry.stringValue ();
|
||||
name = dispval;
|
||||
}
|
||||
|
||||
dentry = data.get (tags_[i++]);
|
||||
if (dentry != null) {
|
||||
dispval = dentry.stringValue ();
|
||||
domain = dispval;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
String tname = null;
|
||||
String tdomain = null;
|
||||
int found = 0;
|
||||
|
||||
if (name != null && domain != null) {
|
||||
for (i = 0; i < num_; i++) {
|
||||
tname = name_[i].getText ();
|
||||
tdomain = domain_[i].getText ();
|
||||
if (name.compareTo (tname) == 0 &&
|
||||
domain.compareTo (tdomain) == 0) {
|
||||
updateEntryAt (data, i);
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (found == 0 && create == true)
|
||||
addEntry (data);
|
||||
}
|
||||
|
||||
|
||||
public void addEntry (rsvcData data)
|
||||
{
|
||||
String dispval = null;
|
||||
int i = 0;
|
||||
String name = null;
|
||||
String domain = null;
|
||||
|
||||
|
||||
createEmptyFields (num_);
|
||||
|
||||
rsvcDataEntry dentry = data.get (tags_[i++]);
|
||||
if (dentry != null) {
|
||||
dispval = dentry.stringValue ();
|
||||
name_[num_].setText (dispval);
|
||||
name = dispval;
|
||||
}
|
||||
|
||||
dentry = data.get (tags_[i++]);
|
||||
if (dentry != null) {
|
||||
dispval = dentry.stringValue ();
|
||||
domain_[num_].setText (dispval);
|
||||
domain = dispval;
|
||||
}
|
||||
|
||||
dentry = data.get (tags_[i++]);
|
||||
int statusval;
|
||||
if (dentry != null) {
|
||||
statusval = dentry.intValue ();
|
||||
if (statusval == 0) {
|
||||
status_[num_].setBackground (Color.green);
|
||||
status_[num_].setText ("Alive");
|
||||
}
|
||||
else if (statusval == 2) {
|
||||
status_[num_].setBackground (Color.red);
|
||||
status_[num_].setText ("Dead");
|
||||
}
|
||||
else if (statusval == 1) {
|
||||
status_[num_].setBackground (Color.yellow);
|
||||
status_[num_].setText ("Dormant");
|
||||
}
|
||||
else {
|
||||
status_[num_].setBackground (Color.white);
|
||||
status_[num_].setText ("Unknown");
|
||||
}
|
||||
}
|
||||
|
||||
dentry = data.get (tags_[i++]);
|
||||
if (dentry != null) {
|
||||
dispval = dentry.stringValue ();
|
||||
host_[num_].setText (dispval);
|
||||
}
|
||||
|
||||
dentry = data.get (tags_[i++]);
|
||||
if (dentry != null) {
|
||||
dispval = dentry.stringValue ();
|
||||
port_[num_].setText (dispval);
|
||||
}
|
||||
|
||||
|
||||
dentry = data.get (tags_[i++]);
|
||||
if (dentry != null) {
|
||||
dispval = dentry.stringValue ();
|
||||
user_[num_].setText (dispval);
|
||||
}
|
||||
num_ ++;
|
||||
|
||||
if (name != null && domain != null) {
|
||||
rsvcData serverinfo = new rsvcData ();
|
||||
rsvcEvent oevent = null;
|
||||
|
||||
serverinfo.insert ("name", name);
|
||||
serverinfo.insert ("domain", domain);
|
||||
|
||||
try {
|
||||
oevent = client_.monitorValue ("cdevServers", serverinfo,
|
||||
this);
|
||||
}catch (IOException e) {
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void cleanupEntries ()
|
||||
{
|
||||
for (int i = 0; i < num_; i++) {
|
||||
remove (name_[i]);
|
||||
remove (domain_[i]);
|
||||
remove (status_[i]);
|
||||
remove (host_[i]);
|
||||
remove (port_[i]);
|
||||
remove (user_[i]);
|
||||
}
|
||||
num_ = 0;
|
||||
|
||||
validate ();
|
||||
}
|
||||
|
||||
public void init ()
|
||||
{
|
||||
// create a border layout for applet
|
||||
setLayout(new BorderLayout ());
|
||||
|
||||
// create top level scroll pane
|
||||
sclp_ = new ScrollPane (ScrollPane.SCROLLBARS_ALWAYS);
|
||||
add (sclp_);
|
||||
sclp_.setSize (400, 100);
|
||||
|
||||
// create layout manager
|
||||
layout_ = new GridBagLayout();
|
||||
c_ = new GridBagConstraints();
|
||||
c_.fill = GridBagConstraints.BOTH;
|
||||
|
||||
// create top level panel
|
||||
dpanel_ = new Panel (layout_);
|
||||
dpanel_.setSize (700, 100);
|
||||
|
||||
// add this panel to scroll pane
|
||||
sclp_.add (dpanel_);
|
||||
|
||||
// create array of text fields
|
||||
name_ = new TextField[size_];
|
||||
domain_ = new TextField[size_];
|
||||
status_ = new TextField[size_];
|
||||
host_ = new TextField[size_];
|
||||
port_ = new TextField[size_];
|
||||
user_ = new TextField[size_];
|
||||
|
||||
num_ = 0;
|
||||
|
||||
// create top label
|
||||
createLabel ("CDEV Name Server Information");
|
||||
|
||||
// create information label
|
||||
createInfoLabel ();
|
||||
|
||||
// create category labels
|
||||
createFieldLabels ();
|
||||
|
||||
// create network handler to rsvcServer
|
||||
client_ = new rsvcClient();
|
||||
|
||||
if (serverHost_ == null) {
|
||||
// get parameters for server host and server port
|
||||
serverHost_ = getParameter ("host");
|
||||
serverPort_ = Integer.valueOf (getParameter ("port")).intValue();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void start ()
|
||||
{
|
||||
// start timer thread
|
||||
startTimerThread ();
|
||||
|
||||
setInformation ("Connecting to server on " + serverHost_ + " at port " + String.valueOf (serverPort_));
|
||||
try {
|
||||
client_.connect (serverHost_, serverPort_);
|
||||
}catch (UnknownHostException ue) {
|
||||
setInformation ("Unknown Host " + serverHost_);
|
||||
}catch (IOException e) {
|
||||
setInformation ("Cannot connect to the server");
|
||||
}
|
||||
|
||||
// if connected
|
||||
if (client_.connected() == true) {
|
||||
setInformation ("Connection to the server is established");
|
||||
|
||||
// get all
|
||||
rsvcEvent oevent = null;
|
||||
try {
|
||||
oevent = client_.query ("cdevServers", "all", this);
|
||||
}catch (IOException e) {
|
||||
setInformation ("Cannot send out query information to the server");
|
||||
}
|
||||
|
||||
// monitor on new entries
|
||||
rsvcData noused = new rsvcData();
|
||||
try {
|
||||
oevent = client_. monitorIncomingEntries ("cdevServers",
|
||||
noused, this);
|
||||
} catch (IOException e) {
|
||||
setInformation ("Cannot send out monitor request to the server");
|
||||
}
|
||||
|
||||
// add disconnection handler
|
||||
client_.addDisconnectHandler (this);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void stop ()
|
||||
{
|
||||
if (client_.connected () == true) {
|
||||
try {
|
||||
client_.disconnect ();
|
||||
}catch (IOException e) {
|
||||
;
|
||||
}
|
||||
}
|
||||
timerThread_.suspend ();
|
||||
}
|
||||
|
||||
|
||||
public void handleEvent (rsvcEvent event)
|
||||
{
|
||||
int status = event.getStatus ();
|
||||
int opcode = event.getOpcode ();
|
||||
rsvcData data = event.getData ();
|
||||
|
||||
if (status == rsvcConfig.RSVC_DISCONNECTED) {
|
||||
setInformation ("Server is Gone");
|
||||
cleanupEntries ();
|
||||
}
|
||||
else {
|
||||
if (opcode == rsvcConfig.RSVC_QUERY) {
|
||||
if (status == rsvcConfig.RSVC_INCOMPLETE ||
|
||||
status == rsvcConfig.RSVC_SUCCESS)
|
||||
addEntry (data);
|
||||
}
|
||||
else if (opcode == rsvcConfig.RSVC_MONITOR_ON) {
|
||||
if (status == rsvcConfig.RSVC_SUCCESS)
|
||||
updateEntry (data, false);
|
||||
}
|
||||
else if (opcode == rsvcConfig.RSVC_MONITOR_ENTRIES) {
|
||||
if (status == rsvcConfig.RSVC_SUCCESS && data.isEmpty() != true)
|
||||
updateEntry (data, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void run ()
|
||||
{
|
||||
while (true) {
|
||||
// check to see whether there is something in the
|
||||
// information display area. If there is, clean out
|
||||
String infotext = info_.getText ();
|
||||
if (infotext != null)
|
||||
info_.setText (null);
|
||||
// sleep 3 seconds
|
||||
try {
|
||||
Thread.sleep (3000);
|
||||
} catch (InterruptedException e) {
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String args[]) {
|
||||
if (args.length < 2) {
|
||||
System.err.println ("Usage: rsvcDisplay host port");
|
||||
System.exit (-1);
|
||||
}
|
||||
Frame f = new Frame("CDEV Name Server Information");
|
||||
rsvcDisplay display = new rsvcDisplay();
|
||||
display.setServerHost (args[0]);
|
||||
display.setServerPort (Integer.valueOf (args[1]).intValue());
|
||||
display.init();
|
||||
display.start ();
|
||||
|
||||
f.add("Center", display);
|
||||
f.pack();
|
||||
f.setSize(f.getPreferredSize());
|
||||
f.show();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user