package org.wiztools.restclient.ui;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.swing.*;
import org.wiztools.commons.StringUtil;
import org.wiztools.restclient.Base64Exception;
import org.wiztools.restclient.ServiceLocator;
import org.wiztools.restclient.util.Util;
/**
*
* @author Subhash
*/
class PasswordGenDialog extends EscapableDialog {
private static final String helpText;
static{
String tmp = null;
InputStream is = RESTMain.class.getClassLoader().getResourceAsStream("org/wiztools/restclient/PasswordHelp.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
try{
StringBuilder sb = new StringBuilder();
String line = null;
while((line = br.readLine())!=null){
sb.append(line);
}
tmp = sb.toString();
}
catch(IOException ex){
tmp = "Help loading failed.";
}
finally{
if(br != null){
try{
br.close();
}
catch(IOException ex){
// Do nothing!
}
}
}
helpText = tmp;
}
private JRadioButton jrb_encode = new JRadioButton("Encode");
private JRadioButton jrb_decode = new JRadioButton("Decode");
private JTextField jtf_in = new JTextField(25);
private JTextField jtf_out = new JTextField(25);
private final PasswordGenDialog me;
public PasswordGenDialog(){
super(ServiceLocator.getInstance(RESTUserInterface.class).getFrame(), true);
me = this;
this.setTitle("Password Encoder/Decoder");
init();
}
private void init(){
ButtonGroup bg = new ButtonGroup();
jrb_encode.setMnemonic('e');
jrb_encode.setSelected(true);
jrb_decode.setMnemonic('d');
bg.add(jrb_encode);
bg.add(jrb_decode);
jtf_out.setEditable(false);
// Button Action
ActionListener closeAction = new ActionListener() {
public void actionPerformed(ActionEvent e) {
me.setVisible(false);
}
};
// Layout
JPanel jp = new JPanel();
jp.setBorder(BorderFactory.createEmptyBorder(
RESTViewImpl.BORDER_WIDTH, RESTViewImpl.BORDER_WIDTH, RESTViewImpl.BORDER_WIDTH, RESTViewImpl.BORDER_WIDTH));
jp.setLayout(new BorderLayout());
// North
JPanel jp_north = new JPanel();
jp_north.setLayout(new FlowLayout(FlowLayout.CENTER));
jp_north.add(jrb_encode);
jp_north.add(jrb_decode);
jp.add(jp_north, BorderLayout.NORTH);
// Center
JPanel jp_center = new JPanel();
jp_center.setLayout(new BorderLayout());
JPanel jp_center_west = new JPanel();
jp_center_west.setLayout(new GridLayout(2, 1, RESTViewImpl.BORDER_WIDTH, RESTViewImpl.BORDER_WIDTH));
JLabel jl_in = new JLabel("Input: ");
jl_in.setDisplayedMnemonic('i');
jl_in.setLabelFor(jtf_in);
JLabel jl_out = new JLabel("Output: ");
jp_center_west.add(jl_in);
jp_center_west.add(jl_out);
jp_center.add(jp_center_west, BorderLayout.WEST);
JPanel jp_center_center = new JPanel();
jp_center_center.setLayout(new GridLayout(2, 1, RESTViewImpl.BORDER_WIDTH, RESTViewImpl.BORDER_WIDTH));
jp_center_center.add(jtf_in);
jp_center_center.add(jtf_out);
jp_center.add(jp_center_center, BorderLayout.CENTER);
jp.add(jp_center, BorderLayout.CENTER);
// South
JPanel jp_south = new JPanel();
jp_south.setLayout(new FlowLayout(FlowLayout.CENTER));
JButton jb_generate = new JButton("Generate");
jb_generate.setMnemonic('g');
getRootPane().setDefaultButton(jb_generate);
jb_generate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
generate();
}
});
jp_south.add(jb_generate);
JButton jb_gen_close = new JButton("Close");
jb_gen_close.addActionListener(closeAction);
jp_south.add(jb_gen_close);
jp.add(jp_south, BorderLayout.SOUTH);
// Help Window
JPanel jp_help = new JPanel();
jp_help.setBorder(BorderFactory.createEmptyBorder(
RESTViewImpl.BORDER_WIDTH, RESTViewImpl.BORDER_WIDTH, RESTViewImpl.BORDER_WIDTH, RESTViewImpl.BORDER_WIDTH));
jp_help.setLayout(new BorderLayout());
JTextPane jtp_help_center = new JTextPane();
jtp_help_center.setEditable(false);
Dimension d = jtp_help_center.getPreferredSize();
jtp_help_center.setText(helpText);
jtp_help_center.setPreferredSize(d);
jtp_help_center.setCaretPosition(0);
JScrollPane jsp_center = new JScrollPane(jtp_help_center);
jp_help.add(jsp_center, BorderLayout.CENTER);
JPanel jp_help_south = new JPanel();
jp_help_south.setLayout(new FlowLayout(FlowLayout.CENTER));
JButton jb_close = new JButton("Close");
jb_close.addActionListener(closeAction);
jp_help_south.add(jb_close);
jp_help.add(jp_help_south, BorderLayout.SOUTH);
JTabbedPane jtp = new JTabbedPane();
jtp.setBorder(BorderFactory.createEmptyBorder(
RESTViewImpl.BORDER_WIDTH, RESTViewImpl.BORDER_WIDTH, RESTViewImpl.BORDER_WIDTH, RESTViewImpl.BORDER_WIDTH));
jtp.addTab("Encoder/Decoder", jp);
jtp.addTab("Help", jp_help);
this.setContentPane(jtp);
this.pack();
}
private void generate(){
// Check for null String in jtf_in
final String inStr = jtf_in.getText();
if(StringUtil.isEmpty(inStr)){
JOptionPane.showMessageDialog(me,
"No input entered.",
"Error in input.",
JOptionPane.ERROR_MESSAGE);
return;
}
// Get if it is encode or decode
final String result;
if(jrb_encode.isSelected()){
result = Util.base64encode(inStr);
}
else{
try {
result = Util.base64decode(inStr);
}
catch(Base64Exception ex) {
JOptionPane.showMessageDialog(me,
ex.getMessage(),
"Error in input.",
JOptionPane.ERROR_MESSAGE);
return;
}
}
jtf_out.setText(result);
}
@Override
public void doEscape(AWTEvent event) {
me.setVisible(false);
}
}