blob: 7254e72dff050638478be52141e26ce3d6b4119c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2017 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.ui.wizards;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.compare.internal.core.patch.DiffProject;
import org.eclipse.compare.internal.patch.WorkspacePatcher;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
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.Display;
import org.eclipse.swt.widgets.Table;
import org.eclipse.team.internal.ui.TeamUIMessages;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.ui.views.navigator.ResourceComparator;
public class PatchInaccessibleProjectsPage extends WizardPage {
private CheckboxTableViewer checkList;
private Button checkAllButton;
private Button uncheckAllButton;
private WorkspacePatcher fPatcher;
public final static String PATCH_INACCESSIBLE_PROJECTS_NAME = "PatchInaccessibleProjectsPage"; //$NON-NLS-1$
public PatchInaccessibleProjectsPage(WorkspacePatcher patcher) {
super(PATCH_INACCESSIBLE_PROJECTS_NAME,
TeamUIMessages.PatchInaccessibleProjectsPage_title, null);
setMessage(TeamUIMessages.PatchInaccessibleProjectsPage_message);
fPatcher = patcher;
}
@Override
public void createControl(Composite parent) {
initializeDialogUnits(parent);
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout(3, false));
composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL
| GridData.HORIZONTAL_ALIGN_FILL));
setControl(composite);
Font parentFont = composite.getFont();
checkList = CheckboxTableViewer.newCheckList(composite, SWT.H_SCROLL
| SWT.V_SCROLL | SWT.BORDER);
checkList.setContentProvider(new ArrayContentProvider());
checkList.setLabelProvider(new WorkbenchLabelProvider() {
@Override
public Color getForeground(Object element) {
if (element instanceof IProject
&& !((IProject) element).exists())
return Display.getCurrent().getSystemColor(
SWT.COLOR_WIDGET_NORMAL_SHADOW);
return super.getForeground(element);
}
@Override
protected String decorateText(String input, Object element) {
if (element instanceof IProject
&& !((IProject) element).exists())
return input
+ NLS.bind(
TeamUIMessages.PatchInaccessibleProjectsPage_projectDoesNotExistInWorkspace,
""); //$NON-NLS-1$
return input;
}
});
checkList.addCheckStateListener(event -> {
IProject project = (IProject) event.getElement();
if (event.getChecked() && !project.exists())
checkList.setChecked(project, false);
});
checkList
.setComparator(new ResourceComparator(ResourceComparator.NAME));
Table table = checkList.getTable();
GridData data = new GridData(GridData.VERTICAL_ALIGN_FILL
| GridData.HORIZONTAL_ALIGN_FILL);
data.horizontalSpan = 3;
data.grabExcessHorizontalSpace = true;
data.grabExcessVerticalSpace = true;
table.setLayoutData(data);
checkAllButton = new Button(composite, SWT.NONE);
checkAllButton
.setText(TeamUIMessages.PatchInaccessibleProjectsPage_selectExisting);
checkAllButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setAllChecked(true);
}
});
checkAllButton.setFont(parentFont);
setButtonLayoutData(checkAllButton);
uncheckAllButton = new Button(composite, SWT.NONE);
uncheckAllButton
.setText(TeamUIMessages.PatchInaccessibleProjectsPage_deselectAll);
uncheckAllButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setAllChecked(false);
}
});
uncheckAllButton.setFont(parentFont);
setButtonLayoutData(uncheckAllButton);
updateControls();
}
private void updateControls() {
DiffProject[] diffProjects = fPatcher.getDiffProjects();
List<IProject> projects = new ArrayList<>();
if (diffProjects != null) {
for (int i = 0; i < diffProjects.length; i++) {
IProject project = ResourcesPlugin.getWorkspace().getRoot()
.getProject(diffProjects[i].getName());
if (!project.isAccessible())
projects.add(project);
}
}
checkList.setInput(projects.toArray(new IProject[] {}));
}
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible)
updateControls();
}
@Override
public IWizardPage getNextPage() {
// Skipping the patch parsed page in case this one is displayed
Control control = getControl();
if (control != null && control.isVisible())
return null;
return super.getNextPage();
}
public IProject[] getSelectedProjects() {
Object elements[] = checkList.getCheckedElements();
List<IProject> projects = new ArrayList<>();
for (int i = 0; i < elements.length; i++)
projects.add((IProject) elements[i]);
return projects.toArray(new IProject[] {});
}
private void setAllChecked(boolean checked) {
int count = checkList.getTable().getItemCount();
for (int i = 0; i < count; i++) {
IProject project = (IProject) checkList.getElementAt(i);
if (project.exists())
checkList.setChecked(project, checked);
}
}
}