com.zeroc.IceGridGUI.Application.ServerInstanceEditor.java Source code

Java tutorial

Introduction

Here is the source code for com.zeroc.IceGridGUI.Application.ServerInstanceEditor.java

Source

// **********************************************************************
//
// Copyright (c) 2003-2016 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 com.zeroc.IceGridGUI.Application;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JScrollPane;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;

import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.CellConstraints;

import com.zeroc.IceGrid.*;
import com.zeroc.IceGridGUI.*;

@SuppressWarnings("unchecked")
class ServerInstanceEditor extends AbstractServerEditor {
    @Override
    protected void writeDescriptor() {
        ServerInstanceDescriptor descriptor = getDescriptor();
        ServerTemplate t = (ServerTemplate) _template.getSelectedItem();

        descriptor.template = t.getId();
        descriptor.parameterValues = _parameters.getValues();

        descriptor.propertySet.references = _propertySets.getList().toArray(new String[0]);
        descriptor.propertySet.properties = _properties.getProperties();

        ((ServerInstance) _target)
                .isIceBox(((TemplateDescriptor) t.getDescriptor()).descriptor instanceof IceBoxDescriptor);
    }

    @Override
    protected boolean isSimpleUpdate() {
        ServerInstanceDescriptor descriptor = getDescriptor();
        ServerTemplate t = (ServerTemplate) _template.getSelectedItem();

        return descriptor.template.equals(t.getId()) && descriptor.parameterValues.equals(_parameters.getValues());
    }

    ServerInstanceEditor() {
        _template.setToolTipText("Server template");

        //
        // Template
        //
        Action gotoTemplate = new AbstractAction("", Utils.getIcon("/icons/16x16/goto.png")) {
            @Override
            public void actionPerformed(ActionEvent e) {
                TreeNode t = (TreeNode) _template.getSelectedItem();
                if (t != null) {
                    t.getRoot().setSelectedNode(t);
                }
            }
        };
        gotoTemplate.putValue(Action.SHORT_DESCRIPTION, "Goto this server template");
        _templateButton = new JButton(gotoTemplate);

        _parameters = new ParameterValuesField(this);

        _propertySets.getDocument().addDocumentListener(_updateListener);
        _propertySets.setToolTipText("Property Set References");

        _properties = new PropertiesField(this);
    }

    ServerInstanceDescriptor getDescriptor() {
        return (ServerInstanceDescriptor) _target.getDescriptor();
    }

    //
    // From Editor:
    //

    @Override
    Utils.Resolver getDetailResolver() {
        if (_target.getCoordinator().substitute()) {
            return _target.getResolver();
        } else {
            return null;
        }
    }

    @Override
    protected void appendProperties(DefaultFormBuilder builder) {
        builder.append("Template", _template);
        builder.append(_templateButton);
        builder.nextLine();

        builder.append("Parameters");
        builder.nextLine();
        builder.append("");
        builder.nextLine();
        builder.append("");

        builder.nextLine();
        builder.append("");

        builder.nextRow(-6);
        JScrollPane scrollPane = new JScrollPane(_parameters);
        CellConstraints cc = new CellConstraints();
        builder.add(scrollPane, cc.xywh(builder.getColumn(), builder.getRow(), 3, 7));
        builder.nextRow(6);
        builder.nextLine();

        builder.append("Property Sets");
        builder.append(_propertySets, 3);
        builder.nextLine();

        builder.append("Properties");
        builder.nextLine();
        builder.append("");
        builder.nextLine();
        builder.append("");

        builder.nextLine();
        builder.append("");

        builder.nextRow(-6);
        scrollPane = new JScrollPane(_properties);
        builder.add(scrollPane, cc.xywh(builder.getColumn(), builder.getRow(), 3, 7));
        builder.nextRow(6);
        builder.nextLine();
    }

    void show(ServerInstance server) {
        detectUpdates(false);
        _target = server;

        ServerInstanceDescriptor descriptor = getDescriptor();
        Root root = server.getRoot();
        boolean isEditable = server.isEphemeral() || !root.getCoordinator().substitute();

        Utils.Resolver resolver = isEditable ? null : ((Node) _target.getParent()).getResolver();

        //
        // Need to make control enabled before changing it
        //
        _template.setEnabled(true);

        ServerTemplates serverTemplates = root.getServerTemplates();
        _template.setModel(serverTemplates.createComboBoxModel());

        ServerTemplate t = (ServerTemplate) serverTemplates.findChild(descriptor.template);
        assert t != null;
        _template.setSelectedItem(t);

        ListDataListener templateListener = new ListDataListener() {
            @Override
            public void contentsChanged(ListDataEvent e) {
                updated();

                ServerTemplate t = (ServerTemplate) _template.getModel().getSelectedItem();

                TemplateDescriptor td = (TemplateDescriptor) t.getDescriptor();

                //
                // Replace parameters but keep existing values
                //
                _parameters.set(td.parameters, makeParameterValues(_parameters.getValues(), td.parameters),
                        td.parameterDefaults, null);
            }

            @Override
            public void intervalAdded(ListDataEvent e) {
            }

            @Override
            public void intervalRemoved(ListDataEvent e) {
            }
        };

        _template.getModel().addListDataListener(templateListener);
        _template.setEnabled(isEditable);

        TemplateDescriptor td = (TemplateDescriptor) t.getDescriptor();
        _parameters.set(td.parameters, descriptor.parameterValues, td.parameterDefaults, resolver);

        _propertySets.setList(java.util.Arrays.asList(descriptor.propertySet.references), getDetailResolver());
        _propertySets.setEditable(isEditable);

        _properties.setProperties(descriptor.propertySet.properties, null, null, getDetailResolver(), isEditable);

        _applyButton.setEnabled(server.isEphemeral());
        _discardButton.setEnabled(server.isEphemeral());
        detectUpdates(true);
        if (server.isEphemeral()) {
            updated();
        }
    }

    private JComboBox _template = new JComboBox();
    private JButton _templateButton;
    private ParameterValuesField _parameters;

    private ListTextField _propertySets = new ListTextField(20);
    private PropertiesField _properties;
}