ProjectSelectionDialog.java
/**
* Copyright (c) 2004-2025 Carnegie Mellon University and others. (see Contributors file).
* All Rights Reserved.
*
* NO WARRANTY. ALL MATERIAL IS FURNISHED ON AN "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY
* KIND, EITHER EXPRESSED OR IMPLIED, AS TO ANY MATTER INCLUDING, BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR PURPOSE
* OR MERCHANTABILITY, EXCLUSIVITY, OR RESULTS OBTAINED FROM USE OF THE MATERIAL. CARNEGIE MELLON UNIVERSITY DOES NOT
* MAKE ANY WARRANTY OF ANY KIND WITH RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT.
*
* This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
* SPDX-License-Identifier: EPL-2.0
*
* Created, in part, with funding and support from the United States Government. (see Acknowledgments file).
*
* This program includes and/or can make use of certain third party source code, object code, documentation and other
* files ("Third Party Software"). The Third Party Software that is used by this program is dependent upon your system
* configuration. By using this program, You agree to comply with any and all relevant Third Party Software terms and
* conditions contained in any such Third Party Software or separate license file distributed with such Third Party
* Software. The parties who own the Third Party Software ("Third Party Licensors") are intended third party benefici-
* aries to this license with respect to the terms applicable to their Third Party Software. Third Party Software li-
* censes only apply to the Third Party Software and not any other portion of this program or this program as a whole.
*/
package org.osate.ui.dialogs;
import java.util.ArrayList;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.model.WorkbenchLabelProvider;
public class ProjectSelectionDialog extends Dialog {
private final ArrayList<IProject> openProjects;
private final String title;
private final String messageText;
private ListViewer viewer = null;
private IProject selectedProject = null;
public ProjectSelectionDialog(final Shell parentShell, final ArrayList<IProject> openProjects, final String title,
final String messageText) {
super(parentShell);
int flags = getShellStyle();
flags |= SWT.RESIZE;
setShellStyle(flags);
this.openProjects = openProjects;
this.title = title;
this.messageText = messageText;
}
public IProject getSelectedProject() throws IllegalStateException {
if (selectedProject == null) {
throw new IllegalStateException(
"Method called out of order. Only call getSelectedProject() when open() has returned Dialog.OK");
} else {
return selectedProject;
}
}
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
composite.getShell().setText(title);
Label message = new Label(composite, SWT.NONE);
message.setText(messageText);
GridData layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false);
message.setLayoutData(layoutData);
viewer = new ListViewer(composite, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(new ArrayContentProvider());
viewer.setLabelProvider(WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider());
viewer.setInput(openProjects);
layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
viewer.getControl().setLayoutData(layoutData);
addListeners();
return composite;
}
@Override
protected Control createContents(Composite parent) {
Control control = super.createContents(parent);
getButton(IDialogConstants.OK_ID).setEnabled(false);
return control;
}
@Override
protected Point getInitialSize() {
return new Point(400, 400);
}
@Override
protected void okPressed() {
selectedProject = (IProject) ((IStructuredSelection) viewer.getSelection()).getFirstElement();
super.okPressed();
}
private void addListeners() {
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
getButton(IDialogConstants.OK_ID)
.setEnabled(((IStructuredSelection) viewer.getSelection()).size() == 1);
}
});
}
}