Package clips.delegate.doctor.certificate

Source Code of clips.delegate.doctor.certificate.CertificateLocal

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

import beans.doctor.certificate.CertificateBean;
import beans.doctor.certificate.CertificateBeanRemote;
import clips.delegate.client.ClientLocal;
import beans.doctor.certificate.CertificateDetails;
import cli_fmw.delegate.AuditListener;
import clips.delegate.directory.complex.DirectoryCertificateType;
import clips.delegate.directory.complex.DirectoryCertificateTypeItem;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import clips.delegate.doctor.Iconable;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.main.ClipsException;
import cli_fmw.delegate.utils.TimeLocal;
import clips.doctor.newEMC.init.generic.DelegateNodeLeaf;
import clips.delegate.doctor.certificate.tag.ResultCertTag;
import clips.delegate.DEC.DECClient;
import clips.delegate.directory.ro.DirectoryCollaborator;
import clips.delegate.directory.ro.DirectoryCollaboratorItem;
import clips.delegate.doctor.DiseaseLocal;
import clips.delegate.doctor.Signable;
import clips.login.UserInfo;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Element;
import org.jdom.JDOMException;
import framework.utils.Converter;
import java.util.Date;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import org.jdom.Document;
import framework.utils.DateTimeUtils;

/**
* Делегат, предоставляющий доступ к одной строке таблицы certificate
* (справки) а также подгружающий из базы данные по типу справки из таблицы
* certificate_type (типы справки), которая содержит название, печатную форму
* а тажкже информацию о наполнении справки (матаданные)
* @author ViP
*/
public class CertificateLocal extends DelegateNodeLeaf<CertificateBeanRemote, CertificateDetails>
        implements Iconable, Signable {

    private DECClient client = new DECClient(this, "информацию о пациенте, которому выписана справка", getAuditListener());
    private static ImageIcon icon = null;
    private Boolean canBeEdit;
    /**Дополнительные данные можно передать через заболевание при создании справки*/
    private DiseaseLocal disease = null;

    /**
     * Create ne certificate with  extra data
     * @param c
     * @param disease extra data for new certificate
     * @throws ClipsException
     */
    public CertificateLocal(ClientLocal c, DiseaseLocal disease) throws ClipsException {
        super(c.getAuditListener());
        client.initBy(c);
        try{
            if (disease != null && disease.getEmcLocal().getClient().getID() == c.getID()){
                this.disease = disease;
            }
        }catch(ClipsException ex){
            ex.printStackTrace();
        }
        getDetails().collaboratorID = UserInfo.get().getCollaborator().getID();
        getDetails().date = TimeLocal.getCurrentTime().getTime();
        getDetails().xml = Converter.xmlToString(new Document(new Element("Certificate")));
    }

//    public CertificateLocal(ClientLocal c) throws ClipsException {
//        this(c, null);
//    }

    public CertificateLocal(CertificateDetails details, ClientLocal c, AuditListener al) throws ClipsException {
        super(details, al);
        client.initBy(c);
    }

    @Override
    protected CertificateDetails getNewDetails() {
        return new CertificateDetails();
    }
   
    public boolean isCanBeEdit() throws ClipsException {
        if (canBeEdit == null) {
            canBeEdit = DateTimeUtils.belongsToCurrentDay(getDate());
        }
        return canBeEdit;
    }
   
    public ClientLocal getClientLocal() throws ClipsException {
        return client.get();
    }   

    public Date getDate() throws ClipsException {
        return getDetails().date;
    }

    //Never use client data
    @Deprecated
    public void setDate(Date date) throws ClipsException {
        getDetails().date = date;
        fireContentStateEvent();
    }

    /**
     * Возвращает результат по тегу
     * @param tagName
     * @return
     * @throws cli_fmw.main.ClipsException
     * @throws org.jdom.JDOMException
     */
    public ResultCertTag getCertTagResult(String tagName) throws ClipsException {
        ResultCertTag result = new ResultCertTag();
        Document doc = null;
        try {
            doc = Converter.stringToXml(getDetails().xml);
        } catch (JDOMException ex) {
            throw new ClipsException("Неверная XML справки", ex);
        }
        Element root = doc.getRootElement();
        Element child = root.getChild(tagName);
        if (child == null) {
            result.text = "";
            result.items = new ArrayList<Integer>();
            return result;
        } else {
            result.text = child.getTextTrim();
            if (result.text.startsWith("\"") && result.text.endsWith("\"")) {
                result.text = result.text.substring(1, result.text.length() - 1);
            }
            result.items = new ArrayList<Integer>();
            List children = child.getChildren("id");
            for (int i = 0; i < children.size(); i++) {
                Element element = (Element) children.get(i);
                String text = element.getText();
                int value = Integer.parseInt(text);
                result.items.add(value);
            }
            return result;
        }
    }

    /**
     * Выставляет результат по тегу
     * @param tagName
     * @param certTagResult
     * @throws cli_fmw.main.ClipsException
     * @throws org.jdom.JDOMException
     */
    public void setCertTagResult(String tagName, ResultCertTag certTagResult) throws ClipsException {
        Document doc = null;
        try {
            doc = Converter.stringToXml(getDetails().xml);
        } catch (JDOMException ex) {
            throw new ClipsException("Неверная XML справки", ex);
        }
        Element root = doc.getRootElement();
        Element child = root.getChild(tagName);
        if (child == null) {
            child = new Element(tagName);
            root.addContent(child);
        }
        child.removeContent();
        child.setText('"' + certTagResult.text != null ? certTagResult.text : "" + '"');
        for (int i = 0; i < certTagResult.items.size(); i++) {
            Integer integer = certTagResult.items.get(i);
            Element id = new Element("id");
            id.setText(integer.toString());
            child.addContent(id);
        }
        getDetails().xml = Converter.xmlToString(doc);
        fireContentStateEvent();
    }

    public DirectoryCollaboratorItem getCollaborator() throws ClipsException {
        DirectoryCollaborator directory = DirectoryLocator.getDirectory(DirectoryCollaborator.class, false);
        return directory.getItemFromID(getDetails().collaboratorID);
    }
           
    public DirectoryCertificateTypeItem getType() throws ClipsException {
        DirectoryCertificateType certificateTypes = DirectoryLocator.getDirectory(DirectoryCertificateType.class, false);
        return certificateTypes.getItemFromID(getDetails().typeID);
    }

    public void setType(DirectoryCertificateTypeItem type) throws ClipsException {
        if(getDetails().typeID != 0 && getDetails().typeID != type.getID()) {
            throw new ClipsException("Запрещено менять тип справки");
        }
        getDetails().typeID = type.getID();
        fireContentStateEvent();
    }

    @Override
    public Icon getIcon() {
        return icon;
    }

    @Override
    public String toString() {
        String toStr;
        try {
            toStr = "[" + Converter.dateToString(getDate()) + "] ";
            toStr += getType().getTitle();
        } catch (ClipsException ex) {
            //ex.printStackTrace();
            toStr = "Ошибка сервера";
        }
        return toStr;
    }

    @Override
    protected String getBeanName() {
        return CertificateBean.class.getSimpleName();
    }

    @Override
    public boolean isSignCorrect() throws ClipsException{
        //STUB
        return (getID() != -1 );
        //END STUB
    }

    @Override
    public String getSignMessage() throws ClipsException {
        if (getID() == 0) {
            return "Подпись отсутствует";
        }
        //STUB
        String coll;
        if (getCollaborator() != null) {
            coll = getCollaborator().getTitle();
        } else {
            return "Подпись отсутствует";
        }

        String s = "Подписано " + Converter.dateToString(getDate())
                + " - " + coll;
        if (isSignCorrect() ) {
            return s;
        } else {
            return "Подпись не соответствует данным!";
        }
        //END STUB
    }

    /**
     * use only for new delegate
     * @return can return null
     */
    public DiseaseLocal getDisease() {
        return disease;
    }

}
TOP

Related Classes of clips.delegate.doctor.certificate.CertificateLocal

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.