org.pentaho.pms.ui.concept.editor.AvailSecurityOwnersTableViewer.java Source code

Java tutorial

Introduction

Here is the source code for org.pentaho.pms.ui.concept.editor.AvailSecurityOwnersTableViewer.java

Source

/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.pms.ui.concept.editor;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.pentaho.pms.schema.security.SecurityOwner;
import org.pentaho.pms.schema.security.SecurityReference;
import org.pentaho.pms.ui.util.GUIResource;

public class AvailSecurityOwnersTableViewer extends TableViewer {

    static final int TYPE_COLUMN_ID = 0;

    static final int NAME_COLUMN_ID = 1;

    List<SecurityOwner> allUnassignedUsersAndRoles;

    SecurityReference securityReference;

    public AvailSecurityOwnersTableViewer(Composite parent, int style, SecurityReference securityReference,
            List<SecurityOwner> usedOwners) {
        super(parent, style);
        this.securityReference = securityReference;
        allUnassignedUsersAndRoles = findUnused(usedOwners, securityReference.getUsers(),
                securityReference.getRoles());
        initTable();
    }

    protected List<SecurityOwner> findUnused(List<SecurityOwner> usedOwners, List<String> users,
            List<String> roles) {
        List<SecurityOwner> allOwners = new ArrayList<SecurityOwner>();
        // make a single list with SecurityOwner objects
        for (String user : users) {
            allOwners.add(new SecurityOwner(SecurityOwner.OWNER_TYPE_USER, user));
        }
        for (String role : roles) {
            allOwners.add(new SecurityOwner(SecurityOwner.OWNER_TYPE_ROLE, role));
        }
        return new ArrayList<SecurityOwner>(CollectionUtils.subtract(allOwners, usedOwners));
    }

    class MyContentProvider implements IStructuredContentProvider {

        public Object[] getElements(Object arg0) {
            return allUnassignedUsersAndRoles.toArray();
        }

        public void dispose() {
        }

        public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
        }
    }

    class MyLabelProvider extends LabelProvider implements ITableLabelProvider {
        public Image getColumnImage(Object secOwner, int column) {
            Image image = null;
            if ((secOwner instanceof SecurityOwner) && (column == TYPE_COLUMN_ID)) {
                SecurityOwner securityOwner = (SecurityOwner) secOwner;
                if (securityOwner.getOwnerType() == SecurityOwner.OWNER_TYPE_USER) {
                    image = GUIResource.getInstance().getImageUser();
                } else if (securityOwner.getOwnerType() == SecurityOwner.OWNER_TYPE_ROLE) {
                    image = GUIResource.getInstance().getImageRole();
                }
            }
            return image;
        }

        public String getColumnText(Object secOwner, int column) {
            String text = null;
            if ((secOwner instanceof SecurityOwner) && (column == NAME_COLUMN_ID)) {
                SecurityOwner securityOwner = (SecurityOwner) secOwner;
                text = securityOwner.getOwnerName();
            }
            return text;
        }
    }

    private void initTable() {
        Table table = getTable();

        TableColumn column = new TableColumn(table, SWT.LEFT);
        column.setText("Type");
        column.setWidth(30);

        column = new TableColumn(table, SWT.LEFT);
        column.setText("Name");
        column.setWidth(180);

        setContentProvider(new MyContentProvider());
        setLabelProvider(new MyLabelProvider());
        setSorter(new ViewerSorter() {

            public int category(Object arg0) {
                return -((SecurityOwner) arg0).getOwnerType();
            }

        });
        setInput("hello");
    }

    public SecurityOwner[] getSelectedOwners() {
        StructuredSelection selection = (StructuredSelection) getSelection();
        @SuppressWarnings("all")
        Collection<SecurityOwner> c = selection.toList();
        return c.toArray(new SecurityOwner[0]);
    }

}