/* ***************************************************************************** * Copyright (C) 2000-2004, International Business Machines Corporation and * * others. All Rights Reserved. * ***************************************************************************** */ package com.ibm.rbm.gui; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import com.ibm.rbm.*; /** * A dialog which allows the user to create a new Bundle Item */ class BundleItemCreationDialog extends JDialog { RBManager rbm; String groupName; BundleItem item; boolean firstInit = true; // Helper data int left_col_width = 125; int right_col_width = 275; int row_height = 25; Dimension leftDim = new Dimension(left_col_width, row_height); Dimension rightDim = new Dimension(right_col_width, row_height); // Components Box mainBox = new Box(BoxLayout.Y_AXIS); Box box1 = new Box(BoxLayout.X_AXIS); Box box2 = new Box(BoxLayout.X_AXIS); Box box3 = new Box(BoxLayout.X_AXIS); Box box4 = new Box(BoxLayout.X_AXIS); Box box5 = new Box(BoxLayout.X_AXIS); Box box6 = new Box(BoxLayout.X_AXIS); JLabel instructionsLabel = new JLabel(""); JLabel groupLabel = new JLabel(Resources.getTranslation("dialog_group")); JLabel nameLabel = new JLabel(Resources.getTranslation("dialog_key")); JLabel transLabel = new JLabel(Resources.getTranslation("dialog_translation")); JLabel commentLabel = new JLabel(Resources.getTranslation("dialog_comment")); JLabel lookupLabel = new JLabel(Resources.getTranslation("dialog_lookups")); JComboBox groupComboBox = new JComboBox(); JTextField nameField = new JTextField(""); JTextField transField = new JTextField(""); JTextField commentField = new JTextField(""); JTextField lookupFields[] = null; JLabel noLookupLabel = null; Box lookupBox = null; Box lookupBoxes[] = null; JLabel lookupLabels[] = null; JButton createButton = new JButton(Resources.getTranslation("button_create")); JButton createMoreButton = new JButton(Resources.getTranslation("button_create_more")); JButton cancelButton = new JButton(Resources.getTranslation("button_cancel")); Hashtable lookups = new Hashtable(); public BundleItemCreationDialog(RBManager rbm, JFrame frame, String title, boolean modal) { super(frame, title, modal); this.rbm = rbm; groupName = null; item = null; initComponents(); } public BundleItemCreationDialog(String groupName, RBManager rbm, JFrame frame, String title, boolean modal) { super(frame, title, modal); this.rbm = rbm; this.groupName = groupName; item = null; initComponents(); } public BundleItemCreationDialog(BundleItem item, RBManager rbm, JFrame frame, String title, boolean modal) { super(frame, title, modal); this.item = item; this.rbm = rbm; groupName = item.getParentGroup().getName(); initComponents(); } boolean createItem() { if (rbm == null) return false; Hashtable lookupHash = new Hashtable(); if (lookupBoxes != null) { for (int i=0; i < lookupBoxes.length; i++) { String nameText = lookupLabels[i].getText().trim(); String name = nameText.substring(nameText.indexOf("{")+1,nameText.indexOf("}")); String value = lookupFields[i].getText().trim(); lookupHash.put(name,value); } } return rbm.createItem(nameField.getText().trim(), transField.getText().trim(), ((BundleGroup)groupComboBox.getSelectedItem()).getName(), commentField.getText().trim(), lookupHash); } boolean editItem() { if (item == null) return false; Hashtable lookupHash = new Hashtable(); if (lookupBoxes != null) { for (int i=0; i < lookupBoxes.length; i++) { String nameText = lookupLabels[i].getText().trim(); String name = nameText.substring(nameText.indexOf("{")+1,nameText.indexOf("}")); String value = lookupFields[i].getText().trim(); lookupHash.put(name,value); } } return rbm.editItem(item, nameField.getText().trim(), transField.getText().trim(), ((BundleGroup)groupComboBox.getSelectedItem()).getName(), commentField.getText().trim(), lookupHash); } private void clearComponents() { nameField.setText(""); transField.setText(""); commentField.setText(""); initComponents(); } protected void processKeyEvent(KeyEvent ev) { if (ev.getKeyCode() == KeyEvent.VK_ENTER && ev.getID() == KeyEvent.KEY_RELEASED) { if (transField.hasFocus()) { // If we are in the translation field, then enter should create a new line character, not exit the dialog int caretPos = transField.getCaretPosition(); String oldText = transField.getText(); transField.setText(oldText.substring(0,caretPos) + "\n" + oldText.substring(caretPos,oldText.length())); transField.setCaretPosition(caretPos+1); validate(); setSize(getPreferredSize()); return; } BundleItemCreationDialog dialog = this; boolean success = false; if (dialog.item == null) success = dialog.createItem(); else success = dialog.editItem(); if (!success) { String alert = (item == null ? Resources.getTranslation("error_create_item") : Resources.getTranslation("error_modify_item")); alert += " " + Resources.getTranslation("error_try_again_item"); JOptionPane.showMessageDialog(dialog, alert, Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); } else { ((RBManagerGUI)dialog.getParent()).updateDisplayPanels(); ((RBManagerGUI)dialog.getParent()).invalidate(); //((RBManagerGUI)dialog.getParent()).validateMyTree(); dialog.setVisible(false); dialog.dispose(); } } else if (ev.getKeyCode() == KeyEvent.VK_ESCAPE) { closeWindow(); } } private void initComponents(){ enableEvents(AWTEvent.KEY_EVENT_MASK); // Error check if (rbm == null || rbm.getBundles() == null) { String alert = Resources.getTranslation("error_no_bundle_for_item"); JOptionPane.showMessageDialog(this, alert, Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); closeWindow(); return; } // Initialize values Bundle mainBundle = (Bundle)rbm.getBundles().firstElement(); if (firstInit) { groupComboBox = new JComboBox(mainBundle.getGroupsAsVector()); if (groupName != null) { for (int i = 0; i < groupComboBox.getItemCount(); i++) { BundleGroup bg = (BundleGroup)groupComboBox.getItemAt(i); if (bg.getName().equals(groupName)) { groupComboBox.setSelectedIndex(i); break; } } } } if (firstInit && item != null) { // We are editing, not creating an item createButton.setText(Resources.getTranslation("button_edit")); createMoreButton.setText(Resources.getTranslation("button_edit_more")); if (item.getKey() != null) nameField.setText(item.getKey()); if (item.getComment() != null) commentField.setText(item.getComment()); if (item.getTranslation() != null) transField.setText(item.getTranslation()); if (item.getLookups() != null) lookups = item.getLookups(); } String currentTrans = transField.getText(); // ** LOOKUPS ** // Update the lookups if necessary if (lookupBoxes != null) { for (int i=0; i < lookupBoxes.length; i++) { String nameText = lookupLabels[i].getText().trim(); String name = nameText.substring(nameText.indexOf("{")+1,nameText.indexOf("}")); String value = lookupFields[i].getText().trim(); lookups.put(name,value); } } // Remove old lookups if necessary Enumeration enum = lookups.keys(); while (enum.hasMoreElements()) { String name = (String)enum.nextElement(); if (currentTrans.indexOf("{" + name + "}") < 0) { lookups.remove(name); } } // Add new lookups if neccesary if (currentTrans != null && currentTrans.indexOf("{") >= 0) { while (currentTrans.indexOf("{") >= 0) { currentTrans = currentTrans.substring(currentTrans.indexOf("{")+1,currentTrans.length()); String name = currentTrans.substring(0,currentTrans.indexOf("}")); if (!lookups.containsKey(name)) { lookups.put(name,""); } } } // Remove components box5.removeAll(); // Now create the visual components for the lookups if (lookups.size() > 0) { noLookupLabel = null; lookupBox = new Box(BoxLayout.Y_AXIS); lookupBoxes = new Box[lookups.size()]; lookupFields = new JTextField[lookups.size()]; lookupLabels = new JLabel[lookups.size()]; int count = 0; enum = lookups.keys(); while (enum.hasMoreElements()) { String name = (String)enum.nextElement(); String value = (String)lookups.get(name); RBManagerGUI.debugMsg("Lookup: " + name + " -> " + value); RBManagerGUI.debugMsg(lookups.toString()); lookupBoxes[count] = new Box(BoxLayout.X_AXIS); lookupFields[count] = new JTextField((value == null ? "" : value)); lookupLabels[count] = new JLabel("{" + name + "}"); lookupBoxes[count].add(Box.createHorizontalGlue()); lookupBoxes[count].add(lookupLabels[count]); lookupBoxes[count].add(Box.createHorizontalStrut(5)); lookupBoxes[count].add(lookupFields[count]); lookupBox.add(lookupBoxes[count]); count++; } } else { lookupBox = null; lookupBoxes = null; lookupFields = null; lookupLabels = null; noLookupLabel = new JLabel(Resources.getTranslation("none")); } // Set up the components if (firstInit) { groupLabel.setPreferredSize(leftDim); groupComboBox.setPreferredSize(rightDim); nameLabel.setPreferredSize(leftDim); nameField.setColumns(30); commentLabel.setPreferredSize(leftDim); commentField.setColumns(30); transLabel.setPreferredSize(leftDim); transField.setColumns(30); lookupLabel.setPreferredSize(leftDim); box1.add(groupLabel); box1.add(groupComboBox); box2.add(nameLabel); box2.add(nameField); box4.add(commentLabel); box4.add(commentField); box3.add(transLabel); box3.add(transField); createButton.setMnemonic(RBManagerMenuBar.getKeyEventKey(Resources.getTranslation("button_create_trigger"))); createMoreButton.setMnemonic(RBManagerMenuBar.getKeyEventKey(Resources.getTranslation("button_create_more_trigger"))); getRootPane().setDefaultButton(createButton); } box5.add(Box.createHorizontalGlue()); box5.add(lookupLabel); box5.add(Box.createHorizontalStrut(5)); if (noLookupLabel != null) { noLookupLabel.setPreferredSize(rightDim); box5.add(noLookupLabel); } else box5.add(lookupBox); if (firstInit) { box6.add(createButton); box6.add(Box.createHorizontalStrut(5)); if (item == null) box6.add(createMoreButton); box6.add(Box.createHorizontalStrut(5)); box6.add(cancelButton); } instructionsLabel.setBorder(BorderFactory.createEtchedBorder()); // Add the appropriate listeners if (firstInit) { cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { JDialog dialog = (JDialog)((JButton)ev.getSource()).getParent().getParent().getParent().getParent().getParent().getParent(); dialog.setVisible(false); dialog.dispose(); } }); createButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { BundleItemCreationDialog dialog = (BundleItemCreationDialog)((JButton)ev.getSource()).getParent().getParent().getParent().getParent().getParent().getParent(); boolean success = false; if (dialog.item == null) success = dialog.createItem(); else success = dialog.editItem(); if (!success) { String alert = (item == null ? Resources.getTranslation("error_create_item") : Resources.getTranslation("error_modify_item")); alert += " " + Resources.getTranslation("error_try_again_item"); JOptionPane.showMessageDialog(dialog, alert, Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); } else { ((RBManagerGUI)dialog.getParent()).updateDisplayPanels(); ((RBManagerGUI)dialog.getParent()).invalidate(); //((RBManagerGUI)dialog.getParent()).validateMyTree(); dialog.setVisible(false); dialog.dispose(); } } }); createMoreButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { BundleItemCreationDialog dialog = (BundleItemCreationDialog)((JButton)ev.getSource()).getParent().getParent().getParent().getParent().getParent().getParent(); boolean success = false; if (dialog.item == null) success = createItem(); else success = dialog.editItem(); if (!success) { String alert = (item == null ? Resources.getTranslation("error_create_item") : Resources.getTranslation("error_modify_item")); alert += " " + Resources.getTranslation("error_try_again_item"); JOptionPane.showMessageDialog(dialog, alert, Resources.getTranslation("error"), JOptionPane.ERROR_MESSAGE); } else { ((RBManagerGUI)dialog.getParent()).updateDisplayPanels(); ((RBManagerGUI)dialog.getParent()).invalidate(); //((RBManagerGUI)dialog.getParent()).validateMyTree(); dialog.clearComponents(); } } }); transField.addFocusListener(new FocusListener() { public void focusGained(FocusEvent ev) {} public void focusLost(FocusEvent ev) { BundleItemCreationDialog dialog = (BundleItemCreationDialog)((JTextField)ev.getSource()).getParent().getParent().getParent().getParent().getParent().getParent(); firstInit = false; dialog.initComponents(); } }); } // Complete the initialization of the frame if (firstInit) setLocation(new java.awt.Point(50, 50)); mainBox.removeAll(); //mainBox.add(instructionsLabel); mainBox.add(Box.createVerticalStrut(5)); mainBox.add(box1); mainBox.add(Box.createVerticalStrut(5)); mainBox.add(box2); mainBox.add(Box.createVerticalStrut(5)); mainBox.add(box3); mainBox.add(Box.createVerticalStrut(5)); mainBox.add(box4); mainBox.add(Box.createVerticalStrut(5)); if (noLookupLabel == null) { mainBox.add(box5); mainBox.add(Box.createVerticalStrut(5)); } mainBox.add(box6); getContentPane().add(mainBox, BorderLayout.CENTER); validateTree(); pack(); setVisible(true); //setResizable(false); firstInit = false; } void closeWindow() { setVisible(false); dispose(); } }