/*******************************************************************************
* Copyright (c) 2009 Andrey Loskutov.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* Contributor: Andrey Loskutov - initial API and implementation
*******************************************************************************/
package de.loskutov.anyedit.actions.compare;
import java.io.File;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.widgets.FileDialog;
import de.loskutov.anyedit.AnyEditToolsPlugin;
import de.loskutov.anyedit.IAnyEditConstants;
import de.loskutov.anyedit.compare.ContentWrapper;
import de.loskutov.anyedit.compare.ExternalFileStreamContent;
import de.loskutov.anyedit.compare.FileStreamContent;
import de.loskutov.anyedit.compare.StreamContent;
import de.loskutov.anyedit.util.EclipseUtils;
/**
* @author Andrey
*/
public class CompareWithExternalAction extends CompareWithAction {
public CompareWithExternalAction() {
super();
}
@Override
protected StreamContent createRightContent(StreamContent left) throws CoreException {
FileDialog dialog = new FileDialog(AnyEditToolsPlugin.getShell());
preSelectPath(dialog);
String result = dialog.open();
if(result == null) {
return null;
}
rememberPath(result);
IFile file = EclipseUtils.getIFile(new Path(result));
if (file == null) {
ContentWrapper content = ContentWrapper.create(new File(result));
if(content == null){
return null;
}
return new ExternalFileStreamContent(content);
}
if(file.getLocation() == null) {
ContentWrapper content = ContentWrapper.create(file.getFullPath().toFile());
if(content == null){
return null;
}
return new ExternalFileStreamContent(content);
}
ContentWrapper content = ContentWrapper.create(file);
if(content == null){
return null;
}
return new FileStreamContent(content);
}
public static void rememberPath(String path) {
IPreferenceStore store = AnyEditToolsPlugin.getDefault().getPreferenceStore();
store.setValue(IAnyEditConstants.LAST_OPENED_EXTERNAL_FILE, path);
}
public static void preSelectPath(FileDialog dialog) {
IPreferenceStore store = AnyEditToolsPlugin.getDefault().getPreferenceStore();
String lastUsedFile = store.getString(IAnyEditConstants.LAST_OPENED_EXTERNAL_FILE);
if(lastUsedFile == null) {
return;
}
IPath path = new Path(lastUsedFile);
int segmentCount = path.segmentCount();
if(segmentCount < 2) {
if(segmentCount == 1) {
dialog.setFilterPath(path.toOSString());
}
return;
}
dialog.setFileName(path.lastSegment());
dialog.setFilterPath(path.removeLastSegments(1).toOSString());
}
}