diff options
author | stevel@tonic-gate <none@none> | 2005-06-14 00:00:00 -0700 |
---|---|---|
committer | stevel@tonic-gate <none@none> | 2005-06-14 00:00:00 -0700 |
commit | 7c478bd95313f5f23a4c958a745db2134aa03244 (patch) | |
tree | c871e58545497667cbb4b0a4f2daf204743e1fe7 /usr/src/cmd/krb5/kadmin/gui/dchanger/DurationHelper.java | |
download | illumos-joyent-7c478bd95313f5f23a4c958a745db2134aa03244.tar.gz |
OpenSolaris Launch
Diffstat (limited to 'usr/src/cmd/krb5/kadmin/gui/dchanger/DurationHelper.java')
-rw-r--r-- | usr/src/cmd/krb5/kadmin/gui/dchanger/DurationHelper.java | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/usr/src/cmd/krb5/kadmin/gui/dchanger/DurationHelper.java b/usr/src/cmd/krb5/kadmin/gui/dchanger/DurationHelper.java new file mode 100644 index 0000000000..45d3da80f6 --- /dev/null +++ b/usr/src/cmd/krb5/kadmin/gui/dchanger/DurationHelper.java @@ -0,0 +1,331 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * ident "%Z%%M% %I% %E% SMI" + * + * Copyright (c) 1999-2000 by Sun Microsystems, Inc. + * All rights reserved. + */ + + import java.awt.*; + import java.awt.event.*; + import java.text.NumberFormat; + import java.util.ResourceBundle; + import java.util.MissingResourceException; + + /** + * This creates a modal dialog box that lets the user enter a duration of + * time in seconds/minutes/hours/days/weeks/months/years. + */ + public class DurationHelper extends Dialog { + + private boolean save; + + private Frame parent; + + private Choice unit; + private TextField value; + private Label total; + + private Button ok; + private Button cancel; + private Button help; + private Button compute; + + private HelpDialog hd = null; + + // For I18N + private static ResourceBundle rb = + ResourceBundle.getBundle("GuiResource" /* NOI18N */); + private static ResourceBundle hrb = + ResourceBundle.getBundle("HelpData" /* NOI18N */); + + private static String[] units = { getString("Seconds"), + getString("Minutes"), + getString("Hours"), + getString("Days"), + getString("Weeks"), + getString("Months"), + getString("Years") }; + private static int[] unitMultipliers = {1, 60, 60*60, 60*60*24, + 60*60*24*7, 60*60*24*30, + 60*60*24*365 }; + private static NumberFormat nf = NumberFormat.getInstance(); + private static Toolkit toolkit = Toolkit.getDefaultToolkit(); + + /** + * Constructor for DurationHelper. + * @param parent the parent Frame to whom input will be blocked + * while this dialog box is begin shown(modal behaviour). + */ + public DurationHelper(Frame parent, Color background, Color foreground) { + super(parent, getString("SEAM Duration Helper"), true); + + this.parent = parent; + + setLayout(new GridBagLayout()); + addLabels(); + addFields(background, foreground); + addButtons(); + setSize(350, 150); + setResizable(false); + addWindowListener(new DHWindowListener()); + } + + /** + * Adds all the labels. + */ + private void addLabels() { + GridBagConstraints gbc = new GridBagConstraints(); + gbc.weightx = gbc.weighty = 1; + add(new Label(getString("Unit")), gbc); + add(new Label(getString("Value")), gbc); + + gbc.gridx = 3; + gbc.gridy = 0; + add(new Label(getString("Seconds")), gbc); + } + + /** + * Initializes the strings for the units. + */ + private void initUnits() { + unit = new Choice(); + for (int i = 0; i < units.length; i++) + unit.add(units[i]); + unit.select(getString("Hours")); + unit.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + DurationHelper.this.checkErrorAndSetTotal(); + } + }); + } + + /** + * Adds all the fields + */ + private void addFields(Color background, Color foreground) { + GridBagConstraints gbc = new GridBagConstraints(); + gbc.weightx = gbc.weighty = 1; + initUnits(); + value = new TextField(); + value.setBackground(background); + value.setForeground(foreground); + value.setColumns(10); + + // TBD: make total large enough to hold the largest int + total = new Label(" " /* NO18N */, + Label.RIGHT); + gbc.gridx = 0; + gbc.gridy = 1; + add(unit, gbc); + gbc.gridx = 1; + add(value, gbc); + gbc.gridx = 3; + add(total, gbc); + + value.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + DurationHelper.this.durationHelperClose(true); + } + }); + } + + /** + * Adds all the buttons. + */ + private void addButtons() { + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.weightx = gbc.weighty = 1; + + gbc.gridwidth = GridBagConstraints.REMAINDER; + gbc.fill = GridBagConstraints.BOTH; + gbc.gridx = 0; + gbc.gridy = 2; + gbc.insets = new Insets(0, 10, 0, 10); + add(new LineSeparator(), gbc); + gbc.insets = new Insets(0, 0, 0, 0); + + Panel p = new Panel(); + p.setLayout(new GridBagLayout()); + ok = new Button(getString("OK")); + cancel = new Button(getString("Cancel")); + help = new Button(getString("Help")); + gbc = new GridBagConstraints(); + gbc.weightx = gbc.weighty = 1; + p.add(ok, gbc); + p.add(cancel, gbc); + p.add(help, gbc); + + ActionListener bl = new ButtonListener(); + ok.addActionListener(bl); + cancel.addActionListener(bl); + help.addActionListener(bl); + + gbc.gridy = 3; + gbc.gridwidth = GridBagConstraints.REMAINDER; + gbc.fill = GridBagConstraints.HORIZONTAL; + add(p, gbc); + + gbc = new GridBagConstraints(); + gbc.gridx = 2; + gbc.gridy = 1; + compute = new Button(getString("=")); + add(compute, gbc); + compute.addActionListener(bl); + + } + + /** + * Updates the label called total. + * @return false if the text entry in the value + * field is not parseable, true otherwise. + */ + private boolean checkErrorAndSetTotal() { + try { + String noSpaces = value.getText().trim(); + value.setText(noSpaces); + Long l = Long.valueOf(noSpaces); + total.setText(nf.format(l.longValue() * + unitMultipliers[unit.getSelectedIndex()])); + } catch (NumberFormatException e) { + value.requestFocus(); + value.selectAll(); + toolkit.beep(); + return false; + } + + return true; + } + + /** + * Hides the duration helper. + * @param save true if the user wants to save the current value in + * the dialog box, false if it is to be discarded. This is decided + * based on whether the user clicked on the "Ok" button or the + * "Cancel" button. Choosing the window close menu is equivalent to + * clicking on "Cancel." + */ + private void durationHelperClose(boolean save) { + if (save == true) { + if (!checkErrorAndSetTotal()) + return; + } + this.save = save; + setVisible(false); + } + + /** + * Determine whether or not the user wanted to save the value in + * this Dialog box. The user indicates this by clicking on the Ok + * button to save it and on the Cancel button to discard it. Using the + * window close menu responds the same way as cancel. + * @return true if the user wanted to use this value, + * false if it is to be discarded. + */ + public boolean isSaved() { + return save; + } + + /** + * The string representation of the contents of this dialog box. + * @return a String with the total number of seconds entered. + */ + public String toString() { + return total.getText(); + } + + // * ********************************************** + // I N N E R C L A S S E S F O L L O W + // * ********************************************** + + /** + * Listener for closing the dialog box through the window close + * menu. + */ + private class DHWindowListener extends WindowAdapter { + public void windowClosing(WindowEvent e) { + durationHelperClose(false); + } + } + + /** + * Listener for all the buttons. + * The listener is shared for the sake + * of reducing the number of overall listeners. + */ + private class ButtonListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + if (e.getSource() == ok) { + DurationHelper.this.durationHelperClose(true); + } else if (e.getSource() == cancel) { + DurationHelper.this.durationHelperClose(false); + } else if (e.getSource() == help) { + if (hd != null) + hd.show(); + else { + hd = new HelpDialog(DurationHelper. this.parent, + getString("Help for entering time duration"), + false, 5, 45); + hd.setVisible(true); + hd.setText(getString(hrb, "DurationHelperHelp")); + } + } else if (e.getSource() == compute) { + checkErrorAndSetTotal(); + } + } + } + + /** + * Call rb.getString(), but catch exception + * and return English + * key so that small spelling errors don't cripple the GUI + * + */ + private static final String getString(String key) { + return (getString(rb, key)); + } + + private static final String getString(ResourceBundle rb, String key) { + try { + String res = rb.getString(key); + return res; + } catch (MissingResourceException e) { + System.out.println("Missing resource "+key+", using English."); + return key; + } + } + + /* + * A main method to test this class. + */ + /* + public static void main(String args[]) { + Frame f = new Frame("Test DurationHelper"); + f.setVisible(true); // for help dialog to use this as parent + DurationHelper dh = new DurationHelper(f, Color.white, Color.black); + dh.setVisible(true); + System.out.println("Save is " + dh.save); + } + */ +} |