diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/exportgradle/ConfirmationPage.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/exportgradle/ConfirmationPage.java | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/exportgradle/ConfirmationPage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/exportgradle/ConfirmationPage.java new file mode 100644 index 000000000..1f236fb2b --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/exportgradle/ConfirmationPage.java @@ -0,0 +1,275 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ide.eclipse.adt.internal.wizards.exportgradle; + +import com.google.common.collect.Lists; + +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.TableLayout; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +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.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Table; +import org.eclipse.ui.model.WorkbenchLabelProvider; + +import java.io.File; +import java.util.Collection; +import java.util.List; + +/** + * Confirmation page to review the actual project export + * list and see warning about existing files. + * + */ +public class ConfirmationPage extends WizardPage { + + private final ProjectSetupBuilder mBuilder; + private TableViewer mTableViewer; + private Label mModuleDescription1; + private Label mModuleDescription2; + private Label mModuleDescription3; + private Label mProjectRootLabel; + private Label mProjectRootWarning; + private List<IJavaProject> mOverrideProjects; + private boolean mOverrideWarning; + private Button mForceOverride; + + public ConfirmationPage(ProjectSetupBuilder builder) { + super("ConfirmationPage"); //$NON-NLS-1$ + mBuilder = builder; + setPageComplete(false); + setTitle(ExportMessages.PageTitle); + setDescription(ExportMessages.PageDescription); + } + + @Override + public void createControl(Composite parent) { + initializeDialogUnits(parent); + GridData data; + + Composite workArea = new Composite(parent, SWT.NONE); + setControl(workArea); + + workArea.setLayout(new GridLayout()); + workArea.setLayoutData(new GridData(GridData.FILL_BOTH + | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL)); + + Label title = new Label(workArea, SWT.NONE); + title.setText("Please review the export options."); + + Group group = new Group(workArea, SWT.NONE); + group.setText("Project root"); + group.setLayout(new GridLayout()); + group.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); + + mProjectRootLabel = new Label(group, SWT.NONE); + mProjectRootLabel.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); + + mProjectRootWarning = new Label(group, SWT.NONE); + mProjectRootWarning.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); + + Group group2 = new Group(workArea, SWT.NONE); + group2.setText("Exported Modules"); + group2.setLayout(new GridLayout()); + group2.setLayoutData(data = new GridData(SWT.FILL, SWT.FILL, true, true)); + data.heightHint = 300; + + Table table = new Table(group2, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); + mTableViewer = new TableViewer(table); + table.setLayout(new TableLayout()); + table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + mTableViewer.setContentProvider(new IStructuredContentProvider() { + @Override + public Object[] getElements(Object inputElement) { + if (inputElement instanceof ProjectSetupBuilder) { + ProjectSetupBuilder builder = (ProjectSetupBuilder) inputElement; + Collection<GradleModule> modules = builder.getModules(); + Object[] array = new Object[modules.size()]; + int i = 0; + for (GradleModule module : modules) { + array[i++] = module.getJavaProject(); + } + + return array; + } + + return null; + } + + @Override + public void dispose() { + } + + @Override + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + }); + mTableViewer.setLabelProvider(new WorkbenchLabelProvider() { + @Override + protected String decorateText(String input, Object element) { + if (element instanceof IJavaProject) { + IJavaProject javaProject = (IJavaProject) element; + StringBuilder sb = new StringBuilder(input); + if (!mBuilder.isOriginalProject(javaProject)) { + sb.append('*'); + } + // TODO: decorate icon instead? + if (mOverrideProjects.contains(javaProject)) { + sb.append(" (1 warning)"); + } + + return sb.toString(); + } + + return input; + } + }); + mTableViewer.addSelectionChangedListener(new ISelectionChangedListener() { + @Override + public void selectionChanged(SelectionChangedEvent event) { + IStructuredSelection selection = (IStructuredSelection) event.getSelection(); + Object firstElement = selection.getFirstElement(); + if (firstElement instanceof IJavaProject) { + GradleModule module = mBuilder.getModule((IJavaProject) firstElement); + if (mBuilder.getOriginalModules().contains(module)) { + mModuleDescription1.setText("Exported because selected in previous page."); + } else { + List<GradleModule> list = mBuilder.getShortestDependencyTo(module); + StringBuilder sb = new StringBuilder(); + for (GradleModule m : list) { + if (sb.length() > 0) { + sb.append(" > "); + } + sb.append(m.getJavaProject().getProject().getName()); + } + mModuleDescription1.setText("Dependency chain: " + sb); + } + mModuleDescription2.setText("Path: " + module.getPath()); + + if (mOverrideProjects.contains(module.getJavaProject())) { + mModuleDescription3.setText( + "WARNING: build.gradle already exists for this project"); + } else { + mModuleDescription3.setText(""); + } + } else { + mModuleDescription1.setText(""); + mModuleDescription2.setText(""); + mModuleDescription3.setText(""); + } + } + }); + + mModuleDescription1 = new Label(group2, SWT.NONE); + mModuleDescription1.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); + mModuleDescription2 = new Label(group2, SWT.NONE); + mModuleDescription2.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); + mModuleDescription3 = new Label(group2, SWT.NONE); + mModuleDescription3.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); + + mForceOverride = new Button(workArea, SWT.CHECK); + mForceOverride.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); + mForceOverride.setText("Force overriding of existing files"); + mForceOverride.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + updateEnablement(); + } + }); + + setControl(workArea); + Dialog.applyDialogFont(parent); + } + + /** + * Get list of projects which have already a buildfile. + * + * @param javaProjects list of IJavaProject objects + * @return set of project names + */ + private void computeOverride(String commonRoot) { + mOverrideProjects = Lists.newArrayList(); + for (GradleModule module : mBuilder.getModules()) { + if (new File(module.getProject().getLocation().toFile(), + BuildFileCreator.BUILD_FILE).exists()) { + mOverrideProjects.add(module.getJavaProject()); + } + } + + // also check on the root settings.gradle/build.gradle + boolean settingsFile = new File(commonRoot, BuildFileCreator.SETTINGS_FILE).exists(); + boolean buildFile = new File(commonRoot, BuildFileCreator.BUILD_FILE).exists(); + if (settingsFile && buildFile) { + mProjectRootWarning.setText( + "WARNING: build.gradle/settings.gradle already exists at this location."); + } else if (settingsFile) { + mProjectRootWarning.setText( + "WARNING: settings.gradle already exists at this location."); + } else if (buildFile) { + mProjectRootWarning.setText("WARNING: build.gradle already exists at this location."); + } + + mOverrideWarning = mOverrideProjects.size() > 0 || settingsFile || buildFile; + } + + /** + * Enables/disables the finish button on the wizard and displays error messages as needed. + */ + private void updateEnablement() { + if (mOverrideWarning && !mForceOverride.getSelection()) { + setErrorMessage("Enable overriding of existing files before clicking Finish"); + mBuilder.setCanGenerate(false); + } else { + setErrorMessage(null); + mBuilder.setCanGenerate(true); + } + setPageComplete(false); + getContainer().updateButtons(); + } + + @Override + public void setVisible(boolean visible) { + super.setVisible(visible); + if (visible) { + mProjectRootWarning.setText(""); + + String commonRoot = mBuilder.getCommonRoot().toOSString(); + computeOverride(commonRoot); + mProjectRootLabel.setText(commonRoot); + mTableViewer.setInput(mBuilder); + mTableViewer.getTable().setFocus(); + mBuilder.setCanFinish(false); + mBuilder.setCanGenerate(true); + updateEnablement(); + } + } +}
\ No newline at end of file |