IGNITE-11760 Escaping Suite name if contains vertical line
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java
index 9c1165d..82ef057 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java
@@ -53,7 +53,7 @@
     /** Server id. */
     public final String srvId;
 
-    /** Build type id. */
+    /** Build type id, for which build/observation/visa was ordered. */
     public String buildTypeId;
 
     /** Branch name. */
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessor.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessor.java
index 51f5266..bae99e1 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessor.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessor.java
@@ -171,7 +171,7 @@
     }
 
     /**
-     * @param buildTypeId Suite name.
+     * @param buildTypeId  Build type ID, for which visa was ordered.
      * @param branchForTc Branch for TeamCity.
      * @param srvId Server id.
      * @param prov Credentials.
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
index 1a5215f..2051015 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
@@ -725,7 +725,7 @@
      *
      * @param srvId TC Server ID to take information about token from.
      * @param prov Credentials.
-     * @param buildTypeId Suite name.
+     * @param buildTypeId Build type ID, for which visa was ordered.
      * @param branchForTc Branch for TeamCity.
      * @param ticket JIRA ticket full name. E.g. IGNITE-5555
      * @return {@link Visa} instance.
@@ -791,18 +791,20 @@
     /**
      * @param suites Suite Current Status.
      * @param webUrl Build URL.
+     * @param buildTypeId Build type ID, for which visa was ordered.
+     * @param tcIgnited TC service.
      * @return Comment, which should be sent to the JIRA ticket.
      */
     private String generateJiraComment(List<SuiteCurrentStatus> suites, String webUrl, String buildTypeId,
         ITeamcityIgnited tcIgnited) {
         BuildTypeRefCompacted bt = tcIgnited.getBuildTypeRef(buildTypeId);
 
-        String suiteName = (bt != null ? bt.name(compactor) : buildTypeId);
+        String suiteNameUsedForVisa = (bt != null ? bt.name(compactor) : buildTypeId);
 
         StringBuilder res = new StringBuilder();
 
         for (SuiteCurrentStatus suite : suites) {
-            res.append("{color:#d04437}").append(suite.name).append("{color}");
+            res.append("{color:#d04437}").append(jiraEscText(suite.name)).append("{color}");
             res.append(" [[tests ").append(suite.failedTests);
 
             if (suite.result != null && !suite.result.isEmpty())
@@ -814,9 +816,9 @@
                 res.append("* ");
 
                 if (failure.suiteName != null && failure.testName != null)
-                    res.append(failure.suiteName).append(": ").append(failure.testName);
+                    res.append(failure.suiteName).append(": ").append(jiraEscText(failure.testName));
                 else
-                    res.append(failure.name);
+                    res.append(jiraEscText(failure.name));
 
                 FailureSummary recent = failure.histBaseBranch.recent;
 
@@ -838,17 +840,28 @@
         }
 
         if (res.length() > 0) {
-            res.insert(0, "{panel:title=" + suiteName + ": Possible Blockers|" +
+            res.insert(0, "{panel:title=" + jiraEscText(suiteNameUsedForVisa) + ": Possible Blockers|" +
                 "borderStyle=dashed|borderColor=#ccc|titleBGColor=#F7D6C1}\\n")
                 .append("{panel}");
         }
         else {
-            res.append("{panel:title=").append(suiteName).append(": No blockers found!|")
+            res.append("{panel:title=").append(jiraEscText(suiteNameUsedForVisa)).append(": No blockers found!|")
                 .append("borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}{panel}");
         }
 
-        res.append("\\n").append("[TeamCity *").append(suiteName).append("* Results|").append(webUrl).append(']');
+        res.append("\\n").append("[TeamCity *").append(jiraEscText(suiteNameUsedForVisa)).append("* Results|").append(webUrl).append(']');
 
         return xmlEscapeText(res.toString());
     }
+
+    /**
+     * Escapes text for JIRA.
+     * @param txt Txt.
+     */
+    private String jiraEscText(String txt) {
+        if(Strings.isNullOrEmpty(txt))
+            return "";
+
+        return txt.replaceAll("\\|", "/");
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/VisaStatus.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/VisaStatus.java
index 5a3cb2d..7347894 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/VisaStatus.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/VisaStatus.java
@@ -44,7 +44,7 @@
     /** */
     @Nullable public String cancelUrl;
 
-    /** */
+    /** Build type ID, for which visa was ordered. */
     @Nullable public String buildTypeId;
 
     /** */
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
index 77301e0..ae43d4a 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
@@ -145,7 +145,7 @@
     /**
      * Returns IDs of N. most recent builds in build history.
      *
-     * @param btId Bt id.
+     * @param btId Build type ID.
      * @param branchForTc Branch for tc.
      * @param cnt Count.
      */