Java tutorial
/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.ui.wizard; import java.io.File; import org.eclipse.core.runtime.IStatus; import org.eclipse.jdt.internal.ui.dialogs.StatusInfo; import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels; import org.eclipse.jdt.internal.ui.viewsupport.FilteredElementTreeSelectionDialog; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ISelectionStatusValidator; /** * @author Greg Amerson */ @SuppressWarnings("restriction") public class ExternalFileSelectionDialog extends FilteredElementTreeSelectionDialog { protected static class FileContentProvider implements ITreeContentProvider { private final Object[] EMPTY = new Object[0]; public void dispose() { } public Object[] getChildren(Object parentElement) { if (parentElement instanceof File) { File[] children = ((File) parentElement).listFiles(); if (children != null) { return children; } } return EMPTY; } public Object[] getElements(Object element) { return getChildren(element); } public Object getParent(Object element) { if (element instanceof File) { return ((File) element).getParentFile(); } return null; } public boolean hasChildren(Object element) { return getChildren(element).length > 0; } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } protected static class FileLabelProvider extends LabelProvider { private final Image IMG_FILE = PlatformUI.getWorkbench().getSharedImages() .getImage(ISharedImages.IMG_OBJ_FILE); private final Image IMG_FOLDER = PlatformUI.getWorkbench().getSharedImages() .getImage(ISharedImages.IMG_OBJ_FOLDER); public Image getImage(Object element) { if (element instanceof File) { File curr = (File) element; if (curr.isDirectory()) { return IMG_FOLDER; } else { return IMG_FILE; } } return null; } public String getText(Object element) { if (element instanceof File) { return BasicElementLabels.getResourceName(((File) element).getName()); } return super.getText(element); } } protected static class FileSelectionValidator implements ISelectionStatusValidator { protected boolean fAcceptFolders; protected boolean fMultiSelect; public FileSelectionValidator(boolean multiSelect, boolean acceptFolders) { fMultiSelect = multiSelect; fAcceptFolders = acceptFolders; } public IStatus validate(Object[] selection) { int nSelected = selection.length; if (nSelected == 0 || (nSelected > 1 && !fMultiSelect)) { return new StatusInfo(IStatus.ERROR, ""); //$NON-NLS-1$ } for (int i = 0; i < selection.length; i++) { Object curr = selection[i]; if (curr instanceof File) { File file = (File) curr; if (!fAcceptFolders && !file.isFile()) { return new StatusInfo(IStatus.ERROR, ""); //$NON-NLS-1$ } } } return new StatusInfo(); } } protected static class FileViewerComparator extends ViewerComparator { public int category(Object element) { if (element instanceof File) { if (((File) element).isFile()) { return 1; } } return 0; } } public ExternalFileSelectionDialog(Shell parent, ViewerFilter filter, boolean multiSelect, boolean acceptFolders) { super(parent, new FileLabelProvider(), new FileContentProvider(), true); setComparator(new FileViewerComparator()); addFilter(filter); setValidator(new FileSelectionValidator(multiSelect, acceptFolders)); setHelpAvailable(false); } @Override protected TreeViewer doCreateTreeViewer(Composite parent, int style) { TreeViewer viewer = super.doCreateTreeViewer(parent, style); viewer.setAutoExpandLevel(5); return viewer; } }