
org.jsoftware.impl.DbPatchInternalFrame Maven / Gradle / Ivy
package org.jsoftware.impl;
import org.jsoftware.config.AbstractPatch;
import org.jsoftware.config.ConfigurationEntry;
import org.jsoftware.config.Patch;
import org.jsoftware.config.RollbackPatch;
import org.jsoftware.log.LogFactory;
import javax.swing.*;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.SQLException;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;
@SuppressWarnings("serial")
public class DbPatchInternalFrame extends JInternalFrame implements MouseListener, InternalFrameListener {
private final static ResultDisplay resultDisplay = new ResultDisplay();
private List patches;
private DbManager dbManager;
private JTable table;
public DbPatchInternalFrame(final ConfigurationEntry ce) throws SQLException, IOException, DuplicatePatchNameException {
super("DbPatch - " + ce.getId(), true, true, true);
final File dir = new File(".");
dbManager = new DbManager(ce);
dbManager.init(new SwingDbManagerPasswordCallback(this));
dbManager.addExtension(resultDisplay);
patches = ce.getPatchScanner().scan(dir, ce.getPatchDirs().split(","));
addInternalFrameListener(this);
final String[] columnModelKeys = new String[] { "patchName", "patchDate", "patchStatements", "patchSize", "action", "state" };
final String[] columnModel = new String[columnModelKeys.length];
for(int i=0; i= patches.size()) return null;
Patch patch = patches.get(rowIndex);
AbstractPatch p;
if (patch.getDbState() == AbstractPatch.DbState.COMMITTED) {
try {
File rollbackFile = ce.getPatchScanner().findRollbackFile(dir, ce.getRollbackDirs().split(","), patch);
int sc = ce.getPatchParser().parse(new FileInputStream(rollbackFile), ce).executableCount();
p = new RollbackPatch(patch, rollbackFile, sc);
} catch (Exception e) {
p = new RollbackPatch(patch);
}
} else {
p = patch;
}
switch (columnIndex) {
case 0:
return patch.getName();
case 1:
return p.getFile() != null ? df.format(new Date(p.getFile().lastModified())) : "-";
case 2:
return p.getStatementCount() < 0 ? "" : p.getStatementCount();
case 3:
if (p.getFile() != null) {
long len = p.getFile().length();
return len > 102400 ?(len / 1024) + "kB" : len + "B";
} else {
return "-";
}
case 5:
return p;
case 4:
if (p.canApply()) {
if (p instanceof Patch) {
return new JPatchButton(Messages.msg("table.patches.state.patchItBtn"), p);
}
if (p instanceof RollbackPatch) {
return new JPatchButton(Messages.msg("table.patches.state.rollbackItBtn"), p);
}
}
return "";
default:
return null;
}
}
public Class> getColumnClass(int columnIndex) {
if (columnIndex == 5) {
return AbstractPatch.class;
}
if (columnIndex == 4) {
return JPatchButton.class;
}
return super.getColumnClass(columnIndex);
}
public int getRowCount() {
return patches.size();
}
public int getColumnCount() {
return columnModel.length;
}
public String getColumnName(int column) {
return columnModel[column];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
};
table = new JTable(tableModel) {
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
if (c instanceof JComponent) {
((JComponent) c).setBorder(null);
}
return c;
}
};
// table.setFillsViewportHeight(true);
JTablePatchStateRenderer renderer = new JTablePatchStateRenderer();
table.setDefaultRenderer(AbstractPatch.class, renderer);
table.setDefaultRenderer(Patch.class, renderer);
table.setDefaultRenderer(RollbackPatch.class, renderer);
table.setDefaultRenderer(JPatchButton.class, renderer);
table.addMouseListener(this);
resultDisplay.setMinimumSize(new Dimension(getWidth(), 40));
setContentPane(new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JScrollPane(table), new JScrollPane(resultDisplay)));
pack();
setVisible(true);
for(int i=0; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy