package org.jmeld.ui; import org.jdesktop.swingworker.SwingWorker; import org.jmeld.ui.util.ImageUtil; import org.jmeld.util.StringUtil; import org.jmeld.util.node.JMDiffNode; import org.jmeld.util.node.JMDiffNodeFactory; import javax.swing.*; import java.io.File; /** * User: alberto * Date: 16/03/12 * Time: 0:23 */ public class FileComparison extends SwingWorker<String, Object> { private JMeldPanel mainPanel; private JMDiffNode diffNode; private File leftFile; private File rightFile; private BufferDiffPanel panel; private AbstractContentPanel contentPanel; private String contentId; private boolean openInBackground; private boolean showLevenstein; private boolean showTree; public FileComparison(JMeldPanel mainPanel, JMDiffNode diffNode) { this.mainPanel = mainPanel; this.diffNode = diffNode; } public FileComparison(JMeldPanel mainPanel, File leftFile, File rightFile) { this.mainPanel = mainPanel; this.leftFile = leftFile; this.rightFile = rightFile; } public boolean isShowTree() { return showTree; } public void setShowTree(boolean showTree) { this.showTree = showTree; } public boolean isShowLevenstein() { return showLevenstein; } public void setShowLevenstein(boolean showLevenstein) { this.showLevenstein = showLevenstein; } public boolean isOpenInBackground() { return openInBackground; } public void setOpenInBackground(boolean openInBackground) { this.openInBackground = openInBackground; } @Override public String doInBackground() { try { if (diffNode == null) { if (StringUtil.isEmpty(leftFile.getName())) { return "left filename is empty"; } if (!leftFile.exists()) { return "left filename(" + leftFile.getAbsolutePath() + ") doesn't exist"; } if (StringUtil.isEmpty(rightFile.getName())) { return "right filename is empty"; } if (!rightFile.exists()) { return "right filename(" + rightFile.getAbsolutePath() + ") doesn't exist"; } diffNode = JMDiffNodeFactory.create(leftFile.getName(), leftFile, rightFile.getName(), rightFile); } contentId = "BufferDiffPanel:" + diffNode.getId(); contentPanel = JMeldPanel.getAlreadyOpen(mainPanel.getTabbedPane(), contentId); if (contentPanel == null) { diffNode.diff(); } } catch (Exception ex) { ex.printStackTrace(); return ex.getMessage(); } return null; } @Override protected void done() { try { String result; result = get(); if (result != null) { JOptionPane.showMessageDialog(mainPanel, result, "Error opening file", JOptionPane.ERROR_MESSAGE); } else { if (contentPanel != null) { // Already opened! mainPanel.getTabbedPane().setSelectedComponent(contentPanel); } else { panel = new BufferDiffPanel(mainPanel); panel.setId(contentId); panel.setDiffNode(diffNode); mainPanel.getTabbedPane().addTab(panel.getTitle(), ImageUtil.getSmallImageIcon("stock_new"), panel); if (!openInBackground) { mainPanel.getTabbedPane().setSelectedComponent(panel); } SwingUtilities.invokeLater(doGoToFirst()); } } } catch (Exception ex) { ex.printStackTrace(); } } private Runnable doGoToFirst() { return new Runnable() { public void run() { panel.doGoToFirst(); panel.repaint(); } }; } }