Package beans.directory.checkuptype

Source Code of beans.directory.checkuptype.DirectoryCheckupTypeBean

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package beans.directory.checkuptype;

import beans.directory.checkuptype.entity.CheckupTypeDetails;
import framework.beans.directory.DirectoryBean;
import framework.beans.directory.DirectoryItemDetails;
import beans.directory.checkuptype.entity.CheckupType;
import beans.directory.service.entity.Service;
import beans.laboratory.Laboratory;
import beans.doctor.checkup.Checkup;
import java.util.Iterator;
import framework.generic.ClipsServerException;
import framework.generic.EDataIntegrity;
import framework.generic.EMoveToTrash;
import java.util.List;
import javax.ejb.Stateful;
import javax.persistence.Query;
import beans.UserRightsSet;
import beans.directory.simple.entities.Speciality;
import beans.directory.checkuptype.entity.SpecialityCheckupType;
import beans.directory.checkuptype.entity.SpecialityCheckupTypePK;
import framework.security.UserRight;

/**
* Security - Ok.
* @author axe
*/
@Stateful(mappedName="clips-beans/DirectoryCheckupTypeBean")
public class DirectoryCheckupTypeBean extends DirectoryBean<CheckupType, CheckupTypeDetails>
        implements DirectoryCheckupTypeBeanRemote {
   
    public DirectoryCheckupTypeBean() {
        super(CheckupType.class, "тип осмотра");
    }
   
    @Override
    protected UserRight getRightForCreateDirectoryItem() {
        return UserRightsSet.WRITE_REGION_ADMIN_DIRECTORY;
    }

    @Override
    protected UserRight getRightForWriteToDirectory() {
        return UserRightsSet.WRITE_REGION_ADMIN_DIRECTORY;
    }

    @Override
    protected void set(CheckupType entity, CheckupTypeDetails details) {
        CheckupType checkupType = entity;
        CheckupTypeDetails d = details;
        checkupType.setTitle(d.title);
        //checkupType.setDirty(details.dirty);
        checkupType.setMetadata(d.metadata);
        checkupType.setDescription(d.description);
        checkupType.setIsanalyse(d.isAnalyse);
        checkupType.setTrash(d.hidden);
    }
  
    @Override
    protected void onAppend(CheckupTypeDetails details) throws ClipsServerException {
        check(details);
    }

    @Override
    protected void onRemove(CheckupType entity) throws ClipsServerException {
        CheckupType checkupType = entity;
        Field f[] = { new Field("checkupType", checkupType) };
        //проверяем, если ли связанные услуги
        List serviceList = findEntityList(Service.class, f);
        if(serviceList.size() > 0) {
            String s = "";
            for (int i = 0; i < serviceList.size(); i++) {
                Service service = (Service)serviceList.get(i);
                s += "\n" + service.getCodeAndTitle();
            }
            throw new EDataIntegrity("Удаление невозможно, с данным анализом связаны следующие услуги" + s);
        }
        //проверяем, есть ли связанные осмотры
        Field f2[] { new Field("checkupType", checkupType) };
        if(getEntityCount(Checkup.class, f2) > 0) {
            throw new EMoveToTrash("Существуют анализы и осмотры данного типа, удаление невозможно");
        }
       
        //удаляем связи с лабораториями
        try {
            String sql = "Select a FROM " + Laboratory.class.getSimpleName() + " a" +
                    ", IN (a.checkupTypes) as ch WHERE ch.id = :checkupType";
            Query query = manager.createQuery(sql);
            query.setParameter("checkupType", checkupType.getId());
            Iterator i = query.getResultList().iterator();
            while(i.hasNext()) {
                Laboratory lab = (Laboratory) i.next();
                lab.getCheckupTypes().remove(checkupType);
                manager.merge(lab);
            }
        } catch (Exception ex) {
            throw new ClipsServerException("Попытка удаления лабораторий не удалась: ", ex);
        }
    }

    @Override
    protected void onUpdate(CheckupType entity, CheckupTypeDetails details) throws ClipsServerException {
        check(details);
    }
   
    /**
     * проверка полей на валидность
     * @param details
     * @throws generic.ClipsServerException
     */
    private void check(DirectoryItemDetails details) throws ClipsServerException {
        CheckupTypeDetails d = (CheckupTypeDetails) details;
        if(d.metadata == null || d.metadata.trim().isEmpty()) {
            throw new EDataIntegrity("Не задана форма данных");
        }
        checkXML(d.metadata);
    }

    /**
     * Имеются ли чекапы данного типа
     * Если чекапов нет, то можно изменять метадату как угодно
     * @param id
     * @return
     * @throws generic.ClipsServerException
     */
    @Override
    public boolean isNotUsedInCheckup(int id) throws ClipsServerException {
        Field field[] = {
            new Field("checkupType.id", id)
        };
        return getEntityCount(Checkup.class, field) == 0;
    }

    @Override
    public void addItemToFilter(DirectoryItemDetails filter, CheckupTypeDetails item) throws ClipsServerException {
        removeItemFromFilter(filter, item);
        SpecialityCheckupType sct = new SpecialityCheckupType(new SpecialityCheckupTypePK(filter.id, item.id));
        manager.persist(sct);
    }

    @Override
    public CheckupTypeDetails[] getItemDetailsByFilter(DirectoryItemDetails filter) {
        List<SpecialityCheckupType> list = findEntityList(SpecialityCheckupType.class, "key.speciality", filter.id);
        CheckupTypeDetails[] res = new CheckupTypeDetails[list.size()];
        for (int i = 0; i < list.size(); i++) {
            res[i] = list.get(i).getCheckupType().getDetails(this);
        }
        return res;
    }

    @Override
    public void removeItemFromFilter(DirectoryItemDetails filter, CheckupTypeDetails item) throws ClipsServerException {
        findEntity(Speciality.class, filter.getId());
        findEntity(CheckupType.class, item.id);
        Field f[] = {
            new Field("key.speciality", filter.getId()),
            new Field("key.checkupType", item.id),
        };
        deleteEntityList(SpecialityCheckupType.class, f);
    }

}
TOP

Related Classes of beans.directory.checkuptype.DirectoryCheckupTypeBean

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.