/**
* Created : Mar 26, 2012
*
* @author pquiring
*/
import java.io.*;
import java.net.*;
import java.util.*;
import javaforce.*;
public class MainPanel extends javax.swing.JPanel {
/**
* Creates new form MainPanel
*/
public MainPanel() {
initComponents();
configFile = JF.getUserPath() + "/.jfremote.xml";
loadConfig();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
protocol = new javax.swing.JComboBox();
computer = new javax.swing.JComboBox();
tabs = new javax.swing.JTabbedPane();
jPanel2 = new javax.swing.JPanel();
shareHome = new javax.swing.JCheckBox();
consoleSession = new javax.swing.JCheckBox();
jPanel1 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
port = new javax.swing.JTextField();
connect = new javax.swing.JButton();
clear = new javax.swing.JButton();
jLabel1.setText("Computer:");
jLabel2.setText("Protocol:");
protocol.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "RDP", "VNC" }));
protocol.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
protocolItemStateChanged(evt);
}
});
computer.setEditable(true);
computer.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
computerItemStateChanged(evt);
}
});
shareHome.setSelected(true);
shareHome.setText("Share Home Folder");
consoleSession.setText("Connect to Console Session");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(shareHome, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(consoleSession, javax.swing.GroupLayout.DEFAULT_SIZE, 450, Short.MAX_VALUE))
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(shareHome)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(consoleSession)
.addContainerGap(34, Short.MAX_VALUE))
);
tabs.addTab("RDP", jPanel2);
jLabel3.setText("Port:");
port.setText("0");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(port, javax.swing.GroupLayout.DEFAULT_SIZE, 404, Short.MAX_VALUE)
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(port, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(60, Short.MAX_VALUE))
);
tabs.addTab("VNC", jPanel1);
connect.setText("Connect");
connect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
connectActionPerformed(evt);
}
});
clear.setText("Clear");
clear.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clearActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jLabel2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(protocol, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(computer, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addComponent(tabs, javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(clear)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(connect)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(computer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(protocol, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tabs, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(connect)
.addComponent(clear))
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
private void protocolItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_protocolItemStateChanged
tabs.setSelectedIndex(protocol.getSelectedIndex());
}//GEN-LAST:event_protocolItemStateChanged
private void connectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_connectActionPerformed
String host = (String)computer.getSelectedItem();
if (host.length() == 0) return;
try {
InetAddress ip = InetAddress.getByName(host);
} catch (Exception e) {
JF.showError("Error", "That host doesn't exist");
return;
}
addHost();
saveConfig();
switch (protocol.getSelectedIndex()) {
case 0: connectRDP(); break;
case 1: connectVNC(); break;
}
System.exit(0);
}//GEN-LAST:event_connectActionPerformed
private void computerItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_computerItemStateChanged
if (loading) return;
int idx = computer.getSelectedIndex();
if (idx == -1) return;
port.setText("" + config.connection[idx].port);
protocol.setSelectedItem(config.connection[idx].protocol);
shareHome.setSelected(config.connection[idx].shareHome);
consoleSession.setSelected(config.connection[idx].consoleSession);
}//GEN-LAST:event_computerItemStateChanged
private void clearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearActionPerformed
computer.setSelectedItem("");
protocol.setSelectedIndex(0);
port.setText("0");
shareHome.setSelected(true);
consoleSession.setSelected(false);
}//GEN-LAST:event_clearActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton clear;
private javax.swing.JComboBox computer;
private javax.swing.JButton connect;
private javax.swing.JCheckBox consoleSession;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JTextField port;
private javax.swing.JComboBox protocol;
private javax.swing.JCheckBox shareHome;
private javax.swing.JTabbedPane tabs;
// End of variables declaration//GEN-END:variables
public static class Connection {
public String host, protocol;
public int port;
public boolean shareHome, consoleSession;
}
public static class Config {
public Connection connection[];
}
private Config config;
private String configFile;
private boolean loading = true;
private void connectRDP() {
ArrayList<String> cmd = new ArrayList<String>();
try {
cmd.add("rdesktop");
if (shareHome.isSelected()) {
cmd.add("-r");
cmd.add("disk:linux=" + JF.getUserPath());
}
if (consoleSession.isSelected()) cmd.add("-0");
cmd.add((String)computer.getSelectedItem());
Runtime.getRuntime().exec(cmd.toArray(new String[0]));
} catch (Exception e) {
JF.showError("Error", "Failed to execute rdesktop");
}
}
private void connectVNC() {
String host = (String)computer.getSelectedItem();
String p = port.getText();
if (!p.equals("0")) host += ":" + p;
try {
String cmd[] = {"jvnc", host};
Runtime.getRuntime().exec(cmd);
} catch (Exception e) {
JF.showError("Error", "Failed to execute jvnc");
}
}
private void loadConfig() {
config = new Config();
config.connection = null;
try {
XML xml = new XML();
FileInputStream fis = new FileInputStream(configFile);
xml.read(fis);
xml.writeClass(config);
for(int a=0;a<config.connection.length;a++) {
computer.addItem(config.connection[a].host);
}
fis.close();
} catch (Exception e) {
config = new Config();
config.connection = new Connection[0];
}
computer.setSelectedItem("");
loading = false;
}
private void saveConfig() {
try {
XML xml = new XML();
FileOutputStream fos = new FileOutputStream(configFile);
xml.readClass("jfremote", config);
xml.write(fos);
fos.close();
} catch (Exception e) {
}
}
private void addHost() {
String host = (String)computer.getSelectedItem();
for(int a=0;a<config.connection.length;a++) {
if (config.connection[a].host.equalsIgnoreCase(host)) {
//update entry
config.connection[a].port = JF.atoi(port.getText());
config.connection[a].protocol = (String)protocol.getSelectedItem();
config.connection[a].shareHome = shareHome.isSelected();
config.connection[a].consoleSession = consoleSession.isSelected();
return;
}
}
//create new entry
Connection newList[] = new Connection[config.connection.length + 1];
System.arraycopy(config.connection, 0, newList, 0, config.connection.length);
config.connection = newList;
int idx = config.connection.length - 1;
config.connection[idx] = new Connection();
config.connection[idx].host = host;
config.connection[idx].port = JF.atoi(port.getText());
config.connection[idx].protocol = (String)protocol.getSelectedItem();
config.connection[idx].shareHome = shareHome.isSelected();
config.connection[idx].consoleSession = consoleSession.isSelected();
}
}