// **********************************************************************
//
// Copyright (c) 2003-2012 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 IceGridGUI.Application;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import IceGrid.*;
import IceGridGUI.*;
class AdapterEditor extends CommunicatorChildEditor
{
AdapterEditor()
{
_objects = new ArrayMapField(this, true, "Identity", "Type", "Property");
_allocatables = new ArrayMapField(this, true, "Identity", "Type", "Property");
//
// Create buttons
//
//
// _replicaGroupButton
//
Action gotoReplicaGroup = new AbstractAction("", Utils.getIcon("/icons/16x16/goto.png"))
{
public void actionPerformed(ActionEvent e)
{
Object obj = _replicaGroupId.getSelectedItem();
Adapter adapter = getAdapter();
ReplicaGroup rg = null;
if(obj instanceof ReplicaGroup)
{
rg = (ReplicaGroup)obj;
}
else
{
String replicaGroupId = Utils.substitute(obj.toString(), adapter.getResolver());
rg = adapter.getRoot().findReplicaGroup(replicaGroupId);
}
//
// The button is enabled therefore rg should be != null
//
if(rg != null)
{
adapter.getRoot().setSelectedNode(rg);
}
}
};
gotoReplicaGroup.putValue(Action.SHORT_DESCRIPTION, "Goto the definition of this replica group");
_replicaGroupButton = new JButton(gotoReplicaGroup);
Action checkRegisterProcess = new AbstractAction("Register Process")
{
public void actionPerformed(ActionEvent e)
{
updated();
}
};
_registerProcess = new JCheckBox(checkRegisterProcess);
_registerProcess.setToolTipText(
"This setting is ignored for servers running Ice
"
+ "version 3.3 or greater.
"
+ "During activation, create a Process object
"
+ "in this adapter and register it with IceGrid
"
+ "to enable clean shutdown; you should register
"
+ "exactly one Process object per server.");
Action checkServerLifetime = new AbstractAction("Server Lifetime")
{
public void actionPerformed(ActionEvent e)
{
updated();
}
};
_serverLifetime = new JCheckBox(checkServerLifetime);
_serverLifetime.setToolTipText(
"Is the adapter lifetime the same as the server
" +
"lifetime? The server is considered to be active
" +
"only if all the adapters with this attribute set
" +
"to true are active.");
//
// Associate updateListener with various fields
//
_name.getDocument().addDocumentListener(
new DocumentListener()
{
public void changedUpdate(DocumentEvent e)
{
update();
}
public void insertUpdate(DocumentEvent e)
{
update();
}
public void removeUpdate(DocumentEvent e)
{
update();
}
private void update()
{
updated();
//
// Recompute default id
//
_defaultAdapterId = getAdapter().getDefaultAdapterId(_name.getText().trim());
refreshId();
}
});
_name.setToolTipText("Identifies this object adapter within an Ice communicator");
_endpoints.getDocument().addDocumentListener(_updateListener);
_endpoints.setToolTipText(
"The network interface(s) on which this object adapter receives requests;
"
+ "for example:
"
+ " tcp (listen on all local interfaces using a random port)
"
+ " tcp -h venus.foo.com (listen on just one interface)
"
+ " tcp -t 10000 (sets a timeout of 10,000 milliseconds)
"
+ " ssl -h venus.foo.com (accepts SSL connections instead of plain TCP)"
+ "");
_description.getDocument().addDocumentListener(_updateListener);
_description.setToolTipText("An optional description for this object adapter");
JTextField idTextField = (JTextField)_id.getEditor().getEditorComponent();
idTextField.getDocument().addDocumentListener(_updateListener);
_id.setToolTipText("Identities this object adapter within an IceGrid deployment");
JTextField replicaGroupIdTextField = (JTextField)_replicaGroupId.getEditor().getEditorComponent();
replicaGroupIdTextField.getDocument().addDocumentListener(_updateListener);
_replicaGroupId.setToolTipText("Select a replica group");
_priority.getDocument().addDocumentListener(_updateListener);
_priority.setToolTipText("The priority of this adapter; see the Ordered load-balancing "
+ "policy in Replica Groups");
JTextField publishedEndpointsTextField = (JTextField)_publishedEndpoints.getEditor().getEditorComponent();
publishedEndpointsTextField.getDocument().addDocumentListener(_updateListener);
_publishedEndpoints.setToolTipText(
"Endpoints registered with the IceGrid Registry during the activation of this adapter.");
}
//
// From CommunicatorChildEditor
//
void writeDescriptor()
{
AdapterDescriptor descriptor = (AdapterDescriptor)getAdapter().getDescriptor();
descriptor.name = _name.getText().trim();
descriptor.description = _description.getText();
descriptor.id = getIdAsString();
descriptor.replicaGroupId = getReplicaGroupIdAsString();
descriptor.priority = _priority.getText().trim();
descriptor.registerProcess = _registerProcess.isSelected();
descriptor.serverLifetime = _serverLifetime.isSelected();
descriptor.objects = _objectList;
descriptor.allocatables = _allocatableList;
}
boolean isSimpleUpdate()
{
AdapterDescriptor descriptor = (AdapterDescriptor)getAdapter().getDescriptor();
return descriptor.name.equals(_name.getText().trim());
}
Communicator.ChildList getChildList()
{
return ((Communicator)_target.getParent()).getAdapters();
}
protected void appendProperties(DefaultFormBuilder builder)
{
builder.append("Adapter 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("Adapter ID");
builder.append(_id, 3);
builder.nextLine();
builder.append("Replica Group", _replicaGroupId);
builder.append(_replicaGroupButton);
builder.nextLine();
builder.append("Priority");
builder.append(_priority, 3);
builder.nextLine();
builder.append("Endpoints" );
builder.append(_endpoints, 3);
builder.nextLine();
builder.append("Published Endpoints");
builder.append(_publishedEndpoints, 3);
builder.nextLine();
builder.append("", _registerProcess);
builder.nextLine();
builder.append("", _serverLifetime);
builder.nextLine();
builder.append("Well-known Objects");
builder.nextLine();
builder.append("");
builder.nextLine();
builder.append("");
builder.nextLine();
builder.append("");
builder.nextRow(-6);
scrollPane = new JScrollPane(_objects);
builder.add(scrollPane, cc.xywh(builder.getColumn(), builder.getRow(), 3, 7));
builder.nextRow(6);
builder.nextLine();
builder.append("Allocatable Objects");
builder.nextLine();
builder.append("");
builder.nextLine();
builder.append("");
builder.nextLine();
builder.append("");
builder.nextRow(-6);
scrollPane = new JScrollPane(_allocatables);
builder.add(scrollPane, cc.xywh(builder.getColumn(), builder.getRow(), 3, 7));
builder.nextRow(6);
builder.nextLine();
}
protected void buildPropertiesPanel()
{
super.buildPropertiesPanel();
_propertiesPanel.setName("Adapter Properties");
}
void postUpdate()
{
//
// Change enclosing properties after successful update
//
String name = _name.getText().trim();
Adapter adapter = getAdapter();
if(!name.equals(_oldName))
{
adapter.removeProperty(_oldName + ".Endpoints");
adapter.removeProperty(_oldName + ".PublishedEndpoints");
_oldName = name;
}
adapter.setProperty(name + ".Endpoints", _endpoints.getText().trim());
Object published = _publishedEndpoints.getSelectedItem();
if(published == PUBLISH_ACTUAL)
{
adapter.removeProperty(name + ".PublishedEndpoints");
}
else
{
adapter.setProperty(name + ".PublishedEndpoints", published.toString().trim());
}
//
// Set all objects and allocatables properties
//
java.util.Map map = _objects.get();
for(java.util.Map.Entry p : map.entrySet())
{
String key = p.getKey();
String[] value = p.getValue();
if(!value[1].equals(""))
{
adapter.setProperty(value[1], key);
}
}
map = _allocatables.get();
for(java.util.Map.Entry p : map.entrySet())
{
String key = p.getKey();
String[] value = p.getValue();
if(!value[1].equals(""))
{
adapter.setProperty(value[1], key);
}
}
}
private void setId(String id)
{
if(id.equals(_defaultAdapterId))
{
_id.setSelectedItem(DEFAULT_ADAPTER_ID);
}
else
{
_id.setSelectedItem(id);
}
}
private void refreshId()
{
Object id = _id.getSelectedItem();
_id.setModel(new DefaultComboBoxModel