Java tutorial
/****************************************************************************** * Copyright (c) 2009-2013, Linagora * * 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 * * Contributors: * Linagora - initial API and implementation *******************************************************************************/ package com.ebmwebsourcing.petals.common.internal.provisional.ui; import java.util.ArrayList; 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.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.model.WorkbenchLabelProvider; import com.ebmwebsourcing.petals.common.internal.provisional.utils.ResourceUtils; /** * @author Vincent Zurczak - EBM WebSourcing */ public class WorkspaceExplorer extends TitleAreaDialog { private TreeViewer wkViewer; private final List<String> extensions; private IResource selectedResource; public WorkspaceExplorer(Shell parentShell, String[] extensions) { super(parentShell); setShellStyle(SWT.PRIMARY_MODAL | SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX); this.extensions = extensions != null ? Arrays.asList(extensions) : new ArrayList<String>(0); } /** * @return the selectedResource */ public IResource getSelectedResource() { return this.selectedResource; } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.TitleAreaDialog * #createDialogArea(org.eclipse.swt.widgets.Composite) */ @Override protected Control createDialogArea(Composite parent) { Composite bigContainer = (Composite) super.createDialogArea(parent); GridLayout layout = new GridLayout(); layout.marginHeight = 0; bigContainer.setLayout(layout); bigContainer.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite container = new Composite(bigContainer, SWT.NONE); layout = new GridLayout(); layout.marginWidth = layout.marginHeight = 0; container.setLayout(layout); container.setLayoutData(new GridData(GridData.FILL_BOTH)); addWorkspaceExplorer(container); this.wkViewer.setInput(ResourcesPlugin.getWorkspace().getRoot()); getShell().setText("Workspace Explorer"); setTitle("Workspace Explorer"); setMessage("Browse the workspace."); return bigContainer; } /** * Add an explorer for the workspace resources. * @param container */ private void addWorkspaceExplorer(Composite container) { int style = SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.HIDE_SELECTION; this.wkViewer = new TreeViewer(container, style); GridData layoutData = new GridData(GridData.FILL_BOTH); layoutData.heightHint = 100; this.wkViewer.getTree().setLayoutData(layoutData); this.wkViewer.setLabelProvider(new WorkbenchLabelProvider()); this.wkViewer.setContentProvider(new ITreeContentProvider() { /** * @param container * @return the list of sub-containers having resources with one of the filtered extension. * <p> * The result does not include binary folders from Java projects, * and skips resources to hide. * </p> */ private Object[] getContainerElements(IContainer container) { IResource[] res = ResourceUtils.getDirectValidChildren(container, WorkspaceExplorer.this.extensions, new ArrayList<IResource>()); return res; } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.ITreeContentProvider * #getChildren(java.lang.Object) */ @Override public Object[] getChildren(Object o) { if (o instanceof IContainer) return getContainerElements((IContainer) o); return new Object[0]; } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.ITreeContentProvider * #hasChildren(java.lang.Object) */ @Override public boolean hasChildren(Object element) { if (element instanceof IContainer) return getContainerElements((IContainer) element).length > 0; return false; } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.ITreeContentProvider * #getParent(java.lang.Object) */ @Override public Object getParent(Object element) { if (element instanceof IResource) { IContainer parent = ((IResource) element).getParent(); if (parent instanceof IWorkspaceRoot) return null; return parent; } return null; } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.IStructuredContentProvider * #getElements(java.lang.Object) */ @Override public Object[] getElements(Object inputElement) { if (inputElement instanceof IWorkspaceRoot) return ((IWorkspaceRoot) inputElement).getProjects(); else if (inputElement instanceof String) { // IProject p = ResourcesPlugin.getWorkspace().getRoot().getProject((String) inputElement); // if( p != null ) { // List<IProject> dependencies = JDTUtils.getJavaProjectDependencies( p ); // return dependencies.toArray(); // } } return new Object[0]; } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ @Override public void dispose() { // nothing } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.IContentProvider * #inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // nothing } }); // Selection listener this.wkViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { if (event.getSelection().isEmpty()) return; Button b = getButton(IDialogConstants.OK_ID); Object res = ((IStructuredSelection) event.getSelection()).getFirstElement(); if (res instanceof IFile) { WorkspaceExplorer.this.selectedResource = (IFile) res; if (b != null) b.setEnabled(true); } else { WorkspaceExplorer.this.selectedResource = null; if (b != null) b.setEnabled(false); } } }); // Double-clic means selection this.wkViewer.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event) { if (event.getSelection().isEmpty()) return; Button b = getButton(IDialogConstants.OK_ID); Object res = ((IStructuredSelection) event.getSelection()).getFirstElement(); if (res instanceof IFile) { WorkspaceExplorer.this.selectedResource = (IFile) res; if (b != null) b.setEnabled(true); close(); } } }); } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#getInitialSize() */ @Override protected Point getInitialSize() { return new Point(400, 500); } }