From ae10212eb1cfe365a0a89d35ca720b52c4f961c5 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 11 Aug 2017 20:47:11 +0200 Subject: [PATCH] [platform] separate product edition attribute --- .../src/idea/IdeaApplicationInfo.xml | 2 +- .../build/ApplicationInfoProperties.groovy | 8 ++++++- .../impl/LinuxDistributionBuilder.groovy | 7 ++++--- .../application/ApplicationNamesInfo.java | 21 ++++++++++++++++++- .../com/intellij/ide/actions/AboutPopup.java | 9 ++++++-- .../ide/actions/CreateDesktopEntryAction.java | 6 ++---- .../src/com/intellij/ui/AppUIUtil.java | 5 +++-- .../src/idea/ApplicationInfo.xsd | 7 +++++++ .../idea/PyCharmEduApplicationInfo.xml | 2 +- .../idea/PyCharmCoreApplicationInfo.xml | 3 +-- 10 files changed, 53 insertions(+), 17 deletions(-) diff --git a/community-resources/src/idea/IdeaApplicationInfo.xml b/community-resources/src/idea/IdeaApplicationInfo.xml index 9341e4669861..c72056508335 100644 --- a/community-resources/src/idea/IdeaApplicationInfo.xml +++ b/community-resources/src/idea/IdeaApplicationInfo.xml @@ -8,7 +8,7 @@ - + diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/ApplicationInfoProperties.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/ApplicationInfoProperties.groovy index 46c4efaad909..958adb74c866 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/ApplicationInfoProperties.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/ApplicationInfoProperties.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -35,6 +35,7 @@ class ApplicationInfoProperties { */ final String minorVersionMainPart final String productName + final String edition final String companyName final String shortCompanyName final boolean isEAP @@ -49,6 +50,7 @@ class ApplicationInfoProperties { fullVersionFormat = root.version.first().@full ?: "{0}.{1}" shortProductName = root.names.first().@product productName = root.names.first().@fullname + edition = root.names.first().@edition companyName = root.company.first().@name minorVersionMainPart = minorVersion.takeWhile { it != '.' } isEAP = Boolean.parseBoolean(root.version.first().@eap) @@ -61,6 +63,10 @@ class ApplicationInfoProperties { MessageFormat.format(fullVersionFormat, majorVersion, minorVersion, microVersion, patchVersion) } + String getProductNameWithEdition() { + edition != null ? productName + ' ' + edition : productName + } + //copy of ApplicationInfoImpl.shortenCompanyName private static String shortenCompanyName(String name) { return StringUtil.trimEnd(StringUtil.trimEnd(name, " s.r.o."), " Inc."); diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.groovy index 543d7e6d21bc..dfbca71ac95f 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.groovy @@ -197,7 +197,7 @@ class LinuxDistributionBuilder extends OsSpecificDistributionBuilder { buildContext.messages.progress("Preparing files") def desktopTemplate = "${buildContext.paths.communityHome}/platform/platform-resources/src/entry.desktop" - def productName = buildContext.applicationInfo.productName + def productName = buildContext.applicationInfo.productNameWithEdition buildContext.ant.copy(file: desktopTemplate, tofile: "${snapDir}/snap/gui/${customizer.snapName}.desktop") { filterset(begintoken: '$', endtoken: '$') { filter(token: "NAME", value: productName) @@ -267,10 +267,11 @@ class LinuxDistributionBuilder extends OsSpecificDistributionBuilder { // keep in sync with AppUIUtil#getFrameClass private String getFrameClass() { - def name = buildContext.applicationInfo.productName + String name = buildContext.applicationInfo.productNameWithEdition .toLowerCase(Locale.US) .replace(' ', '-') - .replace("intellij-idea", "idea").replace("android-studio", "studio").replace("community-edition", "ce") + .replace("intellij-idea", "idea").replace("android-studio", "studio") + .replace("-community-edition", "-ce").replace("-ultimate-edition", "").replace("-professional-edition", "") "jetbrains-" + name } } \ No newline at end of file diff --git a/platform/core-api/src/com/intellij/openapi/application/ApplicationNamesInfo.java b/platform/core-api/src/com/intellij/openapi/application/ApplicationNamesInfo.java index ed2a87bbb188..fd653a995dc7 100644 --- a/platform/core-api/src/com/intellij/openapi/application/ApplicationNamesInfo.java +++ b/platform/core-api/src/com/intellij/openapi/application/ApplicationNamesInfo.java @@ -21,6 +21,7 @@ import com.intellij.util.PlatformUtils; import org.jdom.Document; import org.jdom.Element; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Locale; @@ -37,6 +38,7 @@ public class ApplicationNamesInfo { private final String myProductName; private final String myFullProductName; + private final String myEditionName; private final String myScriptName; private final String myDefaultLauncherName; @@ -58,6 +60,7 @@ public class ApplicationNamesInfo { Element names = rootElement.getChild("names", rootElement.getNamespace()); myProductName = names.getAttributeValue("product"); myFullProductName = names.getAttributeValue("fullname"); + myEditionName = names.getAttributeValue("edition"); myScriptName = names.getAttributeValue("script"); myDefaultLauncherName = names.getAttributeValue("default-launcher-name", myScriptName); } @@ -76,12 +79,28 @@ public class ApplicationNamesInfo { } /** - * Returns a product name without a vendor prefix ({@code "IntelliJ IDEA"} for IntelliJ IDEA, {@code "WebStorm"} for WebStorm, etc). + * Returns full product name ({@code "IntelliJ IDEA"} for IntelliJ IDEA, {@code "WebStorm"} for WebStorm, etc). + * Vendor prefix and edition are not included. */ public String getFullProductName() { return myFullProductName; } + /** + * Returns full product name with edition. Vendor prefix is not included. * See {@link #getFullProductName()}, {@link #getEditionName()}. + */ + public String getFullProductNameWithEdition() { + return myEditionName != null ? myFullProductName + ' ' + myEditionName : myFullProductName; + } + + /** + * Returns edition name of the product, if applicable + * (e.g. {@code "Ultimate Edition"} or {@code "Community Edition"} for IntelliJ IDEA, {@code null} for WebStorm). + */ + public @Nullable String getEditionName() { + return myEditionName; + } + /** * Returns a sentence-cased version of {@link #getProductName()} ({@code "Idea"} for IntelliJ IDEA, {@code "Webstorm"} for WebStorm, etc). * Kept for compatibility; use {@link #getFullProductName()} instead. diff --git a/platform/platform-impl/src/com/intellij/ide/actions/AboutPopup.java b/platform/platform-impl/src/com/intellij/ide/actions/AboutPopup.java index 37f58adb4127..095874c02f65 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/AboutPopup.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/AboutPopup.java @@ -23,6 +23,7 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CustomShortcutSet; import com.intellij.openapi.application.ApplicationInfo; +import com.intellij.openapi.application.ApplicationNamesInfo; import com.intellij.openapi.application.ex.ApplicationInfoEx; import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.ide.CopyPasteManager; @@ -147,11 +148,15 @@ public class AboutPopup { setOpaque(false); setBackground(myColor); setFocusable(true); - Calendar cal = appInfo.getBuildDate(); - myLines.add(new AboutBoxLine(appInfo.getFullApplicationName(), true, null)); + + String appName = appInfo.getFullApplicationName(); + String edition = ApplicationNamesInfo.getInstance().getEditionName(); + if (edition != null) appName += " (" + edition + ")"; + myLines.add(new AboutBoxLine(appName, true, null)); appendLast(); String buildInfo = IdeBundle.message("about.box.build.number", appInfo.getBuild().asString()); + Calendar cal = appInfo.getBuildDate(); String buildDate = ""; if (appInfo.getBuild().isSnapshot()) { buildDate = new SimpleDateFormat("HH:mm, ").format(cal.getTime()); diff --git a/platform/platform-impl/src/com/intellij/ide/actions/CreateDesktopEntryAction.java b/platform/platform-impl/src/com/intellij/ide/actions/CreateDesktopEntryAction.java index a81b0860f731..e90b75838eea 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/CreateDesktopEntryAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/CreateDesktopEntryAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -40,7 +40,6 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.AppUIUtil; import com.intellij.util.ExceptionUtil; -import com.intellij.util.PlatformUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -160,8 +159,7 @@ public class CreateDesktopEntryAction extends DumbAwareAction { throw new RuntimeException(ApplicationBundle.message("desktop.entry.script.missing", binPath)); } - String name = ApplicationNamesInfo.getInstance().getFullProductName(); - if (PlatformUtils.isIdeaCommunity()) name += " Community Edition"; + String name = ApplicationNamesInfo.getInstance().getFullProductNameWithEdition(); String wmClass = AppUIUtil.getFrameClass(); Map vars = newHashMap(pair("$NAME$", name), pair("$SCRIPT$", execPath), pair("$ICON$", iconPath), pair("$WM_CLASS$", wmClass)); String content = ExecUtil.loadTemplate(CreateDesktopEntryAction.class.getClassLoader(), "entry.desktop", vars); diff --git a/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java b/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java index d1ccd57a9dec..428b1bf3b831 100644 --- a/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java +++ b/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java @@ -146,10 +146,11 @@ public class AppUIUtil { // keep in sync with LinuxDistributionBuilder#getFrameClass public static String getFrameClass() { - String name = ApplicationNamesInfo.getInstance().getFullProductName() + String name = ApplicationNamesInfo.getInstance().getFullProductNameWithEdition() .toLowerCase(Locale.US) .replace(' ', '-') - .replace("intellij-idea", "idea").replace("android-studio", "studio").replace("community-edition", "ce"); // backward compatibility + .replace("intellij-idea", "idea").replace("android-studio", "studio") // backward compatibility + .replace("-community-edition", "-ce").replace("-ultimate-edition", "").replace("-professional-edition", ""); String wmClass = VENDOR_PREFIX + name; if (DEBUG_MODE) wmClass += "-debug"; return wmClass; diff --git a/platform/platform-resources/src/idea/ApplicationInfo.xsd b/platform/platform-resources/src/idea/ApplicationInfo.xsd index 054a031be985..5b875fef4afb 100644 --- a/platform/platform-resources/src/idea/ApplicationInfo.xsd +++ b/platform/platform-resources/src/idea/ApplicationInfo.xsd @@ -58,6 +58,13 @@ + + + + Edition of the product if applicable (e.g. "Community Edition", "Professional Edition" etc). + + + diff --git a/python/educational-python/resources/idea/PyCharmEduApplicationInfo.xml b/python/educational-python/resources/idea/PyCharmEduApplicationInfo.xml index 98e6a88c1114..ba4a7fcdfe71 100644 --- a/python/educational-python/resources/idea/PyCharmEduApplicationInfo.xml +++ b/python/educational-python/resources/idea/PyCharmEduApplicationInfo.xml @@ -9,7 +9,7 @@ copyrightForeground="858585" linkColor="589df6"/> - + diff --git a/python/python-community-ide-resources/resources/idea/PyCharmCoreApplicationInfo.xml b/python/python-community-ide-resources/resources/idea/PyCharmCoreApplicationInfo.xml index 7184297f721c..eddb870a2712 100644 --- a/python/python-community-ide-resources/resources/idea/PyCharmCoreApplicationInfo.xml +++ b/python/python-community-ide-resources/resources/idea/PyCharmCoreApplicationInfo.xml @@ -9,7 +9,7 @@ copyrightForeground="313131" linkColor="1f29b2"/> - + @@ -19,7 +19,6 @@ -