From 84e58932fffb0c435b2fc1974f11b1d4a8da573d Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Mon, 22 Aug 2016 17:58:53 +0300 Subject: [PATCH] IDEA-157507 Use "deploymentType" field in serverInfo to detect instances of JIRA in Cloud It seems that at the moments most of existing JIRA Cloud servers have this parameter, but just in case I left the old heuristics as a fallback. Also whether the server is an instance of Cloud is shown in the editor settings next to the version to ease debugging. --- .../intellij/tasks/jira/JiraRepository.java | 28 +++++++++++++++---- .../tasks/jira/JiraRepositoryEditor.java | 4 +-- 2 files changed, 24 insertions(+), 8 deletions(-) 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 -- 2.32.0