package jfconfig; /** * Created : Mar 16, 2012 * * @author pquiring */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javaforce.*; public class ProxyRuleDialog extends javax.swing.JDialog implements KeyListener { /** * Creates new form ProxyRuleDialog */ public ProxyRuleDialog(java.awt.Frame parent, boolean modal, ProxyPanel.Rule rule) { super(parent, modal); initComponents(); setPosition(); if (rule == null) return; enabled.setSelected(rule.enabled); ip.setText(rule.ip); if (!rule.urls.equals("all")) { some.setSelected(true); urls.setText(rule.urls.replaceAll(",", "\n")); } ip.addKeyListener(this); } /** * 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() { buttonGroup1 = new javax.swing.ButtonGroup(); jLabel1 = new javax.swing.JLabel(); ip = new javax.swing.JTextField(); all = new javax.swing.JRadioButton(); some = new javax.swing.JRadioButton(); jScrollPane1 = new javax.swing.JScrollPane(); urls = new javax.swing.JTextArea(); accept = new javax.swing.JButton(); cancel = new javax.swing.JButton(); enabled = new javax.swing.JCheckBox(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Proxy Rule"); jLabel1.setText("Client IP:"); ip.setText("127.0.0.1/32"); buttonGroup1.add(all); all.setSelected(true); all.setText("Allow access to all sites"); all.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { allItemStateChanged(evt); } }); buttonGroup1.add(some); some.setText("Allow access to following sites (list one domain per line):"); some.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { someItemStateChanged(evt); } }); urls.setColumns(20); urls.setEditable(false); urls.setRows(5); jScrollPane1.setViewportView(urls); accept.setText("Accept"); accept.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { acceptActionPerformed(evt); } }); cancel.setText("Cancel"); cancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelActionPerformed(evt); } }); enabled.setSelected(true); enabled.setText("Enabled"); 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(jScrollPane1) .addGroup(layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(ip)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(cancel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(accept)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(all) .addComponent(some) .addComponent(enabled)) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(enabled) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(ip, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(all) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(some) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 325, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(accept) .addComponent(cancel)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void allItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_allItemStateChanged urls.setEditable(false); }//GEN-LAST:event_allItemStateChanged private void someItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_someItemStateChanged urls.setEditable(true); }//GEN-LAST:event_someItemStateChanged private void cancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelActionPerformed dispose(); }//GEN-LAST:event_cancelActionPerformed private void acceptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_acceptActionPerformed if (all.isSelected()) { urls.setText("all"); } if (!valid(true)) return; accepted = true; dispose(); }//GEN-LAST:event_acceptActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton accept; private javax.swing.JRadioButton all; private javax.swing.ButtonGroup buttonGroup1; private javax.swing.JButton cancel; private javax.swing.JCheckBox enabled; private javax.swing.JTextField ip; private javax.swing.JLabel jLabel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JRadioButton some; private javax.swing.JTextArea urls; // End of variables declaration//GEN-END:variables public boolean accepted = false; private boolean isIP4MaskValid(JTextField tf, boolean nullAllowed) { String str = tf.getText(), mask = ""; int test; tf.setBackground(new Color(0xff0000)); if (str.length() == 0) return nullAllowed; int idx = str.indexOf("/"); if (idx == -1) return false; mask = str.substring(idx+1); str = str.substring(0, idx); String octs[] = str.split("[.]", -1); if (octs.length != 4) return false; try { for(int a=0;a<4;a++) { test = Integer.valueOf(octs[a]); if ((test < 0) || (test > 255)) return false; } test = Integer.valueOf(mask); if ((test < 1) || (test > 32)) return false; } catch (Exception e) { JFLog.log(e); return false; } tf.setBackground(new Color(0xffffff)); return true; } private boolean valid(boolean fixIP) { String txt = urls.getText(); txt = txt.replaceAll("\"", ""); txt = txt.replaceAll(" ", ""); txt = txt.replaceAll(",", "."); urls.setText(txt); if (fixIP) { txt = ip.getText(); int idx = txt.indexOf("/"); if (idx == -1) { txt += "/32"; ip.setText(txt); } } return isIP4MaskValid(ip, false); } public String getURLs() {return urls.getText(); } public String getIP() { return ip.getText(); } public boolean getEnabled() { return enabled.isSelected(); } public void keyPressed(KeyEvent e) {} public void keyReleased(KeyEvent e) {valid(false);} public void keyTyped(KeyEvent e) {} private void setPosition() { Rectangle s = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds(); Dimension d = getSize(); setLocation(s.width/2 - d.width/2, s.height/2 - (d.height/2)); } }