summaryrefslogtreecommitdiff
path: root/usr/src/cmd/krb5/kadmin/gui/dchanger/DurationHelper.java
diff options
context:
space:
mode:
authorstevel@tonic-gate <none@none>2005-06-14 00:00:00 -0700
committerstevel@tonic-gate <none@none>2005-06-14 00:00:00 -0700
commit7c478bd95313f5f23a4c958a745db2134aa03244 (patch)
treec871e58545497667cbb4b0a4f2daf204743e1fe7 /usr/src/cmd/krb5/kadmin/gui/dchanger/DurationHelper.java
downloadillumos-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.java331
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);
+ }
+ */
+}