blob: d9d2b07030097ec97561520f7266eb461e550eec [file] [log] [blame]
/*
* Copyright 2004,2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package sample.mtom.filetransfer.client;
import org.apache.axiom.om.OMElement;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.util.ArrayList;
public class UserInterface extends JPanel implements ActionListener {
public static final int WIDTH = 480;
public static final int HEIGHT = 560;
JButton brwsBut1;
JButton brwsBut2;
JButton addFileButton;
JButton removeButton;
JButton executeButton;
JRadioButton sendRadio;
JRadioButton sendRecRadio;
JRadioButton MTOMRadio;
JRadioButton SOAPRadio;
JCheckBox cacheBox;
DefaultListModel model;
JList fileList;
JScrollPane fileListScroller;
JFileChooser fileChooser;
File file = null;
JTextField cacheThresholdText;
JTextField cacheFolderText;
JTextField EPRText;
JTextField destFolderText;
JTextField fileField;
JLabel fileListLabel;
JLabel EPRLabel;
JLabel destDir;
JLabel opLabel;
JLabel MTOMSOAPLabel;
JLabel thresholdLabel;
JLabel cacheFolderLabel;
JLabel bytesLabel;
private boolean cacheEnable = false;
private String destFolder = null;
private String EPR = null;
private ArrayList files;
private MTOMClient parent;
private MTOMClientModel mtomTest;
public UserInterface(MTOMClient parent) {
this.parent = parent;
initComponents();
brwsBut1.addActionListener(this);
brwsBut2.addActionListener(this);
addFileButton.addActionListener(this);
removeButton.addActionListener(this);
fileField.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
addFileButton.setEnabled(true);
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
if (fileField.getText().length() == 0) {
addFileButton.setEnabled(false);
}
}
});
MTOMRadio.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
switchRadios(MTOMRadio, SOAPRadio);
}
});
SOAPRadio.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
switchRadios(SOAPRadio, MTOMRadio);
}
});
sendRadio.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
switchRadios(sendRadio, sendRecRadio);
cacheBox.setEnabled(false);
cacheBox.setSelected(false);
enableCaching();
}
});
sendRecRadio.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
switchRadios(sendRecRadio, sendRadio);
cacheBox.setEnabled(true);
enableCaching();
}
});
cacheBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
enableCaching();
}
});
executeButton.addActionListener(this);
Container pane = parent.getContentPane();
this.setLayout(null);
pane.add(fileField);
pane.add(brwsBut1);
pane.add(addFileButton);
pane.add(removeButton);
pane.add(fileListLabel);
pane.add(fileListScroller);
pane.add(destDir);
pane.add(destFolderText);
pane.add(EPRLabel);
pane.add(EPRText);
pane.add(opLabel);
pane.add(MTOMRadio);
pane.add(SOAPRadio);
pane.add(MTOMSOAPLabel);
pane.add(sendRadio);
pane.add(sendRecRadio);
pane.add(cacheBox);
pane.add(thresholdLabel);
pane.add(cacheThresholdText);
pane.add(bytesLabel);
pane.add(cacheFolderLabel);
pane.add(cacheFolderText);
pane.add(brwsBut2);
pane.add(executeButton);
}
public void initComponents() {
files = new ArrayList(0);
fileField = new JTextField();
fileField.setBounds(20, 20, 320, 20);
this.brwsBut1 = new JButton("Browse");
brwsBut1.setBounds(350, 20, 100, 20);
brwsBut1.setToolTipText("Browse a file");
addFileButton = new JButton("Add");
addFileButton.setBounds(20, 50, 100, 20);
addFileButton.setToolTipText("Add file to the file list");
addFileButton.setEnabled(false);
removeButton = new JButton("Remove Selection");
removeButton.setBounds(140, 50, 150, 20);
removeButton.setToolTipText("Remove selected file from the file list");
removeButton.setEnabled(false);
fileListLabel = new JLabel("File List");
fileListLabel.setBounds(20, 80, 50, 20);
model = new DefaultListModel();
fileList = new JList(model);
fileListScroller = new JScrollPane(fileList);
fileListScroller.setBounds(20, 100, 430, 80);
destDir = new JLabel("Dest. Folder: ", JLabel.RIGHT);
destDir.setBounds(20, 200, 100, 20);
destFolderText = new JTextField();
destFolderText.setBounds(120, 200, 330, 20);
EPRLabel = new JLabel("End Point: ", JLabel.RIGHT);
EPRLabel.setBounds(20, 230, 100, 20);
EPRText = new JTextField();
EPRText.setText("http://127.0.0.1:8080/axis2/services/mtomSample");
EPRText.setBounds(120, 230, 330, 20);
MTOMSOAPLabel = new JLabel("Send Using");
MTOMSOAPLabel.setBounds(20, 270, 150, 20);
MTOMRadio = new JRadioButton("MTOM");
MTOMRadio.setBounds(20, 295, 100, 20);
MTOMRadio.setSelected(true);
SOAPRadio = new JRadioButton("SOAP with Attachments");
SOAPRadio.setBounds(140, 295, 200, 20);
opLabel = new JLabel("Select Operation");
opLabel.setBounds(20, 320, 150, 20);
sendRadio = new JRadioButton("Send");
sendRadio.setBounds(20, 345, 100, 20);
sendRadio.setSelected(true);
sendRecRadio = new JRadioButton("Send & Receive");
sendRecRadio.setBounds(140, 345, 150, 20);
cacheBox = new JCheckBox("Enable Client Side File Caching");
cacheBox.setSelected(false);
cacheBox.setEnabled(false);
cacheBox.setBounds(20, 380, 250, 20);
thresholdLabel = new JLabel("File Cache Threshold: ");
thresholdLabel.setBounds(50, 410, 150, 20);
thresholdLabel.setEnabled(false);
cacheThresholdText = new JTextField();
cacheThresholdText.setBounds(200, 410, 40, 20);
cacheThresholdText.setEnabled(false);
bytesLabel = new JLabel("(in bytes)");
bytesLabel.setBounds(250, 410, 100, 20);
bytesLabel.setEnabled(false);
cacheFolderLabel = new JLabel("Cache Folder: ");
cacheFolderLabel.setBounds(50, 440, 150, 20);
cacheFolderLabel.setEnabled(false);
cacheFolderText = new JTextField();
cacheFolderText.setBounds(200, 440, 210, 20);
cacheFolderText.setEnabled(false);
brwsBut2 = new JButton("...");
brwsBut2.setBounds(420, 440, 30, 20);
brwsBut2.setToolTipText("Browse for a cache folder");
brwsBut2.setEnabled(false);
this.executeButton = new JButton("Execute");
executeButton.setBounds(((WIDTH - 200) / 2), 490, 200, 20);
fileChooser = new JFileChooser();
fileChooser.setName("File Chooser");
}
public void handleSelection() {
if (!files.isEmpty()) {
removeButton.setEnabled(false);
}
}
public void enableCaching() {
cacheEnable = cacheBox.isSelected();
thresholdLabel.setEnabled(cacheEnable);
cacheThresholdText.setEnabled(cacheEnable);
cacheFolderLabel.setEnabled(cacheEnable);
cacheFolderText.setEnabled(cacheEnable);
brwsBut2.setEnabled(cacheEnable);
bytesLabel.setEnabled(cacheEnable);
}
public void switchRadios(JRadioButton me, JRadioButton partner) {
me.setSelected(true);
partner.setSelected(false);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == brwsBut1) {
String str = browse(JFileChooser.FILES_ONLY);
if(str != null){
fileField.setText(str);
addFileButton.setEnabled(true);
}
} else if (e.getSource() == brwsBut2) {
String str = browse(JFileChooser.FILES_AND_DIRECTORIES);
if(str != null){
cacheFolderText.setText(str);
}
} else if (e.getSource() == executeButton) {
execute();
} else if (e.getSource() == addFileButton) {
addFile();
} else if (e.getSource() == removeButton) {
removeFromList();
}
}
public String browse(int selectionMode) {
fileChooser.setFileSelectionMode(selectionMode);
int returnVal = fileChooser.showDialog(this, "Select");
if (returnVal == JFileChooser.APPROVE_OPTION) {
file = fileChooser.getSelectedFile();
if (file.getAbsolutePath() != null) {
return file.getAbsolutePath();
}
}
fileChooser.setSelectedFile(null);
return null;
}
public void addFile() {
file = new File(fileField.getText());
if (file.exists() && file.isFile()) {
files.add(file);
model.addElement(file.getAbsolutePath());
fileList.setSelectedIndex(files.size() - 1);
removeButton.setEnabled(true);
} else {
JOptionPane.showMessageDialog(parent,
"File does not exist", "File Error",
JOptionPane.ERROR_MESSAGE);
}
}
public void removeFromList() {
String selection = (String) fileList.getSelectedValue();
if (selection != null) {
file = new File(selection);
files.remove(file);
model.remove(fileList.getSelectedIndex());
fileList.setSelectedIndex(files.size() - 1);
if (files.isEmpty()) {
removeButton.setEnabled(false);
}
}
}
public void execute() {
EPR = EPRText.getText();
String operation;
String sendMethod;
String cacheFolder = null;
int cacheThreshold = 0;
File cache;
destFolder = destFolderText.getText();
if (!model.isEmpty()) {
if (destFolder.length() != 0 && EPR.length() != 0) {
sendMethod = (MTOMRadio.isSelected() ? "MTOM" : "SOAP");
operation = (sendRadio.isSelected() ? "send" : "sendreceive");
if (cacheEnable) {
try {
String temp = cacheThresholdText.getText();
if (temp.length() != 0) {
cacheThreshold = Integer.parseInt(temp);
} else {
throw new NumberFormatException();
}
cache = new File(cacheFolderText.getText());
if (!cache.exists()) {
cache.mkdirs();
}
cacheFolder = cache.getAbsolutePath();
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(parent, "Please enter an integer value",
"Cache Threshold Error", JOptionPane.ERROR_MESSAGE);
return;
}
}
mtomTest = new MTOMClientModel();
mtomTest.setFileList(files);
mtomTest.setTargetEPR(EPR);
if (operation.equals("send")) {
send(sendMethod);
} else {
sendAndReceive(sendMethod, cacheThreshold, cacheFolder);
}
} else {
JOptionPane.showMessageDialog(parent, "Destination Folder or End Point cannot be null",
"Data Error", JOptionPane.ERROR_MESSAGE);
}
} else {
JOptionPane.showMessageDialog(parent, "Add at least one file",
"File List Empty", JOptionPane.ERROR_MESSAGE);
}
}
public void sendAndReceive(String sendMethod, int cacheThreshold, String cacheFolder) {
OMElement result;
try {
mtomTest.setCacheFolder(cacheFolder);
mtomTest.setCacheThreshold(cacheThreshold);
String temp = (cacheEnable) ? "Enabled" : "Disabled";
if (sendMethod.equals("MTOM")) {
result = mtomTest.sendReceiveUsingMTOM(destFolder, cacheEnable);
temp = "File Caching " + temp + "\n\n" + result.getText();
JOptionPane.showMessageDialog(parent, temp,
"Result of Send & Receive using MTOM", JOptionPane.PLAIN_MESSAGE);
} else {
result = mtomTest.sendReceiveUsingSwA(destFolder, cacheEnable);
temp = "File Caching " + temp + "\n\n" + result.getText();
JOptionPane.showMessageDialog(parent, temp,
"Result of Send & Receive using SwA", JOptionPane.PLAIN_MESSAGE);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void send(String sendMethod) {
OMElement result;
try {
if (sendMethod.equals("MTOM")) {
result = mtomTest.sendFilesUsingMTOM(destFolder);
JOptionPane.showMessageDialog(parent, result.getText(),
"Result of Send using MTOM", JOptionPane.PLAIN_MESSAGE);
} else {
result = mtomTest.sendFilesUsingSwA(destFolder);
JOptionPane.showMessageDialog(parent, result.getText(),
"Result of Send using SOAP with Attachments", JOptionPane.PLAIN_MESSAGE);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}