aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/NewProjectWizard.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/NewProjectWizard.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/NewProjectWizard.java181
1 files changed, 181 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/NewProjectWizard.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/NewProjectWizard.java
new file mode 100644
index 000000000..ff03b338f
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/newproject/NewProjectWizard.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2011 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.newproject;
+
+import static com.android.SdkConstants.FN_PROJECT_PROGUARD_FILE;
+import static com.android.SdkConstants.OS_SDK_TOOLS_LIB_FOLDER;
+
+import com.android.ide.eclipse.adt.AdtPlugin;
+import com.android.ide.eclipse.adt.AdtUtils;
+import com.android.ide.eclipse.adt.internal.wizards.newproject.NewProjectWizardState.Mode;
+
+import org.eclipse.jdt.ui.actions.OpenJavaPerspectiveAction;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+
+import java.io.File;
+
+
+/**
+ * A "New Android Project" Wizard.
+ * <p/>
+ * Note: this class is public so that it can be accessed from unit tests.
+ * It is however an internal class. Its API may change without notice.
+ * It should semantically be considered as a private final class.
+ * <p/>
+ * Do not derive from this class.
+ */
+public class NewProjectWizard extends Wizard implements INewWizard {
+ private static final String PROJECT_LOGO_LARGE = "icons/android-64.png"; //$NON-NLS-1$
+
+ private NewProjectWizardState mValues;
+ private ProjectNamePage mNamePage;
+ private SdkSelectionPage mSdkPage;
+ private SampleSelectionPage mSamplePage;
+ private ApplicationInfoPage mPropertiesPage;
+ private final Mode mMode;
+ private IStructuredSelection mSelection;
+
+ /** Constructs a new wizard default project wizard */
+ public NewProjectWizard() {
+ this(Mode.ANY);
+ }
+
+ protected NewProjectWizard(Mode mode) {
+ mMode = mode;
+ switch (mMode) {
+ case SAMPLE:
+ setWindowTitle("New Android Sample Project");
+ break;
+ case TEST:
+ setWindowTitle("New Android Test Project");
+ break;
+ default:
+ setWindowTitle("New Android Project");
+ break;
+ }
+ }
+
+ @Override
+ public void addPages() {
+ mValues = new NewProjectWizardState(mMode);
+
+ if (mMode != Mode.SAMPLE) {
+ mNamePage = new ProjectNamePage(mValues);
+
+ if (mSelection != null) {
+ mNamePage.init(mSelection, AdtUtils.getActivePart());
+ }
+
+ addPage(mNamePage);
+ }
+
+ if (mMode == Mode.TEST) {
+ addPage(new TestTargetPage(mValues));
+ }
+
+ mSdkPage = new SdkSelectionPage(mValues);
+ addPage(mSdkPage);
+
+ if (mMode != Mode.TEST) {
+ // Sample projects can be created when entering the new/existing wizard, or
+ // the sample wizard
+ mSamplePage = new SampleSelectionPage(mValues);
+ addPage(mSamplePage);
+ }
+
+ if (mMode != Mode.SAMPLE) {
+ // Project properties are entered in all project types except sample projects
+ mPropertiesPage = new ApplicationInfoPage(mValues);
+ addPage(mPropertiesPage);
+ }
+ }
+
+ @Override
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ mSelection = selection;
+
+ setHelpAvailable(false); // TODO have help
+ ImageDescriptor desc = AdtPlugin.getImageDescriptor(PROJECT_LOGO_LARGE);
+ setDefaultPageImageDescriptor(desc);
+
+ // Trigger a check to see if the SDK needs to be reloaded (which will
+ // invoke onSdkLoaded asynchronously as needed).
+ AdtPlugin.getDefault().refreshSdk();
+ }
+
+ @Override
+ public boolean performFinish() {
+ File file = new File(AdtPlugin.getOsSdkFolder(), OS_SDK_TOOLS_LIB_FOLDER + File.separator
+ + FN_PROJECT_PROGUARD_FILE);
+ if (!file.exists()) {
+ AdtPlugin.displayError("Tools Out of Date?",
+ String.format("It looks like you do not have the latest version of the "
+ + "SDK Tools installed. Make sure you update via the SDK Manager "
+ + "first. (Could not find %1$s)", file.getPath()));
+ return false;
+ }
+
+ NewProjectCreator creator = new NewProjectCreator(mValues, getContainer());
+ if (!(creator.createAndroidProjects())) {
+ return false;
+ }
+
+ // Open the default Java Perspective
+ OpenJavaPerspectiveAction action = new OpenJavaPerspectiveAction();
+ action.run();
+ return true;
+ }
+
+ @Override
+ public IWizardPage getNextPage(IWizardPage page) {
+ if (page == mNamePage) {
+ // Skip the test target selection page unless creating a test project
+ if (mValues.mode != Mode.TEST) {
+ return mSdkPage;
+ }
+ } else if (page == mSdkPage) {
+ if (mValues.mode == Mode.SAMPLE) {
+ return mSamplePage;
+ } else if (mValues.mode != Mode.TEST) {
+ return mPropertiesPage;
+ } else {
+ // Done with wizard when creating from existing or creating test projects
+ return null;
+ }
+ } else if (page == mSamplePage) {
+ // Nothing more to be entered for samples
+ return null;
+ }
+
+ return super.getNextPage(page);
+ }
+
+ /**
+ * Returns the package name currently set by the wizard
+ *
+ * @return the current package name, or null
+ */
+ public String getPackageName() {
+ return mValues.packageName;
+ }
+
+ // TBD: Call setDialogSettings etc to store persistent state between wizard invocations.
+}