cleanup: remove useless '@author nik' from javadoc comments
[idea/community.git] / platform / build-scripts / groovy / org / jetbrains / intellij / build / ApplicationInfoProperties.groovy
1 /*
2  * Copyright 2000-2017 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.jetbrains.intellij.build
17
18 import com.intellij.openapi.util.text.StringUtil
19
20 import java.text.MessageFormat
21
22 class ApplicationInfoProperties {
23   final String majorVersion
24   final String minorVersion
25   final String microVersion
26   final String patchVersion
27   final String fullVersionFormat
28   final String versionSuffix
29   final String shortProductName
30   /**
31    * The first number from 'minor' part of the version. This property is temporary added because some products specify composite number (like '1.3')
32    * in 'minor version' attribute instead of using 'micro version' (i.e. set minor='1' micro='3').
33    */
34   final String minorVersionMainPart
35   String productCode
36   final String productName
37   final String edition
38   final String motto
39   final String companyName
40   final String shortCompanyName
41   final String svgRelativePath
42   final boolean isEAP
43   final List<String> svgProductIcons
44
45   @SuppressWarnings(["GrUnresolvedAccess", "GroovyAssignabilityCheck"])
46   ApplicationInfoProperties(String appInfoXmlPath) {
47     def root = new XmlParser().parse(new File(appInfoXmlPath))
48     def versionTag = root.version.first()
49     majorVersion = versionTag.@major
50     minorVersion = versionTag.@minor ?: "0"
51     microVersion = versionTag.@micro ?: "0"
52     patchVersion = versionTag.@patch ?: "0"
53     fullVersionFormat = versionTag.@full ?: "{0}.{1}"
54     isEAP = Boolean.parseBoolean(versionTag.@eap)
55     versionSuffix = versionTag.@suffix ?: isEAP ? "EAP" : null
56
57     shortProductName = root.names.first().@product
58     String buildNumber = root.build.first().@number
59     int productCodeSeparator = buildNumber.indexOf('-')
60     if (productCodeSeparator != -1) {
61       productCode = buildNumber.substring(0, productCodeSeparator)
62     }
63     productName = root.names.first().@fullname ?: shortProductName
64     edition = root.names.first().@edition
65     motto = root.names.first().@motto
66     companyName = root.company.first().@name
67     minorVersionMainPart = minorVersion.takeWhile { it != '.' }
68     shortCompanyName = root.company.first().@shortName ?: shortenCompanyName(companyName)
69     def svgPath = root.icon.first().@svg
70     svgRelativePath = isEAP && !root."icon-eap".isEmpty() ? (root."icon-eap".first().@svg ?: svgPath) : svgPath
71
72     svgProductIcons = (root.icon + root."icon-eap").collectMany { [it?.@"svg", it?.@"svg-small"] }.findAll { it != null }
73   }
74
75   String getUpperCaseProductName() { shortProductName.toUpperCase() }
76
77   String getFullVersion() {
78     MessageFormat.format(fullVersionFormat, majorVersion, minorVersion, microVersion, patchVersion)
79   }
80
81   String getProductNameWithEdition() {
82     edition != null ? productName + ' ' + edition : productName
83   }
84
85   //copy of ApplicationInfoImpl.shortenCompanyName
86   private static String shortenCompanyName(String name) {
87     return StringUtil.trimEnd(StringUtil.trimEnd(name, " s.r.o."), " Inc.")
88   }
89 }