diff options
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.java | 181 |
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. +} |