diff --git a/plugins/tasks/tasks-core/jira/src/com/intellij/tasks/jira/JiraRepository.java b/plugins/tasks/tasks-core/jira/src/com/intellij/tasks/jira/JiraRepository.java index 6d9f7a344abc..e8e3f63f6fd7 100644 --- a/plugins/tasks/tasks-core/jira/src/com/intellij/tasks/jira/JiraRepository.java +++ b/plugins/tasks/tasks-core/jira/src/com/intellij/tasks/jira/JiraRepository.java @@ -16,6 +16,7 @@ package com.intellij.tasks.jira; import com.google.gson.Gson; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Comparing; @@ -206,12 +207,10 @@ public class JiraRepository extends BaseRepositoryImpl { // when JIRA 4.x support will be dropped 'versionNumber' array in response // may be used instead version string parsing myJiraVersion = serverInfo.get("version").getAsString(); - final boolean hostedInCloud = hostEndsWith(serverInfo.get("baseUrl").getAsString(), "atlassian.net"); - // Legacy JIRA onDemand versions contained "OD" abbreviation - myInCloud = StringUtil.notNullize(myJiraVersion).contains("OD") || hostedInCloud; - LOG.info("JIRA version (from serverInfo): " + myJiraVersion + (myInCloud ? " (Cloud)" : "")); + myInCloud = isHostedInCloud(serverInfo); + LOG.info("JIRA version (from serverInfo): " + getPresentableVersion()); if (isInCloud()) { - LOG.info("Connecting to JIRA on-Demand. Cookie authentication is enabled unless 'tasks.jira.basic.auth.only' VM flag is used."); + LOG.info("Connecting to JIRA Cloud. Cookie authentication is enabled unless 'tasks.jira.basic.auth.only' VM flag is used."); } JiraRestApi restApi = JiraRestApi.fromJiraVersion(myJiraVersion, this); if (restApi == null) { @@ -220,6 +219,20 @@ public class JiraRepository extends BaseRepositoryImpl { return restApi; } + private static boolean isHostedInCloud(@NotNull JsonObject serverInfo) { + final JsonElement deploymentType = serverInfo.get("deploymentType"); + if (deploymentType != null) { + return deploymentType.getAsString().equals("Cloud"); + } + // Legacy heuristics + final boolean atlassianSubDomain = hostEndsWith(serverInfo.get("baseUrl").getAsString(), ".atlassian.net"); + if (atlassianSubDomain) { + return true; + } + // JIRA OnDemand versions contained "OD" abbreviation + return serverInfo.get("version").getAsString().contains("OD") ; + } + private static boolean hostEndsWith(@NotNull String url, @NotNull String suffix) { try { final URL parsed = new URL(url); @@ -321,6 +334,11 @@ public class JiraRepository extends BaseRepositoryImpl { myInCloud = inCloud; } + @NotNull + String getPresentableVersion() { + return StringUtil.notNullize(myJiraVersion, "unknown") + (myInCloud ? " (Cloud)" : ""); + } + private static boolean containsCookie(@NotNull HttpClient client, @NotNull String cookieName) { for (Cookie cookie : client.getState().getCookies()) { if (cookie.getName().equals(cookieName) && !cookie.isExpired()) { diff --git a/plugins/tasks/tasks-core/jira/src/com/intellij/tasks/jira/JiraRepositoryEditor.java b/plugins/tasks/tasks-core/jira/src/com/intellij/tasks/jira/JiraRepositoryEditor.java index a8ed1f880bf7..a4da6fb53742 100644 --- a/plugins/tasks/tasks-core/jira/src/com/intellij/tasks/jira/JiraRepositoryEditor.java +++ b/plugins/tasks/tasks-core/jira/src/com/intellij/tasks/jira/JiraRepositoryEditor.java @@ -16,7 +16,6 @@ package com.intellij.tasks.jira; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.tasks.config.BaseRepositoryEditor; import com.intellij.tasks.jira.jql.JqlLanguage; import com.intellij.ui.EditorTextField; @@ -74,8 +73,7 @@ public class JiraRepositoryEditor extends BaseRepositoryEditor { } private void updateNote() { - myNoteLabel.setText("JQL search cannot be used in JIRA versions prior 4.2. " + - String.format("Your version: %s.", StringUtil.notNullize(myRepository.getJiraVersion(), "unknown"))); + myNoteLabel.setText("JQL search cannot be used in JIRA versions prior 4.2. Your version: " + myRepository.getPresentableVersion()); } @Override