Package clips.delegate.shedule.prorumble

Source Code of clips.delegate.shedule.prorumble.SheduleProrumbleLocal$ProrumbleList

/*
* SheduleHolidayLocal.java
*
*/

package clips.delegate.shedule.prorumble;

import TimeTable.Day;
import beans.shedule.holiday.SheduleHolidayBean;
import beans.shedule.prorumble.SheduleProrumbleBean;
import beans.shedule.prorumble.SheduleProrumbleBeanRemote;
import cli_fmw.delegate.DelegateStandart;
import cli_fmw.delegate.cache.ExtraDataManager;
import cli_fmw.delegate.lists.DataChunkMapList;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.SelectorEditable;
import clips.delegate.directory.ro.DirectoryCollaboratorItem;
import beans.shedule.prorumble.ProrumbleDetails;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;


/**
* Делегат по управлению праздничными днями,
* является простым менеджером для делегатов - праздничных дней.
* Пакетно их загружает. Делегирует в них события сохранения и отката.
* Это уникальный делегат, во всем клиенте он один.
* @author Axe Ilshat
*/
public class SheduleProrumbleLocal extends DelegateStandart<SheduleProrumbleBeanRemote> {
   
    private DirectoryCollaboratorItem collaborator;
    private ExtraDataManager ecm;
    private HashMap<Integer, ProrumbleList> prerumbleList = new HashMap<Integer, ProrumbleList>();
   
    /**
     * Создает новый делегат.
     * @param collaborator
     * @throws ClipsException
     */
    public SheduleProrumbleLocal(DirectoryCollaboratorItem collaborator) throws ClipsException {
        super(SheduleProrumbleBean.class.getSimpleName());
        initBean();
        this.collaborator = collaborator;
        ecm = new ExtraDataManager(getBean(), this, false);
    }

    public boolean canModify() throws ClipsException {
        return getBeanRights().isCommandAccessible(SheduleHolidayBean.COMMAND_MODIFY);
    }
   
    /**
     * Возвращает информацию о пропущенном дне
     * @param day 1-31
     * @param month 1-12
     * @param year 1900-2100
     * @return
     * @throws ClipsException
     */
    public SheduleProrumbleData getProrumble(Day day)
            throws ClipsException {
        SheduleProrumbleData res = get(day.getYear(), day.getMonth()+1).get(day.getDay());
        System.out.println("Request prorumble for " + day
                + " - " + (res == null ? "none":res.toString()));      
        return res;
    }
   
    /**
     * Сохраняет изменения, произошедшие в делегате
     * @throws ClipsException
     */
    @Override
    public void save1() throws ClipsException {
        Iterator<ProrumbleList> i = prerumbleList.values().iterator();
        while(i.hasNext()) {
            i.next().save();
        }
    }

    /**
     * Сбрасывает изменения, произошедшие в делегате
     */
    @Override
    public void restore() {
        Iterator<ProrumbleList> i = prerumbleList.values().iterator();
        while(i.hasNext()) {
            i.next().restore();
            System.out.println("WorkList restored");                   
        }
    }
   
    /**
     * Проверяет, нуждается ли делегат в сохранении состояния
     * @return boolean
     */
    @Override
    public boolean isDirty() {
        Iterator<ProrumbleList> i = prerumbleList.values().iterator();
        while(i.hasNext()) {
            if(i.next().isDirty()) {
                return true;
            }
        }
        return false;
    }

  
    /**
     * Вовзврашает итератор пропущенных дней за заданный месяц
     * @param year 1900-2100
     * @param month 1-12
     * @return
     * @throws ClipsException
     */
    public SelectorEditable<SheduleProrumbleData> iterator(int year, int month)
            throws ClipsException {
        return get(year, month).selector();
    }
   
    /**
     * Возврашает объект пропущенных дней за заданный месяц
     * @param year 1900-2100
     * @param month 1-12
     * @return
     * @throws cli_fmw.delegate.exception.ClipsException
     */
    private ProrumbleList get(int year, int month)
            throws ClipsException{
        int key = year*100 + month;
        ProrumbleList dl = prerumbleList.get(key);
        if(dl == null) {
            dl = new ProrumbleList(ecm, month, year);
            prerumbleList.put(key, dl);
        }       
        return dl;       
    }
   
    class ProrumbleList extends DataChunkMapList<SheduleProrumbleData, Integer> {
        private int month;
        private int year;
           
        /**
         *
         * @param contaner
         * @param month 1-12
         * @param year
         */
        public ProrumbleList(ExtraDataManager contaner, int month, int year) {
            super(contaner);
            this.month = month;
            this.year = year;
        }
       
        @Override
        protected void deleteDB(SheduleProrumbleData data) throws Exception {
            Day day = data.getDay();
            bean().removeProrumble(collaborator.getID(), day.getDay(), day.getMonth()+1, day.getYear());
        }

        @Override
        protected int saveDB(SheduleProrumbleData data) throws Exception {
            bean().setProrumble(data.getDetails());
            return 0;
        }

        @Override
        protected void loadDB() throws Exception {
            System.out.println("Load prorumble data for month:" + month + ", year:" + year);
            List<ProrumbleDetails> list = bean().getProrumbleList(collaborator.getID(), month, year);
            for(ProrumbleDetails d :list) {
                initByDetails(new SheduleProrumbleData(d));
            }
        }
    }

}
TOP

Related Classes of clips.delegate.shedule.prorumble.SheduleProrumbleLocal$ProrumbleList

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.