/*
* 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;
}
}