9fad2a52a8
X-SVN-Rev: 15953
396 lines
14 KiB
Java
396 lines
14 KiB
Java
/*
|
|
*****************************************************************************
|
|
* 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")));
|
|
}
|
|
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();
|
|
}
|
|
}
|
|
|