package org.eclipse.util;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.List;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.FilteredResourcesSelectionDialog;
/**
* A dialog for selecting files in the workspace with a specific extension.
*/
public class FileSelectionDialog extends FilteredResourcesSelectionDialog {
private final List<String> extensions;
public FileSelectionDialog(Shell shell, boolean multi, IContainer container, String[] extensions) {
super(shell, multi, container, IResource.FILE);
this.extensions = Arrays.asList(extensions);
}
public FileSelectionDialog(Shell shell, String[] extensions) {
this(shell, false, ResourcesPlugin.getWorkspace().getRoot(), extensions);
}
@Override
protected IStatus validateItem(Object item) {
if ((item instanceof IFile) && extensions.contains(((IFile)item).getFileExtension())) {
return Status.OK_STATUS;
} else {
String message = null;
if (getSelectedItems().size() > 0) {
if (extensions.size() == 1) {
message = MessageFormat.format("Please select a file with the extension {0}", extensions.get(0));
} else {
message = MessageFormat.format("Please select a file with one of the following extensions: {0}", extensions.get(0));
}
}
return new Status(IStatus.ERROR, ResourcesPlugin.PI_RESOURCES, message);
}
}
public IFile selectFile() {
if (open() == Window.OK) {
Object result = getFirstResult();
if (result instanceof IFile) {
return (IFile)result;
}
}
return null;
}
}