/*
* DialogPrintList.java
*
* Created on 20 Ноябрь 2008 г., 17:54
*/
package clips.doctor.printing;
import clips.delegate.client.ClientLocal;
import clips.delegate.doctor.EmcLocal;
import clips.delegate.doctor.DiseaseLocal;
import clips.delegate.doctor.followup.FollowupLocal;
import cli_fmw.delegate.DelegateLine2;
import clips.delegate.service.SerRenLocal;
import cli_fmw.main.ClipsException;
import cli_fmw.main.DelegatePrintable;
import cli_fmw.main.PrintCreators;
import cli_fmw.report.CombinedReportCreator;
import cli_fmw.report.CombinedReportOptions;
import cli_fmw.report.FormReportCreator;
import cli_fmw.report.PageOptions.PageOrentation;
import cli_fmw.report.ReporterFactory;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.ModalDialog;
import clips.doctor.newEMC.init.generic.DelegateNode;
import cli_fmw.utils.table_config_states.StateSaver;
import java.awt.Frame;
import java.awt.Rectangle;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.swing.JCheckBox;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
/**
*
* @author lacoste
*/
public class DialogPrintList extends ModalDialog {
private ClientLocal clientLocal;
private TreeModel model;
private DefaultMutableTreeNode root;
private List list;
private int selectedCount = 0;
/** Creates new form DialogPrintList */
public DialogPrintList(java.awt.Frame parent, EmcLocal emcLocal) throws ClipsException {
super(parent, "Печать медицинских данных", null);
initComponents();
clientLocal = emcLocal.getClient();
root = new DefaultMutableTreeNode(clientLocal);
root.add(makeEMC(emcLocal));
setTree();
StateSaver.attachTo(this);
}
public DialogPrintList(Frame parent, DiseaseLocal diseaseLocal) throws ClipsException {
super(parent, "Печать медицинских данных", null);
initComponents();
clientLocal = diseaseLocal.getEmcLocal().getClient();
root = new DefaultMutableTreeNode(clientLocal);
root.add(makeDisease(diseaseLocal));
setTree();
StateSaver.attachTo(this);
}
public DialogPrintList(Frame parent, SerRenLocal serRenLocal) throws ClipsException {
super(parent, "Печать медицинских данных", null);
initComponents();
clientLocal = serRenLocal.getPolisData().getClient(getAuditManager());
root = new DefaultMutableTreeNode(clientLocal);
root.add(makeSerRen(serRenLocal));
setTree();
StateSaver.attachTo(this);
}
private void setTree() throws ClipsException {
model = new DefaultTreeModel(root, false);
treeMedData.setModel(model);
treeMedData.setCellRenderer(new CheckBoxNodeRenderer());
final int cbW = new JCheckBox().getPreferredSize().width;
treeMedData.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
TreePath path = treeMedData.getPathForLocation(e.getX(), e.getY());
if (path == null) {
return;
}
DefaultMutableTreeNode current = (DefaultMutableTreeNode) path.getLastPathComponent();
Object obj = current.getUserObject();
if (obj instanceof CheckBoxNode) {
Rectangle r = treeMedData.getPathBounds(path);
int x = e.getX() - r.x;
if (x > 0 && x < cbW) {
if (e.getButton() == MouseEvent.BUTTON1) {
clickNode(current, false);
} else if (e.getButton() == MouseEvent.BUTTON3) {
clickNode(current, true);
}
}
}
repaint();
btPrint.setEnabled(selectedCount != 0);
}
});
treeMedData.addKeyListener(
new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
TreePath path = treeMedData.getSelectionPath();
if (path == null) {
return;
}
DefaultMutableTreeNode current = (DefaultMutableTreeNode) path.getLastPathComponent();
Object obj = current.getUserObject();
if (obj instanceof CheckBoxNode) {
clickNode(current, false);
}
repaint();
btPrint.setEnabled(selectedCount != 0);
}
}
});
}
private void clickNode(DefaultMutableTreeNode treeNode, boolean withChildren) {
Object userObject = treeNode.getUserObject();
if (userObject instanceof CheckBoxNode) {
CheckBoxNode node = (CheckBoxNode) userObject;
boolean selected = !node.isSelected();
node.setSelected(selected);
if (node.isSelected()) {
selectedCount++;
} else {
selectedCount--;
}
if (withChildren) {
ArrayList<CheckBoxNode> children = getChildren(treeNode);
for (CheckBoxNode child : children) {
boolean childSelected = child.isSelected();
if (childSelected != selected) {
child.setSelected(selected);
if (node.isSelected()) {
selectedCount++;
} else {
selectedCount--;
}
}
}
}
}
}
private DefaultMutableTreeNode makeEMC(EmcLocal emcLocal) throws ClipsException {
CheckBoxNode node = new CheckBoxNode(emcLocal, false);
DefaultMutableTreeNode emcNode = new DefaultMutableTreeNode(node);
List<DiseaseLocal> diseaseList = emcLocal.getDiseaseList();
DefaultMutableTreeNode statNode;
for (int i = 0; i < diseaseList.size(); i++) {
DiseaseLocal disease = diseaseList.get(i);
statNode = makeDisease(disease);
emcNode.add(statNode);
}
List<FollowupLocal> followUps = emcLocal.getFollowUps();
DefaultMutableTreeNode fupNode;
CheckBoxNode chFup;
for (int i = 0; i < followUps.size(); i++) {
FollowupLocal followUp = followUps.get(i);
chFup = new CheckBoxNode(followUp, false);
fupNode = new DefaultMutableTreeNode(chFup);
emcNode.add(fupNode);
}
return emcNode;
}
private DefaultMutableTreeNode makeDisease(DiseaseLocal disease) throws ClipsException {
CheckBoxNode node = new CheckBoxNode(disease, false);
DefaultMutableTreeNode statNode = new DefaultMutableTreeNode(node);
List<SerRenLocal> serRenLocals = disease.getSerrenList();
DefaultMutableTreeNode serRenNode;
for (int i = 0; i < serRenLocals.size(); i++) {
serRenNode = makeSerRen(serRenLocals.get(i));
statNode.add(serRenNode);
}
return statNode;
}
private DefaultMutableTreeNode makeSerRen(SerRenLocal serRen) throws ClipsException {
CheckBoxNode node = new CheckBoxNode(serRen, false);
DefaultMutableTreeNode serRenNode = new DefaultMutableTreeNode(node);
DelegateNode[] children = serRen.getChildren().toArray(new DelegateNode[serRen.getChildCount()]);
DefaultMutableTreeNode childNode;
for (int k = 0; k < children.length; k++) {
DelegateLine2 child = children[k];
node = new CheckBoxNode(child, false);
childNode = new DefaultMutableTreeNode(node);
serRenNode.add(childNode);
}
return serRenNode;
}
/** 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.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jPanel3 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
treeMedData = new javax.swing.JTree();
jPanel1 = new javax.swing.JPanel();
btPrint = new javax.swing.JButton();
btCancel = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jPanel3.setLayout(new java.awt.BorderLayout());
jLabel1.setText("Выберите медицинские данные для печати");
jPanel2.add(jLabel1);
jPanel3.add(jPanel2, java.awt.BorderLayout.PAGE_START);
jScrollPane1.setViewportView(treeMedData);
jPanel3.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jPanel1.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
btPrint.setText("Печать");
btPrint.setEnabled(false);
btPrint.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btPrintActionPerformed(evt);
}
});
jPanel1.add(btPrint);
btCancel.setText("Закрыть");
btCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btCancelActionPerformed(evt);
}
});
jPanel1.add(btCancel);
jPanel3.add(jPanel1, java.awt.BorderLayout.PAGE_END);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, 460, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, 552, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void btPrintActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btPrintActionPerformed
list = new ArrayList();
TreeModel tm = treeMedData.getModel();
DefaultMutableTreeNode r = (DefaultMutableTreeNode) tm.getRoot();
getSelectedNodes(r);
if (list.isEmpty()) {
return;
}
CombinedReportCreator parCreator = ReporterFactory.createCombinedReporter(getClass(), 1);
CombinedReportOptions options = new CombinedReportOptions();
options.setPageA5();
options.setOrentation(PageOrentation.horizontal);
options.leftMargin = 0;
options.rightMargin = 0;
options.subReportNewPageType = CombinedReportOptions.NewPageType.beginNotFirst;
parCreator.setUpReport(null, options, null);
try {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) instanceof DelegatePrintable) {
DelegatePrintable del = (DelegatePrintable) list.get(i);
if (del instanceof SerRenLocal || del instanceof DiseaseLocal || del instanceof EmcLocal || del instanceof FollowupLocal) {
del.print(parCreator);
} else {
CombinedReportCreator subCreator = parCreator.createCombinedReporter(getClass(), 2);
CombinedReportOptions ops = new CombinedReportOptions();
ops.leftMargin = 0;
ops.rightMargin = 0;
ops.topMargin = 0;
ops.bottomMargin = 0;
subCreator.setUpReport(null, ops, null);
FormReportCreator creator = subCreator.createFormReporter(PrintCreators.class, 1);
creator.createReport(new HashMap<String, Object>(), null);
creator.finish();
del.print(subCreator);
subCreator.finish();
}
}
}
parCreator.finish();
} catch (ClipsException ex) {
MessageBox.printStackTrace(ex);
}
}//GEN-LAST:event_btPrintActionPerformed
private void btCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCancelActionPerformed
this.dispose();
}//GEN-LAST:event_btCancelActionPerformed
private ArrayList<CheckBoxNode> getChildren(DefaultMutableTreeNode node) {
ArrayList<CheckBoxNode> res = new ArrayList<CheckBoxNode>();
getChildren(node, res);
return res;
}
private void getChildren(DefaultMutableTreeNode node, ArrayList<CheckBoxNode> nodes) {
for (int i = 0; i < node.getChildCount(); i++) {
DefaultMutableTreeNode chNode = (DefaultMutableTreeNode) node.getChildAt(i);
Object obj = chNode.getUserObject();
if (obj instanceof CheckBoxNode) {
CheckBoxNode cb = (CheckBoxNode) obj;
nodes.add(cb);
}
if (chNode.getChildCount() > 0) {
getChildren(chNode, nodes);
}
}
}
private void getSelectedNodes(DefaultMutableTreeNode node) {
for (int i = 0; i < node.getChildCount(); i++) {
DefaultMutableTreeNode chNode = (DefaultMutableTreeNode) node.getChildAt(i);
Object obj = chNode.getUserObject();
if (obj instanceof CheckBoxNode) {
CheckBoxNode cb = (CheckBoxNode) obj;
if (cb.isSelected()) {
list.add(cb.getObject());
}
}
if (chNode.getChildCount() > 0) {
getSelectedNodes(chNode);
}
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btCancel;
private javax.swing.JButton btPrint;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTree treeMedData;
// End of variables declaration//GEN-END:variables
}