blob: 4333bad71a7c35522ba7594b11aa7bc4219ef93e [file] [log] [blame]
/*
*****************************************************************************
* Copyright (C) 2000-2007, 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 keys = lookups.keys();
while (keys.hasMoreElements()) {
String name = (String)keys.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;
keys = lookups.keys();
while (keys.hasMoreElements()) {
String name = (String)keys.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();
}
}