com.microsoft.intellij.docker.forms.AzureDockerHostUpdateDaemonPanel.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.intellij.docker.forms.AzureDockerHostUpdateDaemonPanel.java

Source

/**
 * Copyright (c) Microsoft Corporation
 * <p/>
 * All rights reserved.
 * <p/>
 * MIT License
 * <p/>
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
 * documentation files (the "Software"), to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
 * to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 * <p/>
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of
 * the Software.
 * <p/>
 * THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
 * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
package com.microsoft.intellij.docker.forms;

import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.microsoft.azure.docker.AzureDockerHostsManager;
import com.microsoft.azure.docker.model.EditableDockerHost;
import com.microsoft.intellij.docker.dialogs.AzureSelectKeyVault;
import com.microsoft.azure.docker.ops.utils.AzureDockerValidationUtils;
import com.microsoft.intellij.ui.util.UIUtils;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class AzureDockerHostUpdateDaemonPanel {
    private JPanel contentPane;
    private JPanel mainPanel;
    private JTextField dockerDaemonPortTextField;
    private JRadioButton dockerHostNoTlsRadioButton;
    private JRadioButton dockerHostEnableTlsRadioButton;
    private JRadioButton dockerHostAutoTlsRadioButton;
    private JRadioButton dockerHostImportTlsRadioButton;
    private TextFieldWithBrowseButton dockerHostImportTLSBrowseTextField;
    private JRadioButton dockerHostKeepTlsRadioButton;
    private JButton dockerSelectKeyvaultButton;
    private ButtonGroup mainSelectionGroup;

    private Project project;
    private EditableDockerHost editableHost;
    private AzureDockerHostsManager dockerManager;

    public AzureDockerHostUpdateDaemonPanel(Project project, EditableDockerHost editableHost,
            AzureDockerHostsManager dockerUIManager) {
        this.project = project;
        this.editableHost = editableHost;
        this.dockerManager = dockerUIManager;

        dockerDaemonPortTextField.setText(editableHost.updatedDockerHost.port);

        mainSelectionGroup = new ButtonGroup();
        mainSelectionGroup.add(dockerHostNoTlsRadioButton);
        mainSelectionGroup.add(dockerHostKeepTlsRadioButton);
        mainSelectionGroup.add(dockerHostAutoTlsRadioButton);
        mainSelectionGroup.add(dockerHostImportTlsRadioButton);

        initDefaultUIState();
        dockerSelectKeyvaultButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                AzureSelectKeyVault selectKeyvaultDialog = new AzureSelectKeyVault(project, dockerUIManager);
                selectKeyvaultDialog.show();

                if (selectKeyvaultDialog.getExitCode() == DialogWrapper.OK_EXIT_CODE) {
                    updateUIWithKeyvault(selectKeyvaultDialog.getSelectedKeyvault());
                }
            }
        });
        dockerHostNoTlsRadioButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dockerHostImportTLSBrowseTextField.setEnabled(false);
            }
        });
        dockerHostNoTlsRadioButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dockerHostImportTLSBrowseTextField.setEnabled(false);
            }
        });
        dockerHostAutoTlsRadioButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dockerHostImportTLSBrowseTextField.setEnabled(false);
            }
        });
        dockerHostImportTlsRadioButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dockerHostImportTLSBrowseTextField.setEnabled(true);
            }
        });
    }

    private void initDefaultUIState() {
        if (editableHost.originalDockerHost.isTLSSecured) {
            dockerHostKeepTlsRadioButton.setSelected(true);
        } else {
            dockerHostNoTlsRadioButton.setSelected(true);
        }

        if (editableHost.isUpdated) {
            dockerDaemonPortTextField.setText(editableHost.originalDockerHost.port + " (updating)");
            dockerDaemonPortTextField.setEnabled(false);
            disableTlsUI();
        } else {
            dockerDaemonPortTextField.setText(editableHost.originalDockerHost.port);
        }

        dockerHostImportTLSBrowseTextField
                .addActionListener(UIUtils.createFileChooserListener(dockerHostImportTLSBrowseTextField, project,
                        FileChooserDescriptorFactory.createSingleFolderDescriptor()));
        dockerHostImportTLSBrowseTextField.getTextField().setInputVerifier(new InputVerifier() {
            @Override
            public boolean verify(JComponent input) {
                return AzureDockerValidationUtils
                        .validateDockerHostTlsDirectory(dockerHostImportTLSBrowseTextField.getText());
            }
        });

    }

    public void disableTlsUI() {
        dockerHostNoTlsRadioButton.setEnabled(false);
        dockerHostKeepTlsRadioButton.setEnabled(false);
        dockerHostAutoTlsRadioButton.setEnabled(false);
        dockerHostImportTlsRadioButton.setEnabled(false);
        dockerHostImportTLSBrowseTextField.setEnabled(false);
    }

    private void updateUIWithKeyvault(String keyvault) {
        // TODO: call into dockerManager to retrieve the keyvault secrets
    }

    public JPanel getMainPanel() {
        return mainPanel;
    }
}