Package cli_fmw.administrator.arm

Source Code of cli_fmw.administrator.arm.TableModelArmRights

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package cli_fmw.administrator.arm;

import cli_fmw.delegate.collaborator.ArmLocal;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.MessageBox;
import framework.security.UserRight;
import framework.security.UserRightsGroup;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;

/**
*
* @author petr
*/
class TableModelArmRights extends AbstractTableModel {
    private ArrayList<UserRight> rights;
    private ArmLocal armLocal;
    private Map<UserRightsGroup, Integer> maskMap = new HashMap<UserRightsGroup, Integer>();
//    private Set<UserRights> visibleRights;

   // private UserInfo user;
    public static final int COLUMN_RIGHTS = 0;
    public static final int COLUMN_CHECKS = 1;
    public static final int COLUMN_COUNT = 2;

    /**
     *
     * @param group
     * @param collaborator may be null
     * @throws cli_fmw.main.ClipsException
     */
    public TableModelArmRights(UserRightsGroup group, ArmLocal arm) throws ClipsException {
        this(group.getRights(), arm);
    }

    public TableModelArmRights() {
        rights = new ArrayList<UserRight>();
        armLocal = null;
    }

    public TableModelArmRights(Set<UserRight> allRts, ArmLocal arm) throws ClipsException {
        if(arm == null){
            throw new IllegalArgumentException("collaborator must not be null");
        }
        armLocal = arm;
        for (UserRight ur : allRts) {
            if(maskMap.get(ur.getGroup()) == null){
                maskMap.put(ur.getGroup(), arm.getRightMask(ur.getGroup()));
            }
        }
        rights = new ArrayList<UserRight>(allRts);
        Collections.sort(rights);
    }

    @Override
    public int getRowCount() {
        return rights.size();
    }

    @Override
    public int getColumnCount() {
        return COLUMN_COUNT;
    }

    @Override
    public void setValueAt(Object obj, int row, int col) {// изменение таблицы
        if(col == COLUMN_CHECKS){
            Boolean set = (Boolean) obj;
            UserRight r = rights.get(row);
            UserRightsGroup group = r.getGroup();
            int mask = maskMap.get(group);
            if(set){
                mask = mask | r.getRightsMask();
            }else{
                mask = excludeFromMask(r);
            }
            try {
                armLocal.setRightsMask(group, mask);
                maskMap.put(group, mask);
            } catch (ClipsException ex) {
                MessageBox.showExceptionOnly(ex);
            }
        }
        fireTableDataChanged();
    }

    @Override
    public Object getValueAt(int row, int col) {// загрузка таблицы
        if(col == COLUMN_RIGHTS){
            return rights.get(row).toString();
        }
        if(col == COLUMN_CHECKS){
            UserRight ur = rights.get(row);
            return hasRight(ur);
        }
        return null;
    }


    @Override
    public Class getColumnClass(int columnIndex) {
        if(columnIndex == COLUMN_CHECKS) {
            return Boolean.class;
        }
        return super.getColumnClass(columnIndex);
    }

    @Override
    public void addTableModelListener(TableModelListener arg0) {
        super.addTableModelListener(arg0);
    }

    @Override
    public String getColumnName(int col) {
        String s = "";
        if(col == COLUMN_RIGHTS) {
            s = "Право";
        }
        if(col == COLUMN_CHECKS) {
            s = "Наличие";
        }
        return s;
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        if(col == COLUMN_CHECKS) {
            UserRight ur = rights.get(row);
            int mask = maskMap.get(ur.getGroup());
            boolean res = (mask != excludeFromMask(ur))||(!(Boolean)getValueAt(row, col)) ;
            return res;
        }
        return false;
    }

    private boolean hasRight(UserRight ur){
        int mask = maskMap.get(ur.getGroup());
        int rightsMask = ur.getRightsMask();
        boolean res = mask == (mask | rightsMask);
        return res;
    }

    private int excludeFromMask(UserRight r){
        int newMask = 0;
        Set<UserRight> groupRights = r.getGroup().getRights();
        for (UserRight ur : groupRights) {
            if (ur != r && hasRight(ur)){
                newMask = newMask | ur.getRightsMask();
            }
        }
        return newMask;
    }

}
TOP

Related Classes of cli_fmw.administrator.arm.TableModelArmRights

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.