/*
* MathExpressionOperatorPanel.java
*
* Created on 24 Ноябрь 2008 г., 15:48
*/
package reportgen.math.reference.reportresult;
import reportgen.prototype.context.group.ExpressionEditorPanel;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import reportgen.utils.ReportException;
import reportgen.prototype.context.Context;
import reportgen.math.agregate.agregate.AggregateFunction;
import reportgen.ren.report.column.ReportResultColumn;
import reportgen.utils.Message;
/**
*
* @author axe
*/
public class MathExpressionReportResultAgregPanel
extends ExpressionEditorPanel<MathExpressionReportResultAgreg> {
protected final Context context;
protected MathExpressionReportResultAgreg me;
public MathExpressionReportResultAgregPanel(Window parent, Context aContext,
MathExpressionReportResultAgreg expression) {
initComponents();
this.context = aContext;
this.me = expression;
List options = context.getReportResult();
if(options == null) {
Message.warning(parent, "Нет доступных вариантов");
mainCombo.setEnabled(false);
subCombo.setEnabled(false);
} else {
mainCombo.setModel(new DefaultComboBoxModel(options.toArray()));
if(expression == null) {
mainCombo.setSelectedItem(null);
subCombo.setEnabled(false);
} else {
mainCombo.setSelectedItem(expression.getRef());
AggregateFunction function = expression.getFunction();
Class cls = null;
try {
cls = expression.getCls();
} catch (ReportException ex) {
Message.warning(this, ex);
function = AggregateFunction.ASIS;
}
fillFunctions(cls, function);
}
}
mainCombo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ReportResultColumn selection = (ReportResultColumn) mainCombo.getSelectedItem();
AggregateFunction function = (AggregateFunction) subCombo.getSelectedItem();
if(selection != null) {
MathExpressionReportResultAgreg sample = new MathExpressionReportResultAgreg(
selection, AggregateFunction.ASIS, context);
Class cls = null;
try {
cls = sample.getCls();
} catch (ReportException ex) {
Message.warning(MathExpressionReportResultAgregPanel.this, ex);
function = null;
}
fillFunctions(cls, function);
}
subCombo.setEnabled(selection != null);
}
});
subCombo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ReportResultColumn selection = (ReportResultColumn) mainCombo.getSelectedItem();
AggregateFunction function = (AggregateFunction) subCombo.getSelectedItem();
if(selection != null
&& function != null) {
if(me == null) {
me = new MathExpressionReportResultAgreg(selection, function, context);
} else {
me.setFunction(function);
me.setRef(selection);
}
fireExpressionChanged();
}
}
});
}
private void fillFunctions(Class cls, AggregateFunction selection) {
Object[] functions = context.getAggregFunctions(cls).toArray();
subCombo.setModel(new DefaultComboBoxModel(functions));
subCombo.setSelectedItem(selection);
subCombo.setEnabled(true);
}
@Override
public MathExpressionReportResultAgreg getValue() {
return me;
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
mainCombo = new javax.swing.JComboBox();
jPanel2 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
subCombo = new javax.swing.JComboBox();
jPanel1.setLayout(new java.awt.BorderLayout(5, 5));
jLabel1.setText("Результат отчета:");
jPanel1.add(jLabel1, java.awt.BorderLayout.LINE_START);
jPanel1.add(mainCombo, java.awt.BorderLayout.CENTER);
jPanel2.setLayout(new java.awt.BorderLayout(5, 5));
jLabel2.setText("Функция:");
jPanel2.add(jLabel2, java.awt.BorderLayout.LINE_START);
subCombo.setEnabled(false);
jPanel2.add(subCombo, 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()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 283, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 283, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JComboBox mainCombo;
private javax.swing.JComboBox subCombo;
// End of variables declaration//GEN-END:variables
}