/******************************************************************************* * Copyright (c) 2012 Pivotal Software, Inc. * 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 * * Contributors: * Pivotal Software, Inc. - initial API and implementation *******************************************************************************/ package org.springsource.ide.eclipse.commons.frameworks.ui.internal.legacyconversion; import org.eclipse.core.resources.IProject; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.Viewer; 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.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.model.WorkbenchLabelProvider; import org.springsource.ide.eclipse.commons.frameworks.core.FrameworkCoreActivator; import org.springsource.ide.eclipse.commons.frameworks.core.legacyconversion.IConversionConstants; /** * * @author Andrew Eisenberg * @since 3.0.0 */ public class ListMessageDialog extends MessageDialogWithToggle implements IConversionConstants { class TableContentProvider implements IStructuredContentProvider { public Object[] getElements(Object inputElement) { if (inputElement instanceof IProject[]) { return (IProject[]) inputElement; } return null; } public void dispose() { } public void inputChanged(Viewer viewer2, Object oldInput, Object newInput) { } } private static final IPreferenceStore PREFERENCE_STORE = FrameworkCoreActivator.getDefault().getPreferenceStore(); private static final String PREFERENCE_QUESTION = "Don't show this dialog again."; //$NON-NLS-1$ private static final String TITLE = "Should convert legacy STS projects?"; //$NON-NLS-1$ private final IProject[] legacyProjects; private IProject[] checkedLegacyProjects; private CheckboxTableViewer viewer; /** * Opens the legacy maven project conversion dialog focusing on the selected projects * @param legacyProjects * @return */ public static IProject[] openViewer(Shell shell, IProject[] legacyProjects) { ListMessageDialog dialog = new ListMessageDialog(shell, legacyProjects); int res = dialog.open(); PREFERENCE_STORE.setValue(AUTO_CHECK_FOR_LEGACY_STS_PROJECTS, ! dialog.getToggleState()); if (res == IDialogConstants.YES_ID) { return dialog.getAllChecked(); } else { return null; } } @Override protected void buttonPressed(int buttonId) { if (buttonId == IDialogConstants.YES_ID) { Object[] checkedElements = viewer.getCheckedElements(); checkedLegacyProjects = new IProject[checkedElements.length]; System.arraycopy(checkedElements, 0, checkedLegacyProjects, 0, checkedElements.length); // don't want to do workspace preferences again PREFERENCE_STORE.setValue(LEGACY_MIGRATION_ALREADY_DONE, true); } super.buttonPressed(buttonId); } @Override protected boolean isResizable() { return true; } public ListMessageDialog(Shell shell, IProject[] legacyProjects) { super(shell, TITLE, null, createMessage(legacyProjects), QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL }, 0, PREFERENCE_QUESTION, PREFERENCE_STORE.getBoolean(AUTO_CHECK_FOR_LEGACY_STS_PROJECTS)); this.legacyProjects = legacyProjects; } protected Control createCustomArea(Composite parent) { ((GridLayout) parent.getLayout()).numColumns = 2; ((GridLayout) parent.getLayout()).makeColumnsEqualWidth = false; viewer = CheckboxTableViewer.newCheckList(parent, SWT.BORDER); GridData gd = new GridData(GridData.FILL_BOTH); gd.heightHint = 150; gd.verticalSpan = 2; viewer.getTable().setLayoutData(gd); viewer.setContentProvider(new TableContentProvider()); viewer.setLabelProvider(new WorkbenchLabelProvider()); viewer.setInput(legacyProjects); viewer.setAllChecked(true); applyDialogFont(viewer.getControl()); createButton(parent, "Select all", new SelectionAdapter() { //$NON-NLS-1$ @Override public void widgetSelected(SelectionEvent e) { viewer.setAllChecked(true); } }); createButton(parent, "Select none", new SelectionAdapter() { //$NON-NLS-1$ @Override public void widgetSelected(SelectionEvent e) { viewer.setAllChecked(false); } }); return viewer.getControl(); } protected Button createButton(Composite parent, String label, SelectionListener listener) { return createButton(parent, label, SWT.PUSH, listener); } protected Button createButton(Composite parent, String label, int style, SelectionListener listener) { Button button= new Button(parent, SWT.PUSH); button.setFont(parent.getFont()); button.setText(label); button.addSelectionListener(listener); GridData gd= new GridData(); gd.horizontalAlignment= GridData.FILL; gd.grabExcessHorizontalSpace= false; gd.verticalAlignment= GridData.BEGINNING; gd.widthHint = 100; button.setLayoutData(gd); return button; } IProject[] getAllChecked() { return checkedLegacyProjects; } private static String createMessage(IProject[] allLegacyProjects) { StringBuilder sb = new StringBuilder(); if (allLegacyProjects.length > 1) { sb.append("The following legacy STS projects have been found:\n"); //$NON-NLS-1$ } else { sb.append("The following legacy STS project has been found:\n"); //$NON-NLS-1$ } if (allLegacyProjects.length > 1) { sb.append("\n** These projects may not compile until they are upgraded to STS 3.0. **\n\n"); //$NON-NLS-1$ } else { sb.append("\n** This project may not compile until it is upgraded to STS 3.0. **\n\n"); //$NON-NLS-1$ } sb.append("Do you want to upgrade now?\n" + //$NON-NLS-1$ "You can choose to upgrade later by going to:\n" + //$NON-NLS-1$ "Project -> Configure -> Convert legacy STS projects..."); //$NON-NLS-1$ return sb.toString(); } }