Java tutorial
// Copyright 2007 Hitachi Data Systems // All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain // a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations // under the License. package com.archivas.clienttools.arcmover.gui.settings; import com.archivas.clienttools.arcmover.gui.JobDialog; import com.jgoodies.forms.layout.FormLayout; import com.jgoodies.forms.layout.CellConstraints; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.event.*; @SuppressWarnings({ "OctalInteger" }) public class PermissionsForm extends JPanel { protected JPanel panel1; protected JTextField numberPerms; protected JCheckBox ownerRead; protected JCheckBox ownerWrite; protected JCheckBox ownerExecute; protected JCheckBox groupRead; protected JCheckBox groupWrite; protected JCheckBox groupExecute; protected JCheckBox otherRead; protected JCheckBox otherWrite; protected JCheckBox otherExecute; private JobDialog jobDialog; private int getPermsFromCheckboxes() { int perms = 0; if (ownerRead.isSelected()) { perms += 0400; // Java octal number (preceeded by 0) } if (ownerWrite.isSelected()) { perms += 0200; // Java octal number (preceeded by 0) } if (ownerExecute.isSelected()) { perms += 0100; // Java octal number (preceeded by 0) } if (groupRead.isSelected()) { perms += 0040; // Java octal number (preceeded by 0) } if (groupWrite.isSelected()) { perms += 0020; // Java octal number (preceeded by 0) } if (groupExecute.isSelected()) { perms += 0010; // Java octal number (preceeded by 0) } if (otherRead.isSelected()) { perms += 0004; // Java octal number (preceeded by 0) } if (otherWrite.isSelected()) { perms += 0002; // Java octal number (preceeded by 0) } if (otherExecute.isSelected()) { perms += 0001; // Java octal number (preceeded by 0) } return perms; } private void setPermsToCheckboxes(int perms) { ownerRead.setSelected((perms & 0400) > 0); // Java octal number (preceeded by 0) ownerWrite.setSelected((perms & 0200) > 0); // Java octal number (preceeded by 0) ownerExecute.setSelected((perms & 0100) > 0); // Java octal number (preceeded by 0) groupRead.setSelected((perms & 0040) > 0); // Java octal number (preceeded by 0) groupWrite.setSelected((perms & 0020) > 0); // Java octal number (preceeded by 0) groupExecute.setSelected((perms & 0010) > 0); // Java octal number (preceeded by 0) otherRead.setSelected((perms & 0004) > 0); // Java octal number (preceeded by 0) otherWrite.setSelected((perms & 0002) > 0); // Java octal number (preceeded by 0) otherExecute.setSelected((perms & 0001) > 0); // Java octal number (preceeded by 0) } private void setPermsFieldFromCheckboxes() { int perms = getPermsFromCheckboxes(); numberPerms.setText(toThreeCharOctalString(perms)); } private void setCheckboxesFromPermsField() { int perms; try { perms = Integer.parseInt(numberPerms.getText(), 8); setPermsToCheckboxes(perms); } catch (NumberFormatException nfe) { setPermsFieldFromCheckboxes(); JOptionPane.showMessageDialog(this, "Permissions must be a three digit octal value", "", JOptionPane.ERROR_MESSAGE); } } private void onPermStringChanged() { numberPerms.setText(toThreeCharString(numberPerms.getText())); setCheckboxesFromPermsField(); } public PermissionsForm() { this.jobDialog = jobDialog; ActionListener checkboxListener = new ActionListener() { public void actionPerformed(ActionEvent e) { setPermsFieldFromCheckboxes(); fieldChanged(); } }; ownerRead.addActionListener(checkboxListener); ownerWrite.addActionListener(checkboxListener); ownerExecute.addActionListener(checkboxListener); groupRead.addActionListener(checkboxListener); groupWrite.addActionListener(checkboxListener); groupExecute.addActionListener(checkboxListener); otherRead.addActionListener(checkboxListener); otherWrite.addActionListener(checkboxListener); otherExecute.addActionListener(checkboxListener); numberPerms.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent e) { onPermStringChanged(); } }); numberPerms.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { onPermStringChanged(); } }); DocumentListener docListener = new DocumentListener() { public void insertUpdate(DocumentEvent e) { fieldChanged(); } public void removeUpdate(DocumentEvent e) { fieldChanged(); } public void changedUpdate(DocumentEvent e) { fieldChanged(); } }; numberPerms.getDocument().addDocumentListener(docListener); } public void setJobDialog(JobDialog jobDialog) { this.jobDialog = jobDialog; } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); ownerExecute.setEnabled(enabled); ownerRead.setEnabled(enabled); ownerWrite.setEnabled(enabled); groupExecute.setEnabled(enabled); groupRead.setEnabled(enabled); groupWrite.setEnabled(enabled); otherExecute.setEnabled(enabled); otherWrite.setEnabled(enabled); otherRead.setEnabled(enabled); numberPerms.setEnabled(enabled); } public int getPermissionsValue() { return Integer.parseInt(numberPerms.getText()); // use this because it is in the right // format. } public void setPermissionsValue(int value) { String newValue = "" + value; numberPerms.setText(newValue); setCheckboxesFromPermsField(); } private void fieldChanged() { if (jobDialog != null) { jobDialog.fieldChanged(); } } private static String toThreeCharOctalString(int perms) { String s = Integer.toOctalString(perms); return toThreeCharString(s); } private static String toThreeCharString(String s) { s = s.trim(); if (s.length() > 3) { s = s.substring(0, 3); } else { while (s.length() < 3) { s = "0" + s; } } return s; } { // GUI initializer generated by IntelliJ IDEA GUI Designer // >>> IMPORTANT!! <<< // DO NOT EDIT OR ADD ANY CODE HERE! $$$setupUI$$$(); } /** * Method generated by IntelliJ IDEA GUI Designer >>> IMPORTANT!! <<< DO NOT edit this method OR * call it in your code! * * @noinspection ALL */ private void $$$setupUI$$$() { panel1 = new JPanel(); panel1.setLayout(new FormLayout( "fill:max(m;4px):noGrow,left:4dlu:noGrow,fill:max(m;4px):noGrow,left:4dlu:noGrow,fill:max(m;4px):noGrow,left:4dlu:noGrow,fill:max(m;4px):noGrow", "center:d:noGrow,top:4dlu:noGrow,center:max(d;4px):noGrow,top:4dlu:noGrow,center:max(d;4px):noGrow,top:4dlu:noGrow,center:max(d;4px):noGrow,top:4dlu:noGrow,center:max(d;4px):noGrow")); final JLabel label1 = new JLabel(); label1.setText(" "); CellConstraints cc = new CellConstraints(); panel1.add(label1, cc.xy(1, 1)); final JLabel label2 = new JLabel(); label2.setText("Read"); panel1.add(label2, cc.xy(3, 1)); final JLabel label3 = new JLabel(); label3.setText("Write"); panel1.add(label3, cc.xy(5, 1)); final JLabel label4 = new JLabel(); label4.setText("Execute"); panel1.add(label4, cc.xy(7, 1)); final JLabel label5 = new JLabel(); label5.setText("Owner"); panel1.add(label5, cc.xy(1, 3)); final JLabel label6 = new JLabel(); label6.setText("Group"); panel1.add(label6, cc.xy(1, 5)); final JLabel label7 = new JLabel(); label7.setText("Other"); panel1.add(label7, cc.xy(1, 7)); ownerRead = new JCheckBox(); ownerRead.setText(""); panel1.add(ownerRead, cc.xy(3, 3, CellConstraints.CENTER, CellConstraints.DEFAULT)); ownerWrite = new JCheckBox(); ownerWrite.setText(""); panel1.add(ownerWrite, cc.xy(5, 3, CellConstraints.CENTER, CellConstraints.DEFAULT)); ownerExecute = new JCheckBox(); ownerExecute.setText(""); panel1.add(ownerExecute, cc.xy(7, 3, CellConstraints.CENTER, CellConstraints.DEFAULT)); groupRead = new JCheckBox(); groupRead.setText(""); panel1.add(groupRead, cc.xy(3, 5, CellConstraints.CENTER, CellConstraints.DEFAULT)); groupWrite = new JCheckBox(); groupWrite.setText(""); panel1.add(groupWrite, cc.xy(5, 5, CellConstraints.CENTER, CellConstraints.DEFAULT)); groupExecute = new JCheckBox(); groupExecute.setText(""); panel1.add(groupExecute, cc.xy(7, 5, CellConstraints.CENTER, CellConstraints.DEFAULT)); otherRead = new JCheckBox(); otherRead.setText(""); panel1.add(otherRead, cc.xy(3, 7, CellConstraints.CENTER, CellConstraints.DEFAULT)); otherWrite = new JCheckBox(); otherWrite.setText(""); panel1.add(otherWrite, cc.xy(5, 7, CellConstraints.CENTER, CellConstraints.DEFAULT)); otherExecute = new JCheckBox(); otherExecute.setText(""); panel1.add(otherExecute, cc.xy(7, 7, CellConstraints.CENTER, CellConstraints.DEFAULT)); final JLabel label8 = new JLabel(); label8.setText("Numeric code"); panel1.add(label8, cc.xyw(1, 9, 5)); numberPerms = new JTextField(); panel1.add(numberPerms, cc.xy(7, 9, CellConstraints.FILL, CellConstraints.DEFAULT)); } /** * @noinspection ALL */ public JComponent $$$getRootComponent$$$() { return panel1; } }