/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* CrossReportPanel.java
*
* Created on 01.08.2009, 10:14:59
*/
package reportgen.gui.genepanel.formatpanel.dlg.range;
import java.awt.BorderLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JPanel;
import reportgen.prototype.context.group.ExpressionEditorPanel;
import reportgen.ren.executer.QueryExecuterSub;
import reportgen.ren.report.extendedformat.range.cross.ColRowRangeCrossReport;
import reportgen.ren.report.extendedformat.range.cross.CrossReport;
import reportgen.utils.Message;
/**
*
* @author axe
*/
public class CrossReportPanel extends JPanel {
private final static String NOTUSED = "Не используется";
private final ColRowRangeCrossReport range;
private final Window parent;
private ExpressionEditorPanel criteriaPanel;
public CrossReportPanel(Window aParent, ColRowRangeCrossReport aRange) {
initComponents();
this.range = aRange;
this.parent = aParent;
initCriteriaPanel();
//fill list
crossReportCombo.addItem(NOTUSED);
List<QueryExecuterSub> subreports = range.getLocalContext().getSubreports();
if(subreports.size() == 0) {
crossReportCombo.setEnabled(false);
} else {
for(Object iReport: subreports) {
crossReportCombo.addItem(iReport);
}
}
//set default
CrossReport localReport = range.getCrossReport();
if(localReport != null) {
crossReportCombo.setSelectedItem(localReport.getSubReport());
} else {
crossReportCombo.setSelectedItem(NOTUSED);
}
crossReportCombo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object selValue = crossReportCombo.getSelectedItem();
if(selValue == NOTUSED) {
selValue = null;
}
QueryExecuterSub newValue = (QueryExecuterSub) selValue;
QueryExecuterSub oldValue = range.getCrossReport() == null
? null : range.getCrossReport().getSubReport();
if(oldValue == newValue
|| (oldValue != null && oldValue.equals(newValue))) {
return;
}
if(oldValue != null && !range.canRemoveCrossReport(range.getCrossReport())) {
crossReportCombo.setSelectedItem(oldValue);
Message.warning(parent, "Кросс-отчет иcпользуется и не может быть сменен");
} else {
range.setCrossReport(new CrossReport(newValue));
initCriteriaPanel();
}
}
});
}
private void initCriteriaPanel() {
if(criteriaPanel != null) {
mainPanel.remove(criteriaPanel);
}
criteriaPanel = range.getCrossCriteria().getPanel(parent);
mainPanel.add(criteriaPanel, BorderLayout.CENTER);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
mainPanel = new javax.swing.JPanel();
jPanel7 = new javax.swing.JPanel();
crossReportCombo = new javax.swing.JComboBox();
jLabel1 = new javax.swing.JLabel();
mainPanel.setLayout(new java.awt.BorderLayout());
jPanel7.setLayout(new java.awt.BorderLayout(5, 5));
jPanel7.add(crossReportCombo, java.awt.BorderLayout.CENTER);
jLabel1.setText("Кросс-отчет:");
jPanel7.add(jLabel1, java.awt.BorderLayout.WEST);
mainPanel.add(jPanel7, 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(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 346, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(mainPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 250, Short.MAX_VALUE)
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JComboBox crossReportCombo;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel7;
private javax.swing.JPanel mainPanel;
// End of variables declaration//GEN-END:variables
}