Package cli_fmw.delegate.collaborator

Source Code of cli_fmw.delegate.collaborator.ArmLocal

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cli_fmw.delegate.collaborator;

import cli_fmw.main.UserPanel;
import framework.beans.arm.ArmPanelBean;
import framework.beans.arm.ArmPanelBeanRemote;
import cli_fmw.delegate.DelegateStandart;
import cli_fmw.delegate.cache.CacheRestorable;
import cli_fmw.delegate.directory.simple.arm.DirectoryArmItemAbstract;
import cli_fmw.main.ClipsException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import framework.security.UserRight;
import framework.security.UserRightsGroup;
import framework.security.UserRightsSetAbstract;
import java.util.HashMap;
import java.util.Map;

/**
* Делегат возвращающий селектор с доступными панелями для заданного пунта справочника
* рабочих мест
* @author petr
*/
public class ArmLocal extends DelegateStandart<ArmPanelBeanRemote> {

    private DirectoryArmItemAbstract arm; //пункт справочника по которому смотрим панели

    private CacheRestorable<Set<UserPanel>> panels = new CacheRestorable<Set<UserPanel>>();
    private CacheRestorable<Set<UserRight>> rights = new CacheRestorable<Set<UserRight>>();
    private CacheRestorable<Map<String, Integer>> rightsMap = new CacheRestorable<Map<String, Integer>>();
//    private RightsMapInfo rightsMap = new RightsMapInfo(getECM());
//
//    private DirectoryArmItemAbstract arm; //пункт справочника по которому смотрим панели
//
//        private class RightsMapInfo extends DelegateExtraInfo<Map<String, Integer>>{
//
//        public RightsMapInfo(ExtraCacheManager contaner) {
//            super(contaner);
//        }
//
//        @Override
//        protected void saveDB() throws Exception {
//            getBean().get().setRightsMask(arm.getID(), this.get());
//        }
//
//        @Override
//        protected Map<String, Integer> init() throws Exception {
//            return getBean().get().getRightsMask(arm.getID());
//        }
//
//    }
    /**
     * Инициализация по пункту справочника АРМов
     * @param arm пункт справочника
     * @throws ClipsException
     */
    public ArmLocal(DirectoryArmItemAbstract arm) throws ClipsException {
        super(ArmPanelBean.class.getSimpleName());
        initBean();
        this.arm = arm;
    }

    public DirectoryArmItemAbstract getArm() {
        return arm;
    }   

    /**
     * Возвращает список доступных панелей
     * @return селектор
     * @throws ClipsException
     */
    public Set<UserPanel> getPanels() throws ClipsException {
        if(!panels.inCache()) {
            try {
                Iterator<String> ri = bean().getPanelList(arm.getID()).iterator();
                Set<UserPanel> rs = new HashSet<UserPanel>();
                while (ri.hasNext()) {
                    UserPanel up = UserPanel.getPanel(ri.next());
          if (up != null) {
            rs.add(up);
          }
                }
                panels.set(rs);
            } catch (Exception ex) {
                clearBean();
                throw new ClipsException("При загрузке панелей произошла ошибка", ex);
            }
        }
        return new HashSet<UserPanel>(panels.get());
    }

    /**
     * меняет текущие права на заданные
     * @param upList
     */
    public void setPanels(Set<UserPanel> upList) {
        panels.set(new HashSet<UserPanel>(upList));
        fireContentStateEvent();
    }


   
    public Set<UserRight> getRights() throws ClipsException {
        if(!rights.inCache()) {
            try {
                Set<UserRight> rs = new HashSet<UserRight>();
                Iterator<Integer> ri = bean().getRights(arm.getID()).iterator();
                while (ri.hasNext()) {
                    rs.add(UserRightsSetAbstract.getRightFromID(ri.next()));
                }
                rights.set(rs);
            } catch (Exception ex) {
                clearBean();
                throw new ClipsException("Не удалось получить права", ex);
            }
        }
        return new HashSet<UserRight>(rights.get());
    }

    /**
     * меняет текущие права на заданные
     * @param urList
     */
    public void setRights(Set<UserRight> urList) {
        rights.set(new HashSet<UserRight>(urList));
        fireContentStateEvent();
    }
   
    @Override
    public boolean isDirty() {
        return rights.isDirty() || panels.isDirty() || rightsMap.isDirty();
    }

    @Override
    public void restore() {
        if(panels.inCache()) {
            panels.restore();
        }
        if(rights.inCache()) {
            rights.restore();
        }
        if(rightsMap.inCache()){
            rightsMap.restore();
        }
        fireContentStateEvent();
    }

    @Override
    public void save1() throws ClipsException {
       
        if(panels.inCache()) {
            try {
                Set<String> si = new HashSet<String>();
                Iterator<UserPanel> it = panels.get().iterator();
                while (it.hasNext()) {
                    UserPanel userPanels = it.next();
                    si.add(userPanels.getClassName());
                }
                bean().setPanelList(arm.getID(), si);
                panels.commit();
            } catch (Exception ex) {
                clearBean();
                fireContentStateEvent();
                throw new ClipsException("Не удалось сохранить панели АРМа", ex);
            }
        }
       
        if(rights.inCache()) {
            Set<Integer> si = new HashSet<Integer>();
            Iterator<UserRight> it = rights.get().iterator();
            while (it.hasNext()) {
                UserRight userRights = it.next();
                si.add(userRights.getID());
            }
            try {
                bean().setRights(arm.getID(), si);
                rights.commit();
            } catch (Exception ex) {
                clearBean();
                fireContentStateEvent();
                throw new ClipsException("Не удалось сохранить права АРМа", ex);
            }
        }

        if (rightsMap.inCache()){
            try {
                bean().setRightsMask(arm.getID(), rightsMap.get());
                rightsMap.commit();
            } catch (Exception ex) {
                clearBean();
                fireContentStateEvent();
                throw new ClipsException("Не удалось сохранить права АРМа", ex);
            }
        }

        fireContentStateEvent();
    }

    public int getRightMask(UserRightsGroup group) throws ClipsException{
        int mask = getRightsMap().get().get(group.getTitle());
//        System.out.println("GET RIGHT MASK group: " + group + " mask: " + mask);
        return mask;
    }

    public void setRightsMask(UserRightsGroup group, int mask) throws ClipsException{
        Map<String, Integer> map = new HashMap<String, Integer>(rightsMap.get());
        map.put(group.getTitle(), mask);
        getRightsMap().set(map);
//        rightsMap.get().put(group.getTitle(), mask);
//        System.out.println("SET RIGHT MASK group: " + group + " mask: " + mask);
        fireContentStateEvent();
    }

    private CacheRestorable<Map<String, Integer>> getRightsMap() throws ClipsException{
        if(!rightsMap.inCache()) {
            try {
                rightsMap.set(getBean().get().getRightsMask(arm.getID()));
            } catch (Exception ex) {
                clearBean();
                throw new ClipsException("При загрузке прав произошла ошибка", ex);
            }
        }
        return rightsMap;
    }
}
TOP

Related Classes of cli_fmw.delegate.collaborator.ArmLocal

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.