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.project.ui.dialog; import java.util.EventObject; import java.util.HashSet; import java.util.Set; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jdt.core.IJavaModel; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.ui.JavaElementComparator; import org.eclipse.jdt.ui.JavaElementLabelProvider; import org.eclipse.jdt.ui.StandardJavaElementContentProvider; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Font; 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.dialogs.SelectionStatusDialog; import com.liferay.ide.core.util.StringPool; import com.liferay.ide.ui.LiferayUIPlugin; /** * @author Andy Wu * @author Lovett Li */ public abstract class ProjectSelectionDialog extends SelectionStatusDialog { class JavaProjectProvider extends StandardJavaElementContentProvider { public Object[] getChildren(Object element) { if (element instanceof IJavaModel) { final IJavaModel model = (IJavaModel) element; final Set<IJavaProject> set = new HashSet<IJavaProject>(); try { final IJavaProject[] projects = model.getJavaProjects(); for (int i = 0; i < projects.length; i++) { if (checkProject(projects[i])) { set.add(projects[i]); } } } catch (JavaModelException jme) { // ignore } return set.toArray(); } return super.getChildren(element); } } // sizing constants private final static int SIZING_SELECTION_WIDGET_HEIGHT = 250; private final static int SIZING_SELECTION_WIDGET_WIDTH = 300; /** * The filter for the viewer */ private ViewerFilter fFilter; // the visual selection widget group private CheckboxTableViewer fTableViewer; /** * Constructor * * @param parentShell * @param projectsWithSpecifics */ public ProjectSelectionDialog(Shell parentShell, ViewerFilter filter) { super(parentShell); fFilter = filter; } protected abstract boolean checkProject(IJavaProject project); /* * (non-Javadoc) * @see org.eclipse.ui.dialogs.SelectionStatusDialog#computeResult() */ protected void computeResult() { } /* * (non-Javadoc) Method declared on Dialog. */ protected Control createDialogArea(Composite parent) { // page group Composite composite = (Composite) super.createDialogArea(parent); Font font = parent.getFont(); composite.setFont(font); createMessageArea(composite); fTableViewer = CheckboxTableViewer.newCheckList(composite, SWT.BORDER); fTableViewer.addPostSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { updateOKButtonState(event); } }); addSelectionButtons(composite); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.heightHint = SIZING_SELECTION_WIDGET_HEIGHT; data.widthHint = SIZING_SELECTION_WIDGET_WIDTH; fTableViewer.getTable().setLayoutData(data); fTableViewer.setLabelProvider(new JavaElementLabelProvider()); fTableViewer.setContentProvider(getContentProvider()); fTableViewer.setComparator(new JavaElementComparator()); fTableViewer.getControl().setFont(font); updateFilter(true); IJavaModel input = JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()); fTableViewer.setInput(input); fTableViewer.setAllChecked(true); doSelectionChanged(new Object[0]); Dialog.applyDialogFont(composite); return composite; } /** * Handles the change in selection of the viewer and updates the status of the dialog at the same time * * @param objects */ private void doSelectionChanged(Object[] objects) { updateStatus(new Status(IStatus.OK, LiferayUIPlugin.PLUGIN_ID, StringPool.EMPTY)); setSelectionResult(objects); } protected IContentProvider getContentProvider() { return new JavaProjectProvider(); } /** * Updates the viewer filter based on the selection of the 'show project with...' button * * @param selected */ protected void updateFilter(boolean selected) { if (fFilter == null) { return; } if (selected) { fTableViewer.addFilter(fFilter); } else { fTableViewer.removeFilter(fFilter); } } private void addSelectionButtons(Composite composite) { Composite buttonComposite = new Composite(composite, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 0; layout.marginWidth = 0; layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); buttonComposite.setLayout(layout); buttonComposite.setLayoutData(new GridData(SWT.END, SWT.TOP, true, false)); Button selectButton = createButton(buttonComposite, IDialogConstants.SELECT_ALL_ID, "Select All", false); SelectionListener listener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { fTableViewer.setAllChecked(true); getOkButton().setEnabled(true); } }; selectButton.addSelectionListener(listener); Button deselectButton = createButton(buttonComposite, IDialogConstants.DESELECT_ALL_ID, "Deselect All", false); listener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { fTableViewer.setAllChecked(false); getOkButton().setEnabled(false); } }; deselectButton.addSelectionListener(listener); } private void updateOKButtonState(EventObject event) { Object element = event.getSource(); if (element instanceof CheckboxTableViewer) { Object[] checkedElements = ((CheckboxTableViewer) element).getCheckedElements(); if (checkedElements.length == 0) { getOkButton().setEnabled(false); } else { getOkButton().setEnabled(true); } } } @Override protected void okPressed() { Object[] checkedElements = fTableViewer.getCheckedElements(); setSelectionResult(checkedElements); super.okPressed(); } }