aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/exportgradle/ConfirmationPage.java
diff options
context:
space:
mode:
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.java275
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