/*
* Copyright 2007 - 2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.sf.jailer.ui;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import net.sf.jailer.progress.ProgressListenerRegistry;
import net.sf.jailer.util.CancellationHandler;
/**
* Jailer console window.
*
* @author Ralf Wisser
*/
public class JailerConsole {
private final ProgressPanel progressPanel;
public final JDialog dialog;
private final boolean fullSize;
/**
* Constructor.
*
* @param owner the enclosing component
* @param showLogfileButton <code>true</code> for offering a button to open the log-file
* @param showExplainLogButton <code>true</code> for offering a button to open the explain-log-file
* @param progressPanel progress panel, optional
*/
public JailerConsole(Window owner, JDialog dialog, boolean showLogfileButton, boolean showExplainLogButton, ProgressPanel progressPanel, boolean fullSize) {
this.dialog = dialog;
this.progressPanel = progressPanel;
this.fullSize = fullSize;
initialize();
getJTextPane().setAutoscrolls(true);
Font f = getJTextPane().getFont();
getJTextPane().setFont(new Font(Font.MONOSPACED, f.getStyle(), f.getSize()));
getJTextPane().setLineWrap(false);
dialog.setModal(true);
dialog.setDefaultCloseOperation(0);
getLoadExplainLog().setEnabled(false);
getLoadSqlLog().setEnabled(false);
getLoadExportLog().setVisible(false);
if (!showLogfileButton) {
// getLoadExportLog().setVisible(false);
getLoadSqlLog().setVisible(false);
}
if (!showExplainLogButton) {
getLoadExplainLog().setVisible(false);
}
UIUtil.initPeer();
}
/**
* Initializes components.
*/
private void initialize() {
JPanel jPanel = getJPanel();
if (progressPanel != null) {
jPanel.remove(getJScrollPane());
JTabbedPane contentPane = new JTabbedPane();
contentPane.add(progressPanel, "Progress");
contentPane.add(getJScrollPane(), "Console");
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.fill = GridBagConstraints.BOTH;
gridBagConstraints.gridy = 0;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.gridx = 0;
gridBagConstraints.gridwidth = 6;
gridBagConstraints.insets = new Insets(0, 0, 0, 0);
jPanel.add(contentPane, gridBagConstraints);
}
if (fullSize) {
dialog.setSize(new Dimension(1110, 740));
dialog.setLocation(10, 50);
} else {
dialog.setSize(new Dimension(600, 400));
dialog.setLocation(200, 250);
}
dialog.setContentPane(jPanel);
dialog.setTitle("Jailer Console - in progress");
getJTextPane().setFont(new Font("Monospaced", Font.PLAIN, 12));
getLoadExportLog().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
new FileView(dialog, "export.log");
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
getLoadSqlLog().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
new FileView(dialog, "sql.log");
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
getLoadExplainLog().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
new FileView(dialog, "explain.log");
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
UIUtil.fit(this.dialog);
getCancelButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (hasFinished) {
dialog.setVisible(false);
return;
}
if (JOptionPane.showConfirmDialog(dialog,
"Cancel operation?", "Cancellation",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
if (!hasFinished) {
hasCancelled = true;
new Thread(new Runnable() {
@Override
public void run() {
CancellationHandler.cancel(null);
}
}).start();
dialog.setTitle("Jailer Console - cancelled");
ProgressListenerRegistry.getProgressListener().newStage("cancelled", true, true);
getCancelButton().setEnabled(false);
}
}
}
});
}
/**
* This method initializes jTextPane
*
* @return javax.swing.JTextPane
*/
private JTextArea getJTextPane() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setEditable(false);
}
return jTextArea;
}
/**
* Appends text to console window.
*
* @param output the text
*/
public void appendText(String output) {
final int MAXLENGTH = 50000;
StringBuffer newText = new StringBuffer(getJTextPane().getText() + output);
if (newText.length() > MAXLENGTH) {
int fll = newText.indexOf("\n");
String firstLine = "";
if (fll > 0) {
firstLine = newText.substring(0, fll);
}
int start = newText.length() - (3 * MAXLENGTH / 4);
newText = new StringBuffer(firstLine + "\n...\n" + newText.substring(start, newText.length()));
}
getJTextPane().setText(newText.toString());
}
/**
* Sets status of console to "finished".
*
* @param ok indicates errors
*/
public void finish(boolean ok) {
getLoadSqlLog().setEnabled(true);
getLoadExplainLog().setEnabled(true);
getCancelButton().setText("Close");
getCancelButton().setEnabled(true);
dialog.setTitle("Jailer Console - " + (ok? "finished" : "failed!"));
hasFinished = true;
}
/**
* This method initializes jPanel
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel() {
if (jPanel == null) {
GridBagConstraints gridBagConstraints29 = new GridBagConstraints();
gridBagConstraints29.anchor = GridBagConstraints.EAST;
gridBagConstraints29.gridx = 5;
gridBagConstraints29.gridy = 1;
gridBagConstraints29.weightx = 0.0;
gridBagConstraints29.insets = new Insets(0, 4, 2, 2);
GridBagConstraints gridBagConstraints28 = new GridBagConstraints();
gridBagConstraints28.anchor = GridBagConstraints.WEST;
gridBagConstraints28.gridx = 4;
gridBagConstraints28.gridy = 1;
gridBagConstraints28.insets = new Insets(0, 4, 2, 0);
GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
gridBagConstraints2.gridx = 3;
gridBagConstraints2.gridy = 1;
gridBagConstraints2.insets = new Insets(0, 4, 2, 0);
GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
gridBagConstraints1.gridx = 1;
gridBagConstraints1.weightx = 1.0;
gridBagConstraints1.anchor = GridBagConstraints.EAST;
gridBagConstraints1.gridy = 1;
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.fill = GridBagConstraints.BOTH;
gridBagConstraints.gridy = 0;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.gridx = 0;
gridBagConstraints.gridwidth = 6;
jPanel = new JPanel();
jPanel.setLayout(new GridBagLayout());
jPanel.add(getJScrollPane(), gridBagConstraints);
jPanel.add(getLoadExportLog(), gridBagConstraints1);
jPanel.add(getLoadSqlLog(), gridBagConstraints2);
jPanel.add(getLoadExplainLog(), gridBagConstraints28);
jPanel.add(getCancelButton(), gridBagConstraints29);
}
return jPanel;
}
/**
* This method initializes jScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setViewportView(getJTextPane());
}
return jScrollPane;
}
/**
* This method initializes loadExportLog
*
* @return javax.swing.JButton
*/
private JButton getLoadExportLog() {
if (loadExportLog == null) {
loadExportLog = new JButton();
loadExportLog.setText("Open Export.log");
}
return loadExportLog;
}
/**
* This method initializes loadSqlLog
*
* @return javax.swing.JButton
*/
private JButton getLoadSqlLog() {
if (loadSqlLog == null) {
loadSqlLog = new JButton();
loadSqlLog.setText("Open Sql.log");
}
return loadSqlLog;
}
/**
* This method initializes loadExplainLog
*
* @return javax.swing.JButton
*/
private JButton getLoadExplainLog() {
if (loadExplainLog == null) {
loadExplainLog = new JButton();
loadExplainLog.setText("Open Explain.log");
}
return loadExplainLog;
}
/**
* This method initializes loadExplainLog
*
* @return javax.swing.JButton
*/
private JButton getCancelButton() {
if (cancelButton == null) {
cancelButton = new JButton();
cancelButton.setText("Cancel");
}
return cancelButton;
}
private JTextArea jTextArea = null;
private JPanel jPanel = null;
private JScrollPane jScrollPane = null;
private JButton loadExportLog = null;
private JButton loadSqlLog = null;
private JButton loadExplainLog = null;
private JButton cancelButton = null;
public boolean hasCancelled = false;
boolean hasFinished = false;
} // @jve:decl-index=0:visual-constraint="10,10"