Package reportgen.gui.genepanel.corepanel.entitypanel

Source Code of reportgen.gui.genepanel.corepanel.entitypanel.EntityPanel

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

/*
* EntityPanel.java
*
* Created on 24.03.2009, 17:42:01
*/

package reportgen.gui.genepanel.corepanel.entitypanel;

import reportgen.prototype.entity.QEntity;
import reportgen.gui.genepanel.corepanel.entitypanel.dlg.NewReportEntityDlg;
import java.awt.Window;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import javax.swing.tree.TreePath;
import reportgen.cores.ejb.set.QEntitySet;
import reportgen.prototype.Core;
import reportgen.utils.ReportException;
import reportgen.utils.Message;

/**
*
* @author axe
*/
public class EntityPanel extends javax.swing.JPanel {

    private final Core core;
    private final Window parent;
    private final QEntitySet entitySet;

    /** Creates new form EntityPanel */
    public EntityPanel(Window parent, Core core) {
        initComponents();
        this.parent = parent;
        this.core = core;
        this.entitySet = core.getSet();

        mainTree.setModel(new ReportEntityModel(core.getRoot()));
        mainTree.setCellRenderer(new ModelRenderer());

        distinctValue.setEnabled(true);
        distinctValue.setSelected(core.isDistinct());

        delReportEntityBtn.setEnabled(false);
    }

    /** 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() {

        jPanel4 = new javax.swing.JPanel();
        aliasPanel = new javax.swing.JPanel();
        distinctValue = new javax.swing.JCheckBox();
        leftJoinCheck = new javax.swing.JCheckBox();
        jScrollPane1 = new javax.swing.JScrollPane();
        mainTree = new javax.swing.JTree();
        jPanel1 = new javax.swing.JPanel();
        addReportEntityBtn = new javax.swing.JButton();
        delReportEntityBtn = new javax.swing.JButton();

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

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

        distinctValue.setText("Первый объект в отчете должен быть уникальным");
        distinctValue.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                distinctValueActionPerformed(evt);
            }
        });
        aliasPanel.add(distinctValue);

        leftJoinCheck.setText("Объект необязателен");
        leftJoinCheck.setEnabled(false);
        leftJoinCheck.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                leftJoinCheckActionPerformed(evt);
            }
        });
        aliasPanel.add(leftJoinCheck);

        jPanel4.add(aliasPanel, java.awt.BorderLayout.PAGE_START);

        jScrollPane1.setPreferredSize(new java.awt.Dimension(200, 382));

        mainTree.setModel(null);
        mainTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                mainTreeValueChanged(evt);
            }
        });
        jScrollPane1.setViewportView(mainTree);

        jPanel4.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jPanel1.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));

        addReportEntityBtn.setText("Добавить");
        addReportEntityBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addReportEntityBtnActionPerformed(evt);
            }
        });
        jPanel1.add(addReportEntityBtn);

        delReportEntityBtn.setText("Удалить");
        delReportEntityBtn.setEnabled(false);
        delReportEntityBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                delReportEntityBtnActionPerformed(evt);
            }
        });
        jPanel1.add(delReportEntityBtn);

        jPanel4.add(jPanel1, java.awt.BorderLayout.SOUTH);

        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(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, 553, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, 405, Short.MAX_VALUE)
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    private void distinctValueActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_distinctValueActionPerformed
        core.setDistinct(distinctValue.isSelected());
}//GEN-LAST:event_distinctValueActionPerformed

   
    private QEntity getSelectedReportEntity() {
        TreePath path = mainTree.getSelectionModel().getSelectionPath();
        if(path == null) {
             return null;
        }
        return (QEntity) path.getLastPathComponent();
    }

    private void mainTreeValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_mainTreeValueChanged
        try {
            QEntity ren = getSelectedReportEntity();
            if(ren == null) {
                throw new IllegalStateException();
            }
            delReportEntityBtn.setEnabled(true);

            leftJoinCheck.setEnabled(ren.canBeJoined());
            leftJoinCheck.setSelected(ren.isJoined());

        } catch (IllegalStateException ex) {
            delReportEntityBtn.setEnabled(false);
            leftJoinCheck.setEnabled(false);

        } catch (Exception ex) {
            Message.warning(this, ex);
            delReportEntityBtn.setEnabled(false);
            leftJoinCheck.setEnabled(false);
        }
    }//GEN-LAST:event_mainTreeValueChanged

    private void addReportEntityBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addReportEntityBtnActionPerformed
        TreePath path = mainTree.getSelectionPath();
        TreePath newpath = null;
        ReportEntityModel model = (ReportEntityModel) mainTree.getModel();

        QEntity children[] = null;
        if(path == null) {
            if(core.getRoot() != null) {
                Message.warning(this, "Выберите элемент для связи");
                return;
            }
            children = entitySet.getAvailableEntities(core.getContextGroup());
        } else {
            QEntity ren = (QEntity) path.getLastPathComponent();
            children = ren.getAvialiableEntities();
        }

        if(children == null) {
            Message.warning(this, "У данного объекта нет связанных сущностей");
            return;
        }

        ArrayList<QEntity> childrenList = new ArrayList<QEntity>();
        ArrayList<QEntity> originalList = new ArrayList<QEntity>();
        for(QEntity child: children) {
            childrenList.add(child);
            originalList.add(child);
        }
        Collections.sort(childrenList, new Comparator<QEntity>() {
            @Override
            public int compare(QEntity o1, QEntity o2) {
                return o1.toString().compareTo(o2.toString());
            }
        });
        NewReportEntityDlg dlg = new NewReportEntityDlg(parent, childrenList);
        dlg.setVisible(true);
        if(dlg.isOK()) {
            int index = dlg.getSelectedIndex();
            QEntity selectedEntity = childrenList.get(index);

            if(path == null) {
                core.setRoot(selectedEntity);
                mainTree.setModel(new  ReportEntityModel(selectedEntity));
                newpath = new TreePath(selectedEntity);
            } else {
                QEntity parentEntity = (QEntity) path.getLastPathComponent();
                index = originalList.indexOf(selectedEntity);
                parentEntity.addSelectedEntity(index);

                ArrayList<Object> newTreePath = new ArrayList<Object>();
                for(Object obj: path.getPath()) {
                    newTreePath.add(obj);
                }
                newTreePath.add(selectedEntity);
                newpath = new TreePath(newTreePath.toArray());
                model.nodeInserted(newpath);
            }
            mainTree.setSelectionPath(newpath);
        }
}//GEN-LAST:event_addReportEntityBtnActionPerformed

    private void delReportEntityBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_delReportEntityBtnActionPerformed
        TreePath path = mainTree.getSelectionPath();

        if(path == null) {
            Message.warning(this, "Выберите объект в дереве для удаления");
            return;
        }

        QEntity ren = (QEntity) path.getLastPathComponent();
        if(ren.getSelectedEntities() != null) {
            Message.warning(this, "Можно удалять только конечные элементы");
            return;
        }

        try {
            if (path.getPathCount() == 1) {
                core.removeEntity(null, ren);
                mainTree.setModel(new ReportEntityModel(null));

            } else {
                TreePath parentPath = path.getParentPath();
                QEntity parentEnt = (QEntity) parentPath.getLastPathComponent();

                QEntity[] children = parentEnt.getSelectedEntities();
                for (int i = 0; i < children.length; i++) {
                    if (children[i] == ren) {
                        core.removeEntity(parentEnt, ren);

                        ReportEntityModel model = (ReportEntityModel) mainTree.getModel();
                        model.nodeRemoved(parentPath, new int[]{i}, new Object[]{ren});
                        mainTree.setSelectionPath(parentPath);
                        break;
                    }
                }
            }
        } catch (ReportException ex) {
            Message.warning(this, ex);
        }
}//GEN-LAST:event_delReportEntityBtnActionPerformed

    private void leftJoinCheckActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_leftJoinCheckActionPerformed
        TreePath path = mainTree.getSelectionPath();
        if(path == null) {
            Message.warning(this, "Выберите объект в дереве");
            return;
        }

        QEntity ren = (QEntity) path.getLastPathComponent();
        if(!ren.canBeJoined()) {
            leftJoinCheck.setEnabled(false);
        } else {
            ren.setJoined(leftJoinCheck.isSelected());
        }
        mainTree.updateUI();
    }//GEN-LAST:event_leftJoinCheckActionPerformed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton addReportEntityBtn;
    private javax.swing.JPanel aliasPanel;
    private javax.swing.JButton delReportEntityBtn;
    private javax.swing.JCheckBox distinctValue;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JCheckBox leftJoinCheck;
    private javax.swing.JTree mainTree;
    // End of variables declaration//GEN-END:variables

}
TOP

Related Classes of reportgen.gui.genepanel.corepanel.entitypanel.EntityPanel

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.