/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.dataprocess.gui.util.sqleditor.components;
import net.codjo.dataprocess.common.eventsbinder.EventBinderException;
import net.codjo.dataprocess.common.eventsbinder.EventsBinder;
import net.codjo.dataprocess.common.eventsbinder.annotations.OnError;
import net.codjo.dataprocess.common.eventsbinder.annotations.events.OnGenericEvent;
import net.codjo.dataprocess.gui.util.ErrorDialog;
import net.codjo.dataprocess.gui.util.sqleditor.util.SQLEditorTools;
import net.codjo.gui.toolkit.waiting.WaitingPanel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.ref.WeakReference;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
/**
*
*/
public class ResultPaneLogic {
private WeakReference<ResultTabbedPane> weakResultTabbedPane;
private WeakReference<WaitingPanel> weakWaitingPanel;
private final int pageSize;
private final SQLEditorTools sqlEditorTools;
private NavigationPanelLogic navigationPanelLogic;
private ResultPaneGui resultPaneGui;
public ResultPaneLogic(EventsBinder eventsBinder, ResultTabbedPane resultTabbedPane,
WaitingPanel waitingPanel, int pageSize, SQLEditorTools sqlEditorTools)
throws EventBinderException {
this.pageSize = pageSize;
this.sqlEditorTools = sqlEditorTools;
weakResultTabbedPane = new WeakReference<ResultTabbedPane>(resultTabbedPane);
weakWaitingPanel = new WeakReference<WaitingPanel>(waitingPanel);
navigationPanelLogic = new ResultNavigationPanelLogic(eventsBinder);
resultPaneGui = new ResultPaneGui();
eventsBinder.bind(this, resultPaneGui);
}
public NavigationPanelLogic getNavigationPanelLogic() {
return navigationPanelLogic;
}
@OnGenericEvent(propertiesBound = "closeButton", listenerClass = ActionListener.class)
public void onClose(ActionEvent actionEvent) {
weakResultTabbedPane.get().remove(resultPaneGui);
}
public void exceptionRaisedWhileInvokingMethod(Exception ex) {
ErrorDialog.show(null, "System error", ex);
}
public static TableModel createTableModelResult(StringBuffer buffer, SQLEditorTools sqlEditorTools) {
String columns = sqlEditorTools.extractLine(buffer);
String[] columnNames = sqlEditorTools.lineToArray(columns, "\t");
DefaultTableModel model = new DefaultTableModel();
model.setColumnIdentifiers(columnNames);
String currentLine = sqlEditorTools.extractLine(buffer);
while (currentLine != null) {
model.addRow(sqlEditorTools.lineToArray(currentLine, "\t"));
currentLine = sqlEditorTools.extractLine(buffer);
}
return model;
}
public ResultPaneGui getResultPane() {
return resultPaneGui;
}
@OnError
public void exceptionRaisedWhileInvokingMethod(Throwable ex) {
ErrorDialog.show(null, "Error", ex);
}
class ResultNavigationPanelLogic extends NavigationPanelLogic {
ResultNavigationPanelLogic(EventsBinder eventsBinder)
throws EventBinderException {
super(eventsBinder);
}
@Override
public void onPageChanged(int from, final int to) {
weakWaitingPanel.get().exec(new Runnable() {
public void run() {
try {
StringBuffer stringBuffer =
sqlEditorTools.executeRequest(resultPaneGui.getRequestTextArea().getText(), to,
pageSize);
// vire le type
sqlEditorTools.extractLine(stringBuffer);
//vire le nbcol
sqlEditorTools.extractLine(stringBuffer);
// int nbRow = Integer.parseInt(sqlEditorTools.extractLine(stringBuffer));
resultPaneGui.getTable()
.setModel(createTableModelResult(stringBuffer, sqlEditorTools));
}
catch (Exception e) {
ErrorDialog.show(null, "Erreur lors de la requ�te", e);
}
}
});
}
@Override
@OnError
public void exceptionRaisedWhileInvokingMethod(Throwable ex) {
ErrorDialog.show(null, "Error", ex);
}
}
}