/*******************************************************************************
* Copyright (c) 2007 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.seam.ui.wizard;
import java.util.ArrayList;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.ListDialog;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
import org.jboss.tools.seam.core.ISeamProject;
import org.jboss.tools.seam.core.SeamCorePlugin;
import org.jboss.tools.seam.core.SeamCoreMessages;
import org.jboss.tools.seam.internal.core.project.facet.ISeamFacetDataModelProperties;
/**
* @author eskimo
*
*/
public class SeamProjectSelectionDialog extends ListDialog implements ISelectionChangedListener {
Button check;
boolean allowAllProjects = false;
/**
* @param parent
* @param allowAllProjects If "false" show only projects with seam nature.
*/
public SeamProjectSelectionDialog(Shell parent, final boolean allowAllProjects) {
super(parent);
this.allowAllProjects = allowAllProjects;
setTitle(SeamCoreMessages.SEAM_PROJECT_SELECTION_DIALOG_SEAM_WEB_PROJECT);
setMessage(SeamCoreMessages.SEAM_PROJECT_SELECTION_DIALOG_SELECT_SEAM_WEB_PROJECT);
setLabelProvider(new WorkbenchLabelProvider());
setInput(new Object());
setContentProvider(new IStructuredContentProvider() {
public Object[] getElements(Object inputElement) {
ArrayList<IProject> seamProjects = new ArrayList<IProject>();
for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
try {
if(project.isAccessible() && (
(allowAllProjects || (check != null && check.getSelection()))
|| (project.hasNature(ISeamProject.NATURE_ID)
&& SeamCorePlugin.getSeamPreferences(project)!=null
&& project.getAdapter(IFacetedProject.class)!=null
&& ((IFacetedProject)project.getAdapter(IFacetedProject.class)).hasProjectFacet(ProjectFacetsManager.getProjectFacet("jst.web"))
&& !"".equals(SeamCorePlugin.getSeamPreferences(project).get(ISeamFacetDataModelProperties.JBOSS_AS_DEPLOY_AS, ""))))) { //$NON-NLS-1$
seamProjects.add(project);
}
} catch (CoreException e) {
SeamCorePlugin.getPluginLog().logError(e);
}
}
return seamProjects.toArray();
}
public void dispose() {
}
public void inputChanged(Viewer viewer,
Object oldInput, Object newInput) {
}
});
}
/**
* @param parent
*/
public SeamProjectSelectionDialog(Shell parent) {
this(parent, false);
}
/**
*
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
getOkButton().setEnabled(false);
getTableViewer().addSelectionChangedListener(this);
}
/**
*
*/
public void selectionChanged(SelectionChangedEvent event) {
getOkButton().setEnabled(!event.getSelection().isEmpty());
}
protected Control createDialogArea(Composite container) {
Composite parent = (Composite) super.createDialogArea(container);
if(!allowAllProjects) {
check = new Button(parent, SWT.CHECK);
check.setText(SeamCoreMessages.SEAM_PROJECT_SELECTION_DIALOG_SHOW_ALL_PROJECTS);
check.setSelection(false);
check.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
public void widgetSelected(SelectionEvent e) {
TableViewer v = getTableViewer();
v.refresh();
}
});
}
return parent;
}
}