Package clips.doctor.certificate

Source Code of clips.doctor.certificate.PanelCertificate

/*
* PanelCertificate.java
*
* Created on 22 Декабрь 2008 г., 10:30
*/

package clips.doctor.certificate;

import clips.delegate.directory.complex.DirectoryCertificateType;
import clips.delegate.directory.complex.DirectoryCertificateTypeItem;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import clips.delegate.doctor.DiseaseLocal;
import clips.delegate.doctor.certificate.CertificateLocal;
import clips.delegate.doctor.certificate.tag.interfaces.CertTag;
import clips.delegate.doctor.certificate.tag.CertTagFactory;
import clips.delegate.doctor.certificate.tag.interfaces.TypeDate;
import clips.delegate.doctor.certificate.tag.interfaces.TypeMultiSelectable;
import clips.delegate.doctor.certificate.tag.interfaces.TypeSelectableRO;
import clips.delegate.doctor.certificate.tag.interfaces.TypeTextArea;
import clips.delegate.doctor.certificate.tag.interfaces.TypeTextField;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.delegate.report.ReportLocal;
import cli_fmw.delegate.report.ReportParam;
import clips.doctor.certificate.controlPanels.PanelDate;
import clips.doctor.certificate.controlPanels.PanelMultiSelectable;
import clips.doctor.certificate.controlPanels.PanelSelectable;
import clips.doctor.certificate.controlPanels.PanelTextField;
import clips.doctor.certificate.controlPanels.PanelTextArea;
import cli_fmw.main.ClipsException;
import cli_fmw.main.PageContainer;
import cli_fmw.main.PageGeneric;
import cli_fmw.main.Persistentable;
import cli_fmw.main.Printable;
import cli_fmw.report.implemenatation.ReportPreview;
import cli_fmw.report.panels.model.delegate.DirectoryComboBoxModel;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.table_config_states.StateSaver;
import clips.delegate.doctor.certificate.tag.interfaces.TypeSelectable;
import clips.delegate.doctor.certificate.tag.interfaces.TypeSelectableEdit;
import clips.doctor.PanelEMC;
import clips.doctor.certificate.controlPanels.PanelSelectableEdit;
import framework.utils.Converter;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;

/**
*
* @author  vip
*/
public class PanelCertificate extends PageGeneric implements Persistentable, Printable {
    private CertificateLocal cert;
    private boolean canBeEdit;
    private DiseaseLocal disease;
    private ArrayList<CertTag> tagList;
  private DirectoryComboBoxModel<CertificateLocal, DirectoryCertificateTypeItem> cbTypeModel;

    //для запоминания положения скрола
    private boolean shown = false;
    private static int lastDelegateID;
    private static int lastScrollBarValue;

    /**
     *
     * @param container
     * @param cert_
     * @param diseaseLocal can be null
     * @throws ClipsException
     */
    public PanelCertificate(PageContainer container, CertificateLocal cert_) throws ClipsException {
        super(container);
        initComponents();
        this.cert = cert_;
        this.canBeEdit = cert_.isCanBeEdit();
        this.disease = cert.getDisease();
        jScrollPane1.getVerticalScrollBar().setUnitIncrement(10);
        DirectoryCertificateType directoryCertType = DirectoryLocator.getDirectory(DirectoryCertificateType.class, false);
      /*  Selector ii = certificateType.getItems();
        for (int i = 0; i < ii.size(); i++) {
            DirectoryCertificateTypeItem item = (DirectoryCertificateTypeItem) ii.get(i);
            cbType.addItem(item);
        }*/

    cbTypeModel = new DirectoryComboBoxModel
                <CertificateLocal, DirectoryCertificateTypeItem>(cbType, directoryCertType, cert) {
      @Override
      public DirectoryCertificateTypeItem getSelectedDirectoryItem() throws ClipsException {
        return getObject().getType();
      }

      @Override
      public void setSelectedDirectoryItem(DirectoryCertificateTypeItem item) throws ClipsException {
                if (getObject().getType().getID() != item.getID()) {
                    getObject().setType(item);
                    setScreenFields();
                }
      }

            @Override
            public boolean isEnabled() {
                if (!super.isEnabled()) return false;
                try {
                    return getObject().getType().getID() == 0;
                } catch (ClipsException ex) {
                    MessageBox.showException(ex);
                    return false;
                }
            }


    };
       
        setScreenFields();
    StateSaver.attachTo(this);
        System.out.println("formComponentCreated");
        System.out.println(getSize());
    }

    public void setScreenFields() throws ClipsException {
        initMyComponents();
        DirectoryCertificateTypeItem item = cert.getType();
        chooserDate.setDate(cert.getDate());
        tfCollab.setText(cert.getCollaborator().getTitle());
        setEnableComponents();
    }
   
    private void initMyComponents() throws ClipsException {
        ReportLocal reportLocal = cert.getType().getReportLocal();
        //System.out.println("REPORT: "+ reportLocal.toString());
        ArrayList<ReportParam> params;
        Map<String, Object> defaultParameters;
        if (reportLocal != null) {
            params = reportLocal.getParams();
            defaultParameters = reportLocal.getDefaultParameters();
        } else {
            params = new ArrayList<ReportParam>();
            defaultParameters = new HashMap<String, Object>();
        }
        //Создание массива тегов
        tagList = new ArrayList<CertTag>();
        for (int i = 0; i < params.size(); i++) {
            ReportParam reportParam = params.get(i);
            //обход дефолтных параметров
            if (defaultParameters.containsKey(reportParam.getRealName())) {
                continue;
            }
            Class<? extends CertTag> classByTag = CertTagFactory.getClassByTag(reportParam.getRealName());
            try {
                Constructor<? extends CertTag> constructor = classByTag.getConstructor(CertificateLocal.class, ReportParam.class, DiseaseLocal.class);
                CertTag tag = constructor.newInstance(cert, reportParam, disease);
                tagList.add(tag);
            } catch (NoSuchMethodException ex) {
                throw new ClipsException("Ошибка в теге справки", ex);
            } catch (SecurityException ex) {
                throw new ClipsException("Ошибка в теге справки", ex);
            } catch (InstantiationException ex) {
                throw new ClipsException("Ошибка в теге справки", ex);
            } catch (IllegalAccessException ex) {
                throw new ClipsException("Ошибка в теге справки", ex);
            } catch (IllegalArgumentException ex) {
                throw new ClipsException("Ошибка в теге справки", ex);
            } catch (InvocationTargetException ex) {
                throw new ClipsException("Ошибка в теге справки", ex);
            }
        }
        //Создание компонентов по типу матрешки - панели одна в другой, BorderLayout.NORTH
        JComponent last = jScrollPane1;
        for (int i = 0; i < tagList.size(); i++) {
            CertTag tag = tagList.get(i);
           
            //System.out.println(tag.getClass().toString());

            JPanel border = new JPanel(new BorderLayout(0, 5));
            JPanel panel = null;
            if (tag instanceof TypeTextField) {
                panel = new PanelTextField((TypeTextField) tag, jScrollPane1);
            } else if (tag instanceof TypeTextArea) {
                panel = new PanelTextArea((TypeTextArea) tag, jScrollPane1);
            } else if (tag instanceof TypeSelectableEdit) {
                panel = new PanelSelectableEdit((TypeSelectableEdit) tag, jScrollPane1);
            } else if (tag instanceof TypeSelectableRO) {
                panel = new PanelSelectable((TypeSelectableRO) tag, jScrollPane1);
            } else if (tag instanceof TypeSelectable) {
                panel = new PanelSelectable((TypeSelectable) tag, jScrollPane1);
            } else if (tag instanceof TypeMultiSelectable) {
                panel = new PanelMultiSelectable((TypeMultiSelectable) tag, jScrollPane1);
            } else if (tag instanceof TypeDate) {
                panel = new PanelDate((TypeDate) tag, jScrollPane1);
            }
            border.add(panel, BorderLayout.NORTH);
            if (last instanceof JScrollPane) {
                jScrollPane1.setViewportView(border);
            } else {
                last.add(border, BorderLayout.CENTER);
            }
            last = border;
        }
    }

    //предполагается, что тип справки изменить можно только один раз при создании справки
    public void setEnableComponents() throws ClipsException {
        chooserDate.setEnabled(false);
        cbType.setEnabled(canBeEdit && cert.getType().getID() == 0);
    }

    @Override
    public void paint(Graphics g) {
        if (!shown && lastDelegateID == cert.getID()) {
            jScrollPane1.getVerticalScrollBar().getModel().setValue(lastScrollBarValue);
        }
        shown = true;
        super.paint(g);
    }



    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel5 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jPanel4 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        chooserDate = new org.infotechservice.ICalendar.components.ICDateChooser();
        jPanel6 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        cbType = new javax.swing.JComboBox();
        jPanel1 = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        tfCollab = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();

        jPanel5.setLayout(new java.awt.BorderLayout(5, 5));

        jPanel2.setLayout(new java.awt.BorderLayout(10, 10));

        jPanel4.setLayout(new java.awt.GridLayout(0, 1, 5, 5));

        jLabel1.setText("Дата выписки:");
        jPanel4.add(jLabel1);

        chooserDate.setEnabled(false);
        chooserDate.setMinimumSize(new java.awt.Dimension(41, 47));
        chooserDate.setVerifyInputWhenFocusTarget(false);
        jPanel4.add(chooserDate);

        jPanel2.add(jPanel4, java.awt.BorderLayout.WEST);

        jPanel6.setLayout(new java.awt.BorderLayout(10, 10));

        jPanel3.setLayout(new java.awt.GridLayout(0, 1, 5, 5));

        jLabel2.setText("Тип документа:");
        jPanel3.add(jLabel2);
        jPanel3.add(cbType);

        jPanel6.add(jPanel3, java.awt.BorderLayout.WEST);

        jPanel1.setLayout(new java.awt.GridLayout(0, 1, 0, 5));

        jLabel3.setText("Выписал:");
        jPanel1.add(jLabel3);

        tfCollab.setEditable(false);
        jPanel1.add(tfCollab);

        jPanel6.add(jPanel1, java.awt.BorderLayout.CENTER);

        jPanel2.add(jPanel6, java.awt.BorderLayout.CENTER);

        jPanel5.add(jPanel2, java.awt.BorderLayout.NORTH);
        jPanel5.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, 598, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, 234, Short.MAX_VALUE)
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents



    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JComboBox cbType;
    private org.infotechservice.ICalendar.components.ICDateChooser chooserDate;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField tfCollab;
    // End of variables declaration//GEN-END:variables

    @Override
    public String getPageTitle() {
        return "Справка";
    }

    @Override
    public DelegateLine2 getDelegate() {
        return cert;
    }

    @Override
    public boolean isDirty() {
        return cert.isDirty();
    }

    @Override
    public void save() throws ClipsException {
        cert.save1();
        lastScrollBarValue = jScrollPane1.getVerticalScrollBar().getModel().getValue();
        lastDelegateID = cert.getID();
    }

    @Override
    public void restore() {
        if (isDirty()) {
            if (cert.isNewlyCreated()) {
                try {
                    getContainer().removePage(this, true);
                } catch (ClipsException ex) {
                    MessageBox.showException(ex);
                }
            } else {
                cert.restore();
                try {
                    setScreenFields();
                } catch (ClipsException ex) {
                    MessageBox.showException(ex);
                }
            }
        }
    }

    @Override
    public boolean readyForPrint() {
        return !cert.isDirty();
    }

    @Override
    public void print() {
        try {
            ReportLocal reportLocal = cert.getType().getReportLocal();
            Map<String, Object> map = new HashMap<String, Object>();
            for (int i = 0; i < tagList.size(); i++) {
                CertTag certTag = tagList.get(i);
                map.put(certTag.getTagName(), certTag.getValue());
            }
            JasperPrint clientReport = reportLocal.getClientReport(map);
            ReportPreview.showReport(clientReport);
        } catch (ClipsException ex) {
            MessageBox.showException(ex);
        } catch (JRException ex) {
            MessageBox.showExceptionOnly(ex);
        }
    }

}
TOP

Related Classes of clips.doctor.certificate.PanelCertificate

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.