/*
* 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.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import net.sf.jailer.database.DMLTransformer;
/**
* Progress panel.
*
* @author Ralf Wisser
*/
public class ProgressPanel extends javax.swing.JPanel {
private Font font = new JLabel("normal").getFont();
private Font nonbold = new Font(font.getName(), font.getStyle() & ~Font.BOLD, font.getSize());
private Font nonboldbig = new Font(font.getName(), font.getStyle() & ~Font.BOLD, (font.getSize() * 14) / 10);
private final ProgressTable progressTable;
private final ProgressTable deleteProgressTable;
/** Creates new form ProgressPanel
* @param progressTable */
public ProgressPanel(ProgressTable progressTable, ProgressTable deleteProgressTable, boolean withDelete) {
this.progressTable = progressTable;
this.deleteProgressTable = deleteProgressTable;
initComponents();
jLabel1.setForeground(jLabel1.getBackground());
progressTableHolder.setViewportView(progressTable);
progressTableHolderForDelete.setViewportView(deleteProgressTable);
stepLabel.setFont(nonboldbig);
exportedRowsLabel.setFont(nonbold);
collectedRowsLabel.setFont(nonbold);
elapsedTimeLabel.setFont(nonbold);
progressTableHolder.setColumnHeaderView(null);
progressTableHolderForDelete.setColumnHeaderView(null);
if (!withDelete) {
deletedRowsLabel.setVisible(false);
deletedRowsTitelLabel.setVisible(false);
jTabbedPane1.remove(panel4);
jPanel4.remove(jTabbedPane1);
jTabbedPane1.remove(panel3);
jPanel4.add(panel3);
}
}
private Map<String, JLabel> reductionLabels = new HashMap<String, JLabel>();
public void updateRowsReductionPerTable(Map<String, Long> rowsReductionPerTable) {
for (Entry<String, Long> e: rowsReductionPerTable.entrySet()) {
JLabel label = reductionLabels.get(e.getKey());
if (label != null) {
label.setText(" (-" + e.getValue() + ") ");
}
}
}
public void updateRowsPerTable(Map<String, Long> rowsPerTable) {
rowsPerTablePanel.removeAll();
allMouseListener.clear();
int y = 0;
GridBagConstraints gridBagConstraints;
for (String tableName: rowsPerTable.keySet()) {
Color bgColor;
if (y % 2 == 0) {
bgColor = new java.awt.Color(240, 255, 255);
} else {
bgColor = Color.WHITE;
}
JLabel l = createLabel(y, tableName, bgColor);
l.setText(" " + tableName + " ");
l.setOpaque(true);
l.setFont(nonbold);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = y;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
// gridBagConstraints.insets = new Insets(2, 0, 2, 0);
rowsPerTablePanel.add(l, gridBagConstraints);
l = new JLabel("" + rowsPerTable.get(tableName) + " ");
if (y % 2 == 0) {
l.setBackground(new java.awt.Color(240, 255, 255));
} else {
l.setBackground(Color.WHITE);
}
l.setOpaque(true);
l.setFont(nonbold);
l.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = y;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
// gridBagConstraints.insets = new Insets(2, 0, 2, 0);
rowsPerTablePanel.add(l, gridBagConstraints);
l = new JLabel(" ");
reductionLabels.put(tableName, l);
if (y % 2 == 0) {
l.setBackground(new java.awt.Color(240, 255, 255));
} else {
l.setBackground(Color.WHITE);
}
l.setOpaque(true);
l.setFont(nonbold);
l.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = y;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 0;
// gridBagConstraints.insets = new Insets(2, 0, 2, 0);
rowsPerTablePanel.add(l, gridBagConstraints);
++y;
}
JLabel l = new JLabel("");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = y;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weighty = 1.0;
rowsPerTablePanel.add(l, gridBagConstraints);
}
private int currentlySelectedRow = -1;
private final Color BGCOLOR_OF_SELECTED_ROW = Color.CYAN;
private List<MouseListener> allMouseListener = new ArrayList<MouseListener>();
private JLabel createLabel(final int y, final String tableName, Color bgColor) {
final JLabel label = new JLabel();
label.setBackground(bgColor);
MouseListener l;
label.addMouseListener(l = new MouseListener() {
Color bgColor;
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
if (bgColor != null) {
label.setBackground(bgColor);
}
if (currentlySelectedRow == y) {
currentlySelectedRow = -1;
}
}
@Override
public void mouseEntered(MouseEvent e) {
for (MouseListener l: allMouseListener) {
if (l != this) {
l.mouseExited(e);
}
}
if (bgColor == null) {
bgColor = label.getBackground();
}
label.setBackground(BGCOLOR_OF_SELECTED_ROW);
currentlySelectedRow = y;
}
@Override
public void mouseClicked(MouseEvent e) {
progressTable.selectAllCells(tableName);
deleteProgressTable.selectAllCells(tableName);
}
});
if (y == currentlySelectedRow) {
l.mouseEntered(null);
}
allMouseListener.add(l);
return label;
}
public void switchToDeleteTab() {
jTabbedPane1.setSelectedIndex(1);
}
/** 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.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
jSplitPane1 = new javax.swing.JSplitPane();
jPanel3 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
stepLabel = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
collectedRowsLabel = new javax.swing.JLabel();
exportedRowsLabel = new javax.swing.JLabel();
jPanel5 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
rowsPerTablePanel = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
elapsedTimeLabel = new javax.swing.JLabel();
deletedRowsTitelLabel = new javax.swing.JLabel();
deletedRowsLabel = new javax.swing.JLabel();
jPanel4 = new javax.swing.JPanel();
jTabbedPane1 = new javax.swing.JTabbedPane();
panel3 = new javax.swing.JPanel();
jPanel6 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
progressTableHolder = new javax.swing.JScrollPane();
panel4 = new javax.swing.JPanel();
jPanel7 = new javax.swing.JPanel();
jLabel8 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
progressTableHolderForDelete = new javax.swing.JScrollPane();
setLayout(new java.awt.GridLayout(1, 0));
jSplitPane1.setContinuousLayout(true);
jSplitPane1.setOneTouchExpandable(true);
jPanel3.setLayout(new javax.swing.BoxLayout(jPanel3, javax.swing.BoxLayout.LINE_AXIS));
jPanel2.setLayout(new java.awt.GridBagLayout());
jLabel3.setFont(new java.awt.Font("DejaVu Sans", 1, 13)); // NOI18N
jLabel3.setText(" Stage ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
jPanel2.add(jLabel3, gridBagConstraints);
jLabel4.setFont(new java.awt.Font("DejaVu Sans", 1, 13)); // NOI18N
jLabel4.setText(" Collected Rows ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
jPanel2.add(jLabel4, gridBagConstraints);
stepLabel.setText(" ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
jPanel2.add(stepLabel, gridBagConstraints);
jLabel5.setFont(new java.awt.Font("DejaVu Sans", 1, 13)); // NOI18N
jLabel5.setText(" Exported Rows ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
jPanel2.add(jLabel5, gridBagConstraints);
collectedRowsLabel.setText("0");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
jPanel2.add(collectedRowsLabel, gridBagConstraints);
exportedRowsLabel.setText("0");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
jPanel2.add(exportedRowsLabel, gridBagConstraints);
jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder("Rows per Table"));
jPanel5.setLayout(new java.awt.GridBagLayout());
rowsPerTablePanel.setLayout(new java.awt.GridBagLayout());
jScrollPane1.setViewportView(rowsPerTablePanel);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
jPanel5.add(jScrollPane1, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 20;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
jPanel2.add(jPanel5, gridBagConstraints);
jLabel1.setForeground(new java.awt.Color(230, 230, 230));
jLabel1.setText(" ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 11;
jPanel2.add(jLabel1, gridBagConstraints);
jLabel6.setFont(new java.awt.Font("DejaVu Sans", 1, 13)); // NOI18N
jLabel6.setText(" Elapsed Time ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 5;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
jPanel2.add(jLabel6, gridBagConstraints);
elapsedTimeLabel.setText(" ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 5;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
jPanel2.add(elapsedTimeLabel, gridBagConstraints);
deletedRowsTitelLabel.setFont(new java.awt.Font("DejaVu Sans", 1, 13)); // NOI18N
deletedRowsTitelLabel.setText(" Deleted Rows ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
jPanel2.add(deletedRowsTitelLabel, gridBagConstraints);
deletedRowsLabel.setText("0");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
jPanel2.add(deletedRowsLabel, gridBagConstraints);
jPanel3.add(jPanel2);
jSplitPane1.setLeftComponent(jPanel3);
jPanel4.setLayout(new javax.swing.BoxLayout(jPanel4, javax.swing.BoxLayout.LINE_AXIS));
panel3.setLayout(new java.awt.BorderLayout());
jPanel6.setLayout(new java.awt.GridBagLayout());
jLabel2.setText(" Day ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.insets = new java.awt.Insets(2, 0, 2, 0);
jPanel6.add(jLabel2, gridBagConstraints);
jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel7.setText(" Progress ");
jLabel7.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(2, 0, 2, 0);
jPanel6.add(jLabel7, gridBagConstraints);
panel3.add(jPanel6, java.awt.BorderLayout.PAGE_START);
panel3.add(progressTableHolder, java.awt.BorderLayout.CENTER);
jTabbedPane1.addTab("Export", panel3);
panel4.setLayout(new java.awt.BorderLayout());
jPanel7.setLayout(new java.awt.GridBagLayout());
jLabel8.setText(" Day ");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.insets = new java.awt.Insets(2, 0, 2, 0);
jPanel7.add(jLabel8, gridBagConstraints);
jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel9.setText(" Progress ");
jLabel9.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(2, 0, 2, 0);
jPanel7.add(jLabel9, gridBagConstraints);
panel4.add(jPanel7, java.awt.BorderLayout.PAGE_START);
panel4.add(progressTableHolderForDelete, java.awt.BorderLayout.CENTER);
jTabbedPane1.addTab("Delete Reduction", panel4);
jPanel4.add(jTabbedPane1);
jSplitPane1.setRightComponent(jPanel4);
add(jSplitPane1);
}// </editor-fold>//GEN-END:initComponents
public void confirm() {
String message;
message = "Successfully finished.";
if (DMLTransformer.numberOfExportedLOBs > 0) {
message += "\n" + DMLTransformer.numberOfExportedLOBs + " CLOBs/BLOBs exported.\n\n" +
"Note that the CLOBs/BLOBs can only\n" +
"be imported with the 'Import SQL Data' Tool";
}
JOptionPane.showMessageDialog(this, message, "Finished", JOptionPane.INFORMATION_MESSAGE);
}
//
// obsolete
// new StatisticDialog(this, message);
// Variables declaration - do not modify//GEN-BEGIN:variables
public javax.swing.JLabel collectedRowsLabel;
public javax.swing.JLabel deletedRowsLabel;
private javax.swing.JLabel deletedRowsTitelLabel;
public javax.swing.JLabel elapsedTimeLabel;
public javax.swing.JLabel exportedRowsLabel;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
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.JPanel jPanel7;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JSplitPane jSplitPane1;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JPanel panel3;
private javax.swing.JPanel panel4;
private javax.swing.JScrollPane progressTableHolder;
private javax.swing.JScrollPane progressTableHolderForDelete;
private javax.swing.JPanel rowsPerTablePanel;
public javax.swing.JLabel stepLabel;
// End of variables declaration//GEN-END:variables
private static final long serialVersionUID = -2750282839722695036L;
}