blob: 5b650f0426e54ac85e1611f066386092f46064ce [file] [log] [blame]
package com.android.tools.idea.npw;
import com.android.tools.idea.sdk.IdeSdks;
import com.intellij.CommonBundle;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SdkTypeId;
import com.intellij.openapi.roots.ui.configuration.JdkComboBox;
import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.TextBrowseFolderListener;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.io.FileUtil;
import org.jetbrains.android.actions.RunAndroidSdkManagerAction;
import org.jetbrains.android.sdk.AndroidSdkData;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.io.File;
/**
* @author Eugene.Kudelevsky
*/
public class ChooseAndroidAndJavaSdkStep extends ModuleWizardStep {
private JdkComboBox myJavaSdkCombo;
private TextFieldWithBrowseButton myAndroidSdkLocationField;
private JPanel myPanel;
private JButton myNewButton;
private ProjectSdksModel mySdksModel;
public ChooseAndroidAndJavaSdkStep() {
myAndroidSdkLocationField.addBrowseFolderListener(new TextBrowseFolderListener(
new FileChooserDescriptor(false, true, false, false, false, false)));
myJavaSdkCombo.setSetupButton(myNewButton, null, mySdksModel, new JdkComboBox.NoneJdkComboBoxItem(), null, false);
}
@Nullable
private String getAndroidSdkLocation() {
return myAndroidSdkLocationField.getText().trim();
}
@Override
public JComponent getComponent() {
return myPanel;
}
@Override
public void updateDataModel() {
final String location = getAndroidSdkLocation();
if (location != null) {
final Sdk javaSdk = myJavaSdkCombo.getSelectedJdk();
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
IdeSdks.setAndroidSdkPath(new File(location), javaSdk, null);
}
});
}
}
@Override
public boolean validate() throws ConfigurationException {
if (myJavaSdkCombo.getSelectedJdk() == null) {
throw new ConfigurationException("Specify Java SDK");
}
mySdksModel.apply(null, true);
final String location = getAndroidSdkLocation();
if (location != null) {
if (location.length() == 0) {
throw new ConfigurationException("Specify Android SDK location");
}
final File fileLocation = new File(FileUtil.toSystemIndependentName(location));
if (!fileLocation.isDirectory()) {
throw new ConfigurationException(location + " is not directory");
}
final AndroidSdkData sdkData = AndroidSdkData.getSdkData(fileLocation, true);
if (sdkData == null) {
throw new ConfigurationException("Invalid Android SDK");
}
if (ConfigureAndroidModuleStep.getCompilationTargets(sdkData).length == 0) {
final int result = Messages.showOkCancelDialog(
myPanel, "This Android SDK doesn't contain any platform targets installed.\n" +
"Please launch SDK manager to install the platforms.", CommonBundle.getErrorTitle(),
"Launch SDK manager", Messages.CANCEL_BUTTON, Messages.getErrorIcon());
if (result == Messages.OK) {
RunAndroidSdkManagerAction.runSpecificSdkManager(null, fileLocation);
}
return false;
}
}
return true;
}
@Override
public boolean isStepVisible() {
return IdeSdks.getJdk() == null || IdeSdks.getAndroidSdkPath() == null;
}
private void createUIComponents() {
mySdksModel = new ProjectSdksModel();
mySdksModel.reset(null);
myJavaSdkCombo = new JdkComboBox(mySdksModel, new Condition<SdkTypeId>() {
@Override
public boolean value(SdkTypeId id) {
return JavaSdk.getInstance().equals(id);
}
});
}
}