/*
* 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.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.forms.widgets.FormToolkit;
import com.amazonaws.eclipse.core.AwsToolkitCore;
import com.amazonaws.eclipse.explorer.identitymanagement.AbstractPolicyTable;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.model.DeleteRolePolicyRequest;
import com.amazonaws.services.identitymanagement.model.ListRolePoliciesRequest;
import com.amazonaws.services.identitymanagement.model.Role;
public class RolePermissionTable extends AbstractPolicyTable {
private Role role;
RolePermissionTable(AmazonIdentityManagement iam, Composite parent, FormToolkit toolkit) {
super(iam, parent, toolkit);
MenuManager menuManager = new MenuManager("#PopupMenu");
menuManager.setRemoveAllWhenShown(true);
menuManager.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
if (viewer.getTable().getSelectionCount() > 0) {
manager.add(new removePolicyAction());
manager.add(new ShowPolicyAction());
manager.add(new EditPolicyAction());
}
}
});
viewer.getTable().setMenu(menuManager.createContextMenu(viewer.getTable()));
}
private class removePolicyAction extends Action {
@Override
public ImageDescriptor getImageDescriptor() {
return AwsToolkitCore.getDefault().getImageRegistry().getDescriptor(AwsToolkitCore.IMAGE_REMOVE);
}
@Override
public void run() {
String policyName = contentProvider.getItemByIndex(viewer.getTable().getSelectionIndex());
String alertMessage = "Are you sure you want to remove policy '" + policyName + "' from the role '" + role.getRoleName() + "'?";
boolean confirmation = MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Remove Policy", alertMessage);
if (confirmation) {
deletePolicy(policyName);
refresh();
}
}
@Override
public String getText() {
return "Remove Policy";
}
}
private class ShowPolicyAction extends Action {
@Override
public void run() {
String policyName = contentProvider.getItemByIndex(viewer.getTable().getSelectionIndex());
new ShowRolePolicyDialog(iam, Display.getCurrent().getActiveShell(), role, policyName, false).open();
refresh();
}
@Override
public String getText() {
return "Show Policy";
}
}
private class EditPolicyAction extends Action {
@Override
public void run() {
String policyName = contentProvider.getItemByIndex(viewer.getTable().getSelectionIndex());
new ShowRolePolicyDialog(iam, Display.getCurrent().getActiveShell(), role, policyName, true).open();
refresh();
}
@Override
public String getText() {
return "Edit Policy";
}
}
private void deletePolicy(String policyName) {
iam.deleteRolePolicy(new DeleteRolePolicyRequest().withRoleName(role.getRoleName()).withPolicyName(policyName));
}
protected void getPolicyNames() {
if (role != null) {
policyNames = iam.listRolePolicies(new ListRolePoliciesRequest().withRoleName(role.getRoleName())).getPolicyNames();
} else {
policyNames = null;
}
}
public void setRole(Role role) {
this.role = role;
refresh();
}
@Override
public void refresh() {
new LoadPermissionTableThread().start();
}
}