package org.erlide.ui.properties; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.dialogs.ISelectionStatusValidator; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.views.navigator.ResourceComparator; import org.erlide.ui.util.FolderSelectionDialog; import org.erlide.ui.util.StatusInfo; import org.erlide.ui.util.TypedElementSelectionValidator; import org.erlide.ui.util.TypedViewerFilter; public class DirectorySelectUtil { public static IContainer chooseLocation(final String dialogTitle, final String labelText, final IProject project2, final String outputLocation, final Shell shell) { final IWorkspaceRoot root = project2.getWorkspace().getRoot(); final Class<?>[] acceptedClasses = new Class[] { IProject.class, IFolder.class }; final IProject[] allProjects = root.getProjects(); final List<IProject> rejectedElements = new ArrayList<>( allProjects.length); for (int i = 0; i < allProjects.length; i++) { if (!allProjects[i].equals(project2)) { rejectedElements.add(allProjects[i]); } } final ViewerFilter filter = new TypedViewerFilter(acceptedClasses, rejectedElements.toArray()); final ILabelProvider lp = new WorkbenchLabelProvider(); final ITreeContentProvider cp = new WorkbenchContentProvider(); IResource initSelection = null; if (outputLocation != null) { initSelection = root.findMember(outputLocation); } final FolderSelectionDialog dialog = new FolderSelectionDialog(shell, lp, cp); dialog.setTitle(dialogTitle); final ISelectionStatusValidator validator = new ISelectionStatusValidator() { ISelectionStatusValidator myValidator = new TypedElementSelectionValidator( acceptedClasses, false); @Override public IStatus validate(final Object[] selection) { final IStatus typedStatus = myValidator.validate(selection); if (!typedStatus.isOK()) { return typedStatus; } if (selection[0] instanceof IFolder) { // try { // IStatus result = ClasspathModifier // .checkSetOutputLocationPrecondition( // fEntryToEdit, folder.getFullPath(), // fAllowInvalidClasspath, fCPJavaProject); // if (result.getSeverity() == IStatus.ERROR) { // return result; // } // } catch (CoreException e) { // JavaPlugin.log(e); // } return new StatusInfo(); } return new StatusInfo(IStatus.ERROR, ""); } }; dialog.setValidator(validator); dialog.setMessage(labelText); dialog.addFilter(filter); dialog.setInput(root); dialog.setInitialSelection(initSelection); dialog.setComparator(new ResourceComparator(ResourceComparator.NAME)); if (dialog.open() == Window.OK) { return (IContainer) dialog.getFirstResult(); } return null; } }