/**
* Created : Mar 31, 2012
*
* @author pquiring
*/
import java.awt.*;
import java.io.*;
import javaforce.*;
import javaforce.jbus.*;
import javaforce.linux.*;
public class UpgradeApp extends javax.swing.JFrame {
/**
* Creates new form UpgradeApp
*/
public UpgradeApp() {
initComponents();
setContentPane(new MainPanel());
getScreenSize();
setPosition();
}
/**
* 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() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Upgrades");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 593, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 649, Short.MAX_VALUE)
);
pack();
}// </editor-fold>//GEN-END:initComponents
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
if ((args != null) && (args.length > 0) && (args[0].equals("--cron"))) {
cron();
return;
}
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new UpgradeApp().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables
private int sx,sy;
private void getScreenSize() {
Rectangle r = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
sx = r.width;
sy = r.height;
}
private static void cron() {
Linux.detectDistro();
ShellProcess sp = new ShellProcess();
sp.removeEnvironmentVariable("TERM");
String output;
switch (Linux.distro) {
case Ubuntu:
output = sp.run(new String[] {"apt-get", "--yes", "update"}, true);
if (output == null) {
System.out.println("Error : Failed to exec apt-get");
} else {
ubuntuGetCounts();
}
break;
case Fedora:
output = sp.run(new String[] {"yum", "-y", "check-update"}, true);
if (output == null) {
System.out.println("Error : Failed to exec yum");
} else {
fedoraGetCounts();
}
break;
}
}
private static void ubuntuGetCounts() {
ShellProcess sp = new ShellProcess();
sp.removeEnvironmentVariable("TERM");
String output = sp.run(new String[] {"apt-get", "--yes", "upgrade", "-s"}, false);
if (output == null) {
System.out.println("Error : Failed to exec apt-get");
return;
}
String lns[] = output.split("\n");
int cnts = -1;
for(int a=0;a<lns.length;a++) {
if (lns[a].indexOf("upgraded") != -1 && lns[a].indexOf("newly installed") != -1 && lns[a].indexOf("to remove") != -1) {
cnts = a;
break;
}
}
if (cnts == -1) {
//No upgrades found
return;
}
int i1 = lns[cnts].indexOf("and");
int i2 = lns[cnts].indexOf("not");
int notUpgradedCnt = JF.atoi(lns[cnts].substring(i1+3, i2).trim());
int i3 = lns[cnts].indexOf(" ");
int upgradedCnt = JF.atoi(lns[cnts].substring(0, i3));
try {
//write to /etc/upgrade.cnts
String str = "" + upgradedCnt + " upgrades available\n";
if (notUpgradedCnt > 0) {
str += "" + notUpgradedCnt + " kept back\n";
}
FileOutputStream fos = new FileOutputStream("/etc/upgrade.cnts");
fos.write(str.getBytes());
fos.close();
//send counts to jLogon which will broadcast to jDesktop's
sendCounts(upgradedCnt);
} catch (Exception e) {
System.out.println("Error:" + e);
}
}
private static void fedoraGetCounts() {
ShellProcess sp = new ShellProcess();
sp.removeEnvironmentVariable("TERM");
String output = sp.run(new String[] {"yum", "--assumeno", "update", null}, true);
if (output == null) {
System.out.println("Error : Failed to exec yum");
return;
}
String lns[] = output.split("\n");
int cnts = -1;
boolean summary = false;
for(int a=0;a<lns.length;a++) {
if (lns[a].startsWith("Transaction Summary")) summary = true;
if (!summary) continue;
if (lns[a].startsWith("Upgrade")) {
cnts = a;
break;
}
}
if (cnts == -1) {
//No upgrades found
return;
}
String f[] = lns[cnts].split(" +"); //greedy spaces
int upgradedCnt = JF.atoi(f[1]);
try {
//write to /etc/upgrade.cnts
String str = "" + upgradedCnt + " upgrades available\n";
FileOutputStream fos = new FileOutputStream("/etc/upgrade.cnts");
fos.write(str.getBytes());
fos.close();
//send counts to jLogon which will broadcast to jDesktop's
sendCounts(upgradedCnt);
} catch (Exception e) {
System.out.println("Error:" + e);
}
}
private static void sendCounts(int upgrade) {
JBusClient client = new JBusClient(null, null);
client.start();
client.call("org.jflinux.jfsystemmgr", "upgradesAvailable", "" + upgrade);
client.close();
}
private void setPosition() {
Dimension d = getSize();
Rectangle s = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
if ((d.width > s.width) || (d.height > s.height)) {
if (d.width > s.width) d.width = s.width;
if (d.height > s.height) d.height = s.height;
setSize(d);
}
setLocation(s.width/2 - d.width/2, s.height/2 - d.height/2);
}
}