package com.intellij.lang.javascript.flex.sdk; import com.intellij.lang.javascript.flex.FlexBundle; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.projectRoots.*; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import icons.FlexIcons; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import javax.swing.*; public class FlexmojosSdkType extends SdkType { static final String COMPILER_POM_PATTERN_1 = ".+/com/adobe/flex/compiler/.+/compiler-.+\\.pom"; static final String COMPILER_POM_PATTERN_2 = ".+/org/apache/flex/compiler/.+/compiler-.+\\.pom"; public FlexmojosSdkType() { super("Flexmojos SDK Type"); } public static FlexmojosSdkType getInstance() { return SdkType.findInstance(FlexmojosSdkType.class); } public String suggestHomePath() { return null; } public boolean isValidSdkHome(final String _path) { final String path = FileUtil.toSystemIndependentName(_path); return path.matches(COMPILER_POM_PATTERN_1) || path.matches(COMPILER_POM_PATTERN_2); } @NotNull public FileChooserDescriptor getHomeChooserDescriptor() { final FileChooserDescriptor descriptor = new FileChooserDescriptor(false, false, false, false, false, false) { public boolean isFileVisible(final VirtualFile file, final boolean showHiddenFiles) { return false; } }; descriptor.setTitle("SDK of this type can only be created automatically during Maven project import."); return descriptor; } public String suggestSdkName(final String currentSdkName, final String sdkHome) { return "Flexmojos SDK " + getVersionString(sdkHome); } public AdditionalDataConfigurable createAdditionalDataConfigurable(@NotNull final SdkModel sdkModel, @NotNull final SdkModificator sdkModificator) { return new FlexmojosSdkDataConfigurable(); } public SdkAdditionalData loadAdditionalData(final Element element) { final FlexmojosSdkAdditionalData additionalData = new FlexmojosSdkAdditionalData(); additionalData.load(element); return additionalData; } public void saveAdditionalData(@NotNull final SdkAdditionalData additionalData, @NotNull final Element element) { ((FlexmojosSdkAdditionalData)additionalData).save(element); } @NotNull public String getPresentableName() { return "Flexmojos SDK"; } @NotNull public String getHomeFieldLabel() { return "Flex Compiler POM:"; } public boolean isRootTypeApplicable(@NotNull final OrderRootType type) { return false; } public Icon getIcon() { return FlexIcons.Flex.Sdk.MavenFlex; } @NotNull @Override public String getHelpTopic() { return "reference.project.structure.sdk.flexmojos"; } @NotNull public Icon getIconForAddAction() { return getIcon(); } public void setupSdkPaths(@NotNull final Sdk sdk) { final VirtualFile sdkRoot = sdk.getHomeDirectory(); if (sdkRoot == null || !sdkRoot.isValid() || sdkRoot.isDirectory()) { return; } final SdkModificator modificator = sdk.getSdkModificator(); modificator.setVersionString(getVersionString(sdkRoot.getPath())); FlexmojosSdkAdditionalData data = (FlexmojosSdkAdditionalData)sdk.getSdkAdditionalData(); if (data == null) { data = new FlexmojosSdkAdditionalData(); modificator.setSdkAdditionalData(data); } data.setup(sdkRoot); modificator.commitChanges(); } public String getVersionString(final String sdkHome) { // C:/Users/xxx/.m2/repository/com/adobe/flex/compiler/4.10.0-SNAPSHOT/compiler-4.10.0-SNAPSHOT.pom final int index1 = sdkHome.lastIndexOf("compiler-"); return index1 > 0 && sdkHome.endsWith(".pom") ? sdkHome.substring(index1 + "compiler-".length(), sdkHome.length() - ".pom".length()) : FlexBundle.message("flex.sdk.version.unknown"); } }