]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-833: New Web Service to get history of measures (time machine)
authorGodin <mandrikov@gmail.com>
Mon, 13 Dec 2010 08:37:40 +0000 (08:37 +0000)
committerGodin <mandrikov@gmail.com>
Mon, 13 Dec 2010 08:37:40 +0000 (08:37 +0000)
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/TimeMachineUnmarshaller.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/api/timemachine_controller.rb
sonar-ws-client/src/main/java/org/sonar/wsclient/services/TimeMachineQuery.java

index 53f56ba35dca294d55fe8379475d1fca6f766967..d28438fb1606ab793d03b85285c74e60bea97b6a 100644 (file)
@@ -1,8 +1,7 @@
 package org.sonar.wsclient.gwt.unmarshallers;
 
 import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.json.client.JSONArray;
-import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.json.client.*;
 import org.sonar.gwt.JsonUtils;
 import org.sonar.wsclient.services.TimeMachineData;
 
@@ -17,14 +16,26 @@ public class TimeMachineUnmarshaller implements Unmarshaller<TimeMachineData> {
       JSONArray array = map.get(dateTimeStr).isArray();
       List<String> values = new ArrayList<String>();
       for (int i = 0; i < JsonUtils.getArraySize(array); i++) {
-        String value = array.get(i).isString().stringValue();
-        values.add(value);
+        JSONValue elem = array.get(i);
+        values.add(getAsString(elem));
       }
       data.put(JsonUtils.parseDateTime(dateTimeStr), values);
     }
     return new TimeMachineData().setData(data);
   }
 
+  public String getAsString(JSONValue jsonValue) {
+    if (jsonValue == null) {
+      return null;
+    }
+    JSONString jsonString;
+    if ((jsonString = jsonValue.isString()) == null) {
+      JSONNumber jsonNumber = jsonValue.isNumber();
+      return jsonNumber != null ? jsonNumber.toString() : null;
+    }
+    return jsonString.stringValue();
+  }
+
   public List<TimeMachineData> toModels(JavaScriptObject json) {
     return Arrays.asList(toModel(json));
   }
index d69372155d7983e45c76be6c6d5c9295906f9899..92e2b51a3b21ababd563d0d94923722a36b8706e 100644 (file)
@@ -27,8 +27,8 @@ class Api::TimemachineController < Api::ApiController
       resource_id = params[:resource]
       metric_keys = params[:metrics].split(',')
       metrics = Metric.by_keys(metric_keys)
-      first_date = parse_datetime(params[:first_date])
-      last_date = parse_datetime(params[:last_date])
+      first_date = parse_datetime(params[:fromDateTime])
+      last_date = parse_datetime(params[:toDateTime])
 
       @resource=Project.by_key(resource_id)
       if @resource.nil?
@@ -48,7 +48,7 @@ class Api::TimemachineController < Api::ApiController
 
       measures = find_measures(metrics, snapshots)
 
-      result = []
+      result = {}
       if !measures.empty?
         measures_by_sid = {}
         measures.each do |measure|
@@ -67,7 +67,7 @@ class Api::TimemachineController < Api::ApiController
           metric_keys.each do |metric|
             values<<values_by_key[metric]
           end
-          result<<{format_datetime(snapshot.created_at) => values}
+          result[format_datetime(snapshot.created_at)] = values
         end
       end
 
index 31a00fe951871d153e80308759bdecd82f21dafb..6d4fee7fa96143ff45cab8ad45761f3fb71be578 100644 (file)
@@ -2,6 +2,9 @@ package org.sonar.wsclient.services;
 
 import java.util.Date;
 
+/**
+ * @since 2.5
+ */
 public class TimeMachineQuery extends Query<TimeMachineData> {
 
   public static final String BASE_URL = "/api/timemachine";
@@ -48,8 +51,8 @@ public class TimeMachineQuery extends Query<TimeMachineData> {
     url.append('?');
     appendUrlParameter(url, "resource", resourceKeyOrId);
     appendUrlParameter(url, "metrics", metrics);
-    appendUrlParameter(url, "first_date", from);
-    appendUrlParameter(url, "last_date", to);
+    appendUrlParameter(url, "fromDateTime", from, true);
+    appendUrlParameter(url, "toDateTime", to, true);
     return url.toString();
   }