/* * Copyright 2011-2012 Amazon Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://aws.amazon.com/apache2.0 * * 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.explorer.editor; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.Action; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.forms.IFormColors; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.part.EditorPart; import com.amazonaws.eclipse.codedeploy.explorer.editor.table.DeploymentsTableView; import com.amazonaws.eclipse.codedeploy.explorer.image.CodeDeployExplorerImages; import com.amazonaws.eclipse.core.AwsToolkitCore; import com.amazonaws.services.codedeploy.AmazonCodeDeploy; import com.amazonaws.services.codedeploy.model.AutoScalingGroup; import com.amazonaws.services.codedeploy.model.DeploymentGroupInfo; import com.amazonaws.services.codedeploy.model.EC2TagFilter; import com.amazonaws.services.codedeploy.model.GetDeploymentGroupRequest; public class DeploymentGroupEditor extends EditorPart { public final static String ID = "com.amazonaws.eclipse.codedeploy.explorer.editor.deploymentGroupEditor"; private DeploymentGroupEditorInput deploymentGroupEditorInput; private DeploymentsTableView deploymentsTable; public DeploymentsTableView getDeploymentsTableView() { return deploymentsTable; } @Override public void doSave(IProgressMonitor monitor) {} @Override public void doSaveAs() {} @Override public void init(IEditorSite site, IEditorInput input) throws PartInitException { setSite(site); setInput(input); deploymentGroupEditorInput = (DeploymentGroupEditorInput) input; setPartName(input.getName()); } @Override public boolean isDirty() { return false; } @Override public boolean isSaveAsAllowed() { return false; } @Override public void createPartControl(Composite parent) { FormToolkit toolkit = new FormToolkit(Display.getDefault()); ScrolledForm form = new ScrolledForm(parent, SWT.V_SCROLL | SWT.H_SCROLL); form.setExpandHorizontal(true); form.setExpandVertical(true); form.setBackground(toolkit.getColors().getBackground()); form.setForeground(toolkit.getColors().getColor(IFormColors.TITLE)); form.setFont(JFaceResources.getHeaderFont()); form.setText(deploymentGroupEditorInput.getName()); toolkit.decorateFormHeading(form.getForm()); form.setImage(AwsToolkitCore.getDefault().getImageRegistry() .get(CodeDeployExplorerImages.IMG_DEPLOYMENT_GROUP)); form.getBody().setLayout(new GridLayout(1, false)); createDeploymentGroupSummary(form, toolkit); createDeploymentHistoryTable(form, toolkit); form.getToolBarManager().add(new RefreshAction()); form.getToolBarManager().update(true); } private class RefreshAction extends Action { public RefreshAction() { this.setText("Refresh"); this.setToolTipText("Refresh deployment history"); this.setImageDescriptor(AwsToolkitCore.getDefault() .getImageRegistry() .getDescriptor(AwsToolkitCore.IMAGE_REFRESH)); } @Override public void run() { deploymentsTable.refreshAsync(); } } /** * Creates the table of deployment histories */ private void createDeploymentHistoryTable(final ScrolledForm form, final FormToolkit toolkit) { deploymentsTable = new DeploymentsTableView( deploymentGroupEditorInput, form.getBody(), toolkit, SWT.None); deploymentsTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); } /** * Creates a summary of a the deployment group */ private void createDeploymentGroupSummary(final ScrolledForm form, final FormToolkit toolkit) { final Composite parent = toolkit.createComposite(form.getBody(), SWT.None); parent.setLayout(new GridLayout(2, false)); toolkit.createLabel(parent, "Deployment Group info loading"); toolkit.createLabel(parent, ""); new Thread() { @Override public void run() { AmazonCodeDeploy codeDeployClient = deploymentGroupEditorInput .getCodeDeployClient(); DeploymentGroupInfo deployGroupInfo = codeDeployClient.getDeploymentGroup( new GetDeploymentGroupRequest() .withApplicationName(deploymentGroupEditorInput.getApplicationName()) .withDeploymentGroupName(deploymentGroupEditorInput.getDeploymentGroupName()) ) .getDeploymentGroupInfo(); if ( deployGroupInfo == null ) return; updateComposite(form, toolkit, deployGroupInfo); } protected void updateComposite(final ScrolledForm form, final FormToolkit toolkit, final DeploymentGroupInfo deployGroup) { Display.getDefault().syncExec(new Runnable() { public void run() { for ( Control c : parent.getChildren() ) { c.dispose(); } toolkit.createLabel(parent, "Application Name: "); toolkit.createLabel(parent, deployGroup.getApplicationName()); toolkit.createLabel(parent, "Deployment Group Name: "); toolkit.createLabel(parent, deployGroup.getDeploymentGroupName()); toolkit.createLabel(parent, "Deployment Group ID: "); toolkit.createLabel(parent, deployGroup.getDeploymentGroupId()); toolkit.createLabel(parent, "Service Role ARN: "); toolkit.createLabel(parent, deployGroup.getServiceRoleArn()); toolkit.createLabel(parent, "Deployment Configuration: "); toolkit.createLabel(parent, deployGroup.getDeploymentConfigName()); if (deployGroup.getEc2TagFilters() != null && !deployGroup.getEc2TagFilters().isEmpty()) { toolkit.createLabel(parent, "Amazon EC2 Tags: "); StringBuilder tags = new StringBuilder(); boolean first = true; for (EC2TagFilter tag : deployGroup.getEc2TagFilters()) { if (first) { first = false; } else { tags.append(", "); } if ("KEY_AND_VALUE".equals(tag.getType())) { tags.append(tag.getKey() + ":" + tag.getValue()); } else if ("KEY_ONLY".equals(tag.getType())) { tags.append(tag.getKey() + "(KEY_ONLY)"); } else if ("VALUE_ONLY".equals(tag.getType())) { tags.append(tag.getValue() + "(VALUE_ONLY)"); } } toolkit.createLabel(parent, tags.toString()); } if (deployGroup.getAutoScalingGroups() != null && !deployGroup.getAutoScalingGroups().isEmpty()) { toolkit.createLabel(parent, "Associated Auto Scaling Groups: "); StringBuilder groups = new StringBuilder(); boolean first = true; for (AutoScalingGroup group : deployGroup.getAutoScalingGroups()) { if (first) { first = false; } else { groups.append(", "); } groups.append(group.getName() + ":" + group.getHook()); } toolkit.createLabel(parent, groups.toString()); } form.reflow(true); } }); } }.start(); } @Override public void setFocus() { } }