/*
* Copyright 2013 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.identitymanagement.role;
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.custom.SashForm;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
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.core.AWSClientFactory;
import com.amazonaws.eclipse.core.AwsToolkitCore;
import com.amazonaws.eclipse.core.ui.IRefreshable;
import com.amazonaws.eclipse.explorer.identitymanagement.CreateRoleAction;
import com.amazonaws.eclipse.explorer.identitymanagement.EditorInput;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
public class RoleEditor extends EditorPart implements IRefreshable {
private EditorInput roleEditorInput;
private RoleSummary roleSummary;
private RolePermissions rolePermissions;
private RoleTable roleTable;
private RoleTrustRelationships roleTrustRelationships;
private AmazonIdentityManagement iam;
@Override
public void doSave(IProgressMonitor monitor) {}
@Override
public void doSaveAs() {}
@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
setSite(site);
setInput(input);
setPartName(input.getName());
this.roleEditorInput = (EditorInput)input;
iam = getClient();
}
@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);
form.setExpandHorizontal(true);
form.setExpandVertical(true);
form.setBackground(toolkit.getColors().getBackground());
form.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
form.setFont(JFaceResources.getHeaderFont());
form.setText(getFormTitle());
toolkit.decorateFormHeading(form.getForm());
form.setImage(AwsToolkitCore.getDefault().getImageRegistry().get(AwsToolkitCore.IMAGE_ROLE));
form.getBody().setLayout(new GridLayout());
SashForm sash = new SashForm(form.getBody(), SWT.VERTICAL);
sash.setLayoutData(new GridData(GridData.FILL_BOTH));
sash.setLayout(new GridLayout());
createTablesSection(sash, toolkit);
createTabsSection(sash, toolkit);
form.getToolBarManager().add(new RefreshAction());
form.getToolBarManager().add(new CreateRoleAction(iam, this));
form.getToolBarManager().update(true);
roleTable.setRoleSummary(roleSummary);
roleTable.setRolePermissions(rolePermissions);
roleTable.setRoleTrustRelationships(roleTrustRelationships);
}
private String getFormTitle() {
String formTitle = roleEditorInput.getName();
return formTitle;
}
private void createTabsSection(Composite parent, FormToolkit toolkit) {
Composite tabsSection = toolkit.createComposite(parent, SWT.NONE);
tabsSection.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
tabsSection.setLayout(new FillLayout());
TabFolder tabFolder = new TabFolder (tabsSection, SWT.BORDER);
Rectangle clientArea = parent.getClientArea();
tabFolder.setLocation(clientArea.x, clientArea.y);
TabItem summaryTab = new TabItem(tabFolder, SWT.NONE);
summaryTab.setText("Summary");
roleSummary = new RoleSummary(iam, tabFolder, toolkit);
summaryTab.setControl(roleSummary);
TabItem permissionTab = new TabItem(tabFolder, SWT.NONE);
permissionTab.setText("Permissions");
rolePermissions = new RolePermissions(iam, tabFolder, toolkit);
permissionTab.setControl(rolePermissions);
TabItem trustRelationshipsTab = new TabItem(tabFolder, SWT.NONE);
trustRelationshipsTab.setText("Trust Relationships");
roleTrustRelationships = new RoleTrustRelationships(iam, tabFolder, toolkit);
trustRelationshipsTab.setControl(roleTrustRelationships);
}
private void createTablesSection(Composite parent, FormToolkit toolkit) {
roleTable = new RoleTable(iam, parent, toolkit);
}
@Override
public void setFocus() {}
private class RefreshAction extends Action {
public RefreshAction() {
this.setText("Refresh");
this.setToolTipText("Refresh");
this.setImageDescriptor(AwsToolkitCore.getDefault().getImageRegistry().getDescriptor(AwsToolkitCore.IMAGE_REFRESH));
}
@Override
public void run() {
roleTable.refresh();
roleSummary.refresh();
}
}
public void refreshData() {
roleTable.refresh();
}
protected AmazonIdentityManagement getClient() {
AWSClientFactory clientFactory = AwsToolkitCore.getClientFactory(roleEditorInput.getAccountId());
return clientFactory.getIAMClientByEndpoint(roleEditorInput.getRegionEndpoint());
}
}