📄 soapmonitorapplet.java
字号:
}
/**
* Start talking to the server
*/
public void start() {
String codehost = getCodeBase().getHost();
if (socket == null) {
try {
// Open the socket to the server
socket = new Socket(codehost, port);
// Create output stream
out = new ObjectOutputStream(socket.getOutputStream());
out.flush();
// Create input stream and start background
// thread to read data from the server
in = new ObjectInputStream(socket.getInputStream());
new Thread(this).start();
} catch (Exception e) {
// Exceptions here are unexpected, but we can't
// really do anything (so just write it to stdout
// in case someone cares and then ignore it)
System.out.println("Exception! "+e.toString());
e.printStackTrace();
setErrorStatus(STATUS_NOCONNECT);
socket = null;
}
} else {
// Already started
}
if (socket != null) {
// Make sure the right buttons are enabled
start_button.setEnabled(false);
stop_button.setEnabled(true);
setStatus(STATUS_ACTIVE);
}
}
/**
* Stop talking to the server
*/
public void stop() {
if (socket != null) {
// Close all the streams and socket
if (out != null) {
try {
out.close();
} catch (IOException ioe) {
}
out = null;
}
if (in != null) {
try {
in.close();
} catch (IOException ioe) {
}
in = null;
}
if (socket != null) {
try {
socket.close();
} catch (IOException ioe) {
}
socket = null;
}
} else {
// Already stopped
}
// Make sure the right buttons are enabled
start_button.setEnabled(true);
stop_button.setEnabled(false);
setStatus(STATUS_STOPPED);
}
/**
* Background thread used to receive data from
* the server.
*/
public void run() {
Long id;
Integer message_type;
String target;
String soap;
SOAPMonitorData data;
int selected;
int row;
boolean update_needed;
while (socket != null) {
try {
// Get the data from the server
message_type = (Integer) in.readObject();
// Process the data depending on its type
switch (message_type.intValue()) {
case SOAPMonitorConstants.SOAP_MONITOR_REQUEST:
// Get the id, target and soap info
id = (Long) in.readObject();
target = (String) in.readObject();
soap = (String) in.readObject();
// Add new request data to the table
data = new SOAPMonitorData(id,target,soap);
model.addData(data);
// If "most recent" selected then update
// the details area if needed
selected = table.getSelectedRow();
if ((selected == 0) && model.filterMatch(data)) {
valueChanged(null);
}
break;
case SOAPMonitorConstants.SOAP_MONITOR_RESPONSE:
// Get the id and soap info
id = (Long) in.readObject();
soap = (String) in.readObject();
data = model.findData(id);
if (data != null) {
update_needed = false;
// Get the selected row
selected = table.getSelectedRow();
// If "most recent", then always
// update details area
if (selected == 0) {
update_needed = true;
}
// If the data being updated is
// selected then update details
row = model.findRow(data);
if ((row != -1) && (row == selected)) {
update_needed = true;
}
// Set the response and update table
data.setSOAPResponse(soap);
model.updateData(data);
// Refresh details area (if needed)
if (update_needed) {
valueChanged(null);
}
}
break;
}
} catch (Exception e) {
// Exceptions are expected here when the
// server communication has been terminated.
if (stop_button.isEnabled()) {
stop();
setErrorStatus(STATUS_CLOSED);
}
}
}
}
/**
* Listener to handle table selection changes
*/
public void valueChanged(ListSelectionEvent e) {
int row = table.getSelectedRow();
// Check if they selected a specific row
if (row > 0) {
remove_button.setEnabled(true);
} else {
remove_button.setEnabled(false);
}
// Check for "most recent" selection
if (row == 0) {
row = model.getRowCount() - 1;
if (row == 0) {
row = -1;
}
}
if (row == -1) {
// Clear the details panel
details_time_value.setText("");
details_target_value.setText("");
details_status_value.setText("");
request_text.setText("");
response_text.setText("");
} else {
// Show the details for the row
SOAPMonitorData soap = model.getData(row);
details_time_value.setText(soap.getTime());
details_target_value.setText(soap.getTargetService());
details_status_value.setText(soap.getStatus());
if (soap.getSOAPRequest() == null) {
request_text.setText("");
} else {
request_text.setText(soap.getSOAPRequest());
request_text.setCaretPosition(0);
}
if (soap.getSOAPResponse() == null) {
response_text.setText("");
} else {
response_text.setText(soap.getSOAPResponse());
response_text.setCaretPosition(0);
}
}
}
/**
* Listener to handle button actions
*/
public void actionPerformed(ActionEvent e) {
// Check if the user pressed the remove button
if (e.getSource() == remove_button) {
int row = table.getSelectedRow();
model.removeRow(row);
table.clearSelection();
table.repaint();
valueChanged(null);
}
// Check if the user pressed the remove all button
if (e.getSource() == remove_all_button) {
model.clearAll();
table.setRowSelectionInterval(0,0);
table.repaint();
valueChanged(null);
}
// Check if the user pressed the filter button
if (e.getSource() == filter_button) {
filter.showDialog();
if (filter.okPressed()) {
// Update the display with new filter
model.setFilter(filter);
table.repaint();
}
}
// Check if the user pressed the start button
if (e.getSource() == start_button) {
start();
}
// Check if the user pressed the stop button
if (e.getSource() == stop_button) {
stop();
}
// Check if the user wants to switch layout
if (e.getSource() == layout_button) {
details_panel.remove(details_soap);
details_soap.removeAll();
if (details_soap.getOrientation() == JSplitPane.HORIZONTAL_SPLIT) {
details_soap = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
} else {
details_soap = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
}
details_soap.setTopComponent(request_panel);
details_soap.setRightComponent(response_panel);
details_soap.setResizeWeight(.5);
details_panel.add(details_soap, BorderLayout.CENTER);
details_panel.validate();
details_panel.repaint();
}
// Check if the user is changing the reflow option
if (e.getSource() == reflow_xml) {
request_text.setReflowXML(reflow_xml.isSelected());
response_text.setReflowXML(reflow_xml.isSelected());
}
}
}
/**
* This class represend the data for a SOAP request/response pair
*/
class SOAPMonitorData {
/**
* Private data
*/
private Long id;
private String time;
private String target;
private String soap_request;
private String soap_response;
/**
* Constructor
*/
public SOAPMonitorData(Long id, String target, String soap_request) {
this.id = id;
// A null id is used to signal that the "most recent" entry
// is being created.
if (id == null) {
this.time = "Most Recent";
this.target = "---";
this.soap_request = null;
this.soap_response = null;
} else {
this.time = DateFormat.getTimeInstance().format(new Date());
this.target = target;
this.soap_request = soap_request;
this.soap_response = null;
}
}
/**
* Get the id for the SOAP message
*/
public Long getId() {
return id;
}
/**
* Get the time the SOAP request was received by the applet
*/
public String getTime() {
return time;
}
/**
* Get the SOAP request target service name
*/
public String getTargetService() {
return target;
}
/**
* Get the status of the request
*/
public String getStatus() {
String status = "---";
if (id != null) {
status = "Complete";
if (soap_response == null) {
status = "Active";
}
}
return status;
}
/**
* Get the request SOAP contents
*/
public String getSOAPRequest() {
return soap_request;
}
/**
* Set the resposne SOAP contents
*/
public void setSOAPResponse(String response) {
soap_response = response;
}
/**
* Get the response SOAP contents
*/
public String getSOAPResponse() {
return soap_response;
}
}
/**
* This table model is used to manage the table displayed
* at the top of the page to show all the SOAP messages
* we have received and to control which message details are
* to be displayed on the bottom of the page.
*/
class SOAPMonitorTableModel extends AbstractTableModel {
/**
* Column titles
*/
private final String[] column_names = { "Time",
"Target Service",
"Status" };
/**
* Private data
*/
private Vector data;
private Vector filter_include;
private Vector filter_exclude;
private boolean filter_active;
private boolean filter_complete;
private Vector filter_data;
/**
* Constructor
*/
public SOAPMonitorTableModel() {
data = new Vector();
// Add "most recent" entry to top of table
SOAPMonitorData soap = new SOAPMonitorData(null,null,null);
data.addElement(soap);
filter_include = null;
filter_exclude = null;
filter_active = false;
filter_complete = false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -