package org.projectusus.ui.dependencygraph.sourcefolder; import static org.eclipse.core.runtime.IStatus.ERROR; import static org.eclipse.jdt.ui.ISharedImages.IMG_OBJS_PACKFRAG_ROOT; import java.util.List; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jdt.ui.JavaUI; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.dialogs.CheckedTreeSelectionDialog; import org.eclipse.ui.dialogs.ISelectionStatusValidator; import org.projectusus.jfeet.selection.ElementsFrom; import org.projectusus.ui.dependencygraph.DependencyGraphPlugin; public class SourceFolderFilterSelectionDialog extends CheckedTreeSelectionDialog { public SourceFolderFilterSelectionDialog( Shell parent, SourceFolderFilter filter ) { super( parent, new SourceFolderLabelProvider(), new SourceFolderContentProvider() ); setTitle( "Visible source folders" ); setMessage( "Please select visible source folders:" ); setHelpAvailable( false ); setValidator( new AtLeastOneSourceFolderValidator() ); setInput( filter.getAllSourceFolders() ); setInitialElementSelections( filter.getVisibleSourceFolders() ); } private final static class AtLeastOneSourceFolderValidator implements ISelectionStatusValidator { public IStatus validate( Object[] selection ) { if( selection.length > 0 ) { return status( OK, "" ); } return status( ERROR, "Please select at least one source folder." ); } private IStatus status( int status, String message ) { return new Status( status, DependencyGraphPlugin.PLUGIN_ID, message ); } } private final static class SourceFolderLabelProvider extends LabelProvider { @Override public Image getImage( Object element ) { return JavaUI.getSharedImages().getImage( IMG_OBJS_PACKFRAG_ROOT ); } } private final static class SourceFolderContentProvider extends ArrayContentProvider implements ITreeContentProvider { public Object[] getChildren( Object parentElement ) { return null; } public Object getParent( Object element ) { return null; } public boolean hasChildren( Object element ) { return false; } } List<IPath> getSelectedSourceFolders() { return new ElementsFrom( new StructuredSelection( super.getResult() ) ).as( IPath.class ); } }