This is the mail archive of the rhdb@sources.redhat.com mailing list for the RHDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Final set of changes to Administrator 2.0 (Java) for PostgreSQL 7.4 series.


A bit late, but better than never :)

This patch brings Administrator up to speed with
7.4.x. All privileges items have been fixed to allow
the new WITH GRANT OPTION, while maintaining 7.3.x
compatibility. 

Also, thanks to Peter Eisentraut and Tom Lane for
quick replies to my queries regarding certain changes
in the ACL format for 7.4.x.

Attached is the diff file and an additional file,
PrivilegesCheckBoxPanel.java which is now required by
Administrator.

Deepak Bhole

______________________________________________________________________ 
Post your free ad now! http://personals.yahoo.ca
/*
 * Copyright (c) 2004 Red Hat, Inc. All rights reserved.
 *
 * This software may be freely redistributed under the terms of the
 * GNU General Public License.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * Component of: Administrator GUI tool for PostgreSQL - Red Hat Edition
 */

package com.redhat.rhdb.admin;

/**
 * A Check Box panel specifically for privileges.
 * <p>
 * Based on com.redhat.rhdb.admin.CheckBoxPanel by <a href="mailto:bbooth@redhat.com";>Brian Booth</a>
 *
 * @author  <a href="mailto:ibetthisidisavailable@yahoo.ca";>Deepak Bhole</a>
 * 
 */

public class PrivilegesCheckBoxPanel extends javax.swing.JPanel implements java.awt.event.ActionListener {
	
	/** Creates a new instance of PrivilegesCheckBoxPanel */
    /**
     * Creates a CheckBoxPanel with a title
     * 
     * @param names An array of names associated with the CheckBoxes
     * @param layout the layout of the panel. Must be either CheckBoxPanel.HORIZONTAL or CheckBoxPanel.VERTICAL
     * @param title the title of the panel
     *
     */    
	public PrivilegesCheckBoxPanel(String[] names, String title, String secondaryCheckBoxTitle) {
		
		jchButtons = new javax.swing.JCheckBox[names.length];
		jchSecondaryButtons = new javax.swing.JCheckBox[names.length];
		hasChanged = new boolean[names.length];
		hasSecondaryChanged = new boolean[names.length];

		hasSecondaryCBEnabled = true;
		hasSecondaryCB = !secondaryCheckBoxTitle.equals("");
		java.awt.GridLayout gl;

		setLayout(new java.awt.GridBagLayout());
		java.awt.GridBagConstraints gridBagConstraints;

		for (int i = 0; i < names.length; i++) {
			gridBagConstraints = new java.awt.GridBagConstraints();
			gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 0);
			gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
			gridBagConstraints.gridx = 0;
			gridBagConstraints.gridy = i;
			gridBagConstraints.weightx = 1.0;
			gridBagConstraints.weighty = 1.0;
			jchButtons[i] = new javax.swing.JCheckBox(names[i]);
			jchButtons[i].setEnabled(false);
			add(jchButtons[i], gridBagConstraints);
			hasChanged[i] = false;
			jchButtons[i].addActionListener(this);
			
			if (hasSecondaryCB) {
				jchSecondaryButtons[i] = new javax.swing.JCheckBox(secondaryCheckBoxTitle);
				gridBagConstraints = new java.awt.GridBagConstraints();
				gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
				gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0);
				gridBagConstraints.gridx = 1;
				gridBagConstraints.gridy = i;
				gridBagConstraints.weightx = 1.0;
				gridBagConstraints.weighty = 1.0;
				hasSecondaryChanged[i] = false;
				jchSecondaryButtons[i].setEnabled(false);
				add(jchSecondaryButtons[i], gridBagConstraints);
				jchSecondaryButtons[i].addActionListener(this);
			}
		}

		setBorder(new javax.swing.border.TitledBorder(title));
	}
	
	/**.
     * For IDE Use.
     */
    public PrivilegesCheckBoxPanel() {
        super();
    }
	
    /**
     * Enables or disables the CheckBoxes
     * 
     * @param enabled true if the CheckBoxes are enabled, false otherwise.
     *
     */    
    public void setEnabled(boolean enabled) {

		for (int i = 0; i < jchButtons.length; i++) {
			jchButtons[i].setEnabled(enabled);
			
			if (hasSecondaryCB && jchButtons[i].isSelected())
				jchSecondaryButtons[i].setEnabled(hasSecondaryCBEnabled && enabled);
		}

		super.setEnabled(enabled);
    }
    
    /**
     * Deselects all checkboxes and clears history
     *
     */    
    public void reset() {

		for (int i = 0; i < jchButtons.length; i++) {
			jchButtons[i].setSelected(false);
			
			if (hasSecondaryCB) {
				jchSecondaryButtons[i].setSelected(false);
				jchSecondaryButtons[i].setEnabled(false);
			}

			hasChanged[i] = false;
			hasSecondaryChanged[i] = false;
		}

    }
    
    /**
     * Gets the text of the selected CheckBoxes
     * 
     * @return the text associated with the selected CheckBoxes
     *
	 */
	public String[] getSelectedBoxes() {
		
		int size = 0;
		
		for (int i = 0; i < jchButtons.length; i++)
			if (jchButtons[i].isSelected())
				size++;
		
		String[] names = new String[size];
		
		int index = 0;
		
		for (int i = 0; i < jchButtons.length; i++)
			if (jchButtons[i].isSelected()) {
				names[index] = jchButtons[i].getText();
				index++;
			}
		
		return names;
		
	}

    /**
     * Gets the text of the selected CheckBoxes
     * 
     * @return the text associated with the selected CheckBoxes
     *
	 */
	public String[] getPrimaryOnlySelectedBoxes() {
		
		int size = 0;
		
		for (int i = 0; i < jchButtons.length; i++)
			if (jchButtons[i].isSelected() && !(hasSecondaryCB && jchSecondaryButtons[i].isSelected()))
				size++;
		
		String[] names = new String[size];
		
		int index = 0;
		
		for (int i = 0; i < jchButtons.length; i++)
			if (jchButtons[i].isSelected() && !(hasSecondaryCB && jchSecondaryButtons[i].isSelected())) {
				names[index] = jchButtons[i].getText();
				index++;
			}
		
		return names;
		
	}
	
	/**
     * Gets the text of the selected secondary CheckBoxes
     * 
     * @return the text associated with the selected secondary CheckBoxes
     *
	 */
	public String[] getSelectedSecondaryBoxes() {
		
		int size = 0;
		
		for (int i = 0; i < jchButtons.length; i++)
			if (hasSecondaryCB && jchButtons[i].isSelected() && jchSecondaryButtons[i].isSelected())
				size++;
		
		String[] names = new String[size];
		
		int index = 0;
		
		for (int i = 0; i < jchButtons.length; i++)
			if (hasSecondaryCB && jchButtons[i].isSelected() && jchSecondaryButtons[i].isSelected()) {
				names[index] = jchButtons[i].getText();
				index++;
			}

		return names;
	}
	
	/**
     * Gets the indexes of the selected CheckBoxes
     * 
     * @return the indexes associated with the selected CheckBoxes
     *
     */    
	public int[] getSelectedIndexes() {
		
		int size = 0;
		
		for (int i = 0; i < jchButtons.length; i++)
			if (jchButtons[i].isSelected())
				size++;
		
		int[] indexes = new int[size];
		
		int index = 0;
		
		for (int i = 0; i < jchButtons.length; i++)
			if (jchButtons[i].isSelected()) {
				indexes[index] = i;
				index++;
			}
		
		return indexes;
	}

    /**
     * Gets the indexes of the selected and enabled secondary CheckBoxes
     * 
     * @return the indexes associated with the selected and enabled secondary CheckBoxes
     */    

	public int[] getSelectedSecondaryIndexes() {

		int size = 0;
		
		for (int i = 0; i < jchButtons.length; i++)
			if (hasSecondaryCB && jchButtons[i].isSelected() && jchSecondaryButtons[i].isSelected())
				size++;
		
		int[] indexes = new int[size];
		
		int index = 0;
		
		for (int i = 0; i < jchButtons.length; i++)
			if (hasSecondaryCB && jchButtons[i].isSelected() && jchSecondaryButtons[i].isSelected()) {
				indexes[index] = i;
				index++;
			}

		return indexes;
	}
	
	/**
     * Checks if the chechbox is selected at the given index 
     *
     * @return  Returns true if the checkbox at 'index' is selected and
     * 		false otherwise    
     *
     */    
    public boolean isSelected(int index) {
		return jchButtons[index].isSelected();
   }
   
   /**
     * Checks if the secondary chechbox is selected at the given index 
     *
     * @return  Returns true if the checkbox at 'index' is selected and
     * 		false otherwise    
     *
     */    
    public boolean isSecondarySelected(int index) {
		if (hasSecondaryCB)
			return jchSecondaryButtons[index].isSelected();
		else
			return false;
   }

	/**
     * Sets the Selection mode of the CheckBox at the given index
     * 
     * @param index the index of the RadioButton you want to select
     * @param isSelect true if the CheckBox is selected, false otherwise
     *
     */    
    public void setSelectedBox(int index, boolean isSelect) {
		jchButtons[index].setSelected(isSelect);
		
		if (isSelect)
			jchSecondaryButtons[index].setEnabled(true);
    }

	/**
     * Sets the Selection mode of the secondary CheckBox at the given index
     * 
     * @param index the index of the RadioButton you want to select
     * @param isSelect true if the CheckBox is selected, false otherwise
     *
     */    
    public void setSelectedSecondaryBox(int index, boolean isSelect) {
		if (hasSecondaryCB)
			jchButtons[index].setSelected(isSelect);
    }
	
	/**
     * Sets the Selection mode of the CheckBoxes at the given indexes
     * 
     * @param indexes the indexes of the CheckBoxes you want to select
     * @param isSelect true if the CheckBoxes are selected, false otherwise
     *
     */    
    public void setSelectedBoxes(int[] indexes, boolean isSelect) {
    	for (int i = 0; i < indexes.length; i++) {
			jchButtons[indexes[i]].setSelected(isSelect);
			
			if (hasSecondaryCB && isSelect)
				jchSecondaryButtons[indexes[i]].setEnabled(hasSecondaryCBEnabled && true);
		}
    }

 	/**
     * Sets the Selection mode of the Secondary CheckBoxes at the given indexes.
	 * Secondary CB's can be selected iff the primary is selected.
	 *
     * 
     * @param indexes the indexes of the CheckBoxes you want to select
     * @param isSelect true if the CheckBoxes are selected, false otherwise
     *
     */    
    public void setSelectedSecondaryBoxes(int[] indexes, boolean isSelect) {
		if (!hasSecondaryCB)
			return;
		
    	for (int i = 0; i < indexes.length; i++) {
			if (jchButtons[indexes[i]].isSelected())
				jchSecondaryButtons[indexes[i]].setSelected(isSelect);
		}
    }
	
	/**
     * Sets the Selection mode of the first CheckBox with the given text
     * 
     * @param str the text associated with the CheckBox you want to select
     * @param isSelect true if the CheckBox is selected, false otherwise
     *
     */    
    public void setSelectedBox(String str, boolean isSelect) {
		for (int i = 0; i < jchButtons.length; i++)
			if (str.equals(jchButtons[i].getText())) {
				jchButtons[i].setSelected(isSelect);
				
				if (hasSecondaryCB && isSelect)
					jchSecondaryButtons[i].setEnabled(hasSecondaryCBEnabled && true);
				
			}
    }
    
	/**
     * Sets the Selection mode of the first secondary CheckBox with the given text (for the primary)
     * 
     * @param str the text associated with the CheckBox whose secondary you want to select
     * @param isSelect true if the CheckBox is selected, false otherwise
     *
     */

	public void setSelectedSecondaryBox(String str, boolean isSelect) {
		for (int i = 0; i < jchButtons.length; i++)
			if (hasSecondaryCB && str.equals(jchButtons[i].getText()) && jchButtons[i].isSelected())
				jchSecondaryButtons[i].setSelected(isSelect);
    }
	
	/**
     * Sets the Selection mode of the CheckBoxes that have the given text
     * 
     * @param str the text associated with the CheckBoxes you want to select
     * @param isSelect true if the CheckBoxes are selected, false otherwise
     *
     */
    public void setSelectedBoxes(String[] str, boolean isSelect) {
		for (int i = 0; i < jchButtons.length; i++)
			for (int j = 0; j < str.length; j++)
				if (str[j].equals(jchButtons[i].getText())) {
					jchSecondaryButtons[i].setSelected(isSelect);
					
					if (hasSecondaryCB && isSelect)
						jchSecondaryButtons[i].setEnabled(hasSecondaryCBEnabled && true);
				}
    }
	
	/**
     * Sets the Selection mode of the secondary CheckBoxes whose primary have the given text
     * 
     * @param str the text associated with the CheckBoxes whose secondary you want to select
     * @param isSelect true if the CheckBoxes are selected, false otherwise
     *
     */
    public void setSelectedSecondaryBoxes(String[] str, boolean isSelect) {
		for (int i = 0; i < jchButtons.length; i++)
			for (int j = 0; j < str.length; j++)
				if (hasSecondaryCB && str[j].equals(jchButtons[i].getText()) && jchButtons[i].isSelected())
					jchSecondaryButtons[i].setSelected(isSelect);
    }

    /**
     * Gets the indexes of the CheckBoxes whose values have changed (Primary or Secondary).
     * 
     * @return the indexes associated with the CheckBoxes whose values have changed.
     *
     */    
	public int[] getChangedIndexes() {
		int size = 0;
		
		for (int i = 0; i < hasChanged.length; i++) {
			if (hasChanged[i] || (hasSecondaryCB && hasSecondaryChanged[i]))
				size++;
		}
		
		int[] toReturn = new int[size];
		int index = 0;
		
		for (int i = 0; i < hasChanged.length; i++)
			if (hasChanged[i] || (hasSecondaryCB && hasSecondaryChanged[i])) {
				toReturn[index] = i;
				index++;
			}
		
		return toReturn;
	}

    /**
     * Gets the indexes of the primary CheckBoxes whose values have changed.
     * 
     * @return the indexes associated with the CheckBoxes whose values have changed.
     *
     */    
	public int[] getChangedPrimaryIndexes() {
		int size = 0;
		
		for (int i = 0; i < hasChanged.length; i++)
			if (hasChanged[i])
				size++;
		
		int[] toReturn = new int[size];
		int index = 0;
		
		for (int i = 0; i < hasChanged.length; i++)
			if (hasChanged[i]) {
				toReturn[index] = i;
				index++;
			}
		
		return toReturn;
	}
	
     /**
     * Gets the indexes of the secondary CheckBoxes whose values have changed.
     * 
     * @return the indexes associated with the CheckBoxes whose values have changed.
     *
     */    
	public int[] getChangedSecondaryIndexes() {
		
		if (!hasSecondaryCB) {
			return new int[0];
		}
		
		int size = 0;
		
		for (int i = 0; i < hasChanged.length; i++)
			if (hasChanged[i])
				size++;
		
		int[] toReturn = new int[size];
		int index = 0;
		
		for (int i = 0; i < hasChanged.length; i++)
			if (hasChanged[i]) {
				toReturn[index] = i;
				index++;
			}
		
		return toReturn;
	}
	
	/**
     * Gets the text of the CheckBoxes whose values have changed.
     * 
     * @return the text associated with the CheckBoxes whose values have changed.
     *
     */    
	public String[] getChangedStrings() {
		int size = 0;
		
		for (int i = 0; i < hasChanged.length; i++)
			if (hasChanged[i] || (hasSecondaryCB && hasSecondaryChanged[i]))
				size++;
		
		String[] toReturn = new String[size];
		int index = 0;
		
		for (int i = 0; i < hasChanged.length; i++)
			if (hasChanged[i] || (hasSecondaryCB && hasSecondaryChanged[i])) {
				toReturn[index] = jchButtons[i].getText();
				index++;
			}
		
		return toReturn;
	}

    /**
	 * Set all secondary checkboxes to given state (selected items are unselected).
	 *
	 * @param enabled The state to set the boxes to.
	 */
	
	public void setSecondaryCBEnabled(boolean enabled) {
		if (!hasSecondaryCB)
			return;
		
		hasSecondaryCBEnabled = enabled;
		for (int i=0; i < jchSecondaryButtons.length; i++) {
			jchSecondaryButtons[i].setSelected(false);
			jchSecondaryButtons[i].setEnabled(enabled);
		}
	}
	
	 /**
     * Run whenever a CheckBoxes value changes. Fires a PropertyChangedEvent
     * 
     * @param evt the selection or de-selection of a CheckBox
     *
     */    
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        for (int i = 0; i < jchButtons.length; i++) {
			if (evt.getSource() == jchButtons[i])
				hasChanged[i] = !hasChanged[i];
			
			if (hasSecondaryCB && evt.getSource() == jchSecondaryButtons[i]) {
				hasSecondaryChanged[i] = !hasSecondaryChanged[i];
			}

			if (evt.getSource() == jchButtons[i]) {
				if (jchButtons[i].isSelected()) {
					if (hasSecondaryCB) 
						jchSecondaryButtons[i].setEnabled(hasSecondaryCBEnabled && true);
				} else {
					if (hasSecondaryCB)
						jchSecondaryButtons[i].setEnabled(false);
				}
			}
		}

		firePropertyChange(SELECTION_MADE, !hasChanged[0], hasChanged[0]);
    }

	protected javax.swing.JCheckBox[] jchButtons = new javax.swing.JCheckBox[0];
	protected javax.swing.JCheckBox[] jchSecondaryButtons = new javax.swing.JCheckBox[0];
    protected boolean[] hasChanged = new boolean[0];
	protected boolean[] hasSecondaryChanged = new boolean[0];

	private boolean hasSecondaryCB = false;
	private boolean hasSecondaryCBEnabled = true;
	
	/** Name of the PropertyChangeEvent */
    public static final String SELECTION_MADE = "Check Box Selected";
}

Attachment: administrator-7.4patch-3
Description: administrator-7.4patch-3


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]