]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - scripting/java/example/GLPprinters.java
Load cups into easysw/current.
[thirdparty/cups.git] / scripting / java / example / GLPprinters.java
diff --git a/scripting/java/example/GLPprinters.java b/scripting/java/example/GLPprinters.java
new file mode 100644 (file)
index 0000000..9a86a79
--- /dev/null
@@ -0,0 +1,509 @@
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import java.net.URL;
+import java.net.*;
+import java.io.*;
+import com.easysw.cups.*;
+
+public class GLPprinters implements ActionListener 
+{
+
+    private Cups   cups = null;
+    public  String cupsServerName = "";
+
+    private JScrollPane        scrollPane = null;
+    private JPanel             mainPanel = null;
+    private JPanel             serverPanel = null;
+    private JPanel             maskPanel = null;
+
+    private GridBagLayout      mainLayout = null;
+    private GridBagConstraints mainConst = null;
+    private GridBagLayout      maskLayout = null;
+    private GridBagConstraints maskConst = null;
+
+    private JLabel             serverLabel = null;
+
+    JTextField nameTextField = null;
+    protected static final String maskFieldString  = "Printer Name:";
+    protected static final String maskButtonString = "Apply";
+
+    private String currentMask = "";
+
+
+    // Constructor
+    public GLPprinters() 
+    {
+      cupsServerName = GLPvars.getServerName();
+      load();
+    }
+
+    public void load() 
+    {
+        String[]      printer_names;
+        String        default_printer;
+        int           num_printers = 0;
+        int           y = 0, i = 0;
+        URL           u;
+        CupsPrinter   cp;
+
+
+        //  -----------------------------------------------------------
+        //
+        //  First get a list of printer names.
+        //
+        try
+        {
+          u = new URL("http://" + GLPvars.getServerName() + ":631/");
+          cups = new Cups(u);
+
+          // If authorization is required ....
+          cups.setUser(GLPvars.cupsUser);
+          cups.setPasswd(GLPvars.cupsPasswd);
+
+          printer_names = cups.cupsGetPrinters();
+          if (printer_names != null)
+            num_printers  = printer_names.length;
+          else
+            num_printers = 0;
+        }
+        catch (IOException e)
+        {
+         mainPanel   = new JPanel();
+          mainPanel.setLayout(new BorderLayout());
+         mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+          mainPanel.setBackground(GLPcolors.backgroundColor);
+          JLabel errorLabel = new JLabel("Error loading printers from " +
+                                         GLPvars.getServerName());
+          errorLabel.setForeground(Color.red);
+          mainPanel.add( errorLabel, BorderLayout.CENTER );
+          scrollPane = new JScrollPane(mainPanel);
+          return;
+        }
+
+        //  -----------------------------------------------------------
+        //
+        //  Now get the printer objects
+        //
+        CupsPrinter[] printers = new CupsPrinter[num_printers];
+        for (i=0; i < num_printers; i++)
+        {
+          try
+          {
+            u    = new URL("http://" + GLPvars.getServerName() + 
+                           ":631/printers/" + printer_names[i] );  
+            cups = new Cups(u);
+
+            // If authorization is required ....
+            cups.setUser(GLPvars.cupsUser);
+            cups.setPasswd(GLPvars.cupsPasswd);
+
+            printers[i] = new CupsPrinter( cups, printer_names[i] );
+          }
+          catch (IOException e)
+          {
+            // System.out.println("GLPprinters: IOException");
+            // return(null);
+          }
+        }
+
+
+        //
+        //  Keep track in case it changes.
+        //
+        cupsServerName = GLPvars.getServerName();
+
+        if (printer_names != null)
+          num_printers = printer_names.length;
+        else
+          num_printers = 0;
+
+        // default_printer = c.cupsGetDefault();
+
+       // Create the main panel to contain the two sub panels.
+       mainPanel   = new JPanel();
+        mainLayout  = new GridBagLayout();
+        mainConst   = new GridBagConstraints();
+
+       mainPanel.setLayout(mainLayout);
+       mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        mainPanel.setBackground(GLPcolors.backgroundColor);
+
+        //  --------------------------------------------------------------
+        //
+        //  Add the server name label
+        //
+       serverPanel   = new JPanel();
+        serverPanel.setLayout( new BorderLayout());
+        serverPanel.setBackground(GLPcolors.backgroundColor);
+        serverLabel = new JLabel("Printers on " + GLPvars.getServerName());
+        serverLabel.setForeground(GLPcolors.foregroundColor);
+        serverPanel.add(serverLabel, BorderLayout.NORTH );
+
+        mainConst.gridwidth = GridBagConstraints.RELATIVE;
+        mainConst.gridx     = 0;
+        mainConst.gridy     = y++;
+        mainConst.fill      = GridBagConstraints.BOTH;
+        mainConst.weightx   = 0.0;
+        mainConst.weighty   = 0.0;
+        mainConst.ipadx     = 4;
+        mainConst.ipady     = 4;
+        mainLayout.setConstraints( serverPanel, mainConst );
+        mainPanel.add(serverPanel);
+
+        //  --------------------------------------------------------------
+        //
+        //  Add the printer masking panel
+        //
+       maskPanel   = new JPanel();
+        maskLayout  = new GridBagLayout();
+        maskConst   = new GridBagConstraints();
+
+       maskPanel.setLayout(maskLayout);
+       maskPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        maskPanel.setBackground(GLPcolors.backgroundColor);
+
+        JPanel localMaskPanel = buildMaskPanel();
+        maskConst.gridwidth = GridBagConstraints.RELATIVE;
+        maskConst.gridx     = 0;
+        maskConst.gridy     = 0;
+        maskConst.fill      = GridBagConstraints.NONE;
+        maskConst.weightx   = 0.0;
+        maskConst.weighty   = 0.0;
+        maskConst.ipadx     = 4;
+        maskConst.ipady     = 4;
+        maskLayout.setConstraints( localMaskPanel, maskConst );
+        maskPanel.add(localMaskPanel);
+
+        //
+        //  Add the masking panel to the main panel.
+        //
+        mainConst.gridwidth = GridBagConstraints.RELATIVE;
+        mainConst.gridx     = 0;
+        mainConst.gridy     = y++;
+        mainConst.fill      = GridBagConstraints.BOTH;
+        mainConst.weightx   = 0.0;
+        mainConst.weighty   = 0.0;
+        mainConst.ipadx     = 4;
+        mainConst.ipady     = 4;
+        mainLayout.setConstraints( maskPanel, mainConst );
+        mainPanel.add(maskPanel);
+
+
+
+        //  --------------------------------------------------------------
+        //
+        //  Add the printers
+        //
+        double weight = 1.0 / (double)printers.length;
+        for (i=0; i < printers.length; i++)
+        {
+          JPanel subPanel = printerInfoPanel( printers[i] );
+          mainConst.gridwidth = GridBagConstraints.RELATIVE;
+          mainConst.gridx     = 0;
+          mainConst.gridy     = y++;
+          mainConst.fill      = GridBagConstraints.BOTH;
+          mainConst.weightx   = 1.0;
+          mainConst.weighty   = weight;
+          mainConst.ipady     = 4;
+          mainLayout.setConstraints( subPanel, mainConst );
+          mainPanel.add(subPanel);
+        }
+
+        //  ------------------------------------------------
+        //
+        //  Put the whole thing into a scroll pane.
+        //
+        scrollPane = new JScrollPane(mainPanel);
+    }
+
+
+
+    //  -----------------------------------------------------------
+    //
+    //  Build an info panel for an individual printer.
+    //
+    private JPanel printerInfoPanel( CupsPrinter cp ) 
+    {
+        JPanel             printerPanel = new JPanel();
+        BoxLayout          printerBox;
+
+        JPanel             leftHeader   = new JPanel();
+        JPanel             rightHeader  = new JPanel();
+
+        JPanel             leftPane     = new JPanel();
+        JPanel             rightPane    = new JPanel();
+
+        GridBagLayout      leftLayout   = new GridBagLayout();
+        GridBagLayout      rightLayout  = new GridBagLayout();
+
+        GridBagConstraints leftConst    = new GridBagConstraints();
+        GridBagConstraints rightConst   = new GridBagConstraints();
+
+
+        JLabel      printerIconLabel   = null;
+        JLabel      printerInfoLabel   = null;
+        JLabel      printerNameLabel   = null;
+        JLabel      printerMakeLabel   = null;
+
+        JTable      printerStatusTable = null;
+
+        printerBox = new BoxLayout(printerPanel, BoxLayout.X_AXIS);
+       printerPanel.setLayout(printerBox);
+       printerPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+        printerPanel.setBackground(GLPcolors.backgroundColor);
+
+       // Add border around the panel.
+
+
+        //  ------------------------------------------------------------
+        //  Left pane
+        //  ------------------------------------------------------------
+        leftPane.setLayout(leftLayout);
+        leftPane.setBackground(GLPcolors.backgroundColor);
+
+        leftHeader.setLayout(new BorderLayout());
+        leftHeader.setBackground(GLPcolors.highlightColor);
+       leftHeader.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
+
+        printerNameLabel = new JLabel(cp.getPrinterName());
+        printerNameLabel.setForeground(Color.black);
+        leftHeader.add( printerNameLabel, BorderLayout.WEST);
+        leftConst.gridwidth = GridBagConstraints.RELATIVE;
+        leftConst.gridx     = 0;
+        leftConst.gridy     = 0;
+        leftConst.fill      = GridBagConstraints.HORIZONTAL;
+        leftConst.weightx   = 0.0;
+        leftConst.weighty   = 0.0;
+        leftConst.ipady     = 4;
+        leftLayout.setConstraints( leftHeader, leftConst );
+        leftPane.add(leftHeader);
+
+       String imageName = "./images/printer-" + cp.getStateText() + ".gif";
+       URL iconURL = ClassLoader.getSystemResource(imageName);
+       ImageIcon icon = new ImageIcon(iconURL);
+        JButton printerButton = new JButton( "<html><center><b>" + 
+                                             cp.getPrinterName() + 
+                                             "</b></center></html>",
+                                            icon );
+       printerButton.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
+        printerButton.setBackground(GLPcolors.backgroundColor);
+        printerButton.setActionCommand( cp.getPrinterName() );
+        printerButton.addActionListener(this);
+        printerButton.setToolTipText("Click to go to " + cp.getPrinterName() +
+                                     "'s extended informtion page.");
+
+        leftConst.gridwidth = GridBagConstraints.REMAINDER;
+        leftConst.gridx     = 0;
+        leftConst.gridy     = 1;
+        leftConst.fill      = GridBagConstraints.BOTH;
+        leftConst.weightx   = 1.0;
+        leftConst.weighty   = 1.0;
+        leftConst.ipady     = 4;
+        leftLayout.setConstraints( printerButton, leftConst );
+       leftPane.add(printerButton);
+
+
+        //  ------------------------------------------------------------
+        //  Right pane
+        //  ------------------------------------------------------------
+        rightPane.setLayout(rightLayout);
+        rightPane.setBackground(GLPcolors.backgroundColor);
+
+        rightHeader.setLayout(new BorderLayout());
+        rightHeader.setBackground(GLPcolors.highlightColor);
+       rightHeader.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
+
+        printerMakeLabel = new JLabel(cp.getMakeAndModel());
+        printerMakeLabel.setForeground(Color.black);
+        rightHeader.add( printerMakeLabel, BorderLayout.WEST);
+
+        rightConst.gridwidth = GridBagConstraints.RELATIVE;
+        rightConst.gridx     = 0;
+        rightConst.gridy     = 0;
+        rightConst.fill      = GridBagConstraints.HORIZONTAL;
+        rightConst.weightx   = 0.0;
+        rightConst.weighty   = 0.0;
+        rightConst.ipady     = 4;
+        rightLayout.setConstraints( rightHeader, rightConst );
+        rightPane.add(rightHeader);
+
+
+        Font   labelFont = new Font("Serif",Font.BOLD, 12 );
+        // Font   textFont = new Font("Serif", Font.NORMAL, 12 );
+        Font   messageFont = new Font("Serif", Font.ITALIC, 12 );
+
+        JLabel pdNameLabel     = new JLabel("Name");
+        JLabel pdLocationLabel = new JLabel("Location");
+        JLabel pdStatusLabel   = new JLabel("Status");
+        JLabel pdMessageLabel  = new JLabel("Message");
+
+        JLabel pdNameText     = new JLabel(cp.getPrinterName());
+        JLabel pdLocationText = new JLabel(cp.getLocation());
+        JLabel pdStatusText   = new JLabel(cp.getStateText());
+        JLabel pdMessageText  = new JLabel(cp.getStateReasons());
+
+        pdNameLabel.setFont(labelFont);
+        pdLocationLabel.setFont(labelFont);
+        pdStatusLabel.setFont(labelFont);
+        pdMessageLabel.setFont(labelFont);
+        pdMessageText.setFont(messageFont);
+
+        pdNameLabel.setForeground(Color.black);
+        pdLocationLabel.setForeground(Color.black);
+        pdStatusLabel.setForeground(Color.black);
+        pdMessageLabel.setForeground(Color.black);
+
+        JPanel tablePane;
+        if ((cp.getStateReasons().length() > 0) &&
+            (!cp.getStateReasons().equals("none")))
+        {
+          tablePane = new JPanel(new GridLayout(4,2,2,2));
+          tablePane.add(pdNameLabel);
+          tablePane.add(pdNameText);
+
+          tablePane.add(pdLocationLabel);
+          tablePane.add(pdLocationText);
+
+          tablePane.add(pdStatusLabel);
+          tablePane.add(pdStatusText);
+
+          tablePane.add(pdMessageLabel);
+          tablePane.add(pdMessageText);
+        }
+        else
+        {
+          tablePane = new JPanel(new GridLayout(3,2,2,2));
+          tablePane.add(pdNameLabel);
+          tablePane.add(pdNameText);
+
+          tablePane.add(pdLocationLabel);
+          tablePane.add(pdLocationText);
+
+          tablePane.add(pdStatusLabel);
+          tablePane.add(pdStatusText);
+
+        }
+        tablePane.setBackground(GLPcolors.backgroundColor);
+
+        // printerStatusTable.setShowGrid(false);
+        rightConst.gridwidth = GridBagConstraints.REMAINDER;
+        rightConst.gridx     = 0;
+        rightConst.gridy     = 1;
+        rightConst.fill      = GridBagConstraints.BOTH;
+        rightConst.weightx   = 1.0;
+        rightConst.weighty   = 1.0;
+        rightConst.ipady     = 4;
+        rightLayout.setConstraints( tablePane, rightConst );
+       rightPane.add(tablePane);
+
+        printerPanel.add(leftPane);
+        printerPanel.add(rightPane);
+
+        return(printerPanel);
+    }
+
+
+
+
+
+    public JPanel buildMaskPanel()
+    {
+
+      // Create the main panel to contain the two sub panels.
+      JPanel             namePanel   = new JPanel();
+      GridBagLayout      nameLayout  = new GridBagLayout();
+      GridBagConstraints nameConst   = new GridBagConstraints();
+
+      namePanel.setLayout(nameLayout);
+      namePanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+      namePanel.setBackground(GLPcolors.backgroundColor);
+
+
+      //Create a regular text field.
+      nameTextField = new JTextField(16);
+      nameTextField.setActionCommand(maskFieldString);
+      nameTextField.addActionListener(this);
+      nameTextField.setText("");
+
+      //Create some labels for the fields.
+      JLabel nameFieldLabel = new JLabel(maskFieldString);
+      nameFieldLabel.setForeground(GLPcolors.foregroundColor);
+      nameFieldLabel.setLabelFor(nameTextField);
+
+      //  Text
+      nameConst.gridwidth = GridBagConstraints.RELATIVE;
+      nameConst.gridx     = 0;
+      nameConst.gridy     = 0;
+      nameConst.fill      = GridBagConstraints.HORIZONTAL;
+      nameConst.weightx   = 0.0;
+      nameConst.weighty   = 0.0;
+      nameConst.ipadx     = 4;
+      nameConst.ipady     = 4;
+      nameLayout.setConstraints( nameFieldLabel, nameConst );
+      namePanel.add(nameFieldLabel);
+
+      nameConst.gridwidth = GridBagConstraints.RELATIVE;
+      nameConst.gridx     = 1;
+      nameConst.gridy     = 0;
+      nameConst.fill      = GridBagConstraints.HORIZONTAL;
+      nameConst.weightx   = 0.0;
+      nameConst.weighty   = 0.0;
+      nameConst.ipadx     = 4;
+      nameConst.ipady     = 4;
+      nameLayout.setConstraints( nameTextField, nameConst );
+      namePanel.add(nameTextField);
+
+      JButton applyButton = new JButton(maskButtonString);
+      applyButton.setBorder(BorderFactory.createCompoundBorder(
+                           BorderFactory.createRaisedBevelBorder(),
+                           BorderFactory.createEmptyBorder(2,2,2,2)));
+      applyButton.setActionCommand(maskButtonString);
+      applyButton.addActionListener(this);
+      nameConst.gridx     = 2;
+      nameConst.gridy     = 0;
+      nameConst.fill      = GridBagConstraints.NONE;
+      nameLayout.setConstraints( applyButton, nameConst );
+      nameConst.weightx   = 0.0;
+      nameConst.weighty   = 0.0;
+      nameConst.ipadx     = 4;
+      nameConst.ipady     = 4;
+      namePanel.add(applyButton);
+
+      return(namePanel);
+    }
+
+
+    public void actionPerformed(ActionEvent e) 
+    {
+        if (e.getActionCommand().equals(maskFieldString)) 
+        {
+          String s = nameTextField.getText();
+          if (s.length() > 1)
+          {
+            currentMask = s;
+          }
+        } 
+        else if (e.getActionCommand().equals(maskButtonString)) 
+        {
+          String s = nameTextField.getText();
+          if (s.length() > 1)
+          {
+            currentMask = s;
+          }
+        } 
+        else
+        {
+          GLPvars.selectedPrinterName = e.getActionCommand();
+          GLPvars.tabs.updateDetailPanel();
+          GLPvars.tabs.tabPanel.setSelectedIndex(2);
+        }
+    }
+
+
+    public JScrollPane getPanel()
+    {
+      return(scrollPane);
+    }
+}