/*
* ListDiseaseReportsPanel.java
*
* Created on September 22, 2008, 4:57 PM
*/
package clips.report.panels;
import cli_fmw.delegate.DelegateLine2;
import clips.delegate.report.DiseaseReportLocal;
import clips.delegate.report.DiseaseReportSearchLocal;
import cli_fmw.main.ClipsException;
import cli_fmw.main.MainWindow;
import cli_fmw.main.PageContainer;
import cli_fmw.main.Persistentable;
import cli_fmw.main.Printable;
import cli_fmw.report.implemenatation.ReportPreview;
import cli_fmw.report.panels.model.delegate.DelegateTableModel;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.ModalDialog;
import cli_fmw.utils.table_config_states.StateSaver;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JTabbedPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
/**
*
* @author finder
*/
public class PanelDiseaseReportsList extends PanelPageContainer implements Persistentable, Printable, PageContainer {
private static final long serialVersionUID = 1L;
DelegateTableModel<DiseaseReportLocal> tReportListModel;
DiseaseReportLocal curReport;
DiseaseReportPanel diseasePanel;
/** Creates new form ListDiseaseReportsPanel
* @param container
* @throws ClipsException
*/
public PanelDiseaseReportsList(PageContainer container) throws ClipsException {
super(container);
initComponents();
initModels();
StateSaver.attachTo(this);
}
void initModels() throws ClipsException{
ArrayList<DiseaseReportLocal> reports = new DiseaseReportSearchLocal(getAuditManager()).getReports();
tReportListModel = new DelegateTableModel<DiseaseReportLocal>(reports) {
private static final long serialVersionUID = 1L;
@Override
public Object getColumnValue(DiseaseReportLocal delegate, int column) throws ClipsException {
switch (column){
case 0:
return delegate.getFormNumber();
case 1:
return delegate.getName();
case 2:
return delegate.getResolutionDateNumber();
}
throw new RuntimeException("Вау, вылетело!");
}
@Override
public int getColumnCount() {
return 3;
}
@Override
public String getColumnName(int column) {
switch (column){
case 0:
return "Код";
case 1:
return "Имя отчета";
case 2:
return "Постановление";
}
throw new RuntimeException("Вау, вылетело!");
}
};
tReportList.setModel(tReportListModel);
tReportList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tReportList.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int row = tReportList.getSelectedRowSorted();
DiseaseReportLocal newReport = null;
if (row >= 0 && row < tReportListModel.getRowCount()) {
newReport = tReportListModel.get(row);
}
if (setPanelReport(newReport, true)){
return;
}
int old = tReportListModel.indexOf(curReport);
tReportList.getSelectionModel().addSelectionInterval(old, old);
}
});
}
/** 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() {
tpReportTabs = new javax.swing.JTabbedPane();
pReportList = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
bAdd = new javax.swing.JButton();
bRemove = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
tReportList = new cli_fmw.utils.sorted_table.SortedTable();
setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
setLayout(new java.awt.BorderLayout());
pReportList.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
pReportList.setLayout(new java.awt.BorderLayout(0, 4));
bAdd.setText("Добавить");
bAdd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bAddActionPerformed(evt);
}
});
bRemove.setText("Удалить");
bRemove.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bRemoveActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(bAdd)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(bRemove)
.addGap(152, 152, 152))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(bAdd)
.addComponent(bRemove))
);
pReportList.add(jPanel1, java.awt.BorderLayout.PAGE_START);
jScrollPane1.setViewportView(tReportList);
pReportList.add(jScrollPane1, java.awt.BorderLayout.CENTER);
tpReportTabs.addTab("Список", pReportList);
add(tpReportTabs, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
private void bAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bAddActionPerformed
DiseaseReportLocal newR = new DiseaseReportLocal(getAuditManager());
if (setPanelReport(null, true)){
tReportListModel.add(newR);
tReportList.setRowSelectionInterval(tReportListModel.getRowCount() - 1, tReportListModel.getRowCount() - 1);
}
}//GEN-LAST:event_bAddActionPerformed
private void bRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bRemoveActionPerformed
remove();
}//GEN-LAST:event_bRemoveActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton bAdd;
private javax.swing.JButton bRemove;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JPanel pReportList;
private cli_fmw.utils.sorted_table.SortedTable tReportList;
private javax.swing.JTabbedPane tpReportTabs;
// End of variables declaration//GEN-END:variables
boolean setPanelReport(DiseaseReportLocal report, boolean queryUser){
if (curReport != report){
if (curReport != null){
if (curReport.isDirty() && queryUser){
int res = MessageBox.showConfirmYesNoCancel(MessageBox.C_SAVE_CHANGES);
if (res == MessageBox.ANSWER_YES){
try {
save();
} catch (ClipsException ex) {
MessageBox.showException(ex);
return false;
}
}
else if (res == MessageBox.ANSWER_NO){
restore();
return true;
}
else {
return false;
}
}
if (curReport != null){
curReport.removeContentStateListener(getContainer());
}
}
curReport = report;
clearAllSubPage();
if (curReport != null){
curReport.addContentStateListener(getContainer());
if (diseasePanel == null) {
try {
diseasePanel = new DiseaseReportPanel(this);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
if (diseasePanel != null) {
diseasePanel.setPanelReport(curReport, false);
addSubTab(diseasePanel);
}
}
else{
if (diseasePanel != null) {
diseasePanel.setPanelReport(null, false);
tpReportTabs.remove(diseasePanel);
}
}
tpReportTabs.revalidate();
}
getContainer().contentStateChanged();
return true;
}
@Override
public String getPageTitle() {
return "Отчеты по заболеваемости";
}
@Override
public DelegateLine2 getDelegate() {
return null;
}
@Override
public boolean isDirty() {
if (curReport != null) {
return curReport.isDirty();
}
else {
return false;
}
}
@Override
public void save() throws ClipsException {
if (diseasePanel != null) {
diseasePanel.save();
}
curReport.save1();
}
@Override
public void restore() {
if (curReport != null){
if (curReport.isNewlyCreated()){
remove();
}
else{
curReport.restore();
}
}
if (diseasePanel != null) {
diseasePanel.restore();
}
}
public void remove(){
if (curReport != null){
if (curReport.isNewlyCreated()){
DiseaseReportLocal tmp = curReport;
setPanelReport(null, false);
tReportListModel.remove(tmp);
}
else {
int res = MessageBox.showConfirmYesNo(MessageBox.C_DEL_OBJECT);
if (res == MessageBox.ANSWER_YES){
try {
DiseaseReportLocal tmp = curReport;
setPanelReport(null, false);
tmp.remove();
tReportListModel.remove(tmp);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
}
}
}
@Override
public boolean readyForPrint() {
return curReport != null;
}
@Override
public void print() {
if (curReport == null) {
return;
}
if (isDirty()){
int res = MessageBox.showConfirmYesNoCancel(MessageBox.C_SAVE_CHANGES);
if (res == MessageBox.ANSWER_YES){
try {
save();
} catch (ClipsException ex) {
MessageBox.showException(ex);
return;
}
}
else{
return;
}
}
YearsSelectDialog dlg = new YearsSelectDialog(MainWindow.mainWindow);
dlg.setVisible(true);
if (dlg.getDlgResult() == ModalDialog.DLG_OK){
try {
JasperPrint report = curReport.getReport(dlg.getYear());
ReportPreview.showReport(report);
} catch (JRException ex) {
MessageBox.showExceptionOnly(ex);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
}
@Override
public void contentStateChanged() {
}
@Override
protected JTabbedPane getTabbedPane() {
return tpReportTabs;
}
}