/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* PanelQueryList.java
*
* Created on 04.02.2009, 13:11:50
*/
package clips.reportgen.mainpanel;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.delegate.directory.complex.reportType.DirectoryReportType;
import cli_fmw.delegate.directory.complex.reportType.DirectoryReportTypeItem;
import cli_fmw.main.ActivateSensitive;
import cli_fmw.main.ClipsException;
import cli_fmw.main.MainWindow;
import cli_fmw.main.PageContainer;
import cli_fmw.main.PageGeneric;
import clips.reportgen.PanelReportGenerator;
import clips.reportgen.collabs.DlgReportCollabsEdit;
import clips.reportgen.debugpanel.DebugPanel;
import reportgen.gui.execute.PendingReportDialog;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.table_config_states.StateSaver;
import cli_fmw.utils.table_config_states.TableState;
import clips.reportgen.QueryLocal;
import clips.reportgen.QuerySearcher;
import framework.beans.directory.reportType.ReportTypeDetails;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.tree.TreeSelectionModel;
import reportgen.utils.ReportException;
/**
*
* @author petr
*/
public class PanelQueryList extends PageGeneric implements ActivateSensitive {
private ArrayList<QueryLocal> cache = null;
private DirectoryReportTypeItem reportType;
private QuerySearcher searcher = new QuerySearcher(getAuditManager());
private QueryLocal selectedQuery= null;
public PanelQueryList(PageContainer container) throws ClipsException {
super(container);
initComponents();
setTree();
treeReportTypes.setRootVisible(true);
treeReportTypes.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tblQueryList.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
updateToolbar();
}
});
tblQueryList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
setTable();
resizeColumn();
StateSaver.attachTo(this);
}
private void setTable() throws ClipsException {
if (treeReportTypes.getLastSelectedPathComponent() instanceof DirectoryReportTypeItem) {
reportType = (DirectoryReportTypeItem) treeReportTypes.getLastSelectedPathComponent();
} else {
reportType = null;
}
getQueryList(reportType);
tblQueryList.setModel(new TableModelQueryList(cache));
}
public void getQueryList(DirectoryReportTypeItem item) throws ClipsException {
if (item == null || item.getID() == 0) {
cache = new ArrayList<QueryLocal>();
}
else {
cache = searcher.getQueryList(item, null);
}
}
private void setTree() throws ClipsException {
DirectoryReportType drt = DirectoryLocator.getDirectory(DirectoryReportType.class);
treeReportTypes.setModel(new TreeModelReportType(drt));
treeReportTypes.setSelectionPath(null);
}
private void openInEditor(QueryLocal queryLocal) {
try {
PanelReportGenerator panel = new PanelReportGenerator(getContainer(), queryLocal);
PageGeneric page = getContainer().addNewPage((PageGeneric) panel, this);
getContainer().activatePage(page);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
private void updateToolbar() {
int row = tblQueryList.getSelectedRowSorted();
btRemove.setEnabled(row != -1);
btDebug.setEnabled(row != -1);
if(row != -1
&& !cache.get(row).isWrong()) {
btCollabs.setEnabled(row >= 0);
execBtn.setEnabled(row >= 0);
btCollabs.setEnabled(row >= 0);
btEdit.setEnabled(row >= 0);
btCopy.setEnabled(row >= 0);
} else {
btCollabs.setEnabled(false);
execBtn.setEnabled(false);
btCollabs.setEnabled(false);
btEdit.setEnabled(false);
btCopy.setEnabled(false);
}
}
private void resizeColumn() {
TableState state = new TableState();
state.setPreferredWidth(TableModelQueryList.COL_ID, 2);
state.setPreferredWidth(TableModelQueryList.COL_QUERY, 8);
state.setPreferredWidth(TableModelQueryList.COL_VERSION, 2);
StateSaver.setDefaultState(this, tblQueryList, state);
}
/** 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() {
jSplitPane1 = new javax.swing.JSplitPane();
jPanel4 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
tblQueryList = new cli_fmw.utils.sorted_table.SortedTable();
jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
btCopy = new javax.swing.JButton();
btAdd = new javax.swing.JButton();
btEdit = new javax.swing.JButton();
btDebug = new javax.swing.JButton();
btRemove = new javax.swing.JButton();
jPanel3 = new javax.swing.JPanel();
btCollabs = new javax.swing.JButton();
execBtn = new javax.swing.JButton();
jPanel5 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
treeReportTypes = new javax.swing.JTree();
jPanel6 = new javax.swing.JPanel();
btAddGroup = new javax.swing.JButton();
btDelGroup = new javax.swing.JButton();
setLayout(new java.awt.BorderLayout());
jSplitPane1.setDividerLocation(200);
jSplitPane1.setResizeWeight(0.5);
jPanel4.setLayout(new java.awt.BorderLayout(0, 3));
tblQueryList.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{},
{},
{},
{}
},
new String [] {
}
));
tblQueryList.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
tblQueryListKeyPressed(evt);
}
});
jScrollPane1.setViewportView(tblQueryList);
jPanel4.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jPanel1.setLayout(new java.awt.BorderLayout());
jPanel2.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT, 5, 9));
btCopy.setText("Копировать");
btCopy.setEnabled(false);
btCopy.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btCopyActionPerformed(evt);
}
});
jPanel2.add(btCopy);
btAdd.setText("Добавить");
btAdd.setEnabled(false);
btAdd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btAddActionPerformed(evt);
}
});
jPanel2.add(btAdd);
btEdit.setText("Редактировать");
btEdit.setEnabled(false);
btEdit.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btEdit.setVerticalAlignment(javax.swing.SwingConstants.TOP);
btEdit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btEditActionPerformed(evt);
}
});
jPanel2.add(btEdit);
btDebug.setText("Отладка");
btDebug.setEnabled(false);
btDebug.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btDebugActionPerformed(evt);
}
});
jPanel2.add(btDebug);
btRemove.setText("Удалить");
btRemove.setEnabled(false);
btRemove.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btRemoveActionPerformed(evt);
}
});
jPanel2.add(btRemove);
jPanel1.add(jPanel2, java.awt.BorderLayout.CENTER);
jPanel3.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 5, 9));
btCollabs.setText("Сотрудники");
btCollabs.setEnabled(false);
btCollabs.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btCollabsActionPerformed(evt);
}
});
jPanel3.add(btCollabs);
execBtn.setText("Выполнить");
execBtn.setEnabled(false);
execBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
execBtnActionPerformed(evt);
}
});
jPanel3.add(execBtn);
jPanel1.add(jPanel3, java.awt.BorderLayout.WEST);
jPanel4.add(jPanel1, java.awt.BorderLayout.SOUTH);
jSplitPane1.setRightComponent(jPanel4);
jPanel5.setLayout(new java.awt.BorderLayout(0, 5));
javax.swing.tree.DefaultMutableTreeNode treeNode1 = new javax.swing.tree.DefaultMutableTreeNode("root");
treeReportTypes.setModel(new javax.swing.tree.DefaultTreeModel(treeNode1));
treeReportTypes.setEditable(true);
treeReportTypes.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
treeReportTypesValueChanged(evt);
}
});
treeReportTypes.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
treeReportTypesKeyPressed(evt);
}
});
jScrollPane2.setViewportView(treeReportTypes);
jPanel5.add(jScrollPane2, java.awt.BorderLayout.CENTER);
jPanel6.setLayout(new java.awt.GridLayout(1, 0, 5, 5));
btAddGroup.setText("<html><center>Добавить<br>группу</center></html>");
btAddGroup.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btAddGroupActionPerformed(evt);
}
});
jPanel6.add(btAddGroup);
btDelGroup.setText("<html><center>Удалить<br>группу</center></html>");
btDelGroup.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btDelGroupActionPerformed(evt);
}
});
jPanel6.add(btDelGroup);
jPanel5.add(jPanel6, java.awt.BorderLayout.SOUTH);
jSplitPane1.setLeftComponent(jPanel5);
add(jSplitPane1, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
private void btEditActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btEditActionPerformed
int row = tblQueryList.getSelectedRowSorted();
if (row < 0) {
return;
}
QueryLocal queryLocal = cache.get(row);
openInEditor(queryLocal);
}//GEN-LAST:event_btEditActionPerformed
private void btRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btRemoveActionPerformed
try {
int row = tblQueryList.getSelectedRowSorted();
if (row < 0) {
return;
}
QueryLocal queryLocal = cache.get(row);
queryLocal.remove();
cache.remove(queryLocal);
tblQueryList.setModel(new TableModelQueryList(cache));
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btRemoveActionPerformed
private void btAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddActionPerformed
try {
QueryLocal query = new QueryLocal(getAuditManager());
query.setReportType(reportType);
PanelReportGenerator panel = new PanelReportGenerator(getContainer(), query);
PageGeneric page = getContainer().addNewPage((PageGeneric) panel, this);
getContainer().activatePage(page);
} catch (ReportException ex) {
MessageBox.showException(ex);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btAddActionPerformed
private void btCollabsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCollabsActionPerformed
try {
int row = tblQueryList.getSelectedRowSorted();
if (row < 0) {
return;
}
QueryLocal queryLocal = cache.get(row);
DlgReportCollabsEdit dlg = new DlgReportCollabsEdit(MainWindow.mainWindow, queryLocal);
dlg.setVisible(true);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btCollabsActionPerformed
private void execBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_execBtnActionPerformed
int row = tblQueryList.getSelectedRowSorted();
if (row < 0) {
return;
}
QueryLocal rr = cache.get(row);
PendingReportDialog dlg;
try {
dlg = new PendingReportDialog(MainWindow.mainWindow, rr, false);
dlg.setVisible(true);
} catch (ReportException ex) {
MessageBox.showExceptionOnly(ex);
}
}//GEN-LAST:event_execBtnActionPerformed
private void btCopyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCopyActionPerformed
try {
int row = tblQueryList.getSelectedRowSorted();
if (row < 0) {
return;
}
QueryLocal queryLocal = cache.get(row);
QueryLocal queryLocalCopy = new QueryLocal(getAuditManager());
queryLocalCopy.setRaw(queryLocal.getRaw());
queryLocalCopy.setTitle(queryLocal.getTitle() + "(копия)");
queryLocalCopy.setReportType(queryLocal.getReportType());
openInEditor(queryLocalCopy);
} catch (ReportException ex) {
MessageBox.showException(ex);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btCopyActionPerformed
private void btDebugActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDebugActionPerformed
int row = tblQueryList.getSelectedRowSorted();
if (row < 0) {
return;
}
QueryLocal queryLocal = cache.get(row);
try {
DebugPanel panel = new DebugPanel(MainWindow.mainWindow,
getContainer(), queryLocal);
PageGeneric page = getContainer().addNewPage((PageGeneric) panel, this);
getContainer().activatePage(page);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btDebugActionPerformed
private void treeReportTypesValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_treeReportTypesValueChanged
try {
setTable();
btAdd.setEnabled(treeReportTypes.getLastSelectedPathComponent() instanceof DirectoryReportTypeItem);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_treeReportTypesValueChanged
private void btAddGroupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddGroupActionPerformed
try {
ReportTypeDetails dd = new ReportTypeDetails();
dd.title = "введите название";
DirectoryReportTypeItem item = new DirectoryReportTypeItem(dd);
if (treeReportTypes.getLastSelectedPathComponent() instanceof DirectoryReportTypeItem) {
DirectoryReportTypeItem parent = (DirectoryReportTypeItem)
treeReportTypes.getLastSelectedPathComponent();
dd.parentItem = parent.getID();
parent.getItems().append(item);
treeReportTypes.updateUI();
}
else {
dd.parentItem = 0;
DirectoryReportType directory = (DirectoryReportType)
DirectoryLocator.getDirectory(DirectoryReportType.class, false);
directory.getItems().append(item);
treeReportTypes.updateUI();
}
treeReportTypes.expandPath(treeReportTypes.getSelectionPath());
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btAddGroupActionPerformed
private void btDelGroupActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDelGroupActionPerformed
try {
if (treeReportTypes.getLastSelectedPathComponent() == treeReportTypes.getModel().getRoot()
|| treeReportTypes.getLastSelectedPathComponent() == null) {
return;
}
DirectoryReportTypeItem item = (DirectoryReportTypeItem) treeReportTypes.getLastSelectedPathComponent();
DirectoryReportTypeItem parent = item.getParent();
if (parent == null) {
DirectoryReportType dir =
(DirectoryReportType) DirectoryLocator.getDirectory(DirectoryReportType.class, false);
dir.getItems().remove(item);
}
else {
parent.getItems().remove(item);
}
treeReportTypes.updateUI();
treeReportTypes.getSelectionModel().setSelectionPath(null);
treeReportTypesValueChanged(null);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btDelGroupActionPerformed
private void tblQueryListKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tblQueryListKeyPressed
int code = evt.getKeyCode();
if (evt.isControlDown() && code == KeyEvent.VK_X) {
selectedQuery = cache.get(tblQueryList.getSelectedRowSorted());
System.out.println("блаблабла " + selectedQuery.toString());
}
}//GEN-LAST:event_tblQueryListKeyPressed
private void treeReportTypesKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_treeReportTypesKeyPressed
try {
int code = evt.getKeyCode();
if (evt.isControlDown() && code == KeyEvent.VK_V && selectedQuery != null) {
if (treeReportTypes.getLastSelectedPathComponent() instanceof DirectoryReportTypeItem) {
DirectoryReportTypeItem groupItem = (DirectoryReportTypeItem) treeReportTypes.getLastSelectedPathComponent();
selectedQuery.setReportType(groupItem);
selectedQuery.save1();
setTable();
selectedQuery = null;
}
}
} catch(ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_treeReportTypesKeyPressed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btAdd;
private javax.swing.JButton btAddGroup;
private javax.swing.JButton btCollabs;
private javax.swing.JButton btCopy;
private javax.swing.JButton btDebug;
private javax.swing.JButton btDelGroup;
private javax.swing.JButton btEdit;
private javax.swing.JButton btRemove;
private javax.swing.JButton execBtn;
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.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JSplitPane jSplitPane1;
private cli_fmw.utils.sorted_table.SortedTable tblQueryList;
private javax.swing.JTree treeReportTypes;
// End of variables declaration//GEN-END:variables
@Override
public String getPageTitle() {
return "Генератор запросов";
}
@Override
public DelegateLine2 getDelegate() {
return null;
}
public void beforeActivate() {
try {
setTable();
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}
public void beforeDeactivate() {
}
public boolean canBeActivated() {
return true;
}
public boolean canBeDeactivated() {
return true;
}
}