Package org.apache.directory.studio.aciitemeditor.widgets

Source Code of org.apache.directory.studio.aciitemeditor.widgets.ACIItemUserPermissionsComposite$UserPermissionWrapper

/*
*  Licensed to the Apache Software Foundation (ASF) under one
*  or more contributor license agreements.  See the NOTICE file
*  distributed with this work for additional information
*  regarding copyright ownership.  The ASF licenses this file
*  to you 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://www.apache.org/licenses/LICENSE-2.0
*  Unless required by applicable law or agreed to in writing,
*  software distributed under the License 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 org.apache.directory.studio.aciitemeditor.widgets;


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

import org.apache.directory.api.ldap.aci.GrantAndDenial;
import org.apache.directory.api.ldap.aci.ProtectedItem;
import org.apache.directory.api.ldap.aci.UserPermission;
import org.apache.directory.studio.aciitemeditor.ACIItemValueWithContext;
import org.apache.directory.studio.aciitemeditor.Activator;
import org.apache.directory.studio.aciitemeditor.dialogs.UserPermissionDialog;
import org.apache.directory.studio.aciitemeditor.model.ProtectedItemWrapper;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;


/**
* This composite contains GUI elements to add, edit and delete ACI user permissions.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class ACIItemUserPermissionsComposite extends Composite
{

    /** The context. */
    private ACIItemValueWithContext context;

    /** The inner composite for all the content */
    private Composite composite = null;

    /** The description label */
    private Label label = null;

    /** The table control for the table viewer */
    private Table table = null;

    /** The table viewer containing all user classes */
    private TableViewer tableViewer = null;

    /** The composite containing the buttons */
    private Composite buttonComposite = null;

    /** The add button */
    private Button addButton = null;

    /** The edit button */
    private Button editButton = null;

    /** The delete button */
    private Button deleteButton = null;

    /** The selected user permissions, also input of the table viewer */
    List<UserPermissionWrapper> userPermissionWrappers = new ArrayList<UserPermissionWrapper>();

    /**
     * UserPermissionWrapper are used as input of the table viewer.
     *
     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
     */
    private class UserPermissionWrapper
    {
        /** The user permission bean. */
        private UserPermission userPermission;


        /**
         * Creates a new instance of UserPermissionWrapper.
         *
         * @param userPermission the user permission
         */
        public UserPermissionWrapper( UserPermission userPermission )
        {
            this.userPermission = userPermission;
        }


        /**
         * Returns a user-friedly string, displayed in the table.
         *
         * @return the string
         */
        public String toString()
        {
            if ( userPermission == null )
            {
                return "<UNKNOWN>"; //$NON-NLS-1$
            }
            else
            {
                StringBuffer buffer = new StringBuffer();
                if ( ( userPermission.getPrecedence() != null ) && ( userPermission.getPrecedence() > -1 ) )
                {
                    buffer.append( '(' );
                    buffer.append( userPermission.getPrecedence() );
                    buffer.append( ')' );
                    buffer.append( ' ' );
                }
                for ( Iterator<ProtectedItem> it = ( ( Collection<ProtectedItem> ) userPermission.getProtectedItems() )
                    .iterator(); it.hasNext(); )
                {
                    ProtectedItem item = it.next();
                    String s = ProtectedItemWrapper.classToDisplayMap.get( item.getClass() );
                    buffer.append( s );

                    if ( it.hasNext() )
                    {
                        buffer.append( ',' );
                    }
                }
                buffer.append( ':' );
                buffer.append( ' ' );
                for ( Iterator<GrantAndDenial> it = ( ( Collection<GrantAndDenial> ) userPermission
                    .getGrantsAndDenials() ).iterator(); it.hasNext(); )
                {
                    GrantAndDenial gd = it.next();
                    buffer.append( gd.isGrant() ? '+' : '-' );
                    buffer.append( gd.getMicroOperation().getName() );

                    if ( it.hasNext() )
                    {
                        buffer.append( ',' );
                    }
                }

                String s = buffer.toString();
                s = s.replace( '\r', ' ' );
                s = s.replace( '\n', ' ' );
                if ( s.length() > 50 )
                {
                    String temp = s;
                    s = temp.substring( 0, 25 );
                    s = s + "..."; //$NON-NLS-1$
                    s = s + temp.substring( temp.length() - 25, temp.length() );
                }
                return s;
            }
        }
    }


    /**
     * Creates a new instance of ACIItemUserPermissionsComposite.
     *
     * @param parent
     * @param style
     */
    public ACIItemUserPermissionsComposite( Composite parent, int style )
    {
        super( parent, style );

        GridLayout layout = new GridLayout();
        layout.horizontalSpacing = 0;
        layout.verticalSpacing = 0;
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        setLayout( layout );

        GridData layoutData = new GridData();
        layoutData.horizontalAlignment = GridData.FILL;
        layoutData.grabExcessHorizontalSpace = true;
        layoutData.verticalAlignment = GridData.CENTER;
        setLayoutData( layoutData );

        createComposite();
    }


    /**
     * This method initializes composite   
     *
     */
    private void createComposite()
    {

        GridData labelGridData = new GridData();
        labelGridData.horizontalSpan = 2;
        labelGridData.verticalAlignment = GridData.CENTER;
        labelGridData.grabExcessHorizontalSpace = true;
        labelGridData.horizontalAlignment = GridData.FILL;

        GridLayout gridLayout = new GridLayout();
        gridLayout.makeColumnsEqualWidth = false;
        gridLayout.numColumns = 2;

        GridData gridData = new GridData();
        gridData.horizontalAlignment = GridData.FILL;
        gridData.grabExcessHorizontalSpace = true;
        gridData.verticalSpan = 1;
        gridData.verticalAlignment = GridData.BEGINNING;

        composite = new Composite( this, SWT.NONE );
        composite.setLayoutData( gridData );
        composite.setLayout( gridLayout );

        label = new Label( composite, SWT.NONE );
        label.setText( Messages.getString( "ACIItemUserPermissionsComposite.descripton" ) ); //$NON-NLS-1$
        label.setLayoutData( labelGridData );

        createTable();

        createButtonComposite();
    }


    /**
     * This method initializes table and table viewer
     *
     */
    private void createTable()
    {
        GridData tableGridData = new GridData();
        tableGridData.grabExcessHorizontalSpace = true;
        tableGridData.verticalAlignment = GridData.FILL;
        tableGridData.horizontalAlignment = GridData.FILL;
        //tableGridData.heightHint = 100;

        table = new Table( composite, SWT.BORDER );
        table.setHeaderVisible( false );
        table.setLayoutData( tableGridData );
        table.setLinesVisible( false );
        tableViewer = new TableViewer( table );
        tableViewer.setContentProvider( new ArrayContentProvider() );
        tableViewer.setLabelProvider( new LabelProvider() );
        tableViewer.setInput( userPermissionWrappers );

        tableViewer.addSelectionChangedListener( new ISelectionChangedListener()
        {
            public void selectionChanged( SelectionChangedEvent event )
            {
                userPermissionSelected();
            }
        } );

        tableViewer.addDoubleClickListener( new IDoubleClickListener()
        {
            public void doubleClick( DoubleClickEvent event )
            {
                editUserPermission();
            }
        } );
    }


    /**
     * This method initializes buttons 
     *
     */
    private void createButtonComposite()
    {
        GridData deleteButtonGridData = new GridData();
        deleteButtonGridData.horizontalAlignment = GridData.FILL;
        deleteButtonGridData.grabExcessHorizontalSpace = false;
        deleteButtonGridData.verticalAlignment = GridData.BEGINNING;
        deleteButtonGridData.widthHint = Activator.getButtonWidth( this );

        GridData editButtonGridData = new GridData();
        editButtonGridData.horizontalAlignment = GridData.FILL;
        editButtonGridData.grabExcessHorizontalSpace = false;
        editButtonGridData.verticalAlignment = GridData.BEGINNING;
        editButtonGridData.widthHint = Activator.getButtonWidth( this );

        GridData addButtonGridData = new GridData();
        addButtonGridData.horizontalAlignment = GridData.FILL;
        addButtonGridData.grabExcessHorizontalSpace = false;
        addButtonGridData.verticalAlignment = GridData.BEGINNING;
        addButtonGridData.widthHint = Activator.getButtonWidth( this );

        GridLayout gridLayout = new GridLayout();
        gridLayout.marginWidth = 0;
        gridLayout.marginHeight = 0;
        GridData gridData = new GridData();
        gridData.horizontalAlignment = GridData.CENTER;
        gridData.grabExcessHorizontalSpace = false;
        gridData.grabExcessVerticalSpace = false;
        gridData.verticalAlignment = GridData.FILL;

        buttonComposite = new Composite( composite, SWT.NONE );
        buttonComposite.setLayoutData( gridData );
        buttonComposite.setLayout( gridLayout );

        addButton = new Button( buttonComposite, SWT.NONE );
        addButton.setText( Messages.getString( "ACIItemUserPermissionsComposite.add.button" ) ); //$NON-NLS-1$
        addButton.setLayoutData( addButtonGridData );
        addButton.addSelectionListener( new SelectionAdapter()
        {
            public void widgetSelected( SelectionEvent e )
            {
                addUserPermission();
            }
        } );

        editButton = new Button( buttonComposite, SWT.NONE );
        editButton.setText( Messages.getString( "ACIItemUserPermissionsComposite.edit.button" ) ); //$NON-NLS-1$
        editButton.setLayoutData( editButtonGridData );
        editButton.addSelectionListener( new SelectionAdapter()
        {
            public void widgetSelected( SelectionEvent e )
            {
                editUserPermission();
            }
        } );
        editButton.setEnabled( false );

        deleteButton = new Button( buttonComposite, SWT.NONE );
        deleteButton.setText( Messages.getString( "ACIItemUserPermissionsComposite.delete.button" ) ); //$NON-NLS-1$
        deleteButton.setLayoutData( deleteButtonGridData );
        deleteButton.addSelectionListener( new SelectionAdapter()
        {
            public void widgetSelected( SelectionEvent e )
            {
                deleteUserPermission();
            }
        } );
        deleteButton.setEnabled( false );

    }


    /**
     * Shows or hides this composite.
     *
     * @param visible true if visible
     */
    public void setVisible( boolean visible )
    {
        super.setVisible( visible );
        ( ( GridData ) getLayoutData() ).heightHint = visible ? -1 : 0;
    }


    /**
     * Sets the context.
     *
     * @param context the context
     */
    public void setContext( ACIItemValueWithContext context )
    {
        this.context = context;
    }


    /**
     * Sets the user permissions.
     *
     * @param userPermissions
     */
    public void setUserPermissions( Collection<UserPermission> userPermissions )
    {
        userPermissionWrappers.clear();

        for ( UserPermission userPermission : userPermissions )
        {
            UserPermissionWrapper userPermissionWrapper = new UserPermissionWrapper( userPermission );

            userPermissionWrappers.add( userPermissionWrapper );
        }

        tableViewer.refresh();
    }


    /**
     * Returns the user permissions as selected by the user.
     *
     * @return the user permissions
     */
    public Collection<UserPermission> getUserPermissions()
    {
        Collection<UserPermission> userPermissions = new ArrayList<UserPermission>();

        for ( UserPermissionWrapper userPermissionWrapper : userPermissionWrappers )
        {
            userPermissions.add( userPermissionWrapper.userPermission );
        }

        return userPermissions;
    }


    /**
     *
     * @return the user permission that is selected in the table viewer, or null.
     */
    private UserPermissionWrapper getSelectedUserPermissionWrapper()
    {
        UserPermissionWrapper userPermissionWrapper = null;

        IStructuredSelection selection = ( IStructuredSelection ) tableViewer.getSelection();
        if ( !selection.isEmpty() )
        {
            Object element = selection.getFirstElement();
            if ( element instanceof UserPermissionWrapper )
            {
                userPermissionWrapper = ( UserPermissionWrapper ) element;
            }
        }

        return userPermissionWrapper;
    }


    /**
     * Opens the UserPermissionDialog and adds the composed
     * user permission to the list.
     */
    private void addUserPermission()
    {
        UserPermissionDialog dialog = new UserPermissionDialog( getShell(), null, context );
        if ( dialog.open() == UserPermissionDialog.OK && dialog.getUserPermission() != null )
        {
            UserPermissionWrapper userPermissionWrapper = new UserPermissionWrapper( dialog.getUserPermission() );
            userPermissionWrappers.add( userPermissionWrapper );

            tableViewer.refresh();
        }
    }


    /**
     * Opens the UserPermissionDialog with the currently selected
     * user permission and puts the modified user permission into the list.
     */
    private void editUserPermission()
    {
        UserPermissionWrapper oldUserPermissionWrapper = getSelectedUserPermissionWrapper();
        if ( oldUserPermissionWrapper != null )
        {
            UserPermissionDialog dialog = new UserPermissionDialog( getShell(),
                oldUserPermissionWrapper.userPermission, context );
            if ( dialog.open() == UserPermissionDialog.OK )
            {
                oldUserPermissionWrapper.userPermission = dialog.getUserPermission();
                tableViewer.refresh();
            }
        }
    }


    /**
     * Deletes the currently selected user permission from list.
     */
    private void deleteUserPermission()
    {
        UserPermissionWrapper userPermissionWrapper = getSelectedUserPermissionWrapper();
        if ( userPermissionWrapper != null )
        {
            userPermissionWrappers.remove( userPermissionWrapper );
            tableViewer.refresh();
        }
    }


    /**
     * Called when an user permission is selected in table viewer.
     * Updates the enabled/disabled state of the buttons.
     */
    private void userPermissionSelected()
    {
        UserPermissionWrapper userPermissionWrapper = getSelectedUserPermissionWrapper();

        if ( userPermissionWrapper == null )
        {
            editButton.setEnabled( false );
            deleteButton.setEnabled( false );
        }
        else
        {
            editButton.setEnabled( true );
            deleteButton.setEnabled( true );
        }
    }

}
TOP

Related Classes of org.apache.directory.studio.aciitemeditor.widgets.ACIItemUserPermissionsComposite$UserPermissionWrapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.