com.archivas.clienttools.arcmover.gui.settings.PermissionsForm.java Source code

Java tutorial

Introduction

Here is the source code for com.archivas.clienttools.arcmover.gui.settings.PermissionsForm.java

Source

// 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;
    }
}