permissionlistfield.java

来自「Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI」· Java 代码 · 共 160 行

JAVA
160
字号
/*--------------------------------------------------------------------------*
 | Copyright (C) 2006 Christopher Kohlhaas                                  |
 |                                                                          |
 | This program is free software; you can redistribute it and/or modify     |
 | it under the terms of the GNU General Public License as published by the |
 | Free Software Foundation. A copy of the license has been included with   |
 | these distribution in the COPYING file, if not go to www.fsf.org         |
 |                                                                          |
 | As a special exception, you are granted the permissions to link this     |
 | program with every library, which license fulfills the Open Source       |
 | Definition as published by the Open Source Initiative (OSI).             |
 *--------------------------------------------------------------------------*/
package org.rapla.gui.internal.edit;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.rapla.entities.domain.Allocatable;
import org.rapla.entities.domain.Permission;
import org.rapla.framework.RaplaContext;
import org.rapla.framework.RaplaException;
import org.rapla.gui.toolkit.EmptyLineBorder;
/**
 *  @author Christopher Kohlhaas
 */
public class PermissionListField extends AbstractEditField
{
    JList permissionList = new JList();
    JPanel jPanel = new JPanel();
    PermissionField permissionField;
    private RaplaListEdit listEdit;
    Listener listener = new Listener();
    Allocatable allocatable;
    DefaultListModel model = new DefaultListModel();

    public PermissionListField( RaplaContext sm,String fieldName ) throws RaplaException {
        super( sm);
        permissionField = new PermissionField(sm,"permission");
        super.setFieldName(fieldName );
        jPanel.setLayout(new BorderLayout());
        listEdit = new RaplaListEdit( getI18n(), permissionField.getComponent(), listener);
        jPanel.add(listEdit.getComponent(),BorderLayout.CENTER);

        jPanel.setBorder(BorderFactory.createTitledBorder( new EmptyLineBorder(), getString("permissions")) );
        permissionField.addChangeListener( listener );
    }

    public JComponent getComponent() {
        return jPanel;
    }


    public boolean isBlock() {
        return true;
    }

    public boolean isVariableSized() {
        return false;
    }

    protected Object getValue() {
        return null;
    }

    protected void setValue(Object object) {
    }

    public void mapTo(Object o) throws RaplaException {
    }

    public void mapFrom(Object o) throws RaplaException {
        model.clear();
        allocatable = (Allocatable) o;
        Permission[] permissions = allocatable.getPermissions();;
        for (int i = 0; i < permissions.length; i++ ) {
            model.addElement(permissions[i]);
        }
        listEdit.setListDimension(new Dimension(210,90));
        listEdit.setMoveButtonVisible(false);
        listEdit.getList().setModel(model);
        listEdit.getList().setCellRenderer(new DefaultListCellRenderer() {
            private static final long serialVersionUID = 1L;

                public Component getListCellRendererComponent(JList list,
                                                              Object value,
                                                              int index,
                                                              boolean isSelected,
                                                              boolean cellHasFocus) {
                    Permission p = (Permission) value;
                    if (p.getUser() != null) {
                        value = getString("user") + " "
                            + p.getUser().getUsername();
                    } else if (p.getGroup() != null){
                        value = getString("group") + " "
                            + p.getGroup().getName(getI18n().getLocale());
                    } else {
                        value = getString("all_users");
                    }
                    value = (index + 1) +") " + value;
                    return super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus);
                }
            });
    }

    private void removePermission() {
        Object[] objects = listEdit.getList().getSelectedValues();
        for (int i=0;i<objects.length;i++) {
            Permission permission = (Permission) objects[i];
            if ( allocatable.getPermissions().length > 1 ) {
                model.removeElement(permission);
                allocatable.removePermission(permission);
            }
        }
        listEdit.getList().requestFocus();
    }

    private void createPermission() {
        Permission permission = allocatable.newPermission();
        allocatable.addPermission( permission );
        model.addElement(permission);
    }

    class Listener implements ActionListener, ChangeListener {
        public void actionPerformed(ActionEvent evt) {
            try {
                if (evt.getActionCommand().equals("remove")) {
                    removePermission();
                } else if (evt.getActionCommand().equals("new")) {
                    createPermission();
                } else if (evt.getActionCommand().equals("edit")) {
                    permissionField.setValue( listEdit.getList().getSelectedValue() );
                }
            } catch (RaplaException ex) {
                showException(ex,getComponent());
            }
        }

        public void stateChanged(ChangeEvent evt) {
            Object permission = permissionField.getValue();
            model.set( model.indexOf( permission ),permission );
        }

    }

}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?