Java tutorial
/******************************************************************************* * Copyright (c) 2008 Scott Stanchfield * 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 *******************************************************************************/ package com.javadude.workingsets.internal; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectNatureDescriptor; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkingSet; import com.javadude.workingsets.DynamicWorkingSetPage; /** * A property page for nature-based dynamic working sets. * This page displays a checklist of all natures defined in the workspace * to filter projects for inclusion in the working set * @author Scott Stanchfield */ public class NatureWorkingSetPage extends DynamicWorkingSetPage { private String natureId_ = null; public NatureWorkingSetPage() { super("com.javadude.workingsets.NatureWorkingSetPage", "com.hcrest.classpath.natureWorkingSetPage", "Select project natures", Activator.getImageDescriptor("icons/logo16.gif")); } /** * Create the UI for the property page */ @Override protected void createFields(Composite parent) { if (getWorkingSet() != null) { natureId_ = getWorkingSet().getName().substring(8); } Label label = new Label(parent, SWT.NULL); label.setText("Registered Natures:"); label.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, true)); int style = SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION | SWT.CHECK; final CheckboxTableViewer table = CheckboxTableViewer.newCheckList(parent, style); List<String> natures = new ArrayList<String>(); for (IProjectNatureDescriptor nature : ResourcesPlugin.getWorkspace().getNatureDescriptors()) { natures.add(nature.getNatureId()); } Collections.sort(natures); for (String nature : natures) { table.add(nature); } if (natureId_ != null) { String[] split = natureId_.split("[,\\s]"); for (String nature : split) { table.setChecked(nature, true); } } table.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); table.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { natureId_ = null; for (Object o : table.getCheckedElements()) { if (natureId_ == null) { natureId_ = (String) o; } else { natureId_ += ',' + (String) o; } } dialogChanged(); } }); } /** * Get all projects that are tagged with at least one of the selected * project natures */ @Override protected List<IAdaptable> getMatchingItems() { List<IAdaptable> projects = new ArrayList<IAdaptable>(); for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) { if (project.isOpen() && NatureWorkingSetUpdater.projectHasNature(project, natureId_)) { projects.add(project); } } return projects; } @Override protected String getWorkingSetName() { return "Nature: " + natureId_; } @Override protected void initFields(IWorkingSet workingSet) { natureId_ = workingSet.getName().substring(8); } @Override protected boolean validate() { if (natureId_ == null) { updateStatus("At least one nature must be selected"); return false; } return true; } }