IDEA-157507 Use "deploymentType" field in serverInfo to detect instances of JIRA... phpstorm/163.3351
authorMikhail Golubev <mikhail.golubev@jetbrains.com>
Mon, 22 Aug 2016 14:58:53 +0000 (17:58 +0300)
committerMikhail Golubev <mikhail.golubev@jetbrains.com>
Fri, 26 Aug 2016 11:24:59 +0000 (14:24 +0300)
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.

plugins/tasks/tasks-core/jira/src/com/intellij/tasks/jira/JiraRepository.java
plugins/tasks/tasks-core/jira/src/com/intellij/tasks/jira/JiraRepositoryEditor.java

index 6d9f7a344abc6f51e482d32dd807823160a4b127..e8e3f63f6fd7cfdc9cc0ac67c651231c541ddf08 100644 (file)
@@ -16,6 +16,7 @@
 package com.intellij.tasks.jira;
 
 import com.google.gson.Gson;
 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;
 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();
     // 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()) {
     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) {
     }
     JiraRestApi restApi = JiraRestApi.fromJiraVersion(myJiraVersion, this);
     if (restApi == null) {
@@ -220,6 +219,20 @@ public class JiraRepository extends BaseRepositoryImpl {
     return restApi;
   }
 
     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);
   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;
   }
 
     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()) {
   private static boolean containsCookie(@NotNull HttpClient client, @NotNull String cookieName) {
     for (Cookie cookie : client.getState().getCookies()) {
       if (cookie.getName().equals(cookieName) && !cookie.isExpired()) {
index a8ed1f880bf73fe9371adbb998226e2c1e9825df..a4da6fb537427a49edae6cbeefc74ea3febfdb46 100644 (file)
@@ -16,7 +16,6 @@
 package com.intellij.tasks.jira;
 
 import com.intellij.openapi.project.Project;
 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;
 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<JiraRepository> {
   }
 
   private void updateNote() {
   }
 
   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
   }
 
   @Override