package jfconfig;
/**
* Created : May 17, 2012
*
* @author pquiring
*/
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import java.util.*;
import javaforce.*;
public class PrinterJobsDialog extends javax.swing.JDialog {
/**
* Creates new form PrinterJobsDialog
*/
public PrinterJobsDialog(java.awt.Frame parent, boolean modal, String pname) {
super(parent, modal);
initComponents();
setPosition();
this.pname = pname;
model = (DefaultTableModel)jobs.getModel();
listJobs();
//create a timer to refresh list every 5 secs
timer = new java.util.Timer();
timer.schedule(new TimerTask() {
public void run() {
java.awt.EventQueue.invokeLater(new Runnable() {public void run() { listJobs(); }});
}
}, 5000, 5000);
}
/**
* 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() {
deleteJob = new javax.swing.JButton();
close = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
jobs = new javax.swing.JTable();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Jobs");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
deleteJob.setText("Delete Job");
deleteJob.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
deleteJobActionPerformed(evt);
}
});
close.setText("Close");
close.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
closeActionPerformed(evt);
}
});
jobs.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Rank", "Owner", "JobID", "Files", "Size"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jobs.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
jScrollPane2.setViewportView(jobs);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane2)
.addGroup(layout.createSequentialGroup()
.addComponent(deleteJob)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 281, Short.MAX_VALUE)
.addComponent(close)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 449, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(deleteJob)
.addComponent(close))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void closeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeActionPerformed
dispose();
}//GEN-LAST:event_closeActionPerformed
private void deleteJobActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteJobActionPerformed
deleteJob();
}//GEN-LAST:event_deleteJobActionPerformed
private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
timer.cancel();
}//GEN-LAST:event_formWindowClosing
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton close;
private javax.swing.JButton deleteJob;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable jobs;
// End of variables declaration//GEN-END:variables
private DefaultTableModel model;
private String pname;
private java.util.Timer timer;
private void listJobs() {
model.setRowCount(0);
ShellProcess sp = new ShellProcess();
String output = sp.run(new String[] {"lpq", "-P", pname}, false);
String lns[] = output.split("\n");
if (lns.length < 2) return;
for(int a=2;a<lns.length;a++) {
String f[] = lns[a].split(" +", 4);
if (f.length != 5) continue;
model.addRow(new Object[] {f[0], f[1], f[2], f[3], f[4]});
}
}
/*
sample:
Printer1 is ready and printing
Rank Owner Job File(s) Total Size
active (null) 1 untitled 43008 bytes
1st (null) 2 untitled 0 bytes
sample:
Printer1 is ready
no entries
sample:
lpq: Unknown destination "test".
*/
private void deleteJob() {
int row = jobs.getSelectedRow();
if (row == -1) return;
String jobId = (String)jobs.getValueAt(row, 2);
ShellProcess sp = new ShellProcess();
String output = sp.run(new String[] {"lprm", "-P", pname, jobId}, false);
}
private void setPosition() {
Rectangle s = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
Dimension d = getSize();
setLocation(s.width/2 - d.width/2, s.height/2 - (d.height/2));
}
}