package org.jmeld.ui;
import com.jidesoft.swing.JideTabbedPane;
import org.jdesktop.swingworker.SwingWorker;
import org.jmeld.settings.util.Filter;
import org.jmeld.ui.util.ImageUtil;
import org.jmeld.util.StringUtil;
import org.jmeld.util.file.DirectoryDiff;
import javax.swing.*;
import java.io.File;
/**
* User: alberto
* Date: 16/03/12
* Time: 0:25
*/
public class DirectoryComparison extends SwingWorker<String, Object> {
private File leftFile;
private File rightFile;
private Filter filter;
private DirectoryDiff diff;
private AbstractContentPanel contentPanel;
private String contentId;
private JMeldPanel mainPanel;
public DirectoryComparison(JMeldPanel mainPanel, File leftFile, File rightFile, Filter filter) {
this.mainPanel = mainPanel;
this.leftFile = leftFile;
this.rightFile = rightFile;
this.filter = filter;
}
@Override
public String doInBackground() {
if (StringUtil.isEmpty(leftFile.getName())) {
return "left directoryName is empty";
}
if (!leftFile.exists()) {
return "left directoryName(" + leftFile.getAbsolutePath()
+ ") doesn't exist";
}
if (!leftFile.isDirectory()) {
return "left directoryName(" + leftFile.getName()
+ ") is not a directory";
}
if (StringUtil.isEmpty(rightFile.getName())) {
return "right directoryName is empty";
}
if (!rightFile.exists()) {
return "right directoryName(" + rightFile.getAbsolutePath()
+ ") doesn't exist";
}
if (!rightFile.isDirectory()) {
return "right directoryName(" + rightFile.getName()
+ ") is not a directory";
}
contentId = "FolderDiffPanel:" + leftFile.getName() + "-"
+ rightFile.getName();
contentPanel = JMeldPanel.getAlreadyOpen(mainPanel.getTabbedPane(), contentId);
if (contentPanel == null) {
diff = new DirectoryDiff(leftFile, rightFile, filter,
DirectoryDiff.Mode.TWO_WAY);
diff.diff();
}
return null;
}
@Override
protected void done() {
try {
String result = get();
if (result != null) {
JOptionPane.showMessageDialog(mainPanel, result, "Error opening file", JOptionPane.ERROR_MESSAGE);
} else {
JideTabbedPane tabbedPane = mainPanel.getTabbedPane();
if (tabbedPane != null) {
if (contentPanel != null) {
// Already opened!
tabbedPane.setSelectedComponent(contentPanel);
} else {
FolderDiffPanel panel = new FolderDiffPanel(mainPanel, diff);
panel.setId(contentId);
tabbedPane.addTab(panel.getTitle(), ImageUtil.getSmallImageIcon("stock_folder"), panel);
tabbedPane.setSelectedComponent(panel);
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}