⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 permissionfield.java

📁 Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI
💻 JAVA
字号:
/*--------------------------------------------------------------------------*
 | 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.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.rapla.components.layout.TableLayout;
import org.rapla.entities.Category;
import org.rapla.entities.domain.Permission;
import org.rapla.framework.RaplaContext;
import org.rapla.framework.RaplaException;

public class PermissionField extends AbstractEditField implements  ChangeListener, ActionListener {
    EditField groupSelect;
    EditField userSelect;

    JPanel panel = new JPanel();
    JPanel reservationPanel;
    Permission permission;

    JComboBox startSelection = new JComboBox();
    JComboBox endSelection = new JComboBox();
    DateField startDate;
    DateField endDate;
    LongField minAdvance;
    LongField maxAdvance;

    ListField accessField;

    public PermissionField(RaplaContext sm,String fieldName) throws RaplaException {
        super( sm);
        setFieldName( fieldName );

        panel.setBorder(BorderFactory.createEmptyBorder(5,8,5,8));

        double pre =TableLayout.PREFERRED;
        double fill =TableLayout.FILL;
        panel.setLayout( new TableLayout( new double[][]
            {{fill, 5},  // Columns
             {pre,5,pre,5,pre}} // Rows
                                          ));

        JPanel userPanel = new JPanel();
        panel.add( userPanel , "0,0,f,f" );
        userPanel.setLayout( new TableLayout( new double[][]
            {{pre, 10, fill, 5},  // Columns
             {pre,5,pre,5,pre}} // Rows
                                          ));

        userSelect = new UserListField( sm,"user" );
        userPanel.add( new JLabel(getString("user") + ":"), "0,0,l,f" );
        userPanel.add( userSelect.getComponent(),"2,0,l,f" );

        Category rootCategory =
            getQuery().getUserGroupsCategory();
        if ( rootCategory != null) {
            if (rootCategory.getDepth() > 2) {
                groupSelect = new CategorySelectField(getContext(),"group", rootCategory);
            } else {
                groupSelect = new CategoryListField(getContext(),"group", rootCategory);
            }
            userPanel.add( new JLabel(getString("group") + ":"), "0,2,l,f" );
            userPanel.add( groupSelect.getComponent(),"2,2,l,f" );
            groupSelect.addChangeListener( this );
        }


        reservationPanel = new JPanel();
        panel.add( reservationPanel , "0,2,f,f" );
        reservationPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), getString("allocatable_in_timeframe") + ":" ));
        reservationPanel.setLayout( new TableLayout( new double[][]
            {{pre,3, pre, 5, pre, 5},  // Columns
             {pre, 5, pre}} // Rows
                                                     ));

        reservationPanel.add( new JLabel( getString("start_date") + ":" ) , "0,0,l,f" );
        reservationPanel.add( startSelection , "2,0,l,f" );
        startSelection.setModel( createSelectionModel() );
        startSelection.setSelectedIndex( 0 );

        startDate = new DateField(sm,"start");
        reservationPanel.add( startDate.getComponent() , "4,0,l,f" );

        minAdvance = new LongField(sm,"minAdvance", new Long(0) );
        reservationPanel.add( minAdvance.getComponent() , "4,0,l,f" );

        reservationPanel.add( new JLabel( getString("end_date") + ":" ), "0,2,l,f" );
        reservationPanel.add( endSelection , "2,2,l,f" );
        endSelection.setModel( createSelectionModel() );
        endSelection.setSelectedIndex( 0 );

        endDate = new DateField(sm,"end");
        reservationPanel.add( endDate.getComponent() , "4,2,l,f" );

        maxAdvance = new LongField(sm,"maxAdvance", new Long(1) );
        reservationPanel.add( maxAdvance.getComponent() , "4,2,l,f" );

        userPanel.add( new JLabel(getString("permission.access") + ":"), "0,4,f,f" );
        Vector vector = new Vector();
        int[] accessLevels = Permission.ACCESS_LEVEL_TYPES;
        for (int i=0;i<accessLevels.length;i++) {
            vector.add(new Integer( accessLevels[i] ) );
        }
        accessField = new ListField(sm,"accessLevel", vector );
        accessField.setRenderer( new DefaultListCellRenderer() {
            private static final long serialVersionUID = 1L;

            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                if (value != null) {
                   String key = (String) Permission.ACCESS_LEVEL_NAMEMAP.get( ((Integer) value).intValue() );
                   value = getI18n().getString("permission." + key );
                }
                return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus );
            }}
        );
        
        userPanel.add( accessField.getComponent(), "2,4,f,f" );
       
        toggleVisibility();
        userSelect.addChangeListener( this );

        startSelection.addActionListener(this);
        minAdvance.addChangeListener(this);
        startDate.addChangeListener(this);

        endSelection.addActionListener(this);
        maxAdvance.addChangeListener(this);
        endDate.addChangeListener(this);

        accessField.addChangeListener(this);
        panel.revalidate();
    }

    public JComponent getComponent() {
        return panel;
    }


    private DefaultComboBoxModel createSelectionModel() {
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        model.addElement(getString( "open" ) );
        model.addElement(getString( "fixed_date") );
        model.addElement(getString( "x_days_advance") );
        return model;
    }


    private void toggleVisibility() {
        int level = ((Integer)accessField.getValue()).intValue();
        reservationPanel.setVisible( level >= Permission.ALLOCATE && level < Permission.ADMIN);
        
        int i = startSelection.getSelectedIndex();
        startDate.getComponent().setVisible( i == 1 );
        minAdvance.getComponent().setVisible( i == 2 );

        int j = endSelection.getSelectedIndex();
        endDate.getComponent().setVisible( j == 1 );
        maxAdvance.getComponent().setVisible( j == 2 );
    }

    boolean listenersDisabled = false;
    public void setValue(Object value) throws RaplaException {
        try {
            listenersDisabled = true;

            permission = (Permission) value;
            if ( groupSelect != null )
                groupSelect.mapFrom( permission );
            userSelect.mapFrom( permission );
            accessField.mapFrom( permission );

            int startIndex = 0;
            if ( permission.getStart() != null )
                startIndex = 1;
            if ( permission.getMinAdvance() != null )
                startIndex = 2;
            startSelection.setSelectedIndex( startIndex );

            int endIndex = 0;
            if ( permission.getEnd() != null )
                endIndex = 1;
            if ( permission.getMaxAdvance() != null )
                endIndex = 2;
            endSelection.setSelectedIndex( endIndex );

            startDate.mapFrom( permission );
            minAdvance.mapFrom( permission );
            endDate.mapFrom( permission );
            maxAdvance.mapFrom( permission );
            toggleVisibility();
        } finally {
            listenersDisabled = false;
        }
    }


    public void actionPerformed(ActionEvent evt) {
        if ( listenersDisabled )
            return;

        try {
          if (evt.getSource() == startSelection) {
              int i = startSelection.getSelectedIndex();
              if ( i == 0 ) {
                  permission.setStart( null );
                  permission.setMinAdvance( null );
              }
              if ( i == 1 ) {
                  Date today = getQuery().today();
                  permission.setStart( today );
                  startDate.mapFrom ( permission );
              } if ( i == 2 ) {
                  permission.setMinAdvance( new Long(0) );
                  minAdvance.mapFrom ( permission );
              }
          }
          if (evt.getSource() == endSelection) {
              int i = endSelection.getSelectedIndex();
              if ( i == 0 ) {
                  permission.setEnd( null );
                  permission.setMaxAdvance( null );
              }
              if ( i == 1 ) {
                  Date today = getQuery().today();
                  permission.setEnd( today );
                  endDate.mapFrom ( permission );
              } if ( i == 2 ) {
                  permission.setMaxAdvance( new Long( 30 ) );
                  maxAdvance.mapFrom ( permission );
              }
          }
          toggleVisibility();
          fireContentChanged();
        } catch ( RaplaException ex ) {
            showException( ex, getComponent() );
        }
    }

    public Object getValue() {
        return permission;
    }

    public void stateChanged(ChangeEvent evt) {
        if ( listenersDisabled )
            return;

        try {
            if (evt.getSource() == groupSelect) {
                groupSelect.mapTo( permission );
                userSelect.mapFrom(permission);
            } else if (evt.getSource() == userSelect) {
                userSelect.mapTo( permission );
                if ( groupSelect != null )
                    groupSelect.mapFrom(permission);
            } else if (evt.getSource() == startDate) {
                startDate.mapTo( permission );
            } else if (evt.getSource() == minAdvance) {
                minAdvance.mapTo( permission );
            } else if (evt.getSource() == endDate) {
                endDate.mapTo( permission );
            } else if (evt.getSource() == maxAdvance) {
                maxAdvance.mapTo( permission );
            } else if (evt.getSource() == accessField ) {
                accessField.mapTo( permission );
                toggleVisibility();
            }
            fireContentChanged();
        } catch (RaplaException ex) {
            showException( ex, getComponent() );
        }
    }

    class UserListField extends ListField {

        public UserListField(RaplaContext sm,String fieldName) throws RaplaException{
            super(sm,fieldName);
            Object[] obj = getQuery().getUsers();
            Vector list = new Vector();
            list.add(nothingSelected);
            for (int i=0;i<obj.length;i++)
                list.add(obj[i]);
            setVector(list);
        }
    }

}


⌨️ 快捷键说明

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