diff options
Diffstat (limited to 'base/console/src/com/netscape/admin/certsrv/CMSAdminUtil.java')
-rw-r--r-- | base/console/src/com/netscape/admin/certsrv/CMSAdminUtil.java | 1298 |
1 files changed, 1298 insertions, 0 deletions
diff --git a/base/console/src/com/netscape/admin/certsrv/CMSAdminUtil.java b/base/console/src/com/netscape/admin/certsrv/CMSAdminUtil.java new file mode 100644 index 000000000..107de427b --- /dev/null +++ b/base/console/src/com/netscape/admin/certsrv/CMSAdminUtil.java @@ -0,0 +1,1298 @@ +// --- BEGIN COPYRIGHT BLOCK --- +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// 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., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// (C) 2007 Red Hat, Inc. +// All rights reserved. +// --- END COPYRIGHT BLOCK --- +package com.netscape.admin.certsrv; + +import java.util.*; +import java.text.*; +import javax.swing.*; +import javax.swing.event.*; +import javax.swing.border.*; +import javax.swing.table.*; +import javax.swing.text.*; +import java.awt.*; +import java.awt.event.*; +import com.netscape.management.client.*; +import com.netscape.management.client.util.*; +import com.netscape.admin.certsrv.misc.MessageFormatter; +import java.text.BreakIterator; +import java.text.Collator; +import com.netscape.management.nmclf.*; + +/** + * Utility class for the CMSAdmin package + * + * @author Jack Pan-Chen + * @version $Revision$, $Date$ + * @date 01/12/97 + */ +public class CMSAdminUtil { + + /*========================================================== + * variables + *==========================================================*/ + public static final int DEFAULT_TEXTFIELD_WIDTH = 30; + public static final int COMPONENT_SPACE = SuiLookAndFeel.COMPONENT_SPACE; + public static final int SEPARATED_COMPONENT_SPACE = + SuiLookAndFeel.SEPARATED_COMPONENT_SPACE; + public static final int DIFFERENT_COMPONENT_SPACE = + SuiLookAndFeel.DIFFERENT_COMPONENT_SPACE; + public static final int HELP_BUTTON_OFFSET = 9; + + public static final int DEFAULT_BUTTON_SIZE = 72; + + final public static Dimension DEFAULT_PANEL_SIZE = new Dimension(350,440); + final public static int DEFAULT_PADDING = SuiLookAndFeel.COMPONENT_SPACE; + private static final int DEFAULT_WIDTH = 40; + final public static Insets DEFAULT_EMPTY_INSETS = new Insets(0,0,0,0); + public static final Insets DEAFULT_END_INSETS = new Insets(COMPONENT_SPACE, + COMPONENT_SPACE,COMPONENT_SPACE,COMPONENT_SPACE); + + public static final int WARNING_MESSAGE = JOptionPane.WARNING_MESSAGE; + public static final int ERROR_MESSAGE = JOptionPane.ERROR_MESSAGE; + public static final int INFORMATION_MESSAGE = JOptionPane.INFORMATION_MESSAGE; + public static final int OK_OPTION = JOptionPane.OK_OPTION; + public static final int NO_OPTION = JOptionPane.NO_OPTION; + public static final int CANCEL_OPTION = JOptionPane.CANCEL_OPTION; + + private static Hashtable mPackageImages = new Hashtable(); //image container + private static final ResourceSet mHelpResource = + new ResourceSet("com.netscape.admin.certsrv.certsrv-help"); + public static final ResourceSet mResource = + new ResourceSet("com.netscape.admin.certsrv.certsrv"); + public static Collator collator = Collator.getInstance(); + + + + /*========================================================== + * Utilities methods + *==========================================================*/ + + /** + * Utility function to retrieve images from the package image + * class path. + * + * @param name Image name to be returned + * @return Image + */ + public static RemoteImage getImage( String name ) { + String imageDir = CMSAdminResources.DEFAULT_IMAGE_DIRECTORY; + RemoteImage i = (RemoteImage) mPackageImages.get( name ); + if ( i != null ) + return i; + i = getSystemImage( imageDir + "/" + name ); + if ( i != null ) + mPackageImages.put( name, i ); + return i; + } + + public static RemoteImage getThemeImage( String name ) { + String imageDir = CMSAdminResources.DEFAULT_THEME_IMAGE_DIRECTORY; + RemoteImage i = (RemoteImage) mPackageImages.get( name ); + if ( i != null ) + return i; + i = getSystemImage( imageDir + "/" + name ); + if ( i != null ) + mPackageImages.put( name, i ); + return i; + } + + /** + * Utility function to reset the GridBagConstraints to default + * + * parameters specified below. + * @param GridBagConstraints to be reseted + */ + public static void resetGBC(GridBagConstraints gbc) + { + gbc.gridx = gbc.RELATIVE; + gbc.gridy = gbc.RELATIVE; + gbc.gridwidth = 1; + gbc.gridheight = 1; + gbc.fill = gbc.HORIZONTAL; + gbc.anchor = gbc.CENTER; + gbc.ipadx = 0; + gbc.ipady = 0; + gbc.weightx = 0.0; + gbc.weighty = 0.0; + gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE, + 0,COMPONENT_SPACE); + } + + public static void repaintComp(JComponent component) { + component.invalidate(); + component.validate(); + component.repaint(1); + } + + public static void enableJTextField(JTextComponent component, + boolean enable, Color color) { + component.setEnabled(enable); + component.setEditable(enable); + component.setBackground(color); + component.invalidate(); + component.validate(); + component.repaint(1); + } + + public static void addComponents(JPanel panel, JComponent comp1, + JComponent comp2, GridBagConstraints gbc) { + double weighty = gbc.weighty; + CMSAdminUtil.resetGBC(gbc); + gbc.anchor = gbc.NORTHEAST; + gbc.fill = gbc.NONE; + gbc.weighty = weighty; + panel.add(comp1, gbc); + + CMSAdminUtil.resetGBC(gbc); + gbc.anchor = gbc.NORTHWEST; + gbc.fill = gbc.NONE; + gbc.weighty = weighty; + gbc.gridwidth = gbc.REMAINDER; + panel.add(comp2, gbc); + } + + public static void addComponents(JPanel panel, JComponent comp1, + JComponent comp2, JComponent comp3, GridBagConstraints gbc) { + double weighty = gbc.weighty; + CMSAdminUtil.resetGBC(gbc); + gbc.anchor = gbc.NORTHEAST; + gbc.fill = gbc.NONE; + gbc.weighty = weighty; + panel.add(comp1, gbc); + + CMSAdminUtil.resetGBC(gbc); + gbc.anchor = gbc.NORTHWEST; + gbc.fill = gbc.NONE; + gbc.weighty = weighty; + panel.add(comp2, gbc); + + CMSAdminUtil.resetGBC(gbc); + gbc.anchor = gbc.NORTHWEST; + gbc.fill = gbc.NONE; + gbc.weighty = weighty; + gbc.gridwidth = gbc.REMAINDER; + panel.add(comp3, gbc); + } + + public static void addComponents(JPanel panel, JComponent comp1, + JComponent comp2, JComponent comp3, JComponent comp4, + GridBagConstraints gbc) { + double weighty = gbc.weighty; + CMSAdminUtil.resetGBC(gbc); + gbc.anchor = gbc.NORTHEAST; + gbc.fill = gbc.NONE; + gbc.weighty = weighty; + panel.add(comp1, gbc); + + CMSAdminUtil.resetGBC(gbc); + gbc.anchor = gbc.NORTHWEST; + gbc.fill = gbc.NONE; + gbc.weighty = weighty; + panel.add(comp2, gbc); + + CMSAdminUtil.resetGBC(gbc); + gbc.anchor = gbc.NORTHWEST; + gbc.fill = gbc.NONE; + gbc.weighty = weighty; + panel.add(comp3, gbc); + + CMSAdminUtil.resetGBC(gbc); + gbc.anchor = gbc.NORTHWEST; + gbc.fill = gbc.NONE; + gbc.weighty = weighty; + gbc.gridwidth = gbc.REMAINDER; + panel.add(comp4, gbc); + } + + /** + * Add a label and a textfield to a panel, assumed to be using + * GridBagLayout. + */ + public static void addEntryField(JPanel panel, JComponent label, + JComponent field, GridBagConstraints gbc) { + gbc.fill = gbc.NONE; + gbc.weightx = 0.0; + gbc.gridwidth = 1; + gbc.gridx = 0; + gbc.anchor = gbc.EAST; + gbc.insets = new Insets(COMPONENT_SPACE,DIFFERENT_COMPONENT_SPACE,0,0); + panel.add( label, gbc ); + + gbc.gridx++; + gbc.anchor = gbc.WEST; + gbc.fill = gbc.HORIZONTAL; + gbc.weightx = 1.0; + gbc.gridwidth = gbc.REMAINDER; + gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE, + 0,DIFFERENT_COMPONENT_SPACE); + panel.add( field, gbc ); + } + + /** + * Add 3 components in the same row to a panel, assumed to be using + * GridBagLayout. + */ + public static void addEntryField(JPanel panel, JComponent field1, + JComponent field2, JComponent field3, GridBagConstraints gbc) { + gbc.fill = gbc.NONE; + gbc.weightx = 0.0; + gbc.gridwidth = 1; + gbc.gridx = 0; + gbc.anchor = gbc.EAST; + gbc.insets = new Insets(COMPONENT_SPACE,DIFFERENT_COMPONENT_SPACE,0,0); + panel.add( field1, gbc ); + + gbc.gridx++; + gbc.anchor = gbc.WEST; + gbc.fill = gbc.NONE; + gbc.weightx = 0.0; + gbc.gridwidth = 1; + gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE,0,0); + panel.add(field2, gbc); + + gbc.gridx++; + gbc.anchor = gbc.WEST; + gbc.fill = gbc.HORIZONTAL; + gbc.weightx = 1.0; + gbc.gridwidth = gbc.REMAINDER; + gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE, + 0,DIFFERENT_COMPONENT_SPACE); + panel.add( field3, gbc ); + } + + /** + * Add 4 components in the same row to a panel, assumed to be using + * GridBagLayout. + */ + public static void addEntryField(JPanel panel, JComponent field1, + JComponent field2, JComponent field3, JComponent field4, GridBagConstraints gbc) { + gbc.fill = gbc.NONE; + gbc.weightx = 0.0; + gbc.gridwidth = 1; + gbc.gridx = 0; + gbc.anchor = gbc.EAST; + gbc.insets = new Insets(COMPONENT_SPACE,DIFFERENT_COMPONENT_SPACE,0,0); + panel.add( field1, gbc ); + + gbc.gridx++; + gbc.anchor = gbc.EAST; + gbc.fill = gbc.HORIZONTAL; + gbc.weightx = 0.5; + gbc.gridwidth = 1; + gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE,0,0); + panel.add(field2, gbc); + + gbc.fill = gbc.NONE; + gbc.weightx = 0.0; + gbc.gridwidth = 1; + gbc.gridx++; + gbc.anchor = gbc.EAST; + gbc.insets = new Insets(COMPONENT_SPACE,DIFFERENT_COMPONENT_SPACE,0,0); + panel.add( field3, gbc ); + + gbc.gridx++; + gbc.anchor = gbc.WEST; + gbc.fill = gbc.HORIZONTAL; + gbc.weightx = 0.5; + gbc.gridwidth = gbc.REMAINDER; + gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE, + 0,DIFFERENT_COMPONENT_SPACE); + panel.add( field4, gbc ); + } + + /** + * Add 5 components in the same row to a panel, assumed to be using + * GridBagLayout. + */ + public static void addEntryField(JPanel panel, JComponent field1, + JComponent field2, JComponent field3, JComponent field4, + JComponent field5, GridBagConstraints gbc) { + gbc.fill = gbc.NONE; + gbc.weightx = 0.0; + gbc.gridwidth = 1; + gbc.gridx = 0; + gbc.anchor = gbc.EAST; + gbc.insets = new Insets(COMPONENT_SPACE,DIFFERENT_COMPONENT_SPACE,0,0); + panel.add( field1, gbc ); + + gbc.gridx++; + gbc.anchor = gbc.EAST; + gbc.fill = gbc.HORIZONTAL; + //gbc.weightx = 0.5; + gbc.gridwidth = 1; + gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE,0,0); + panel.add(field2, gbc); + + gbc.fill = gbc.NONE; + gbc.weightx = 0.0; + gbc.gridwidth = 1; + gbc.gridx++; + gbc.anchor = gbc.EAST; + gbc.insets = new Insets(COMPONENT_SPACE,DIFFERENT_COMPONENT_SPACE,0,0); + panel.add( field3, gbc ); + + gbc.gridx++; + gbc.anchor = gbc.WEST; + gbc.fill = gbc.HORIZONTAL; + //gbc.weightx = 0.5; + gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE, + 0,DIFFERENT_COMPONENT_SPACE); + panel.add( field4, gbc ); + + gbc.gridx++; + gbc.anchor = gbc.WEST; + gbc.fill = gbc.HORIZONTAL; + gbc.weightx = 1.0; + gbc.gridwidth = gbc.REMAINDER; + gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE, + 0,DIFFERENT_COMPONENT_SPACE); + panel.add( field5, gbc ); + } + + /** + * Add 6 components in the same row to a panel, assumed to be using + * GridBagLayout. + */ + public static void addEntryField(JPanel panel, JComponent field1, + JComponent field2, JComponent field3, JComponent field4, + JComponent field5, JComponent field6, GridBagConstraints gbc) { + gbc.fill = gbc.NONE; + gbc.weightx = 0.0; + gbc.gridwidth = 1; + gbc.gridx = 0; + gbc.anchor = gbc.EAST; + gbc.insets = new Insets(COMPONENT_SPACE,DIFFERENT_COMPONENT_SPACE,0,0); + panel.add( field1, gbc ); + + gbc.gridx++; + gbc.anchor = gbc.EAST; + gbc.fill = gbc.HORIZONTAL; + //gbc.weightx = 0.5; + gbc.gridwidth = 1; + gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE,0,0); + panel.add(field2, gbc); + + gbc.fill = gbc.NONE; + gbc.weightx = 0.0; + gbc.gridwidth = 1; + gbc.gridx++; + gbc.anchor = gbc.EAST; + gbc.insets = new Insets(COMPONENT_SPACE,DIFFERENT_COMPONENT_SPACE,0,0); + panel.add( field3, gbc ); + + gbc.gridx++; + gbc.anchor = gbc.WEST; + gbc.fill = gbc.HORIZONTAL; + //gbc.weightx = 0.5; + gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE, + 0,DIFFERENT_COMPONENT_SPACE); + panel.add(field4, gbc); + + gbc.fill = gbc.NONE; + gbc.weightx = 0.0; + gbc.gridwidth = 1; + gbc.gridx++; + gbc.anchor = gbc.EAST; + gbc.insets = new Insets(COMPONENT_SPACE,DIFFERENT_COMPONENT_SPACE,0,0); + panel.add( field5, gbc ); + + gbc.gridx++; + gbc.anchor = gbc.WEST; + gbc.fill = gbc.HORIZONTAL; + gbc.weightx = 1.0; + gbc.gridwidth = gbc.REMAINDER; + gbc.insets = new Insets(COMPONENT_SPACE,COMPONENT_SPACE, + 0,DIFFERENT_COMPONENT_SPACE); + panel.add( field6, gbc ); + } + + /** + * Utility function to wrap text at given width. Used mostly + * for displaying text in the dialog box. + * + * @param s message string + * @param width width per line + * @return string with line feeds + */ + public static String wrapText(String str, int width) + { + if (str == null || str.length() < width) { + return str; + } + String ret = ""; + + StringTokenizer tokenizer = new StringTokenizer(str, "\n"); + while (tokenizer.hasMoreTokens()) { + BreakIterator boundary = BreakIterator.getLineInstance(); + String s = (String)tokenizer.nextToken(); + boundary.setText(s); + int end; + int start = 0; + while ((end = boundary.next()) != BreakIterator.DONE) { + if (end - start > width) { + end = boundary.previous(); + if (start == end) { + // Was too long for even one iteration + end = boundary.next(); + } + ret += s.substring(start, end); + ret += "\n"; + start = end; + } + } + end = boundary.last(); + ret = ret+s.substring(start, end)+"\n"; + } + return ret; + } + + public static String certRequestWrapText(String s, int width) { + String ret = ""; + StringTokenizer tokenizer = new StringTokenizer(s, "\n"); + int numTokens = tokenizer.countTokens(); + int index = 1; + String beginCert = ""; + String endCert = ""; + String content = ""; + while(tokenizer.hasMoreTokens()) { + String sToken = (String)tokenizer.nextToken(); + if (index == 1) { + beginCert = sToken; + } else if (index == numTokens) { + endCert = sToken; + } else { + content += sToken; + } + + index++; + } + + ret = beginCert+"\n"+wrapText(content, width, true)+"\n"+endCert; + return ret; + } + + public static String wrapText(String s, int width, boolean noIterator) { + if (noIterator) { + if (s == null || s.length() <= width) { + return s; + } + + String ret = ""; + int start = 0; + int end = width; + int len = s.length(); + while (len > width) { + ret += s.substring(start, end); + ret += "\n"; + len -= width; + start += width; + end += width; + } + ret += s.substring(start); + return ret; + } else { + return wrapText(s, width); + } + } + + /** + * Utility function to wrap text at default width. Used mostly + * for displaying text in the dialog box. + * + * @param s message string + * @return string with line feeds + */ + public static String wrapText(String s) { + return(wrapText(s, DEFAULT_WIDTH)); + } + + /** + * Find out the table width to be used + * + * @table JTable object + */ + public static int getTotalColumnWidth( JTable table ) { + Enumeration en = table.getColumnModel().getColumns(); + int width = 0; + while( en.hasMoreElements() ) { + TableColumn col = (TableColumn)en.nextElement(); + width += col.getWidth(); + } + return width - 200; + } + + + /*========================================================== + * Component Factory + *==========================================================*/ + + //==== BORDER CREATION ==================================== + public static Border makeEtchedBorder() { + Border margin = new EmptyBorder(0,0, + SuiLookAndFeel.VERT_WINDOW_INSET,0); + return new CompoundBorder(BorderFactory.createEtchedBorder(), margin); + } + + public static Border makeTitledBorder(ResourceBundle resource, + String panelName, + String keyword) { + String title; + try { + title = resource.getString(panelName+"_BORDER_"+keyword+"_LABEL"); + } catch (MissingResourceException e) { + title = "Missing Title"; + } + return new TitledBorder(title); + } + + //==== DIALOG CREATION ==================================== + + public static void showMessageDialog(ResourceBundle resource, + String panelName, + String keyword, + int messageType ) { + showMessageDialog(UtilConsoleGlobals.getActivatedFrame(), resource, panelName, keyword, messageType); + } + + public static void showMessageDialog(JFrame frame, + String title, + String msg, + int messageType ) { + Icon icon; + if (messageType != ERROR_MESSAGE) + icon = getImage(CMSAdminResources.IMAGE_INFO_ICON); + else + icon = getImage(CMSAdminResources.IMAGE_ERROR_ICON); + + JOptionPane.showMessageDialog( + frame, + CMSAdminUtil.wrapText(msg), + title, + messageType, + icon); + } + + /** + * Creating message dialog box for display + */ + public static void showMessageDialog(JFrame frame, + ResourceBundle resource, + String panelName, + String keyword, + int messageType ) { + String msg, title; + try { + msg = resource.getString(panelName+"_DIALOG_"+keyword+ "_MESSAGE"); + } catch (MissingResourceException e) { + msg = "Missing Label"; + } + try { + title = resource.getString(panelName+"_DIALOG_"+keyword+ "_TITLE"); + } catch (MissingResourceException e) { + title = "Missing Title"; + } + + Icon icon; + if (messageType != ERROR_MESSAGE) + icon = getImage(CMSAdminResources.IMAGE_INFO_ICON); + else + icon = getImage(CMSAdminResources.IMAGE_ERROR_ICON); + + JOptionPane.showMessageDialog( + frame, + CMSAdminUtil.wrapText(msg), + title, + messageType, + icon); + } + + public static void showErrorDialog(ResourceBundle resource, + String message, + int messageType) { + showErrorDialog(new JFrame(), resource, message, messageType); + } + + /** + * Creating error dialog box for display + */ + public static void showErrorDialog(JFrame frame, + ResourceBundle resource, + String message, + int messageType) { + String title; + try { + title = resource.getString(CMSAdminResources.GENERAL_ERROR); + } catch (MissingResourceException e) { + title = "Missing Title"; + } + JOptionPane.showMessageDialog( + frame, + CMSAdminUtil.wrapText(message), + title, + messageType, + getImage(CMSAdminResources.IMAGE_ERROR_ICON)); + } + + public static int showConfirmDialog( ResourceBundle resource, + String panelName, + String keyword, + int messageType ) + { + return showConfirmDialog(new JFrame(), resource, panelName, keyword, messageType); + } + + public static int showConfirmDialog( ResourceBundle resource, + String panelName, + String keyword, String[] params, + int messageType ) + { + return showConfirmDialog(new JFrame(), resource, panelName, keyword, + params, messageType); + } + + /** + * Creating confirm dialog box for display + */ + public static int showConfirmDialog( JFrame frame, + ResourceBundle resource, + String panelName, + String keyword, + int messageType ) + { + String msg, title; + try { + msg = resource.getString(panelName+"_DIALOG_"+keyword+ "_MESSAGE"); + } catch (MissingResourceException e) { + msg = "Missing Label"; + } + try { + title = resource.getString(panelName+"_DIALOG_"+keyword+ "_TITLE"); + } catch (MissingResourceException e) { + title = "Missing Title"; + } + + return JOptionPane.showConfirmDialog( + frame, + CMSAdminUtil.wrapText(msg), title, + JOptionPane.YES_NO_OPTION, + messageType, + getImage(CMSAdminResources.IMAGE_WARN_ICON)); + } + + public static int showConfirmDialog(JFrame frame, ResourceBundle resource, + String panelName, String keyword, String[] params, int messageType ) + { + String msg, title; + try { + msg = resource.getString(panelName+"_DIALOG_"+keyword+ "_MESSAGE"); + } catch (MissingResourceException e) { + msg = "Missing Label"; + } + try { + title = resource.getString(panelName+"_DIALOG_"+keyword+ "_TITLE"); + } catch (MissingResourceException e) { + title = "Missing Title"; + } + + String finalmsg = msg; + if (params != null && params.length > 0) { + MessageFormat mf = new MessageFormat(msg); + finalmsg = mf.format(params); + } + + return JOptionPane.showConfirmDialog( + frame, + CMSAdminUtil.wrapText(finalmsg), title, + JOptionPane.YES_NO_OPTION, + messageType, + getImage(CMSAdminResources.IMAGE_WARN_ICON)); + } + + //==== LABEL CREATION ================================ + + /** + * Factory Method to create LABEL using specified params + */ + public static JLabel makeJLabel(ResourceBundle resource, + String panelName, + String keyword, + Icon icon) + { + return makeJLabel(resource, panelName, keyword, icon, -1); + } + + + /** + * Factory Method to create LABEL using specified params + */ + public static JLabel makeJLabel(ResourceBundle resource, + String panelName, + String keyword, + Icon icon, + int alignment) + { + String title; + try { + title = resource.getString(panelName+"_LABEL_"+keyword+ "_LABEL"); + } catch (MissingResourceException e) { + title = "Missing Label"; + Debug.println("CMSAdminUtil - makeJLabel() - missing resource: "+panelName+"_LABEL_"+keyword+ "_LABEL"); + } + JLabel label = new JLabel(); + if (icon != null) + label.setIcon(icon); + if (title != null) + label.setText(title); + if (alignment != -1) + label.setHorizontalAlignment(alignment); + //setToolTip(resource, panelName, "LABEL_"+keyword, label); + + return label; + } + + + //==== TEXTFIELD CREATION ================================ + + /** + * Factory Method to create TextFiled using specified params + */ + public static JTextField makeJTextField(Document d, + String s, + int len, + Object listener) { + + JTextField pf = new JTextField(DEFAULT_TEXTFIELD_WIDTH){ + public void setEnabled( boolean enabled ) { + super.setEnabled( enabled ); + //super.setEditable(enabled); + super.setBackground( enabled ? Color.white: SystemColor.window); + } + }; + pf.setEnabled( true ); + + if (d != null) + pf.setDocument(d); + if (s != null) + pf.setText(s); + if (len != -1) + pf.setColumns(len); + + pf.addActionListener((ActionListener)listener); + //detect text changes + pf.getDocument().addDocumentListener((DocumentListener)listener); + return pf; + } + + //==== PASSWORD FIELD CREATION ================================ + + /** + * Factory Method to create Password Filed using specified params + */ + public static JPasswordField makeJPasswordField(Document d, + String s, + int len, + Object listener) { + JPasswordField pf = new JPasswordField(DEFAULT_TEXTFIELD_WIDTH) { + public void setEnabled( boolean enabled ) { + super.setEnabled( enabled ); + super.setEditable(enabled); + setBackground( enabled ? Color.white: SystemColor.window); + this.repaint(); + } + }; + pf.setEnabled( true ); + if (d != null) + pf.setDocument(d); + if (s != null) + pf.setText(s); + if (len != -1) + pf.setColumns(len); + + pf.addActionListener((ActionListener)listener); + //detect text changes + pf.getDocument().addDocumentListener((DocumentListener)listener); + return pf; + } + + + //==== LIST CREATION ================================ + + /** + * Factory Method to create a list box mode specified with specific + * visible row count. Special cell renderer is used to display each cell. + */ + public static JList makeJList(DefaultListModel listModel, int visibleCount) { + JList listbox = new JList(listModel); + listbox.setCellRenderer(new AttrCellRenderer()); + listbox.setSelectionModel(new DefaultListSelectionModel()); + listbox.setVisibleRowCount(visibleCount); + if(listModel.size()!=0) + listbox.setSelectedIndex(0); + return listbox; + } + + //===== CHECKBOX CREATION ======================= + + /** + * Factory Method to create CheckBox using specified params + */ + public static JCheckBox makeJCheckBox(ResourceBundle resource, + String panelName, + String keyword, + Icon icon, + boolean select, + ActionListener listener) + { + String label; + try { + label = resource.getString(panelName+"_CHECKBOX_"+keyword+ "_LABEL"); + } catch (MissingResourceException e) { + label = "Missing Label"; + } + + JCheckBox button = new JCheckBox(); + if (label != null) + button.setText(label); + if (icon != null) + button.setIcon(icon); + button.setSelected(select); + button.addActionListener(listener); + //setToolTip(resource, panelName, "CHECKBOX_"+keyword, button); + + return button; + } + + //===== RADIO BUTTON CREATION ======================= + + /** + * Factory Method to create Radio Button using specified params + */ + public static JRadioButton makeJRadioButton(ResourceBundle resource, + String panelName, + String keyword, + Icon icon, + boolean select, + ActionListener listener) + { + String label; + try { + label = resource.getString(panelName+"_RADIOBUTTON_"+keyword+ "_LABEL"); + } catch (MissingResourceException e) { + label = "Missing Label"; + } + + JRadioButton button = new JRadioButton(); + if (label != null) + button.setText(label); + if (icon != null) + button.setIcon(icon); + button.setSelected(select); + button.addActionListener(listener); + //setToolTip(resource, panelName, "RADIOBUTTON_"+keyword, button); + + return button; + } + + //===== BUTTON CREATION ======================= + + /** + * Factory Method to create Button using specified params + */ + public static JButton makeJButton(ResourceBundle resource, + String panelName, + String keyword, + Icon icon, + ActionListener listener) + { + String label; + try { + label = resource.getString(panelName+"_BUTTON_"+keyword+ "_LABEL"); + } catch (MissingResourceException e) { + label = "Missing Label"; + } + + JButton button = new JButton(); + if (label != null) + button.setText(label); + if (icon != null) + button.setIcon(icon); + button.addActionListener(listener); + //setToolTip(resource, panelName, "BUTTON_"+keyword, button); + + return button; + } + + /** + * Create a panel with horizontally arranged, equally sized buttons + * The buttons are aligned to the right in the panel (if it is + * stretched beyond the length of the buttons) + * + * @param buttons An array of buttons for the panel + * @param isHelp Help button is the last one so pat extra space + * @param isConfig don't pat button + * @return A panel containing the buttons + */ + + public static JPanel makeJButtonPanel( JButton[] buttons) { + return makeJButtonPanel(buttons, false, false); + } + + public static JPanel makeJButtonPanel( JButton[] buttons, boolean isHelp) { + return makeJButtonPanel(buttons, isHelp, false); + } + + public static JPanel makeJButtonPanel( JButton[] buttons, boolean isHelp, boolean isConfig) { + JButtonFactory.resize( buttons ); + JPanel buttonPanel = new JPanel(); + GridBagConstraints gbc = new GridBagConstraints(); + buttonPanel.setLayout(new GridBagLayout()); + gbc.fill = gbc.HORIZONTAL; + gbc.weightx = 1.0; + gbc.weighty = 0.0; + gbc.gridwidth = 1; + buttonPanel.add( Box.createGlue(), gbc ); + gbc.fill = gbc.NONE; + gbc.weightx = 0; + for( int i = 0; i < buttons.length; i++ ) { + if ( i == buttons.length-1 ) { + gbc.gridwidth = gbc.REMAINDER; + if (isHelp) + buttonPanel.add( Box.createHorizontalStrut(HELP_BUTTON_OFFSET)); + else + buttonPanel.add( Box.createHorizontalStrut(SuiLookAndFeel.COMPONENT_SPACE) ); + } + buttonPanel.add( buttons[i], gbc ); + if ( i < buttons.length-2 ) + buttonPanel.add( Box.createHorizontalStrut(SuiLookAndFeel.COMPONENT_SPACE) ); + } + + JPanel p = new JPanel(); + p.setLayout( new BorderLayout() ); + p.add( "Center", buttonPanel ); + + if(!isConfig) { + p.add( "South", + Box.createVerticalStrut(DIFFERENT_COMPONENT_SPACE) ); + p.add( "East", + Box.createHorizontalStrut(DIFFERENT_COMPONENT_SPACE) ); + } else { + p.add( "South", + Box.createVerticalStrut(DIFFERENT_COMPONENT_SPACE-COMPONENT_SPACE) ); + } + p.add( "North", + Box.createVerticalStrut(DIFFERENT_COMPONENT_SPACE) ); + + return p; + } + + /** + * Create a panel with vertically arranged, equally sized buttons + * The buttons are aligned to the top in the panel (if it is + * stretched beyond the length of the buttons) + * + * @param buttons An array of buttons for the panel + * @return A panel containing the buttons + */ + public static JPanel makeJButtonVPanel( JButton[] buttons ) { + //JButtonFactory.resize( buttons ); + JPanel buttonPanel = new JPanel(); + GridBagConstraints gbc = new GridBagConstraints(); + buttonPanel.setLayout(new GridBagLayout()); + resetGBC(gbc); + gbc.fill = gbc.NONE; + gbc.gridwidth = gbc.REMAINDER; + gbc.weightx = 1.0; + gbc.insets = new Insets(0, DIFFERENT_COMPONENT_SPACE, 0,0); + + for( int i = 0; i < buttons.length; i++ ) { + if ( i == buttons.length-1 ) + gbc.gridheight = gbc.REMAINDER; + buttonPanel.add( buttons[i], gbc ); + gbc.insets = new Insets(COMPONENT_SPACE, DIFFERENT_COMPONENT_SPACE, + 0, 0); + } + + JPanel p = new JPanel(); + p.setLayout( new BorderLayout() ); + p.add( "Center", buttonPanel ); + return p; + } + + //===== COMBOBOX CREATION ======================= + + public static JComboBox makeJComboBox(ResourceBundle resource, + String panelName, + String keyword) + { + String value = null; + try { + value = resource.getString(panelName+"_COMBOBOX_"+keyword+"_DEFAULT"); + } catch (MissingResourceException e) { + } + JComboBox jcb = new JComboBox(); + String val = null; + int ii = 0; + do { + try { + val = resource.getString(panelName+"_COMBOBOX_"+keyword+"_VALUE_"+ii); + if (val != null) { + jcb.addItem(val); + } + ++ii; + } catch (MissingResourceException e) { + val = null; + } + } while (val != null); + + if (value != null) + jcb.setSelectedItem(value); + return jcb; + } + + + //===== TOOL TIP CREATION ======================= + + /** + * Set tool tip on compoenent using resources passed in + */ + public static void setToolTip(ResourceBundle resource, + String panelName, + String compKeyword, + JComponent w) + { + try { + String ttip = resource.getString(panelName+"_"+compKeyword+"_TTIP"); + w.setToolTipText(ttip); + } catch (MissingResourceException e) { + //DON'T HAVE TOOT TIP + } + } + + public static String[] randomize(String [] t) { + String[] s = new String[t.length]; + System.arraycopy(t,0,s,0,t.length); + String[] result = new String[s.length]; + + int j=0; + java.util.Random r = new java.util.Random(); + + for (int i=0; i<s.length; i++) { + int x = r.nextInt(); + if (x <0) x = -x; + int n = x % (s.length-i); + result[j] = s[n]; + s[n] = s[s.length-i-1]; + j++; + } + return result; + } + + /** + * Sorts the array of strings using bubble sort. + * @param str The array of string being sorted. The str parameter contains + * the sorted result. + */ + public static void bubbleSort(String[] str) { + for (int i = 0; i < str.length-1; i++) { + for (int j = i+1; j < str.length; j++) { + if( collator.compare(str[i], str[j]) > 0 ) { + String t = str[i]; + str[i] = str[j]; + str[j] = t; + } + } + } + } + + public static void bubbleSort(String[] str, String[] data) { + for (int i = 0; i < str.length-1; i++) { + for (int j = i+1; j < str.length; j++) { + if( collator.compare(str[i], str[j]) > 0 ) { + String t = str[i]; + str[i] = str[j]; + str[j] = t; + String d = data[i]; + data[i] = data[j]; + data[j] = d; + } + } + } + } + + public static void quickSort(String[] str, int low, int high) { + if (low >= high) + return; + + String pivot = str[low]; + int slow = low-1, shigh = high+1; + + while (true) { + do + shigh--; + while (collator.compare(str[shigh], pivot) > 0); + do + slow++; + while (collator.compare(pivot, str[slow]) > 0); + if (slow >= shigh) + break; + + String temp = str[slow]; + str[slow] = str[shigh]; + str[shigh] = temp; + } + + quickSort (str, low, shigh); + quickSort (str, shigh+1, high); + } + + public static void help(String token) { + Debug.println( "CMSAdminUtil.help: "+token); + new Help(mHelpResource).help(token); + } + + //get localized string using the format + public static String getLocalizedString(ResourceBundle resource, + String keyword, + Object param) { + return MessageFormatter.getLocalizedString(resource.getClass().getName(), + keyword, param); + } + + //get localized string using the format + public static String getLocalizedString(ResourceBundle resource, + String keyword, + Object [] params) { + return MessageFormatter.getLocalizedString(resource.getClass().getName(), + keyword, params); + } + + public static String getPureString(String data) { + StringBuffer input = new StringBuffer(data); + StringBuffer buff = new StringBuffer(); + for (int i=0; i< input.length(); i++) { + char c = input.charAt(i); + if ((c != '\n') && (c != '\r')) + buff.append(c); + } + return buff.toString(); + } + + /*========================================================== + * private methods + *==========================================================*/ + + /** + * This is not necessary any more, now that RemoteImage implements + * the code we used to have inside this method. + */ + static RemoteImage getSystemImage( String imagePath ) { + return new RemoteImage( imagePath ); + } + + public static JTextArea createTextArea(String str, Color color) { + JTextArea desc = new JTextArea(str); + desc.setBackground(color); + desc.setEditable(false); + desc.setCaretColor(color); + desc.setLineWrap(true); + desc.setWrapStyleWord(true); + + return desc; + } + + public static long hexToLong(String s) + throws NumberFormatException { + int len = s.length(); + double y = 0; + double base = 16; + long num = 0; + + StringBuffer buffer = new StringBuffer(s); + + for (int i=0; i<len; i++) { + char x = buffer.charAt(i); + if (x >= '0' && x <= '9') { + y = x-48; + } else if (x == 'a') { + y = 10; + } else if (x == 'b') { + y = 11; + } else if (x == 'c') { + y = 12; + } else if (x == 'd') { + y = 13; + } else if (x == 'e') { + y = 14; + } else if (x == 'f') { + y = 15; + } else { + num = -1; + break; + } + num = num+(long)(y*Math.pow(base, len-1-i)); + } + + return num; + } + + public static Object createTableCell(String syntax, String syntaxVal, String v) { + if (syntax.equalsIgnoreCase("string") || + syntax.equalsIgnoreCase("integer")) { + if (v == null) { + return new JTextField(""); + } else { + return new JTextField(v); + } + } else if (syntax.equalsIgnoreCase("choice")) { + if (syntaxVal != null && syntaxVal.length() > 0) { + StringTokenizer st = new StringTokenizer(syntaxVal, ","); + int num = st.countTokens(); + String[] item = new String[num]; + int i=0; + while (st.hasMoreTokens()) { + String token = st.nextToken(); + // Fixes Bugscape Bug #56335: remove extraneous ';' + if( token.charAt(0) == ';' ) { + token = token.substring(1); + } + item[i++] = token; + } + + CMSAdminUtil.bubbleSort(item); + JComboBox b = new JComboBox(item); + + if (v != null && v.length() > 0) + b.setSelectedItem(v); + else + b.setSelectedIndex(0); + return b; + } + } else if (syntax.equalsIgnoreCase("boolean")) { + String[] item = {"true", "false"}; + JComboBox b = new JComboBox(item); + if (v != null && v.equalsIgnoreCase("true")) { + b.setSelectedIndex(0); + } else { + b.setSelectedIndex(1); + } + return b; + } + + return null; + } +} |