package org.reldb.dbrowser.ui.content.rel.script;
import java.io.IOException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.ToolBar;
import org.reldb.dbrowser.ui.RevDatabase;
import org.reldb.dbrowser.ui.RevDatabase.Script;
import org.reldb.dbrowser.ui.content.cmd.CmdPanel;
import org.reldb.dbrowser.ui.content.cmd.CmdPanelToolbar;
import org.reldb.dbrowser.ui.content.rel.DbTreeItem;
import org.reldb.dbrowser.ui.content.rel.DbTreeTab;
import org.reldb.dbrowser.ui.content.rel.RelPanel;
import org.reldb.rel.exceptions.DatabaseFormatVersionException;
public class ScriptTab extends DbTreeTab {
private CmdPanel cmdPanel;
private RevDatabase database;
private String name;
private String oldScript;
private boolean noreload = false;
public ScriptTab(RelPanel parent, DbTreeItem item, int revstyle) {
super(parent, item);
try {
cmdPanel = new CmdPanel(parent.getConnection(), parent.getTabFolder(), CmdPanel.NONE) {
@Override
protected void notifyHistoryAdded(String historyItem) {
database.addScriptHistory(name, historyItem);
oldScript = historyItem;
}
@Override
public void notifyExecuteSuccess() {
getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
noreload = true;
parent.redisplayed();
noreload = false;
}
});
}
@Override
protected String getDefaultSaveFileName() {
return name;
}
};
} catch (NumberFormatException | ClassNotFoundException | IOException | DatabaseFormatVersionException e) {
System.out.println("Error: unable to launch command-line panel: " + e.getMessage());
e.printStackTrace();
return;
}
setControl(cmdPanel);
name = item.getName();
database = new RevDatabase(relPanel.getConnection());
Script script = database.getScript(name);
oldScript = script.getContent();
cmdPanel.setContent(script);
ready();
}
public void reload() {
if (noreload)
return;
String savedText = "";
Script script = database.getScript(name);
if (script != null)
savedText = script.getContent();
String editorText = cmdPanel.getInputText();
if (editorText.equals(savedText))
return;
if (!oldScript.equals(savedText)) {
if (!MessageDialog.openConfirm(relPanel.getShell(), "Script Changed", "The script has changed since you loaded it. Reload it from the database, losing current changes?"))
return;
database.addScriptHistory(name, editorText);
cmdPanel.setInputText(savedText);
oldScript = savedText;
}
}
public void dispose() {
String newScript = cmdPanel.getInputText();
if (!oldScript.equals(newScript))
database.addScriptHistory(name, oldScript);
database.setScript(name, cmdPanel.getInputText());
super.dispose();
}
public ToolBar getToolBar(Composite parent) {
return new CmdPanelToolbar(parent, cmdPanel.getCmdPanelOutput()).getToolBar();
}
@Override
public boolean isSelfZoomable() {
return true;
}
@Override
public void zoom() {
cmdPanel.zoom();
}
}