/*
* SheduleHolidayLocal.java
*
*/
package clips.delegate.shedule.holidays;
import beans.shedule.holiday.SheduleHolidayBean;
import beans.shedule.holiday.SheduleHolidayBeanRemote;
import beans.shedule.holiday.SheduleHolidayDetails;
import cli_fmw.delegate.DelegateStandart;
import cli_fmw.delegate.cache.ExtraDataManager;
import cli_fmw.main.ClipsException;
import cli_fmw.delegate.lists.DataChunkMapList;
import cli_fmw.utils.SelectorEditable;
import clips.login.UserInfo;
/**
* Делегат по управлению праздничными днями,
* является простым менеджером для делегатов - праздничных дней.
* Пакетно их загружает. Делегирует в них события сохранения и отката.
* Это уникальный делегат, во всем клиенте он один.
* @author Axe Ilshat
*/
public class SheduleHolidayLocal extends DelegateStandart<SheduleHolidayBeanRemote> {
private static SheduleHolidayLocal instance;
private static int sessionID;
private DayList daysList;
private ExtraDataManager ecm;
/**
* Создает новый делегат.
* @throws cli_fmw.delegate.exception.ClipsException
*/
private SheduleHolidayLocal() throws ClipsException {
super(SheduleHolidayBean.class.getSimpleName());
ecm = new ExtraDataManager(getBean(), this, false);
daysList = new DayList(ecm);
}
public static SheduleHolidayLocal getInstance() throws ClipsException {
if(instance == null || UserInfo.get().getSessionId() != sessionID) {
instance = new SheduleHolidayLocal();
sessionID = UserInfo.get().getSessionId();
}
return instance;
}
@Override
public boolean canModify() throws ClipsException {
return getBeanRights().isCommandAccessible(SheduleHolidayBean.COMMAND_MODIFY);
}
/**
* Возвращает описание праздника, если он есть в заданный день,
* если праздника в этот день нет, возхвращает NULL
* @param day день (1-31)
* @param month месяц (1-12)
* @return SheduleHolidayDayLocal or NULL
* @throws ClipsException
*/
public SheduleHolidayData getHoliday(int day, int month) throws ClipsException {
iterator();
return daysList.get(day*100 + month);
}
/**
* Сохраняет делегат.
* Передает событие сохранения в делегаты-праздничные дни
* @throws ClipsException
*/
@Override
public void save1() throws ClipsException {
if(daysList != null) {
daysList.save();
}
}
/**
* Отменяет все проделанные изменения в делегате.
* Передает событие отката в делегаты-праздничные дни
*/
@Override
public void restore() {
if(daysList != null) {
daysList.restore();
fireContentStateEvent();
}
}
/**
* Возвращает флаг - нуждается ли делегат или содержащиеся в нем
* делегаты-праздничные дни в сохранении
* @return
*/
@Override
public boolean isDirty() {
if(daysList != null) {
return daysList.isDirty();
}
return false;
}
/**
* Возвращает итератор праздничных дней
* @return итератор праздничных дней
* @throws ClipsException
*/
public SelectorEditable<SheduleHolidayData> iterator()
throws ClipsException{
return daysList.selector();
}
class DayList extends DataChunkMapList<SheduleHolidayData, Integer> {
public DayList(ExtraDataManager contaner) {
super(contaner);
}
@Override
protected void deleteDB(SheduleHolidayData data) throws Exception {
bean().removeHoliday(data.getDay(), data.getMonth());
}
@Override
protected int saveDB(SheduleHolidayData data) throws Exception {
bean().setHoliday(data.getDay(), data.getMonth(), data.getDescription());
return 0;
}
@Override
protected void loadDB() throws Exception {
for(SheduleHolidayDetails d: bean().getHolidayList()) {
initByDetails(new SheduleHolidayData(d));
}
}
}
}