// **********************************************************************
//
// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************
package IceGrid.TreeNode;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import IceGrid.DbEnvDescriptor;
import IceGrid.Model;
import IceGrid.ObjectDescriptor;
import IceGrid.TableDialog;
import IceGrid.Utils;
class DbEnvEditor extends ListElementEditor
{
DbEnvEditor(JFrame parentFrame)
{
super(false);
_name.getDocument().addDocumentListener(_updateListener);
_name.setToolTipText(
"Identifies this Freeze database environment within an Ice communicator");
_description.getDocument().addDocumentListener(_updateListener);
_description.setToolTipText(
"An optional description for this database environment");
JTextField dbHomeTextField = (JTextField)
_dbHome.getEditor().getEditorComponent();
dbHomeTextField.getDocument().addDocumentListener(_updateListener);
_dbHome.setToolTipText("node data dir/servers/server id"
+ "/dbs/db env name if created by the IceGrid Node;
"
+ "otherwise, IceGrid does not create this directory"
+ "");
_properties.setEditable(false);
//
// _propertiesButton
//
_propertiesDialog = new TableDialog(parentFrame,
"Berkeley DB Configuration Properties",
"Name",
"Value", true);
Action openPropertiesDialog = new AbstractAction("...")
{
public void actionPerformed(ActionEvent e)
{
java.util.Map result =
_propertiesDialog.show(_propertiesMap,
getProperties());
if(result != null)
{
updated();
_propertiesMap = result;
setPropertiesField();
}
}
};
openPropertiesDialog.putValue(Action.SHORT_DESCRIPTION,
"Edit properties");
_propertiesButton = new JButton(openPropertiesDialog);
}
void writeDescriptor()
{
DbEnvDescriptor descriptor =
(DbEnvDescriptor)getDbEnv().getDescriptor();
descriptor.name = _name.getText();
descriptor.description = _description.getText();
descriptor.dbHome = getDbHomeAsString();
descriptor.properties = Editor.mapToProperties(_propertiesMap);
}
boolean isSimpleUpdate()
{
DbEnvDescriptor descriptor =
(DbEnvDescriptor)getDbEnv().getDescriptor();
return descriptor.name.equals(_name.getText());
}
void appendProperties(DefaultFormBuilder builder)
{
builder.append("Name" );
builder.append(_name, 3);
builder.nextLine();
builder.append("Description");
builder.nextLine();
builder.append("");
builder.nextRow(-2);
CellConstraints cc = new CellConstraints();
JScrollPane scrollPane = new JScrollPane(_description);
builder.add(scrollPane,
cc.xywh(builder.getColumn(), builder.getRow(), 3, 3));
builder.nextRow(2);
builder.nextLine();
builder.append("DB Home" );
builder.append(_dbHome, 3);
builder.nextLine();
builder.append("Properties");
builder.append(_properties, _propertiesButton);
builder.nextLine();
}
void show(DbEnv dbEnv)
{
detectUpdates(false);
setTarget(dbEnv);
DbEnvDescriptor descriptor = (DbEnvDescriptor)dbEnv.getDescriptor();
Utils.Resolver resolver = null;
if(dbEnv.getModel().substitute())
{
resolver = dbEnv.getResolver();
}
boolean isEditable = dbEnv.isEditable() && resolver == null;
_name.setText(
Utils.substitute(descriptor.name, resolver));
_name.setEditable(isEditable);
_description.setText(
Utils.substitute(descriptor.description, resolver));
_description.setEditable(isEditable);
_description.setOpaque(isEditable);
_dbHome.setEnabled(true);
_dbHome.setEditable(true);
setDbHome(Utils.substitute(descriptor.dbHome, resolver));
_dbHome.setEnabled(isEditable);
_dbHome.setEditable(isEditable);
_propertiesMap = Editor.propertiesToMap(descriptor.properties);
setPropertiesField();
_propertiesButton.setEnabled(isEditable);
_applyButton.setEnabled(dbEnv.isEphemeral());
_discardButton.setEnabled(dbEnv.isEphemeral());
detectUpdates(true);
}
private DbEnv getDbEnv()
{
return (DbEnv)_target;
}
private void setDbHome(String dbHome)
{
if(dbHome.equals(""))
{
_dbHome.setSelectedItem(NO_DB_HOME);
}
else
{
_dbHome.setSelectedItem(dbHome);
}
}
private String getDbHomeAsString()
{
Object obj = _dbHome.getSelectedItem();
if(obj == NO_DB_HOME)
{
return "";
}
else
{
return obj.toString();
}
}
private void setPropertiesField()
{
final Utils.Resolver resolver = getDbEnv().getResolver();
Ice.StringHolder toolTipHolder = new Ice.StringHolder();
Utils.Stringifier stringifier = new Utils.Stringifier()
{
public String toString(Object obj)
{
java.util.Map.Entry entry = (java.util.Map.Entry)obj;
return Utils.substitute((String)entry.getKey(), resolver)
+ "="
+ Utils.substitute((String)entry.getValue(), resolver);
}
};
_properties.setText(
Utils.stringify(_propertiesMap.entrySet(), stringifier,
", ", toolTipHolder));
String toolTip = "Properties used to generate a"
+ " DB_CONFIG file in the DB home directory";
if(toolTipHolder.value != null)
{
toolTip += ":
" + toolTipHolder.value;
}
toolTip += "";
_properties.setToolTipText(toolTip);
}
private JTextField _name = new JTextField(20);
private JTextArea _description = new JTextArea(3, 20);
private JComboBox _dbHome = new JComboBox(new Object[]{NO_DB_HOME});
private JTextField _properties = new JTextField(20);
private java.util.Map _propertiesMap;
private TableDialog _propertiesDialog;
private JButton _propertiesButton = new JButton("...");
static private final Object NO_DB_HOME = new Object()
{
public String toString()
{
return "Created by the IceGrid Node";
}
};
}