Package reportgen.gui.genepanel.corepanel.columnpanel

Source Code of reportgen.gui.genepanel.corepanel.columnpanel.ColumnPanel

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

/*
* columnPanel.java
*
* Created on 02.04.2009, 16:55:01
*/

package reportgen.gui.genepanel.corepanel.columnpanel;

import reportgen.math.generic.ComplexExpressionDialog;
import java.awt.Window;
import java.util.List;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import reportgen.prototype.context.group.ContextGroup;
import reportgen.math.MathExpressionList;
import reportgen.prototype.columns.QueryResultColumn;
import reportgen.prototype.context.Context;
import reportgen.prototype.utils.ItemSelectorEditable;
import reportgen.utils.ReportException;
import reportgen.prototype.entity.QEntity;
import reportgen.prototype.entity.QEntityProperty;
import reportgen.math.complex.MathExpressionComplex;
import reportgen.math.MathExpressionOperand;
import reportgen.math.reference.method.MathExpressionEntityMethodRef;
import reportgen.prototype.QCore;
import reportgen.prototype.utils.RowCount;
import reportgen.utils.Message;

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

    private Window parent;
    private QCore core;

    private final RowCountComboEditor rcComboEd;
   
    public ColumnPanel(Window parent, QCore QCore) {
        initComponents();
        this.core = QCore;
        this.parent = parent;

        resultColTable.setModel(new ColumnsTableModel(QCore.getColumns()));
        resultColTable.getColumnModel().getColumn(ColumnsTableModel.COL_OPERATOR)
                .setCellEditor(new ColumnTableFunctionEditor());
        resultColTable.getColumnModel().getColumn(ColumnsTableModel.COL_ORDERPRIORITY)
                .setCellEditor(new ColumnTablePriorityEditor());

        resultColTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent arg0) {
                delResultColBtn.setEnabled(resultColTable.getSelectedRowCount() > 0);
                editBtn.setEnabled(resultColTable.getSelectedRowCount() > 0);
                upBtn.setEnabled(resultColTable.getSelectedRowCount() > 0);
                downBtn.setEnabled(resultColTable.getSelectedRowCount() > 0);
            }
        });

        rcComboEd = new RowCountComboEditor(reportRows, core.getRowCount()) {
            @Override
            protected void setRowCount(RowCount rowCount) {
                core.setRowCount(rowCount);
            }
        };
    }

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

        jPanel9 = new javax.swing.JPanel();
        jPanel6 = new javax.swing.JPanel();
        autoFillBtn = new javax.swing.JButton();
        addResultColBtn = new javax.swing.JButton();
        editBtn = new javax.swing.JButton();
        delResultColBtn = new javax.swing.JButton();
        upBtn = new javax.swing.JButton();
        downBtn = new javax.swing.JButton();
        jScrollPane3 = new javax.swing.JScrollPane();
        resultColTable = new javax.swing.JTable();
        repRowsPanel = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        reportRows = new javax.swing.JComboBox();

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

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

        autoFillBtn.setText("Авто");
        autoFillBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                autoFillBtnActionPerformed(evt);
            }
        });
        jPanel6.add(autoFillBtn);

        addResultColBtn.setText("Добавить свойство...");
        addResultColBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addResultColBtnActionPerformed(evt);
            }
        });
        jPanel6.add(addResultColBtn);

        editBtn.setText("Редактировать...");
        editBtn.setEnabled(false);
        editBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                editBtnActionPerformed(evt);
            }
        });
        jPanel6.add(editBtn);

        delResultColBtn.setText("Удалить свойство");
        delResultColBtn.setEnabled(false);
        delResultColBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                delResultColBtnActionPerformed(evt);
            }
        });
        jPanel6.add(delResultColBtn);

        upBtn.setText("Вверх");
        upBtn.setEnabled(false);
        upBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                upBtnActionPerformed(evt);
            }
        });
        jPanel6.add(upBtn);

        downBtn.setText("Вниз");
        downBtn.setEnabled(false);
        downBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                downBtnActionPerformed(evt);
            }
        });
        jPanel6.add(downBtn);

        jPanel9.add(jPanel6, java.awt.BorderLayout.SOUTH);

        jScrollPane3.setViewportView(resultColTable);

        jPanel9.add(jScrollPane3, java.awt.BorderLayout.CENTER);

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

        jLabel3.setText("Строки отчета:");
        repRowsPanel.add(jLabel3, java.awt.BorderLayout.WEST);
        repRowsPanel.add(reportRows, java.awt.BorderLayout.CENTER);

        jPanel9.add(repRowsPanel, java.awt.BorderLayout.NORTH);

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

    private void addResultColBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addResultColBtnActionPerformed
        QueryResultColumn exp = new QueryResultColumn(core.getResultContext());
        ComplexExpressionDialog dlg = new ComplexExpressionDialog(parent, exp.getExpression());

        dlg.setVisible(true);
        if(dlg.isOK()) {
            ItemSelectorEditable<QueryResultColumn> cols = core.getColumns();
            cols.add(exp);

            resultColTable.setModel(new ColumnsTableModel(core.getColumns()));

            resultColTable.getColumnModel().getColumn(ColumnsTableModel.COL_OPERATOR)
                    .setCellEditor(new ColumnTableFunctionEditor());
            resultColTable.getColumnModel().getColumn(ColumnsTableModel.COL_ORDERPRIORITY)
                    .setCellEditor(new ColumnTablePriorityEditor());
        }
}//GEN-LAST:event_addResultColBtnActionPerformed

    private void delResultColBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_delResultColBtnActionPerformed
        try {
            ItemSelectorEditable<QueryResultColumn> fields = core.getColumns();
            ListSelectionModel model = resultColTable.getSelectionModel();
            int index = model.getLeadSelectionIndex();
            if(index != -1) {
                fields.remove(index);
                resultColTable.updateUI();
                if(index >= fields.size()) {
                    index = fields.size()-1;
                }
                if(index >= 0) {
                    model.setSelectionInterval(index, index);
                    delResultColBtn.setEnabled(true);
                } else {
                    delResultColBtn.setEnabled(false);
                }
            } else {
                delResultColBtn.setEnabled(false);
            }

        }catch (ReportException ex) {
            Message.warning(this, ex);
        }
}//GEN-LAST:event_delResultColBtnActionPerformed

    private void editBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editBtnActionPerformed
        try {
            ItemSelectorEditable<QueryResultColumn> fields = core.getColumns();
            int index = resultColTable.getSelectionModel().getLeadSelectionIndex();
            if(index == -1) {
                return;
            }
            QueryResultColumn exp = fields.get(index);
            ComplexExpressionDialog dlg = new ComplexExpressionDialog(parent, exp.getExpression());

            dlg.setVisible(true);
            if(dlg.isOK()) {
                resultColTable.updateUI();
            }
        }catch (Exception ex) {
            Message.warning(this, ex);
        }
    }//GEN-LAST:event_editBtnActionPerformed

    private void upBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_upBtnActionPerformed
        int index = resultColTable.getSelectedRow();
        if(index == -1) {
            upBtn.setEnabled(false);
        } else {
            int sel = core.getColumns().moveUp(index);
            resultColTable.getSelectionModel().setSelectionInterval(sel, sel);
            resultColTable.updateUI();
        }
    }//GEN-LAST:event_upBtnActionPerformed

    private void downBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_downBtnActionPerformed
        int index = resultColTable.getSelectedRow();
        if(index == -1) {
            downBtn.setEnabled(false);
        } else {
            int sel = core.getColumns().moveDown(index);
            resultColTable.getSelectionModel().setSelectionInterval(sel, sel);
            resultColTable.updateUI();
        }
    }//GEN-LAST:event_downBtnActionPerformed

    private void autoFillBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_autoFillBtnActionPerformed
        Context context = core.getResultContext();
        ItemSelectorEditable<QueryResultColumn> cols = core.getColumns();
        ContextGroup groupContext = MathExpressionEntityMethodRef
                .getContextGroup(core.getContextGroup());
        List<QEntity> options = context.getEntities(groupContext);
        for (QEntity entity : options) {
            for(QEntityProperty prop: context.getProperties(MathExpressionEntityMethodRef.GROUP, entity)) {
                boolean alreadyContains = false;
                for(int i=0; i<cols.size() && !alreadyContains; i++) {
                    QueryResultColumn mec = cols.get(i);
                    if(isContainProperty(mec.getExpression(), prop)) {
                        alreadyContains = true;
                        break;
                    }
                }
                if (alreadyContains) {
                    continue;
                }

                QueryResultColumn col = new QueryResultColumn(context);
                col.setColTitle(prop.toString());
                col.getExpression().getChildren().add(new MathExpressionEntityMethodRef(prop, context)
                );

                cols.add(col);
            }
        }
        resultColTable.updateUI();
    }//GEN-LAST:event_autoFillBtnActionPerformed

    /**
     *
     * @param exp
     * @param prop
     * @return
     */
    private boolean isContainProperty(MathExpressionOperand exp, QEntityProperty prop) {
        if(exp instanceof MathExpressionEntityMethodRef) {
            MathExpressionEntityMethodRef enprop = (MathExpressionEntityMethodRef)exp;
            if(enprop.getRef().equals(prop)) {
                return true;
            }
        } else if(exp instanceof MathExpressionComplex) {
            MathExpressionComplex cx = (MathExpressionComplex) exp;
            MathExpressionList list = cx.getChildren();
            for(int i=0; i<list.size(); i++) {
                if((list.get(i) instanceof MathExpressionOperand)) {
                    MathExpressionOperand operand = (MathExpressionOperand) list.get(i);
                    if(isContainProperty(operand, prop)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton addResultColBtn;
    private javax.swing.JButton autoFillBtn;
    private javax.swing.JButton delResultColBtn;
    private javax.swing.JButton downBtn;
    private javax.swing.JButton editBtn;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JPanel jPanel9;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JPanel repRowsPanel;
    private javax.swing.JComboBox reportRows;
    private javax.swing.JTable resultColTable;
    private javax.swing.JButton upBtn;
    // End of variables declaration//GEN-END:variables

}
TOP

Related Classes of reportgen.gui.genepanel.corepanel.columnpanel.ColumnPanel

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.