package org.jetbrains.android.newProject; import com.intellij.execution.RunManager; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.ide.util.projectWizard.SettingsStep; import com.intellij.openapi.module.Module; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.android.facet.AndroidFacet; import org.jetbrains.android.facet.AndroidRootUtil; import org.jetbrains.android.run.AndroidRunConfiguration; import org.jetbrains.android.run.AndroidRunConfigurationType; import org.jetbrains.android.run.TargetSelectionMode; import org.jetbrains.android.util.AndroidBundle; import org.jetbrains.annotations.NotNull; import java.util.List; /** * @author Eugene.Kudelevsky */ class AndroidTestModifiedSettingsStep extends AndroidModifiedSettingsStep { private final AndroidModulesComboBox myModulesCombo; private final Project myProject; public AndroidTestModifiedSettingsStep(@NotNull AndroidModuleBuilder builder, @NotNull SettingsStep settingsStep) { super(builder, settingsStep); myModulesCombo = new AndroidModulesComboBox(); myProject = settingsStep.getContext().getProject(); assert myProject != null : "test module can't be created as first module"; myModulesCombo.init(myProject); settingsStep.addSettingsField("\u001BTested module: ", myModulesCombo); } @Override public void updateDataModel() { super.updateDataModel(); final Module testedModule = myModulesCombo.getModule(); myBuilder.setTestedModule(testedModule); myBuilder.setTargetSelectionMode(chooseTargetSelectionMode(testedModule)); } @NotNull private TargetSelectionMode chooseTargetSelectionMode(@NotNull Module testedModule) { final List<RunConfiguration> androidConfigurations = RunManager.getInstance(myProject).getConfigurationsList(AndroidRunConfigurationType.getInstance()); for (RunConfiguration configuration : androidConfigurations) { final AndroidRunConfiguration cfg = (AndroidRunConfiguration)configuration; final Module module = cfg.getConfigurationModule().getModule(); if (testedModule.equals(module)) { return cfg.getTargetSelectionMode(); } } return TargetSelectionMode.EMULATOR; } @Override public boolean validate() throws ConfigurationException { if (!super.validate()) return false; final Module module = myModulesCombo.getModule(); if (module == null) { throw new ConfigurationException(AndroidBundle.message("android.wizard.specify.tested.module.error")); } final AndroidFacet facet = AndroidFacet.getInstance(module); if (facet == null) { throw new ConfigurationException(AndroidBundle.message("android.wizard.tested.module.without.facet.error")); } String moduleDirPath = AndroidRootUtil.getModuleDirPath(module); if (moduleDirPath == null) { throw new ConfigurationException(AndroidBundle.message("android.wizard.cannot.find.module.parent.dir.error", module.getName())); } final VirtualFile mainContentRoot = AndroidRootUtil.getMainContentRoot(facet); if (mainContentRoot == null) { throw new ConfigurationException(AndroidBundle.message("android.wizard.cannot.find.main.content.root.error", module.getName())); } return true; } }