package timeflow.app.actions;
import timeflow.model.*;
import timeflow.app.ui.*;
import timeflow.app.*;
import timeflow.data.db.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class RenameFieldAction extends TimeflowAction {
public RenameFieldAction(TimeflowApp app)
{
super(app, "Rename Field...", null, "Rename a field from this database");
}
@Override
public void actionPerformed(ActionEvent e) {
JPanel panel=new JPanel();
panel.setLayout(new GridLayout(4,1));
panel.add(new JLabel("Choose a field and type a new name."));
final JComboBox fieldChoices=new JComboBox();
panel.add(fieldChoices);
ArrayList<String> options=new ArrayList<String>();
for (Field f: getModel().getDB().getFields())
fieldChoices.addItem(f.getName());
JPanel inputPanel=new JPanel();
inputPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
inputPanel.add(new JLabel("New Name:"));
final JTextField nameField=new JTextField(20);
inputPanel.add(nameField);
nameField.requestFocus();
final JLabel feedback=new JLabel("(No name entered)");
nameField.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
String name=nameField.getText();
Field other=getModel().getDB().getField(name);
//System.out.println("name="+name);
if (name.trim().length()==0)
{
feedback.setText("(No name entered)");
} else if (other!=null && !other.getName().equals(fieldChoices.getSelectedItem()))
{
feedback.setText("A field named '"+name+"' already exists.");
} else
feedback.setText("");
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}});
panel.add(inputPanel);
feedback.setForeground(Color.gray);
panel.add(feedback);
String[] o={"OK", "Cancel"};
int n = JOptionPane.showOptionDialog(
app,
panel,
"Rename Field",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.PLAIN_MESSAGE,
null,
o,
o[0]);
if (n==0)
{
Field old=getModel().getDB().getField((String)fieldChoices.getSelectedItem());
String newName=nameField.getText();
Field conflict=getModel().getDB().getField(newName);
boolean tooSpacey=newName.trim().length()==0;
if (tooSpacey)
app.showUserError("Can't change the field name to be empty.");
else if (conflict!=null && conflict!=old)
app.showUserError("A field named '"+newName+"' already exists.");
else
{
getModel().getDB().renameField(old, nameField.getText());
getModel().noteSchemaChange(this);
}
}
}
}