| /* |
| * Copyright 2000-2012 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 |
| * |
| * 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 org.jetbrains.android.sdk; |
| |
| import com.android.sdklib.IAndroidTarget; |
| import com.android.tools.idea.sdk.Jdks; |
| import com.intellij.openapi.options.ConfigurationException; |
| import com.intellij.openapi.projectRoots.ProjectJdkTable; |
| import com.intellij.openapi.projectRoots.Sdk; |
| import com.intellij.openapi.projectRoots.SdkModel; |
| import com.intellij.openapi.projectRoots.ValidatableSdkAdditionalData; |
| import org.jdom.Element; |
| import org.jetbrains.android.util.AndroidBundle; |
| import org.jetbrains.annotations.NonNls; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| /** |
| * @author Eugene.Kudelevsky |
| */ |
| public class AndroidSdkAdditionalData implements ValidatableSdkAdditionalData { |
| |
| @NonNls private static final String JDK = "jdk"; |
| @NonNls private static final String BUILD_TARGET = "sdk"; |
| |
| private String myJavaSdkName; |
| private final Sdk myAndroidSdk; |
| private Sdk myJavaSdk; |
| |
| // hash string |
| private String myBuildTarget; |
| |
| private AndroidPlatform myAndroidPlatform = null; |
| |
| public AndroidSdkAdditionalData(@NotNull Sdk androidSdk, @Nullable Sdk javaSdk) { |
| myJavaSdk = javaSdk; |
| myAndroidSdk = androidSdk; |
| } |
| |
| public AndroidSdkAdditionalData(@NotNull Sdk androidSdk, @NotNull Element element) { |
| myAndroidSdk = androidSdk; |
| myJavaSdkName = element.getAttributeValue(JDK); |
| myBuildTarget = element.getAttributeValue(BUILD_TARGET); |
| } |
| |
| public AndroidSdkAdditionalData(Sdk androidSdk) { |
| myAndroidSdk = androidSdk; |
| } |
| |
| @Override |
| public void checkValid(SdkModel sdkModel) throws ConfigurationException { |
| if (getJavaSdk() == null) { |
| throw new ConfigurationException(AndroidBundle.message("android.sdk.configure.jdk.error")); |
| } |
| } |
| |
| @Override |
| public Object clone() throws CloneNotSupportedException { |
| AndroidSdkAdditionalData data = (AndroidSdkAdditionalData)super.clone(); |
| Sdk jdk = getJavaSdk(); |
| assert jdk != null; |
| data.setJavaSdk(jdk); |
| data.myBuildTarget = myBuildTarget; |
| return data; |
| } |
| |
| @Nullable |
| public Sdk getJavaSdk() { |
| final ProjectJdkTable jdkTable = ProjectJdkTable.getInstance(); |
| if (myJavaSdk == null) { |
| if (myJavaSdkName != null) { |
| myJavaSdk = jdkTable.findJdk(myJavaSdkName); |
| myJavaSdkName = null; |
| } |
| else { |
| for (Sdk jdk : jdkTable.getAllJdks()) { |
| if (Jdks.isApplicableJdk(jdk)) { |
| myJavaSdk = jdk; |
| break; |
| } |
| } |
| } |
| } |
| return myJavaSdk; |
| } |
| |
| public void setJavaSdk(final Sdk javaSdk) { |
| myJavaSdk = javaSdk; |
| } |
| |
| public void setBuildTargetHashString(String targetHashString) { |
| myBuildTarget = targetHashString; |
| myAndroidPlatform = null; |
| } |
| |
| public void setBuildTarget(IAndroidTarget target) { |
| myBuildTarget = target != null ? target.hashString() : null; |
| myAndroidPlatform = null; |
| } |
| |
| public void save(Element element) { |
| final Sdk sdk = getJavaSdk(); |
| if (sdk != null) { |
| element.setAttribute(JDK, sdk.getName()); |
| } |
| if (myBuildTarget != null) { |
| element.setAttribute(BUILD_TARGET, myBuildTarget); |
| } |
| } |
| |
| @Nullable |
| public IAndroidTarget getBuildTarget(@NotNull AndroidSdkData sdkData) { |
| return myBuildTarget != null ? sdkData.findTargetByHashString(myBuildTarget) : null; |
| } |
| |
| @Nullable |
| public String getBuildTargetHashString() { |
| return myBuildTarget; |
| } |
| |
| @Nullable |
| public AndroidPlatform getAndroidPlatform() { |
| if (myAndroidPlatform == null) { |
| myAndroidPlatform = AndroidPlatform.parse(myAndroidSdk); |
| } |
| return myAndroidPlatform; |
| } |
| |
| public void clearAndroidPlatform() { |
| myAndroidPlatform = null; |
| } |
| } |