Package clips.delegate.doctor.profchekup

Source Code of clips.delegate.doctor.profchekup.ProfcheckupItemLocal$ResultList

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

import beans.contract.entity.PolisDetails;
import beans.profcheckup.ProfcheckupItemBean;
import beans.profcheckup.entity.TransportData;
import cli_fmw.delegate.cache.SecondaryCacheManager;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import beans.profcheckup.ProfcheckupItemBeanRemote;
import beans.profcheckup.chunks.ProfcheckupItemChunk;
import beans.profcheckup.entity.ProfcheckupItemDetails;
import beans.service.create.ServiceCheckupChunk;
import cli_fmw.utils.SelectorEditable;
import cli_fmw.utils.SelectorEditableExceptional;
import clips.delegate.contract.PolisData;
import clips.delegate.directory.complex.DangerServiceData;
import clips.delegate.directory.complex.DirectoryDanger;
import clips.delegate.directory.complex.DirectoryDangerItem;
import clips.delegate.doctor.HasDiseaseLocal;
import clips.delegate.doctor.DiseaseLocal;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.delegate.cache.Cache;
import cli_fmw.delegate.cache.DelegateSecondaryCache;
import cli_fmw.delegate.cache.DelegateSecondaryCacheDgt;
import cli_fmw.delegate.cache.ExtraDataManager;
import cli_fmw.delegate.lists.DataChunkMapList;
import cli_fmw.main.ClipsException;
import cli_fmw.main.DirectoryItemReplacedException;
import clips.delegate.DEC.DECDisease;
import clips.delegate.directory.simple.profcheckupResult.DirectoryProfcheckupResult;
import clips.delegate.directory.simple.profcheckupResult.DirectoryProfcheckupResultItem;
import clips.delegate.doctor.medexam.HasSerrenResult;
import clips.delegate.doctor.medexam.MedSerrenResultData;
import clips.delegate.service.SerRenLocal;
import beans.service.medexam.MedSerrenResultDetails;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;


/**
*
* @author petr
*/
public class ProfcheckupItemLocal extends
    DelegateLine2<ProfcheckupItemBeanRemote, ProfcheckupItemDetails>
    implements HasDiseaseLocal, HasSerrenResult{

    private DECDisease disease = new DECDisease(this, "случай заболевания", getAuditListener()){

        @Override
        protected void setPrimary(DiseaseLocal type) throws ClipsException {
            if (type != null){
                super.setPrimary(type);
            }
        }

    };
    private PolisCache polisCache = new PolisCache(getSCM());
    private ResultList resultList = new ResultList(getEDM());
    /**
     * есть только у новосозданных итемов, загрузить данные с базы нельзя, тк
     * нельзя определить какая из услуг из заболевания назначена по данному фактору
     */
    private Cache<List<ServiceCheckupChunk>> serviceList1
            = new Cache<List<ServiceCheckupChunk>>();

   
    private ProfcheckupCache profcheckup = new ProfcheckupCache(getSCM());

        private class ResultList extends DataChunkMapList<MedSerrenResultData, Integer> {

        public ResultList(ExtraDataManager contaner) {
            super(contaner);
        }

        @Override
        protected void deleteDB(MedSerrenResultData data) throws Exception {
            throw new ClipsException("Удаление не поддерживается");
        }

        @Override
        protected int saveDB(MedSerrenResultData data) throws Exception {
            return getBean().setMedSerrenResult(data.getDetails());
        }

        @Override
        protected void loadDB() throws Exception {
            Set<Integer> currentSerrens = new HashSet<Integer>();
            SelectorEditableExceptional<DangerServiceData> dangerServices = getDanger().getDangerServices();
            List<SerRenLocal> serrenList = getDiseaseLocal().getSerrenList();
            for (int i = 0; i < dangerServices.size(); i++){
                DangerServiceData data = dangerServices.get(i);
                int serviceID = data.getService().getID();
                for (SerRenLocal serRenLocal : serrenList) {
                    if (serRenLocal.getService().getID() == serviceID){
                        currentSerrens.add(serRenLocal.getID());
                    }
                }
            }
             List<MedSerrenResultDetails> list = getBean().getSerrenResults();
            for (int i = 0; i < list.size(); i++) {
                if (currentSerrens.contains(list.get(i).serrenID)){
                    MedSerrenResultData data = new MedSerrenResultData(list.get(i));
                    initByDetails(data);
                }
            }
        }
    }

   
    @Override
    public SelectorEditable<MedSerrenResultData> getResultList() throws ClipsException {
        return resultList.selector();
    }

    @Override
    public SerRenLocal getSerRen(MedSerrenResultData resultData) throws ClipsException {
        int serrenID = resultData.getSerrenID();
        List<SerRenLocal> serrenList = getDiseaseLocal().getSerrenList();
        for (SerRenLocal serRenLocal : serrenList) {
            if (serRenLocal.getID() == serrenID){
                return serRenLocal;
            }
        }
        return null;
    }

    @Override
    public int getSerrenCount() throws ClipsException {
        int serrenCount = 0;
        Set<Integer> currentServices = new HashSet<Integer>();
        SelectorEditableExceptional<DangerServiceData> dangerServices = getDanger().getDangerServices();
        for (int i = 0; i < dangerServices.size(); i++){
            DangerServiceData data = dangerServices.get(i);
            currentServices.add(data.getService().getID());
        }
        List<SerRenLocal> serrenList = getDiseaseLocal().getSerrenList();
        for (SerRenLocal serRenLocal : serrenList) {
            if (serRenLocal.getAnalysis() == null && currentServices.contains(serRenLocal.getService().getID())){
                serrenCount++;
            }
        }
        return serrenCount;
    }

    /**
     *
     */
    private class PolisCache extends DelegateSecondaryCache<PolisData> {

        public PolisCache(SecondaryCacheManager container) throws ClipsException {
            super(container, "информацию о полисе");
        }

        @Override
        protected void setPrimary(PolisData type) throws ClipsException {
            if(type.getId() == 0) {
                throw new IllegalArgumentException("Член договора не существует");
            }
            getDetails().polisID = type.getId();
        }

        @Override
        protected PolisData init() throws Exception {
            PolisDetails cmd = getBean().getPolis();
            return new PolisData(null, null, cmd);
        }
    }
   
    /**
     *
     */
    /*
    private class ServiceListCache extends DelegateExtraInfo<List<ServiceCheckupChunk>> {

        public ServiceListCache(ExtraCacheManager contaner) {
            super(contaner);
        }
       
        @Override
        protected void saveDB() throws Exception {
            profcheckup.get().addMyToSaveList(
                new ProfcheckupItemChunk(getDetails().dangerId,
                    getDetails().polisID, get()));
        }

        @Override
        protected List<ServiceCheckupChunk> init() throws Exception {
            return null;
        }

        @Override
        public boolean isDirty() {
            return super.isDirty();
        }
    }
    */
    /**
     *
     */
    private class ProfcheckupCache extends DelegateSecondaryCacheDgt<ProfcheckupLocal> {

        public ProfcheckupCache(SecondaryCacheManager contaner) throws ClipsException {
            super(contaner, true, "информацию о профосмотре");
        }

        @Override
        protected void setPrimary(ProfcheckupLocal type) throws ClipsException {
            getDetails().profcheckupID = type.getID();
        }

        @Override
        protected ProfcheckupLocal init() throws Exception {
            if(getDetails().profcheckupID == 0) {
                return null;
            }
            return new ProfcheckupLocal(getDetails().profcheckupID, getAuditListener());
        }

        @Override
        protected void checkNotZero(int id) {
            if(id == 0) {
                System.out.println("Инициализация нулевым идентификатором");
            }       
        }
       
       
       
    }

    /**
     * Создаёт новый итем
     * проверка на существование не происходит, т.к профчекап не обязательно может быть сохранён
     * сюда передаётся ссылка на профчекап и итем сам себя пропишет в его кеш (похоже уже нет), при сохранении профчекапа
     * у него появится ид, и функция сохранения должна сработать
     * @param profch профосмотр
     * @param sl лист кусков услуг
     * @param dangerId ид опасного фактора
     * @param polisData данные полиса
     * @throws cli_fmw.main.ClipsException
     */
    public ProfcheckupItemLocal(ProfcheckupLocal profch,
                                ArrayList<ServiceCheckupChunk> sl,
                                int dangerId,
                                PolisData polisData) throws ClipsException {
        super(profch.getAuditListener());
        profcheckup.initBy(profch);
        polisCache.initBy(polisData);
       
        serviceList1.set(new ArrayList<ServiceCheckupChunk>(sl));
       
        getDetails().polisID = polisData.getId();
        getDetails().dangerId = dangerId;
       
    }
   
    public ProfcheckupItemLocal(DiseaseLocal diseaseLocal, int id) throws ClipsException {
        super(id, diseaseLocal.getAuditListener());
        assert id != 0;
        disease.initBy(diseaseLocal);
        serviceList1.set(new ArrayList<ServiceCheckupChunk>());
    }
   
    public ProfcheckupItemLocal(DiseaseLocal diseaseLocal, ProfcheckupLocal profch, ProfcheckupItemDetails detales) throws ClipsException {
        super(detales, diseaseLocal.getAuditListener());
        profcheckup.initBy(profch);
        disease.initBy(diseaseLocal);
        serviceList1.set(new ArrayList<ServiceCheckupChunk>());
    }

//    public ProfcheckupItemLocal(ProfcheckupLocal profch, ProfcheckupItemDetails detales) throws ClipsException {
//        super(detales);
//        profcheckup.initBy(profch);
//        serviceList1.set(new ArrayList<ServiceCheckupChunk>());
//    }

    @Override
    protected ProfcheckupItemDetails getNewDetails() {
        return new ProfcheckupItemDetails();
    }

    @Override
    public void save1() throws ClipsException {
        if(isNewlyCreated()) {
            try {
                int iD = profcheckup.get().getID();
                //todo save by chunk --> saving
                TransportData transportData = getBean().createItem(new ProfcheckupItemChunk(getDetails().dangerId, getDetails().polisID, iD, serviceList1.get()));
                ProfcheckupItemDetails details = transportData.itemDetails;
                getDetails().dangerId = details.dangerId;
                getDetails().diseaseID =details.diseaseID;
                getDetails().id = details.id;
                getDetails().lightWorkTill = details.lightWorkTill;
                getDetails().passed = details.passed;
                getDetails().polisID = details.polisID;
                getDetails().profcheckupID = details.profcheckupID;
                getDetails().resultExtra = details.resultExtra;
                getDetails().resultID = details.resultID;
                setDisease(new DiseaseLocal(getDetails().diseaseID, getAuditListener()));
                //подменим на сервере ид, что б не пытался создать новых сущностей
                getBean().initByID(details.id, getBean().getSessionId());
                auditDetailsList.addAll(transportData.auditList);
                fireAuditEvent();
            } catch (Exception ex) {
                clearBean();
                throw new ClipsException("Не удалось сохранить профосмотр", ex);
            }
        }
        super.save1();//единственный способ сменить ид делегата
    }
   
    public Date getLightWorkTill() throws ClipsException {
        return getDetails().lightWorkTill;
    }

    public void setLightWorkTill(Date lightWorkTill) throws ClipsException {
        this.getDetails().lightWorkTill = lightWorkTill;
        fireContentStateEvent();
    }

    public boolean isPassed() throws ClipsException {
        return getDetails().passed;
    }

    public void setPassed(boolean passed) throws ClipsException {
        this.getDetails().passed = passed;
        fireContentStateEvent();
    }

    public ProfcheckupLocal getProfCheckup() throws ClipsException {
        return new ProfcheckupLocal(getDetails().profcheckupID, getAuditListener());
    }

    public void setProfCheckup(ProfcheckupLocal profCheckup) throws ClipsException {
        this.getDetails().profcheckupID = profCheckup.getID();
        fireContentStateEvent();
    }

    public DirectoryProfcheckupResultItem getResult() throws ClipsException {
        DirectoryProfcheckupResult ds = DirectoryLocator.getDirectory(DirectoryProfcheckupResult.class);
        try {
            return ds.getItemFromID(getDetails().resultID);
        } catch (DirectoryItemReplacedException ex) {
            reload();
            return ds.getItemFromID(getDetails().resultID);
        }
    }

    public void setResult(DirectoryProfcheckupResultItem result) throws ClipsException {
        this.getDetails().resultID = result.getID();
        fireContentStateEvent();
    }

    public DirectoryDangerItem getDanger() throws ClipsException {
        DirectoryDanger dangers = DirectoryLocator.getDirectory(DirectoryDanger.class, false);
        return dangers.getItemFromID(getDetails().dangerId);
    }

    public void setDanger(DirectoryDangerItem danger) throws ClipsException {
        checkChanges();
        this.getDetails().dangerId = danger.getID();
        fireContentStateEvent();
    }

   
    public String getResultExtra() throws ClipsException {
        return getDetails().resultExtra;
    }

    public void setResultExtra(String resultExtra) throws ClipsException {
        this.getDetails().resultExtra = resultExtra;
        fireContentStateEvent();
    }

    @Override
    public DiseaseLocal getDiseaseLocal() throws ClipsException {
        return disease.get();
    }

    private void setDisease(DiseaseLocal disease) throws ClipsException {
        this.disease.set(disease);
    }

    @Override
    protected String getBeanName() {
        return ProfcheckupItemBean.class.getSimpleName();
    }
   
    public PolisData getPolisData() throws ClipsException {
        return polisCache.get();
    }
   
    public void setPolisData(PolisData polisData) throws ClipsException {
        checkChanges();
        polisCache.set(polisData);
    }
   
    /**
     * предоставляет доступ к листу прицепленных услуг, кеш всё равно без поддержки состояний,
     * нахер ему отдельные геттер - сеттер
     * @return
     * @throws cli_fmw.main.ClipsException
     */
    public List<ServiceCheckupChunk> serviceList() throws ClipsException {
        return serviceList1.get() ;
    }
   
   
//    public List<ServiceCheckupChunk> getServiceList() throws ClipsException {
//        return new ArrayList<ServiceCheckupChunk>(serviceList1.get()) ;
//    }

//    /**
//     * if serviceLise is null then throw exception
//     * @param sl
//     * @throws ClipsException
//     */
//    public void setServiceList(List<ServiceCheckupChunk> sl) throws ClipsException {
//        checkChanges();
//        serviceList1.set(new ArrayList<ServiceCheckupChunk>(sl));
//        fireContentStateEvent();
//    }

    private void checkChanges(){
        if (!this.isNewlyCreated()){
            throw new RuntimeException("Данные изменения возможно внести только в новосозданый элемент");
        }
    }

   
   
}
TOP

Related Classes of clips.delegate.doctor.profchekup.ProfcheckupItemLocal$ResultList

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.