/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.sdk; 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 com.intellij.openapi.util.Comparing; import gw.lang.GosuVersion; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; public class GosuSdkConfigurableForm { @NotNull private final DefaultComboBoxModel _jdksModel; @NotNull private final SdkModel _sdkModel; private JTextField _editCurrentJdk; private JTextField _fieldGosuVersion; private Sdk _sdk; public GosuSdkConfigurableForm(@NotNull SdkModel sdkModel, @NotNull final SdkModificator sdkModificator) { _sdkModel = sdkModel; _jdksModel = new DefaultComboBoxModel(); } @NotNull public JPanel getContentPanel() { JPanel panel = new JPanel( new GridBagLayout() ); //panel.setBorder( BorderFactory.createEmptyBorder( 8, 8, 8, 8 ) ); GridBagConstraints c = new GridBagConstraints(); int iY = 0; JLabel labelGosuVersion = new JLabel( "Gosu Version:" ); _fieldGosuVersion = new JTextField(); _fieldGosuVersion.setEditable(false); JLabel labelCurrentJDK = new JLabel( "JDK Used:" ); _editCurrentJdk = new JTextField(); c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.NONE; c.gridx = 0; c.gridy = iY; c.gridwidth = 1; c.gridheight = 1; c.weightx = 0; c.weighty = 0; c.insets = new Insets( 2, 2, 2, 2 ); panel.add( labelGosuVersion, c ); c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.HORIZONTAL; c.gridx = 1; c.gridy = iY++; c.gridwidth = GridBagConstraints.REMAINDER; c.gridheight = 1; c.weightx = 1; c.weighty = 1; c.insets = new Insets( 2, 2, 2, 2 ); panel.add( _fieldGosuVersion, c ); c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.NONE; c.gridx = 0; c.gridy = iY; c.gridwidth = 1; c.gridheight = 1; c.weightx = 0; c.weighty = 0; c.insets = new Insets( 2, 2, 2, 2 ); panel.add( labelCurrentJDK, c ); c.anchor = GridBagConstraints.WEST; c.fill = GridBagConstraints.HORIZONTAL; c.gridx = 1; c.gridy = iY++; c.gridwidth = GridBagConstraints.REMAINDER; c.gridheight = 1; c.weightx = 1; c.weighty = 0; c.insets = new Insets( 2, 2, 2, 2 ); panel.add( _editCurrentJdk, c ); return panel; } @Nullable public Sdk getSelectedSdk() { // return (Sdk) myInternalJdkComboBox.getSelectedItem(); return _sdk; } public GosuVersion getGosuVersion() { return GosuVersion.parse( _fieldGosuVersion.getText() ); } public void init(@NotNull Sdk jdk, @Nullable Sdk androidSdk) { updateJdks(); // if (androidSdk != null) { // for (int i = 0; i < myJdksModel.getSize(); i++) { // if (Comparing.strEqual(((Sdk) myJdksModel.getElementAt(i)).getName(), jdk.getName())) { // myInternalJdkComboBox.setSelectedIndex(i); // break; // } // } // } String strSdkLocation = androidSdk != null ? androidSdk.getHomePath() : null; this._sdk = jdk; _editCurrentJdk.setText(jdk.getName() + " (" + jdk.getHomePath() + ")"); SdkAdditionalData sdkAdditionalData = androidSdk == null ? null : androidSdk.getSdkAdditionalData(); if (sdkAdditionalData instanceof GosuSdkAdditionalData) { GosuSdkAdditionalData gosuSdkData = (GosuSdkAdditionalData) sdkAdditionalData; GosuVersion version = gosuSdkData.getGosuVersion(); _fieldGosuVersion.setText(version != null ? version.toString() : ""); } // updateBuildTargets(androidSdkObject); // if (buildTarget != null) { // for (int i = 0; i < myBuildTargetsModel.getSize(); i++) { // IGosuTarget target = (IGosuTarget) myBuildTargetsModel.getElementAt(i); // if (buildTarget.hashString().equals(target.hashString())) { // myBuildTargetComboBox.setSelectedIndex(i); // break; // } // } // } } private void updateJdks() { _jdksModel.removeAllElements(); for (Sdk sdk : _sdkModel.getSdks()) { if (GosuSdkUtils.isApplicableJdk(sdk)) { _jdksModel.addElement(sdk); } } } public void addJavaSdk(Sdk sdk) { _jdksModel.addElement(sdk); } public void removeJavaSdk(Sdk sdk) { _jdksModel.removeElement(sdk); } public void updateJdks(Sdk sdk, String previousName) { final Sdk[] sdks = _sdkModel.getSdks(); for (Sdk currentSdk : sdks) { if (currentSdk.getSdkType().equals(GosuSdkType.getInstance())) { final GosuSdkAdditionalData data = (GosuSdkAdditionalData) currentSdk.getSdkAdditionalData(); final Sdk internalJava = data != null ? data.getJavaSdk() : null; if (internalJava != null && Comparing.equal(internalJava.getName(), previousName)) { data.setJavaSdk(sdk); } } } updateJdks(); } public void internalJdkUpdate(@NotNull final Sdk sdk) { GosuSdkAdditionalData data = (GosuSdkAdditionalData) sdk.getSdkAdditionalData(); if (data == null) return; final Sdk javaSdk = data.getJavaSdk(); if ( _jdksModel.getIndexOf(javaSdk) == -1) { _jdksModel.addElement(javaSdk); } else { _jdksModel.setSelectedItem(javaSdk); } } }