com.amazonaws.eclipse.codedeploy.deploy.wizard.DeployProjectToCodeDeployWizard.java Source code

Java tutorial

Introduction

Here is the source code for com.amazonaws.eclipse.codedeploy.deploy.wizard.DeployProjectToCodeDeployWizard.java

Source

/*
 * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
package com.amazonaws.eclipse.codedeploy.deploy.wizard;

import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.swt.widgets.Display;

import com.amazonaws.eclipse.codedeploy.CodeDeployPlugin;
import com.amazonaws.eclipse.codedeploy.deploy.progress.DeploymentProgressTrackerDialog;
import com.amazonaws.eclipse.codedeploy.deploy.util.DeployUtils;
import com.amazonaws.eclipse.codedeploy.deploy.wizard.model.DeployProjectToCodeDeployWizardDataModel;
import com.amazonaws.eclipse.codedeploy.deploy.wizard.page.AppspecTemplateSelectionPage;
import com.amazonaws.eclipse.codedeploy.deploy.wizard.page.DeploymentConfigurationPage;
import com.amazonaws.eclipse.codedeploy.deploy.wizard.page.DeploymentGroupSelectionPage;
import com.amazonaws.eclipse.codedeploy.explorer.CodeDeployContentProvider;

public class DeployProjectToCodeDeployWizard extends Wizard {

    private final DeployProjectToCodeDeployWizardDataModel dataModel;

    /**
     * We keep a reference to this page so that we can pull the template
     * parameter values from it when the user clicks finish.
     */
    private AppspecTemplateSelectionPage appspecTemplateSelectionPage;

    public DeployProjectToCodeDeployWizard(IProject project) {
        dataModel = new DeployProjectToCodeDeployWizardDataModel(project);
        setNeedsProgressMonitor(true);
    }

    @Override
    public void addPages() {
        addPage(new DeploymentGroupSelectionPage(dataModel));
        addPage(new DeploymentConfigurationPage(dataModel));
        addPage(appspecTemplateSelectionPage = new AppspecTemplateSelectionPage(dataModel));
    }

    @Override
    public boolean performFinish() {

        // Pull the template parameter values from the wizard page
        dataModel.setTemplateParameterValues(appspecTemplateSelectionPage.getParamValuesForSelectedTemplate());

        try {
            getContainer().run(true, false, new IRunnableWithProgress() {

                public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {

                    monitor.beginTask(
                            "Deploying web project [" + dataModel.getProject().getName() + "] to CodeDeploy", 100);

                    // Initiate deployment (80/100 units)
                    final String deploymentId = DeployUtils.createDeployment(dataModel, monitor);

                    if (CodeDeployContentProvider.getInstance() != null) {
                        CodeDeployContentProvider.getInstance().refresh();
                    }

                    // Open deployment progress tracker (10/100)
                    monitor.subTask("Open deployment progress tracker...");

                    Display.getDefault().asyncExec(new Runnable() {
                        public void run() {
                            DeploymentProgressTrackerDialog dialog = new DeploymentProgressTrackerDialog(
                                    Display.getDefault().getActiveShell(), deploymentId,
                                    dataModel.getDeploymentGroupName(), dataModel.getApplicationName(),
                                    dataModel.getRegion());
                            dialog.open();
                        }
                    });

                    monitor.worked(10);

                    monitor.done();
                }
            });

        } catch (InvocationTargetException e) {
            CodeDeployPlugin.getDefault().reportException("Unexpected error during deployment", e.getCause());

        } catch (InterruptedException e) {
            CodeDeployPlugin.getDefault().reportException("Unexpected InterruptedException during deployment",
                    e.getCause());
        }

        return true;
    }

}