com.microsoft.intellij.ui.UndeployWizardDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.intellij.ui.UndeployWizardDialog.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.ui;

import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.TitlePanel;
import com.intellij.openapi.ui.ValidationInfo;
import com.microsoft.intellij.AzureSettings;
import com.microsoft.intellij.runnable.FetchDeploymentsForHostedServiceWithProgressWindow;
import com.microsoft.intellij.runnable.LoadAccountWithProgressBar;
import com.microsoft.intellij.ui.util.UIUtils;
import com.microsoft.intellij.wizards.WizardCacheManager;
import com.microsoft.tooling.msservices.model.vm.CloudService;
import com.microsoft.windowsazure.management.compute.models.DeploymentStatus;
import com.microsoft.windowsazure.management.compute.models.HostedServiceGetDetailedResponse;
import com.microsoft.windowsazure.management.compute.models.HostedServiceGetDetailedResponse.Deployment;
import com.microsoftopentechnologies.azurecommons.deploy.util.PublishData;
import com.microsoftopentechnologies.azuremanagementutil.model.Subscription;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.List;

import static com.microsoft.intellij.ui.messages.AzureBundle.message;
import static com.microsoft.intellij.ui.util.UIUtils.ElementWrapper;

public class UndeployWizardDialog extends DialogWrapper {
    private JPanel contentPane;
    private JComboBox subscriptionCombo;
    private JComboBox hostedServiceCombo;
    private JComboBox deploymentCombo;

    private Project myProject;
    private PublishData currentPublishData;

    public UndeployWizardDialog(Project project) {
        super(project);
        this.myProject = project;
        init();
    }

    @Override
    protected void init() {
        setTitle(message("undeployWizTitle"));
        setOKButtonText(message("undeployWizTitle"));
        subscriptionCombo.addItemListener(createSubscriptionComboListener());
        hostedServiceCombo.addItemListener(createHostedServiceComboListener());
        deploymentCombo.addItemListener(createDeploymentComboListener());
        AzureSettings azureSettings = AzureSettings.getSafeInstance(myProject);
        if (!azureSettings.isSubscriptionLoaded()) {
            LoadAccountWithProgressBar task = new LoadAccountWithProgressBar(myProject);
            ProgressManager.getInstance().runProcessWithProgressSynchronously(task, "Loading Account Settings...",
                    true, myProject);
            azureSettings.setSubscriptionLoaded(true);
        }
        populateSubscriptionCombo();

        super.init();
    }

    private ItemListener createSubscriptionComboListener() {
        return new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                currentPublishData = UIUtils.changeCurrentSubAsPerCombo((JComboBox) e.getSource());

                hostedServiceCombo.setEnabled(false);
                deploymentCombo.setEnabled(false);
                deploymentCombo.removeAllItems();
                populateHostedServices();
                //                setPageComplete(validatePageComplete());
            }
        };
    }

    private ItemListener createHostedServiceComboListener() {
        return new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    deploymentCombo.removeAllItems();
                    deploymentCombo.setEnabled(false);

                    populateDeployment();

                    setComponentState();

                    //                setPageComplete(validatePageComplete());
                }
            }
        };
    }

    private ItemListener createDeploymentComboListener() {
        return new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                //                setPageComplete(validatePageComplete());
            }
        };
    }

    private void populateSubscriptionCombo() {
        UIUtils.populateSubscriptionCombo(subscriptionCombo);
        setComponentState();
    }

    public void populateHostedServices() {
        if (currentPublishData != null) {
            Subscription currentSubscription = currentPublishData.getCurrentSubscription();
            List<CloudService> hostedServices = currentPublishData.getServicesPerSubscription()
                    .get(currentSubscription.getId());
            if (hostedServices != null) {
                hostedServiceCombo.removeAllItems();
                for (CloudService hsd : hostedServices) {
                    hostedServiceCombo.addItem(new ElementWrapper<CloudService>(hsd.getName(), hsd));
                }
                if (hostedServiceCombo.getItemCount() > 0) {
                    String defaultSelection = null;
                    CloudService currentHostedService = WizardCacheManager.getCurentHostedService();
                    if (currentHostedService != null) {
                        defaultSelection = currentHostedService.getName();
                    }
                    UIUtils.selectByText(hostedServiceCombo, defaultSelection);
                }
            }
        }
        setComponentState();
    }

    private void populateDeployment() {
        int sel = hostedServiceCombo.getSelectedIndex();
        if (sel > -1) {
            CloudService hostedServiceDetailed;
            FetchDeploymentsForHostedServiceWithProgressWindow progress = new FetchDeploymentsForHostedServiceWithProgressWindow(
                    null, ((ElementWrapper<CloudService>) hostedServiceCombo.getSelectedItem()).getValue());
            ProgressManager.getInstance().runProcessWithProgressSynchronously(progress, "Progress Information",
                    true, myProject);

            hostedServiceDetailed = progress.getHostedServiceDetailed();

            deploymentCombo.removeAllItems();

            addDeployment(hostedServiceDetailed.getProductionDeployment());
            addDeployment(hostedServiceDetailed.getStagingDeployment());
            //            setComponentState();
        }
    }

    private void addDeployment(CloudService.Deployment deployment) {
        if (deployment.getName() == null || deployment.getName().isEmpty()) {
            return;
        }
        if (!DeploymentStatus.Deleting.equals(deployment.getStatus())) {
            String label = deployment.getLabel();
            String id = label + " - " + deployment.getSlot();
            deploymentCombo.addItem(new ElementWrapper<CloudService.Deployment>(id, deployment));
        }
    }

    private void setComponentState() {
        if (hostedServiceCombo == null) {
            return;
        }
        hostedServiceCombo
                .setEnabled(subscriptionCombo.getSelectedIndex() > -1 && hostedServiceCombo.getItemCount() > 0);
        if (deploymentCombo == null) {
            return;
        }
        deploymentCombo
                .setEnabled(hostedServiceCombo.getSelectedIndex() > -1 && deploymentCombo.getItemCount() > 0);
    }

    @Override
    protected ValidationInfo doValidate() {
        Object subscription = subscriptionCombo.getSelectedItem();
        if (subscription == null) {
            return new ValidationInfo("subscription can not be null or empty");
        }
        Object service = hostedServiceCombo.getSelectedItem();
        if (service == null) {
            return new ValidationInfo(message("hostedServiceIsNull"));
        }
        ElementWrapper<CloudService.Deployment> deploymentItem = (ElementWrapper<CloudService.Deployment>) deploymentCombo
                .getSelectedItem();
        if (deploymentItem == null) {
            return new ValidationInfo(message("deploymentIsNull"));
        }
        return null;
    }

    public String getServiceName() {
        return hostedServiceCombo.getSelectedItem().toString();
    }

    public CloudService.Deployment getDeployment() {
        return ((ElementWrapper<CloudService.Deployment>) deploymentCombo.getSelectedItem()).getValue();
    }

    protected JComponent createTitlePane() {
        return new TitlePanel(message("unpubplishAzureProjPage"), "");
    }

    @Nullable
    @Override
    protected JComponent createCenterPanel() {
        return contentPane;
    }

    @Override
    protected String getHelpId() {
        return "unpublish_project_command";
    }
}