/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* PendingReportDialog.java
*
* Created on 27.06.2009, 13:26:50
*/
package reportgen.gui.execute;
import reportgen.gui.execute.checkdlg.CheckReportDlg;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintStream;
import javax.swing.JButton;
import reportgen.formatter.DocBuilder;
import reportgen.utils.ReportException;
import reportgen.formatter.ExtendedDocBuilder;
import reportgen.formatter.SimpleDocBuilder;
import reportgen.gui.genepanel.Report;
import reportgen.prototype.queryresults.QueryResults;
import reportgen.ren.report.userinput.UserInputChunk;
import reportgen.utils.Browser;
import reportgen.utils.Message;
import reportgen.utils.ReportDialog;
/**
*
* @author axe
*/
public class PendingReportDialog extends ReportDialog {
private final Report report;
private final boolean justTest;
private QueryResults results;
public PendingReportDialog(Window parent, Report report, boolean justTest) throws ReportException {
super(parent, "Выполнение отчета");
initComponents();
this.justTest = justTest;
this.report = report;
titleLabel.setText(report.getTitle());
}
@Override
public void setVisible(boolean arg0) {
super.setVisible(arg0);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jPanel5 = new javax.swing.JPanel();
timeProgress = new javax.swing.JProgressBar();
jPanel7 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jPanel1 = new javax.swing.JPanel();
jPanel3 = new javax.swing.JPanel();
jPanel4 = new javax.swing.JPanel();
jPanel6 = new javax.swing.JPanel();
startBtn = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
titleLabel = new javax.swing.JTextArea();
buildersPanel = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder("Прогресс"));
jPanel5.setLayout(new java.awt.GridLayout(0, 1));
timeProgress.setStringPainted(true);
jPanel5.add(timeProgress);
jPanel7.setBorder(javax.swing.BorderFactory.createTitledBorder("Время выполнения"));
jPanel7.setLayout(new java.awt.GridLayout(0, 1, 5, 5));
jLabel2.setText("В последний раз заняло: 2:20");
jPanel7.add(jLabel2);
jLabel3.setText("В среднем занимает: 2:20");
jPanel7.add(jLabel3);
jLabel4.setText("В данный момент прошло: 00:00");
jPanel7.add(jLabel4);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
jPanel1.setLayout(new java.awt.BorderLayout(5, 5));
jPanel3.setLayout(new java.awt.BorderLayout());
jPanel4.setLayout(new java.awt.BorderLayout(5, 5));
jPanel6.setLayout(new java.awt.BorderLayout(5, 5));
startBtn.setText("Запуск");
startBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
startBtnActionPerformed(evt);
}
});
jPanel6.add(startBtn, java.awt.BorderLayout.SOUTH);
jLabel1.setText("Выполнение отчета:");
jPanel6.add(jLabel1, java.awt.BorderLayout.WEST);
titleLabel.setColumns(20);
titleLabel.setEditable(false);
titleLabel.setLineWrap(true);
titleLabel.setRows(3);
titleLabel.setWrapStyleWord(true);
titleLabel.setEnabled(false);
jScrollPane1.setViewportView(titleLabel);
jPanel6.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jPanel4.add(jPanel6, java.awt.BorderLayout.NORTH);
jPanel3.add(jPanel4, java.awt.BorderLayout.CENTER);
jPanel3.add(buildersPanel, java.awt.BorderLayout.SOUTH);
jPanel1.add(jPanel3, java.awt.BorderLayout.CENTER);
jPanel2.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
jButton1.setText("Закрыть");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jPanel2.add(jButton1);
jPanel1.add(jPanel2, java.awt.BorderLayout.SOUTH);
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(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 526, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 157, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void startBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_startBtnActionPerformed
try {
ReportExecuteDialog dlg = new ReportExecuteDialog(this);
Object res = justTest ? report.executeTest() : report.execute();
while (res instanceof UserInputChunk) {
UserInputChunk chunk = (UserInputChunk) res;
dlg.addPanel(new UserInputPanel(chunk));
dlg.setVisible(true);
if (!dlg.isOK()) {
throw new ReportException("Генерация отчета отменена");
}
res = report.continueReport(chunk);
}
results = (QueryResults) res;
System.out.println("Generation DONE");
startBtn.setVisible(false);
initSimpleView();
initSimpleBuilder();
initExtendedBuilder();
buildersPanel.revalidate();
} catch (Exception ex) {
setVisible(false);
Message.warning(this, ex);
}
}//GEN-LAST:event_startBtnActionPerformed
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
setVisible(false);
}//GEN-LAST:event_jButton1ActionPerformed
private void initSimpleView() {
JButton sdBtn = new JButton("Просмотр строк");
buildersPanel.add(sdBtn);
sdBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
CheckReportDlg dlg = new CheckReportDlg(PendingReportDialog.this, report.getQuery(), results);
dlg.setVisible(true);
} catch (ReportException ex) {
Message.warning(PendingReportDialog.this, ex.getLocalizedMessage());
}
}
});
}
private void initSimpleBuilder() {
SimpleDocBuilder sd = null;
String sdTxt = null;
try {
sd = new SimpleDocBuilder(results, report.getQuery(), report.getTitle());
sd.isAvailiable();
} catch (ReportException ex) {
//do nothing
ex.printStackTrace();
sdTxt = ex.getLocalizedMessage();
}
JButton sdBtn = new JButton("Простое форматирование");
buildersPanel.add(sdBtn);
if (sdTxt != null) {
sdBtn.setEnabled(false);
sdBtn.setToolTipText(sdTxt);
} else {
sdBtn.addActionListener(new ActionListenerSimple(sd));
}
}
/**
* Класс действия при нажатии на кнопку форматирования простого режима
*/
private class ActionListenerSimple implements ActionListener {
private final SimpleDocBuilder sd;
public ActionListenerSimple(SimpleDocBuilder sd) {
this.sd = sd;
}
@Override
public void actionPerformed(ActionEvent e) {
try {
saveToHtmlFile(sd);
} catch (Exception ex) {
Message.warning(PendingReportDialog.this, ex);
}
}
}
private void saveToHtmlFile(DocBuilder sd) throws Exception {
File file = File.createTempFile("ic-rpt", ".html");
PrintStream stream = new PrintStream(file);
sd.toHTML(stream);
stream.close();
System.out.println("HTML generation complete");
Browser.open(this, file.toURI());
}
private void initExtendedBuilder() {
ExtendedDocBuilder sd = null;
String sdTxt = null;
try {
sd = new ExtendedDocBuilder(results, report.getQuery(), report.getTitle());
sd.isAvailiable();
} catch (ReportException ex) {
ex.printStackTrace();
sdTxt = ex.getLocalizedMessage();
}
JButton sdBtn = new JButton("Форматированные таблицы");
buildersPanel.add(sdBtn);
if (sdTxt != null) {
sdBtn.setEnabled(false);
sdBtn.setToolTipText(sdTxt);
} else {
sdBtn.addActionListener(new ActionListenerExtended(sd));
}
}
/**
* Класс действия при нажатии на кнопку форматирования расширенного режима
*/
private class ActionListenerExtended implements ActionListener {
private final ExtendedDocBuilder sd;
public ActionListenerExtended(ExtendedDocBuilder sd) {
this.sd = sd;
}
@Override
public void actionPerformed(ActionEvent e) {
try {
saveToHtmlFile(sd);
} catch (Exception ex) {
Message.warning(PendingReportDialog.this, ex);
}
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel buildersPanel;
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanel6;
private javax.swing.JPanel jPanel7;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JButton startBtn;
private javax.swing.JProgressBar timeProgress;
private javax.swing.JTextArea titleLabel;
// End of variables declaration//GEN-END:variables
}