All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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