/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.sdk; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.projectRoots.AdditionalDataConfigurable; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SdkAdditionalData; import com.intellij.openapi.projectRoots.SdkModel; import com.intellij.openapi.projectRoots.SdkModificator; import gw.plugin.ij.util.ExceptionUtil; import gw.plugin.ij.util.GosuBundle; import org.jetbrains.annotations.NotNull; import javax.swing.*; public class GosuSdkConfigurable implements AdditionalDataConfigurable { @NotNull private final GosuSdkConfigurableForm myForm; private Sdk mySdk; public GosuSdkConfigurable(@NotNull SdkModel sdkModel, @NotNull SdkModificator sdkModificator) { myForm = new GosuSdkConfigurableForm(sdkModel, sdkModificator); } @Override public void setSdk(Sdk sdk) { mySdk = sdk; } @Override public JComponent createComponent() { try { return myForm.getContentPanel(); } catch (IllegalStateException ex) { ExceptionUtil.showError(GosuBundle.message("error.ui_designed_missing"), ex); throw new IllegalStateException(GosuBundle.message("error.ui_designed_missing"), ex); } } @Override public boolean isModified() { final GosuSdkAdditionalData data = (GosuSdkAdditionalData) mySdk.getSdkAdditionalData(); Sdk javaSdk = data != null ? data.getJavaSdk() : null; return javaSdk != myForm.getSelectedSdk(); } @Override public void apply() throws ConfigurationException { GosuSdkAdditionalData oldData = (GosuSdkAdditionalData) mySdk.getSdkAdditionalData(); GosuSdkAdditionalData newData = new GosuSdkAdditionalData(myForm.getSelectedSdk(), myForm.getGosuVersion()); final SdkModificator modificator = mySdk.getSdkModificator(); modificator.setSdkAdditionalData(newData); ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { modificator.commitChanges(); } }); } @Override public void reset() { if (mySdk == null) { return; } SdkAdditionalData sdkData = mySdk.getSdkAdditionalData(); if (!(sdkData instanceof GosuSdkAdditionalData)) { return; } final GosuSdkAdditionalData gosuData = (GosuSdkAdditionalData) sdkData; myForm.init(gosuData.getJavaSdk(), mySdk); } @Override public void disposeUIResources() { } public void addJavaSdk(Sdk sdk) { myForm.addJavaSdk(sdk); } public void removeJavaSdk(Sdk sdk) { myForm.removeJavaSdk(sdk); } public void updateJavaSdkList(Sdk sdk, String previousName) { myForm.updateJdks(sdk, previousName); } public void internalJdkUpdate(Sdk sdk) { myForm.internalJdkUpdate(sdk); } }