com.amazonaws.eclipse.identitymanagement.group.GroupTable.java Source code

Java tutorial

Introduction

Here is the source code for com.amazonaws.eclipse.identitymanagement.group.GroupTable.java

Source

/*
 * 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.group;

import java.util.List;

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.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.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.forms.widgets.FormToolkit;

import com.amazonaws.eclipse.core.AwsToolkitCore;
import com.amazonaws.eclipse.explorer.identitymanagement.AbstractGroupTable;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.model.DeleteGroupPolicyRequest;
import com.amazonaws.services.identitymanagement.model.DeleteGroupRequest;
import com.amazonaws.services.identitymanagement.model.GetGroupRequest;
import com.amazonaws.services.identitymanagement.model.Group;
import com.amazonaws.services.identitymanagement.model.ListGroupPoliciesRequest;
import com.amazonaws.services.identitymanagement.model.ListGroupPoliciesResult;
import com.amazonaws.services.identitymanagement.model.RemoveUserFromGroupRequest;
import com.amazonaws.services.identitymanagement.model.UpdateGroupRequest;
import com.amazonaws.services.identitymanagement.model.User;

public class GroupTable extends AbstractGroupTable {

    private GroupSummary groupSummary;
    private UsersInGroup usersInGroup;
    private GroupPermissions groupPermissions;
    private final String DELTE_GROUP_CONFIRMATION = "All users and permissions belonging to the selected groups will be removed from the group first. Do you want to continue?";

    public GroupTable(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 Action() {

                        @Override
                        public ImageDescriptor getImageDescriptor() {
                            return AwsToolkitCore.getDefault().getImageRegistry()
                                    .getDescriptor(AwsToolkitCore.IMAGE_REMOVE);
                        }

                        @Override
                        public void run() {
                            boolean confirmation = MessageDialog.openConfirm(Display.getCurrent().getActiveShell(),
                                    "Delete Group", DELTE_GROUP_CONFIRMATION);
                            if (confirmation) {
                                groupSummary.setGroup(null);
                                usersInGroup.setGroup(null);
                                groupPermissions.setGroup(null);
                                deleteMultipleGroups(viewer.getTable().getSelectionIndices());
                            }
                        }

                        @Override
                        public String getText() {
                            if (viewer.getTable().getSelectionIndices().length > 1) {
                                return "Delete Groups";
                            }
                            return "Delete Group";
                        }

                    });

                    manager.add(new Action() {

                        @Override
                        public ImageDescriptor getImageDescriptor() {
                            return null;
                        }

                        @Override
                        public void run() {
                            EditGroupNameDialog editGroupNameDialog = new EditGroupNameDialog(contentProvider
                                    .getItemByIndex(viewer.getTable().getSelectionIndex()).getGroupName());
                            if (editGroupNameDialog.open() == 0) {
                                editGroupName(editGroupNameDialog.getOldGroupName(),
                                        editGroupNameDialog.getNewGroupName());
                            }
                        }

                        @Override
                        public String getText() {
                            return "Edit Group Name";
                        }
                    });
                }
            }
        });

        viewer.getTable().setMenu(menuManager.createContextMenu(viewer.getTable()));

        viewer.getTable().addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                int index = viewer.getTable().getSelectionIndex();
                if (index >= 0) {
                    Group group = contentProvider.getItemByIndex(index);
                    groupSummary.setGroup(group);
                    usersInGroup.setGroup(group);
                    groupPermissions.setGroup(group);
                } else {
                    groupSummary.setGroup(null);
                    usersInGroup.setGroup(null);
                    groupPermissions.setGroup(null);
                }
            }
        });

    }

    public void setGroupSummary(GroupSummary groupSummary) {
        this.groupSummary = groupSummary;
    }

    public void setUsersInGroup(UsersInGroup usersInGroup) {
        this.usersInGroup = usersInGroup;
    }

    public void setGroupPermissions(GroupPermissions groupPermissions) {
        this.groupPermissions = groupPermissions;
    }

    private void deleteGroup(String groupName) {
        ListGroupPoliciesResult listGroupPoliciesResult = iam
                .listGroupPolicies(new ListGroupPoliciesRequest().withGroupName(groupName));
        for (String policyName : listGroupPoliciesResult.getPolicyNames()) {
            iam.deleteGroupPolicy(
                    new DeleteGroupPolicyRequest().withGroupName(groupName).withPolicyName(policyName));
        }

        List<User> usersInGroup = iam.getGroup(new GetGroupRequest().withGroupName(groupName)).getUsers();
        for (User user : usersInGroup) {
            iam.removeUserFromGroup(
                    new RemoveUserFromGroupRequest().withGroupName(groupName).withUserName(user.getUserName()));
        }
        iam.deleteGroup(new DeleteGroupRequest().withGroupName(groupName));
    }

    private void editGroupName(final String oldGroupName, final String newGroupName) {
        new Job("Edit group name") {
            @Override
            protected IStatus run(IProgressMonitor monitor) {
                try {
                    iam.updateGroup(
                            new UpdateGroupRequest().withGroupName(oldGroupName).withNewGroupName(newGroupName));
                } catch (Exception e) {
                    return new Status(Status.ERROR, AwsToolkitCore.PLUGIN_ID,
                            "Unable to edit the group name : " + e.getMessage(), e);
                }
                refresh();
                return Status.OK_STATUS;
            }
        }.schedule();

    }

    private void deleteMultipleGroups(final int[] indices) {
        new Job("Delete groups") {
            @Override
            protected IStatus run(IProgressMonitor monitor) {
                for (int index : indices) {
                    String groupName = contentProvider.getItemByIndex(index).getGroupName();
                    try {
                        deleteGroup(groupName);
                    } catch (Exception e) {
                        return new Status(Status.ERROR, AwsToolkitCore.PLUGIN_ID,
                                "Unable to delete groups: " + e.getMessage(), e);
                    }
                }
                refresh();
                return Status.OK_STATUS;
            }
        }.schedule();
    }

    @Override
    protected void listGroups() {
        groups = iam.listGroups().getGroups();
    }

    @Override
    public void refresh() {
        new LoadGroupTableThread().start();
    }

}