/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.sdk;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SdkAdditionalData;
import gw.lang.GosuVersion;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class GosuSdkAdditionalData implements SdkAdditionalData {
private static final String JDK = "jdk";
private static final String GOSU_VERSION = "gosuVersion";
private String _javaSdkName;
private Sdk _javaSdk;
private final GosuVersion _gosuVersion;
public GosuSdkAdditionalData(Sdk javaSdk, GosuVersion gosuVersion) {
_javaSdk = javaSdk;
_gosuVersion = gosuVersion;
}
public GosuSdkAdditionalData(@NotNull Element element) {
_javaSdkName = element.getAttributeValue(JDK);
String versionAttr = element.getAttributeValue(GOSU_VERSION);
_gosuVersion = versionAttr != null && versionAttr.length() > 0 ? GosuVersion.parse(versionAttr) : null;
}
@NotNull
public Object clone() throws CloneNotSupportedException {
GosuSdkAdditionalData data = (GosuSdkAdditionalData) super.clone();
return data;
}
@Nullable
public Sdk getJavaSdk() {
final ProjectJdkTable table = ProjectJdkTable.getInstance();
if (_javaSdk == null) {
if (_javaSdkName != null) {
_javaSdk = table.findJdk(_javaSdkName);
_javaSdkName = null;
} else {
for (Sdk jdk : table.getAllJdks()) {
if (GosuSdkUtils.isApplicableJdk(jdk)) {
_javaSdk = jdk;
break;
}
}
}
}
return _javaSdk;
}
public void setJavaSdk(final Sdk javaSdk) {
_javaSdk = javaSdk;
}
public void save(@NotNull Element element) {
final Sdk sdk = getJavaSdk();
if (sdk != null) {
element.setAttribute(JDK, sdk.getName());
}
if (_gosuVersion != null) {
element.setAttribute(GOSU_VERSION, _gosuVersion.toString());
}
}
public GosuVersion getGosuVersion() {
return _gosuVersion;
}
public String getVersion() {
return _gosuVersion == null ? null : _gosuVersion.toString() + " (" + (_javaSdk == null ? "" : _javaSdk.getVersionString()) + ")";
}
}