/* * 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.lambda.upload.wizard; import com.amazonaws.eclipse.lambda.LambdaAnalytics; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.wizard.Wizard; import com.amazonaws.eclipse.lambda.LambdaPlugin; import com.amazonaws.eclipse.lambda.project.metadata.LambdaFunctionProjectMetadata; import com.amazonaws.eclipse.lambda.upload.wizard.model.UploadFunctionWizardDataModel; import com.amazonaws.eclipse.lambda.upload.wizard.page.FunctionConfigurationPage; import com.amazonaws.eclipse.lambda.upload.wizard.page.TargetFunctionSelectionPage; import com.amazonaws.eclipse.lambda.upload.wizard.util.UploadFunctionUtil; public class UploadFunctionWizard extends Wizard { private final UploadFunctionWizardDataModel dataModel; public UploadFunctionWizard(IProject project, List<String> requestHandlerImplementerClasses, LambdaFunctionProjectMetadata projectMetadata) { dataModel = new UploadFunctionWizardDataModel(project, requestHandlerImplementerClasses, projectMetadata); setNeedsProgressMonitor(true); } @Override public void addPages() { addPage(new TargetFunctionSelectionPage(dataModel)); addPage(new FunctionConfigurationPage(dataModel)); } @Override public boolean performFinish() { try { Job uploadJob = new Job("Uploading function code to Lambda") { @Override protected IStatus run(IProgressMonitor monitor) { LambdaAnalytics.trackMetrics(dataModel.isCreatingNewFunction(), dataModel.getRequestHandlerImplementerClasses().size()); IProject project = dataModel.getProject(); monitor.beginTask("Uploading AWS Lambda Function Project [" + project.getName() + "]", 100); long startTime = System.currentTimeMillis(); try { UploadFunctionUtil.performFunctionUpload(dataModel, monitor, 100); } catch (Exception e) { LambdaPlugin.getDefault().reportException( "Failed to upload project to Lambda", e); LambdaAnalytics.trackUploadFailed(); return new Status(Status.ERROR, LambdaPlugin.PLUGIN_ID, e.getMessage(), e); } LambdaPlugin.getDefault().getProjectChangeTracker() .markProjectAsNotDirty(project); LambdaAnalytics.trackUploadSucceeded(); LambdaAnalytics.trackUploadTotalTime(System.currentTimeMillis() - startTime); monitor.done(); return Status.OK_STATUS; } }; uploadJob.setUser(true); uploadJob.schedule(); } catch (Exception e) { LambdaPlugin.getDefault().reportException( "Unexpected error during deployment", e.getCause()); } return true; } @Override public boolean performCancel() { LambdaAnalytics.trackUploadCanceled(); return true; } }