package jfconfig;
/**
* Created : May 17, 2012
*
* @author pquiring
*/
import java.io.*;
import javaforce.*;
import javaforce.linux.*;
public class NetworkConfigPanel extends javax.swing.JPanel {
/**
* Creates new form NetworkConfigPanel
*/
public NetworkConfigPanel() {
initComponents();
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() {
jToolBar1 = new javax.swing.JToolBar();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
hostname = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
domain = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
dns1 = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
dns2 = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
dns3 = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jToolBar1.setFloatable(false);
jToolBar1.setRollover(true);
jButton1.setText("< Back");
jButton1.setFocusable(false);
jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jToolBar1.add(jButton1);
jButton2.setText("Apply");
jButton2.setFocusable(false);
jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jToolBar1.add(jButton2);
jLabel1.setText("Hostname");
hostname.setText("localhost");
jLabel2.setText("Domain");
domain.setText("localdomain");
jLabel3.setText("DNS1");
jLabel4.setText("DNS2");
jLabel5.setText("DNS3");
jLabel6.setText("NOTE : Domain and DNS values are overridden by DHCP");
jLabel7.setText("You must REBOOT for changes to take effect.");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.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)
.addComponent(jLabel3)
.addComponent(jLabel4)
.addComponent(jLabel5))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(hostname)
.addComponent(domain)
.addComponent(dns1)
.addComponent(dns2)
.addComponent(dns3)))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel6)
.addComponent(jLabel7))
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(hostname, 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(domain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(dns1, 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(jLabel4)
.addComponent(dns2, 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(jLabel5)
.addComponent(dns3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(jLabel6)
.addGap(18, 18, 18)
.addComponent(jLabel7)
.addGap(0, 283, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
ConfigApp.This.setPanel(new NetworkPanel());
}//GEN-LAST:event_jButton1ActionPerformed
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
apply();
}//GEN-LAST:event_jButton2ActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JTextField dns1;
private javax.swing.JTextField dns2;
private javax.swing.JTextField dns3;
private javax.swing.JTextField domain;
private javax.swing.JTextField hostname;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JToolBar jToolBar1;
// End of variables declaration//GEN-END:variables
public static class Interface {
public String dev;
public boolean dhcp4 = true, dhcp6 = false;
public boolean disableIP6 = true;
public String ip4, mask4, gateway4;
public String ip6, gateway6;
}
public static class Config {
public Interface iface[];
public String dns1, dns2, dns3;
public String hostname, domain;
}
private Config config;
private String configFolder = "/etc/jconfig.d/";
private String configFile = "network.xml";
private void loadConfig() {
defaultConfig();
try {
XML xml = new XML();
FileInputStream fis = new FileInputStream(configFolder + configFile);
xml.read(fis);
xml.writeClass(config);
} catch (FileNotFoundException e1) {
defaultConfig();
} catch (Exception e2) {
JFLog.log(e2);
defaultConfig();
}
hostname.setText(config.hostname);
domain.setText(config.domain);
dns1.setText(config.dns1);
dns2.setText(config.dns2);
dns3.setText(config.dns3);
}
private void defaultConfig() {
config = new Config();
config.iface = new Interface[0];
config.hostname = "localhost";
config.domain = "localdomain";
config.dns1 = "";
config.dns2 = "";
config.dns3 = "";
}
private void saveConfig() {
config.hostname = hostname.getText();
config.domain = domain.getText();
config.dns1 = dns1.getText();
config.dns2 = dns1.getText();
config.dns3 = dns1.getText();
try {
XML xml = new XML();
File tmpFile = File.createTempFile("network", ".xml");
FileOutputStream fos = new FileOutputStream(tmpFile);
xml.readClass("network", config);
xml.write(fos);
fos.close();
Linux.mkdir(configFolder);
if (!Linux.copyFile(tmpFile.getAbsolutePath(), configFolder + configFile)) {
tmpFile.delete();
throw new Exception("file io error");
}
tmpFile.delete();
} catch (Exception e) {
JFLog.log(e);
}
}
private void apply() {
saveConfig();
applyHostname(config.hostname);
}
public static void applyHostname(String hostname) {
try {
File tmpFile1 = File.createTempFile("hostname", ".tmp");
FileOutputStream fos1 = new FileOutputStream(tmpFile1);
fos1.write(hostname.getBytes());
fos1.close();
File tmpFile2 = File.createTempFile("hosts", ".tmp");
FileOutputStream fos2 = new FileOutputStream(tmpFile2);
FileInputStream fis2 = new FileInputStream("/etc/hosts");
BufferedReader br = new BufferedReader(new InputStreamReader(fis2));
String ln;
while ((ln = br.readLine()) != null) {
if (ln.startsWith("127.0.0.1")) {
ln = "127.0.0.1\tlocalhost " + hostname;
}
fos2.write((ln + "\n").getBytes());
}
fos2.close();
fis2.close();
if (!Linux.runScript(new String[] {
"cp " + tmpFile1.getAbsolutePath() + " /etc/hostname",
"cp " + tmpFile2.getAbsolutePath() + " /etc/hosts",
})) {
tmpFile1.delete();
throw new Exception("file io error");
}
tmpFile1.delete();
} catch (Exception e) {
JFLog.log(e);
}
JF.showMessage("Notice", "Please reboot for changes to take effect");
}
}