package jfconfig; /** * Created : May 17, 2012 * * @author pquiring */ import javax.swing.*; import javax.swing.table.*; import javaforce.*; public class PrintersPanel extends javax.swing.JPanel { /** * Creates new form PrintersPanel */ public PrintersPanel() { initComponents(); model = (DefaultTableModel)printers.getModel(); listPrinters(); } /** * 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(); back = new javax.swing.JButton(); viewJobs = new javax.swing.JButton(); addPrinter = new javax.swing.JButton(); deletePrinter = new javax.swing.JButton(); setDefault = new javax.swing.JButton(); enable = new javax.swing.JButton(); configCups = new javax.swing.JButton(); jScrollPane2 = new javax.swing.JScrollPane(); printers = new javax.swing.JTable(); jToolBar1.setFloatable(false); jToolBar1.setRollover(true); back.setText("< Back"); back.setFocusable(false); back.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); back.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); back.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { backActionPerformed(evt); } }); jToolBar1.add(back); viewJobs.setText("View Jobs"); viewJobs.setFocusable(false); viewJobs.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); viewJobs.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); viewJobs.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { viewJobsActionPerformed(evt); } }); jToolBar1.add(viewJobs); addPrinter.setText("Add Printer"); addPrinter.setFocusable(false); addPrinter.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); addPrinter.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); addPrinter.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addPrinterActionPerformed(evt); } }); jToolBar1.add(addPrinter); deletePrinter.setText("Delete Printer"); deletePrinter.setFocusable(false); deletePrinter.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); deletePrinter.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); deletePrinter.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { deletePrinterActionPerformed(evt); } }); jToolBar1.add(deletePrinter); setDefault.setText("Set Default"); setDefault.setFocusable(false); setDefault.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); setDefault.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); setDefault.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { setDefaultActionPerformed(evt); } }); jToolBar1.add(setDefault); enable.setText("Enable/Disable"); enable.setFocusable(false); enable.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); enable.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); enable.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { enableActionPerformed(evt); } }); jToolBar1.add(enable); configCups.setText("CUPS Admin"); configCups.setFocusable(false); configCups.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); configCups.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); configCups.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { configCupsActionPerformed(evt); } }); jToolBar1.add(configCups); printers.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Name", "Default", "Enabled" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.String.class, java.lang.String.class }; boolean[] canEdit = new boolean [] { false, false, false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); jScrollPane2.setViewportView(printers); if (printers.getColumnModel().getColumnCount() > 0) { printers.getColumnModel().getColumn(1).setPreferredWidth(25); printers.getColumnModel().getColumn(2).setPreferredWidth(25); } 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() .addComponent(jScrollPane2) .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.RELATED) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 629, Short.MAX_VALUE) .addContainerGap()) ); }// </editor-fold>//GEN-END:initComponents private void backActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backActionPerformed ConfigApp.This.setPanel(new MainPanel()); }//GEN-LAST:event_backActionPerformed private void configCupsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configCupsActionPerformed try { Runtime.getRuntime().exec(new String[] {"x-www-browser","http://localhost:631/admin"}); } catch (Exception e) {} }//GEN-LAST:event_configCupsActionPerformed private void viewJobsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewJobsActionPerformed int row = printers.getSelectedRow(); if (row == -1) return; String pname = (String)printers.getValueAt(row, 0); PrinterJobsDialog dialog = new PrinterJobsDialog(null, true, pname); dialog.setVisible(true); }//GEN-LAST:event_viewJobsActionPerformed private void addPrinterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addPrinterActionPerformed addPrinter(); }//GEN-LAST:event_addPrinterActionPerformed private void deletePrinterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deletePrinterActionPerformed deletePrinter(); }//GEN-LAST:event_deletePrinterActionPerformed private void setDefaultActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_setDefaultActionPerformed setDefault(); }//GEN-LAST:event_setDefaultActionPerformed private void enableActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_enableActionPerformed toggle(); }//GEN-LAST:event_enableActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton addPrinter; private javax.swing.JButton back; private javax.swing.JButton configCups; private javax.swing.JButton deletePrinter; private javax.swing.JButton enable; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JToolBar jToolBar1; private javax.swing.JTable printers; private javax.swing.JButton setDefault; private javax.swing.JButton viewJobs; // End of variables declaration//GEN-END:variables private DefaultTableModel model; private void listPrinters() { model.setRowCount(0); ShellProcess sp = new ShellProcess(); String output = sp.run(new String[] {"lpstat", "-p", "-d"}, false); //printer $NAME disabled since ... //printer $NAME is idle. enabled since ... //printer $NAME is printing ... ??? String lns[] = output.split("\n"); String def = lns[lns.length-1]; int idx = def.indexOf(":"); if (idx == -1) { def = "none"; } else { def = def.substring(idx+1).trim(); } for(int a=0;a<lns.length-1;a++) { if (lns[a].startsWith("\t")) continue; String f[] = lns[a].split(" "); if (f.length < 3) continue; boolean enabled = false; for(int b=2;b<f.length;b++) { if (f[b].equals("enabled")) enabled = true; } model.addRow(new Object[] {f[1], f[1].equals(def) ? "Default" : "", "" + enabled}); } } private void addPrinter() { PrintersAddDialog dialog = new PrintersAddDialog(null, true); dialog.setVisible(true); listPrinters(); } private void deletePrinter() { int row = printers.getSelectedRow(); if (row == -1) return; String pname = (String)printers.getValueAt(row, 0); ShellProcess sp = new ShellProcess(); String output = sp.run(new String[] {"sudo", "lpadmin", "-x", pname}, false); if (sp.getErrorLevel() != 0) { JF.showError("Error", "Unable to delete printer:\n"+output); } listPrinters(); } private void setDefault() { int row = printers.getSelectedRow(); if (row == -1) return; String pname = (String)printers.getValueAt(row, 0); ShellProcess sp = new ShellProcess(); String output = sp.run(new String[] {"lpadmin", "-d", pname}, false); if (sp.getErrorLevel() != 0) { JF.showError("Error", "Unable to set default printer:\n"+output); } listPrinters(); } private void toggle() { int row = printers.getSelectedRow(); if (row == -1) return; String pname = (String)printers.getValueAt(row, 0); String state = (String)printers.getValueAt(row, 2); ShellProcess sp = new ShellProcess(); String output1 = sp.run(new String[] {"cups" + (state.equals("true") ? "disable" : "enable"), pname}, false); String output2 = sp.run(new String[] {"cups" + (state.equals("true") ? "reject" : "accept"), pname}, false); listPrinters(); } }