Added an initial and pre alpha implementation of the the configuration panel.

This commit is contained in:
dev
2011-07-14 14:55:24 +00:00
parent c6d1e3f0ea
commit 664dc83d70
9 changed files with 270 additions and 98 deletions

View File

@ -28,7 +28,7 @@ import net.i2p.itoopie.i2pcontrol.JSONRPC2Interface;
import net.i2p.itoopie.i2pcontrol.methods.GetEcho;
import net.i2p.itoopie.i2pcontrol.methods.GetNetworkSetting;
import net.i2p.itoopie.i2pcontrol.methods.GetRateStat;
import net.i2p.itoopie.i2pcontrol.methods.NetworkInfo.NETWORK_INFO;
import net.i2p.itoopie.i2pcontrol.methods.NetworkSetting.NETWORK_SETTING;
import net.i2p.itoopie.i2pcontrol.methods.SetNetworkSetting;
import net.i2p.itoopie.security.CertificateHelper;
@ -77,21 +77,12 @@ public class Main {
final Main main = new Main();
main.launchForeverLoop();
//We'll be doing GUI work, so let's stay in the event dispatcher thread.
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
main.startUp();
}
catch(Exception e) {
//log.error("Failed while running desktopgui!", e);
}
}
});
try {
main.startUp();
} catch (Exception e) {
_log.error("Error during TrayManager launch.", e);
}
testStuff(); // Delete Me
}
@SuppressWarnings("static-access")
@ -129,6 +120,7 @@ public class Main {
// Test basic echo method
System.out.println("GetEcho");
try {
String str = GetEcho.execute("Echo this mofo!");
System.out.println("Echo response: " + str);
@ -139,6 +131,7 @@ public class Main {
}
// Test reading a rateStat
System.out.println("GetRateStat");
try {
Double dbl = GetRateStat.execute("bw.sendRate", 3600000L);
System.out.println("rateStat: " + dbl);
@ -151,15 +144,16 @@ public class Main {
}
// Test reading all settings
System.out.println("GetNetworkSetting");
try {
HashMap hm = GetNetworkSetting.execute(NETWORK_INFO.values());
HashMap hm = GetNetworkSetting.execute(NETWORK_SETTING.values());
System.out.println("getNetworkInfo: All: ");
Set<Entry> set = hm.entrySet();
for (Entry e : set){
System.out.println(e.getKey() +":"+ e.getValue());
}
} catch (InvalidPasswordException e1) {
//e1.printStackTrace();
System.out.println("Invalid password..");
} catch (JSONRPC2SessionException e) {
System.out.println("Connection failed..");
}
@ -167,11 +161,12 @@ public class Main {
// Test saving all settings
System.out.println("SetNetworkSetting - fail");
try {
HashMap<NETWORK_INFO, String> hm = new HashMap<NETWORK_INFO,String>();
HashMap<NETWORK_SETTING, String> hm = new HashMap<NETWORK_SETTING,String>();
List<NETWORK_INFO> list = Arrays.asList(NETWORK_INFO.values());
for (NETWORK_INFO i : list){
List<NETWORK_SETTING> list = Arrays.asList(NETWORK_SETTING.values());
for (NETWORK_SETTING i : list){
hm.put(i, "66"); // 66 is an arbitrary number that should work for most fields.
}
HashMap nextHM= SetNetworkSetting.execute(hm);
@ -190,20 +185,21 @@ public class Main {
}
// Manually test saving all(?) settings
System.out.println("SetNetworkSetting");
try {
HashMap<NETWORK_INFO, String> hm = new HashMap<NETWORK_INFO,String>();
hm.put(NETWORK_INFO.BW_IN, "666");
hm.put(NETWORK_INFO.BW_OUT, "666");
hm.put(NETWORK_INFO.BW_SHARE, "66");
hm.put(NETWORK_INFO.DETECTED_IP, "66.66.66.66");
hm.put(NETWORK_INFO.LAPTOP_MODE, "true");
hm.put(NETWORK_INFO.TCP_AUTOIP, "always");
hm.put(NETWORK_INFO.TCP_HOSTNAME, "66.66.66.66");
hm.put(NETWORK_INFO.TCP_PORT, "66");
hm.put(NETWORK_INFO.UDP_AUTO_IP, "local,upnp,ssu");
hm.put(NETWORK_INFO.UDP_HOSTNAME, "66.66.66.66");
hm.put(NETWORK_INFO.UDP_PORT, "66");
hm.put(NETWORK_INFO.UPNP, "true");
HashMap<NETWORK_SETTING, String> hm = new HashMap<NETWORK_SETTING,String>();
hm.put(NETWORK_SETTING.BW_IN, "666");
hm.put(NETWORK_SETTING.BW_OUT, "666");
hm.put(NETWORK_SETTING.BW_SHARE, "66");
hm.put(NETWORK_SETTING.DETECTED_IP, "66.66.66.66");
hm.put(NETWORK_SETTING.LAPTOP_MODE, "true");
hm.put(NETWORK_SETTING.TCP_AUTOIP, "always");
hm.put(NETWORK_SETTING.TCP_HOSTNAME, "66.66.66.66");
hm.put(NETWORK_SETTING.TCP_PORT, "66");
hm.put(NETWORK_SETTING.UDP_AUTO_IP, "local,upnp,ssu");
hm.put(NETWORK_SETTING.UDP_HOSTNAME, "66.66.66.66");
hm.put(NETWORK_SETTING.UDP_PORT, "66");
hm.put(NETWORK_SETTING.UPNP, "true");
HashMap nextHM= SetNetworkSetting.execute(hm);
System.out.println("setNetworkInfo: Manual: ");

View File

@ -1,36 +1,230 @@
package net.i2p.itoopie.gui;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.HashMap;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import com.thetransactioncompany.jsonrpc2.client.JSONRPC2SessionException;
import net.i2p.itoopie.gui.StatusHandler.DEFAULT_STATUS;
import net.i2p.itoopie.gui.component.LogoPanel;
import net.i2p.itoopie.i18n.Transl;
import net.i2p.itoopie.i2pcontrol.InvalidPasswordException;
import net.i2p.itoopie.i2pcontrol.methods.GetNetworkSetting;
import net.i2p.itoopie.i2pcontrol.methods.NetworkSetting.NETWORK_SETTING;
// The width of this panel (on ubuntu) will be the width of the main menu -24px.
public class ConfigurationPanel extends LogoPanel {
// Components for the network panel
private JLabel lblNetwork;
private JLabel lblTCPPort;
private JTextField txtTCPPort;
private JLabel lblUDPPort;
private JTextField txtUDPPort;
private JLabel lblUPNP;
private JCheckBox chkbxUPNP;
// Components for the bandwidth panel
private JLabel lblBW;
private JLabel lblDownload;
private JTextField txtDownload;
private JLabel lblDownloadUnit;
private JLabel lblUpload;
private JTextField txtUpload;
private JLabel lblUploadUnit;
private JLabel lblShare;
private JTextField txtShare;
private JLabel lblShareUnit;
private static final long serialVersionUID = 328657255717753899L;
public ConfigurationPanel(String imageName) {
super(imageName);
setLayout(new BorderLayout());
setLayout(null);
JPanel buttonArea = new JPanel();
buttonArea.setLayout(new BorderLayout());
add(buttonArea, BorderLayout.NORTH);
JPanel networkPanel = new JPanel();
add(networkPanel);
networkPanel.setLayout(null);
networkPanel.setOpaque(false);
networkPanel.setBounds(0, 110, 262, 115);
setupNetworkPanel(networkPanel);
JPanel configArea = new JPanel();
add(configArea, BorderLayout.CENTER);
JPanel bwPanel = new JPanel();
add(bwPanel);
bwPanel.setLayout(null);
bwPanel.setOpaque(false);
bwPanel.setBounds(0, 5, 262, 105);
setupBandwidthPanel(bwPanel);
JPanel positionedButtonArea = new JPanel();
positionedButtonArea.setLayout(new BorderLayout());
buttonArea.add(positionedButtonArea, BorderLayout.NORTH);
final JButton btnApply = new JButton(Transl._("Apply"));
add(btnApply);
btnApply.setBounds(450, 272, 75, 24);
btnApply.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Clicked");
}
});
JButton btnApply = new JButton();
btnApply.setText(Transl._("Apply"));
positionedButtonArea.add(btnApply, BorderLayout.EAST);
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
System.out.println("Running populate thread.");
populate();
System.out.println("Populate thread done.");
}
});
validate();
}
/**
* Setup bandwidth panel
*/
private void setupBandwidthPanel(JPanel bwPanel){
lblBW = new JLabel();
bwPanel.add(lblBW);
lblBW.setBounds(10, 10, 120, 15);
lblBW.setText(Transl._("Bandwidth:"));
lblDownload = new JLabel();
bwPanel.add(lblDownload);
lblDownload.setBounds(40, 35, 100, 15);
lblDownload.setText(Transl._("Download:"));
txtDownload = new JTextField();
bwPanel.add(txtDownload);
txtDownload.setBounds(130, 35, 55, 20);
lblDownloadUnit = new JLabel();
bwPanel.add(lblDownloadUnit);
lblDownloadUnit.setBounds(190, 37, 35, 15);
lblDownloadUnit.setText(Transl._("KB/s"));
lblUpload = new JLabel();
bwPanel.add(lblUpload);
lblUpload.setBounds(40, 60, 100, 15);
lblUpload.setText(Transl._("Upload:"));
txtUpload = new JTextField();
bwPanel.add(txtUpload);
txtUpload.setBounds(130, 60, 55, 20);
lblUploadUnit = new JLabel();
bwPanel.add(lblUploadUnit);
lblUploadUnit.setBounds(190, 62, 35, 15);
lblUploadUnit.setText(Transl._("KB/s"));
lblShare = new JLabel();
bwPanel.add(lblShare);
lblShare.setBounds(40, 85, 100, 15);
lblShare.setText(Transl._("Share:"));
txtShare = new JTextField();
bwPanel.add(txtShare);
txtShare.setBounds(130, 85, 55, 20);
lblShareUnit = new JLabel();
bwPanel.add(lblShareUnit);
lblShareUnit.setBounds(190, 87, 35, 15);
lblShareUnit.setText(Transl._("%"));
}
/**
* Setup network panel
*/
private void setupNetworkPanel(JPanel networkPanel){
lblNetwork = new JLabel();
networkPanel.add(lblNetwork);
lblNetwork.setBounds(10, 10, 75, 15);
lblNetwork.setText(Transl._("Network:"));
lblTCPPort = new JLabel();
networkPanel.add(lblTCPPort);
lblTCPPort.setBounds(40, 35, 75, 15);
lblTCPPort.setText(Transl._("TCP port:"));
txtTCPPort = new JTextField();
networkPanel.add(txtTCPPort);
txtTCPPort.setBounds(130, 35, 55, 20);
txtTCPPort.setColumns(5);
lblUDPPort = new JLabel();
networkPanel.add(lblUDPPort);
lblUDPPort.setBounds(40, 60, 75, 15);
lblUDPPort.setText(Transl._("UDP port:"));
txtUDPPort = new JTextField();
networkPanel.add(txtUDPPort);
txtUDPPort.setBounds(130, 60, 55, 20);
lblUPNP = new JLabel();
networkPanel.add(lblUPNP);
lblUPNP.setBounds(40, 85, 75, 15);
lblUPNP.setText(Transl._("UPNP:"));
chkbxUPNP = new JCheckBox(Transl._("Enable UPNP"));
networkPanel.add(chkbxUPNP);
chkbxUPNP.setBounds(127, 85, 120, 15);
}
private void populate(){
try {
HashMap hm = GetNetworkSetting.execute(NETWORK_SETTING.TCP_PORT, NETWORK_SETTING.UDP_PORT,
NETWORK_SETTING.UPNP, NETWORK_SETTING.BW_IN, NETWORK_SETTING.BW_OUT);
System.out.println("TCP_PORT: " + (String) hm.get(NETWORK_SETTING.TCP_PORT.toString()));
System.out.println("UDP_PORT: " + (String) hm.get(NETWORK_SETTING.UDP_PORT.toString()));
txtTCPPort.setText((String) hm.get(NETWORK_SETTING.TCP_PORT.toString()));
txtUDPPort.setText((String) hm.get(NETWORK_SETTING.UDP_PORT.toString()));
boolean upnpValue = Boolean.parseBoolean((String) hm.get(NETWORK_SETTING.UPNP));
chkbxUPNP.setSelected(upnpValue);
txtDownload.setText((String) hm.get(NETWORK_SETTING.BW_IN));
txtUpload.setText((String) hm.get(NETWORK_SETTING.BW_OUT));
txtShare.setText((String) hm.get(NETWORK_SETTING.BW_SHARE));
txtShare.setText("TEST");
} catch (InvalidPasswordException e) {
StatusHandler.setDefaultStatus(DEFAULT_STATUS.INVALID_PASSWORD);
} catch (JSONRPC2SessionException e) {
StatusHandler.setDefaultStatus(DEFAULT_STATUS.NOT_CONNECTED);
}
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JFrame frame = new JFrame();
frame.setBounds(0, 0, Main.FRAME_WIDTH, Main.FRAME_HEIGHT);
ConfigurationPanel window = new ConfigurationPanel("itoopie-opaque12");
frame.add(window);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}

View File

@ -38,6 +38,8 @@ public class Main {
private final static Color LIGHT = new Color(215,215,215);
private final static Color MEDIUM = new Color (175,175,175);
private final static Color DARK = new Color(145,145,145);
public final static int FRAME_WIDTH = 550;
public final static int FRAME_HEIGHT = 400;
/**
* Launch the application.
@ -70,7 +72,7 @@ public class Main {
frame = new RegisteredFrame();
frame.setBounds(100, 100, 550, 400);
frame.setBounds(0, 0, FRAME_WIDTH, FRAME_HEIGHT);
frame.setResizable(false);
WindowHandler.registerMain(frame);
@ -98,40 +100,8 @@ public class Main {
JPanel configPanel = new ConfigurationPanel("itoopie-opaque12");
tabbedPane.addTab("Configuration", null, configPanel, null);
configPanel.setLayout(new BorderLayout(0, 0));
JPanel configArea = new JPanel();
configArea.setOpaque(false);
configPanel.add(configArea, BorderLayout.CENTER);
JPanel buttonArea = new JPanel();
buttonArea.setOpaque(false);
buttonArea.setLayout(new BorderLayout(0, 0));
configPanel.add(buttonArea, BorderLayout.SOUTH);
JPanel buttonAreaEast = new JPanel();
buttonAreaEast.setLayout(new BorderLayout(0, 0));
buttonAreaEast.setOpaque(false);
buttonArea.add(buttonAreaEast, BorderLayout.EAST);
JPanel applyBtnWrapper = new JPanel();
applyBtnWrapper.setOpaque(false);
FlowLayout flowApplyBtnWrapper = new FlowLayout();
flowApplyBtnWrapper.setVgap(0);
flowApplyBtnWrapper.setHgap(3);
applyBtnWrapper.setLayout(flowApplyBtnWrapper);
buttonAreaEast.add(applyBtnWrapper);
FlowLayout flowLayout = (FlowLayout) applyBtnWrapper.getLayout();
flowLayout.setHgap(10);
flowLayout.setVgap(3);
JButton btnApply = new JButton("Apply");
btnApply.setOpaque(true);
applyBtnWrapper.add(btnApply, BorderLayout.EAST);
JPanel logPanel = new LogoPanel("itoopie-opaque12");
tabbedPane.addTab("Logs", null, logPanel, null);
logPanel.setLayout(new BorderLayout(0, 0));
@ -146,9 +116,9 @@ public class Main {
statusPanel.add(statusLbl, BorderLayout.CENTER);
JPanel buttonWrapper = new JPanel();
flowLayout = (FlowLayout) buttonWrapper.getLayout();
FlowLayout flowLayout = (FlowLayout) buttonWrapper.getLayout();
flowLayout.setHgap(10);
flowLayout.setVgap(3);
flowLayout.setVgap(0);
statusPanel.add(buttonWrapper, BorderLayout.EAST);
JButton settingsBtn = new JButton("Settings");

View File

@ -6,6 +6,7 @@ import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.net.InetAddress;
import java.net.UnknownHostException;

View File

@ -6,6 +6,13 @@ public class StatusHandler {
private static final JLabel statusLbl;
private static final String DEFAULT_STATUS = "Status";
private interface StatusMessage{ public String getStatusMessage(); };
public static enum DEFAULT_STATUS implements StatusMessage {
CONNECTED { public String getStatusMessage(){ return "Connected to I2P router."; }},
NOT_CONNECTED { public String getStatusMessage(){ return "Unable to connect to I2P router."; }},
INVALID_PASSWORD { public String getStatusMessage(){ return "I2P router rejected password."; }}
}
static{
statusLbl = new JLabel();
statusLbl.setText(DEFAULT_STATUS);
@ -23,4 +30,8 @@ public class StatusHandler {
return statusLbl;
}
public static void setDefaultStatus(DEFAULT_STATUS status){
statusLbl.setText(status.getStatusMessage());
}
}

View File

@ -43,7 +43,7 @@ public class JSONRPC2Interface {
public static void setupSession() {
URL srvURL = null;
String srvHost = _conf.getConf("server.hostname", "localhost");
int srvPort = _conf.getConf("server.port", 7656);
int srvPort = _conf.getConf("server.port", 7650);
String srvTarget = _conf.getConf("server.target", "jsonrpc");
try {
srvURL = new URL("https://" + srvHost + ":" + srvPort + "/"

View File

@ -14,7 +14,7 @@ import net.i2p.itoopie.i2pcontrol.InvalidParametersException;
import net.i2p.itoopie.i2pcontrol.InvalidPasswordException;
import net.i2p.itoopie.i2pcontrol.JSONRPC2Interface;
import net.i2p.itoopie.i2pcontrol.UnrecoverableFailedRequestException;
import net.i2p.itoopie.i2pcontrol.methods.NetworkInfo.NETWORK_INFO;
import net.i2p.itoopie.i2pcontrol.methods.NetworkSetting.NETWORK_SETTING;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
@ -23,15 +23,15 @@ import com.thetransactioncompany.jsonrpc2.client.JSONRPC2SessionException;
public class GetNetworkSetting {
private final static Log _log = LogFactory.getLog(GetNetworkSetting.class);
public static HashMap execute(NETWORK_INFO ... options)
public static HashMap execute(NETWORK_SETTING ... options)
throws InvalidPasswordException, JSONRPC2SessionException{
JSONRPC2Request req = new JSONRPC2Request("NetworkSetting", JSONRPC2Interface.incrNonce());
@SuppressWarnings("rawtypes")
Map outParams = new HashMap();
List<NETWORK_INFO> list = Arrays.asList(options);
List<NETWORK_SETTING> list = Arrays.asList(options);
for (NETWORK_INFO i : list){
for (NETWORK_SETTING i : list){
outParams.put(i.toString(), null);
}
@ -45,7 +45,7 @@ public class GetNetworkSetting {
Set<Entry> set = map.entrySet();
HashMap output = new HashMap();
for (Entry e: set){
output.put(NetworkInfo.enumMap.get(e.getKey()), e.getValue());
output.put(NetworkSetting.enumMap.get(e.getKey()), e.getValue());
}
return map;
} else {

View File

@ -19,15 +19,15 @@ import java.util.HashMap;
*/
public class NetworkInfo{
public final static HashMap<String,NETWORK_INFO> enumMap;
public class NetworkSetting{
public final static HashMap<String,NETWORK_SETTING> enumMap;
/**
* Describes the most common network related settings and their API key.
* @author hottuna
*/
public enum NETWORK_INFO implements RemoteSetable{
public enum NETWORK_SETTING implements RemoteSetable{
DETECTED_IP { public boolean isSetable(){ return false;} public String toString() { return "i2p.router.net.ssu.detectedip"; }},
TCP_PORT { public boolean isSetable(){ return true;} public String toString() { return "i2p.router.net.ntcp.port"; }},
TCP_HOSTNAME { public boolean isSetable(){ return true;} public String toString() { return "i2p.router.net.ntcp.hostname"; }},
@ -43,8 +43,8 @@ public class NetworkInfo{
};
static {
enumMap = new HashMap<String,NETWORK_INFO>();
for (NETWORK_INFO n : NETWORK_INFO.values()){
enumMap = new HashMap<String,NETWORK_SETTING>();
for (NETWORK_SETTING n : NETWORK_SETTING.values()){
enumMap.put(n.toString(), n);
}
}

View File

@ -12,7 +12,7 @@ import net.i2p.itoopie.i2pcontrol.InvalidParametersException;
import net.i2p.itoopie.i2pcontrol.InvalidPasswordException;
import net.i2p.itoopie.i2pcontrol.JSONRPC2Interface;
import net.i2p.itoopie.i2pcontrol.UnrecoverableFailedRequestException;
import net.i2p.itoopie.i2pcontrol.methods.NetworkInfo.NETWORK_INFO;
import net.i2p.itoopie.i2pcontrol.methods.NetworkSetting.NETWORK_SETTING;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Request;
import com.thetransactioncompany.jsonrpc2.JSONRPC2Response;
@ -22,15 +22,15 @@ public class SetNetworkSetting {
private final static Log _log = LogFactory.getLog(SetNetworkSetting.class);
public static HashMap<NETWORK_INFO, Boolean> execute(Map<NETWORK_INFO,String> settings)
public static HashMap<NETWORK_SETTING, Boolean> execute(Map<NETWORK_SETTING,String> settings)
throws InvalidPasswordException, JSONRPC2SessionException, InvalidParametersException{
JSONRPC2Request req = new JSONRPC2Request("NetworkSetting", JSONRPC2Interface.incrNonce());
Map outParams = new HashMap();
Set<Entry<NETWORK_INFO,String>> set = settings.entrySet();
for (Entry<NETWORK_INFO,String> e : set){
Set<Entry<NETWORK_SETTING,String>> set = settings.entrySet();
for (Entry<NETWORK_SETTING,String> e : set){
if(e.getKey().isSetable()){
outParams.put(e.getKey().toString(), e.getValue());
}