Package cli_fmw.rights_m

Source Code of cli_fmw.rights_m.TableModelUserRightsM

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

package cli_fmw.rights_m;

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

/**
*
* @author petr
*/
public class TableModelUserRightsM extends AbstractTableModel {
    private ArrayList<UserRight> rights;
    private CollaboratorLocalAbstract collabLoc;
    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 TableModelUserRightsM(UserRightsGroup group, CollaboratorLocalAbstract collaborator) throws ClipsException {
        this(group.getRights(), collaborator);
    }

    public TableModelUserRightsM() {
        rights = new ArrayList<UserRight>();
        collabLoc = null;
    }

    public TableModelUserRightsM(Set<UserRight> allRts, CollaboratorLocalAbstract collaborator) throws ClipsException {
        if(collaborator == null){
            throw new IllegalArgumentException("collaborator must not be null");
        }
        collabLoc = collaborator;
        for (UserRight ur : allRts) {
            if(maskMap.get(ur.getGroup()) == null){
                maskMap.put(ur.getGroup(), collaborator.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 {
                collabLoc.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());
            return (mask != excludeFromMask(ur))||(!(Boolean)getValueAt(row, col)) ;
        }
        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.rights_m.TableModelUserRightsM

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.