]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2046: Reuse unmarshallers from sonar-ws-client for sonar-gwt-api
authorEvgeny Mandrikov <mandrikov@gmail.com>
Wed, 26 Jan 2011 16:21:54 +0000 (19:21 +0300)
committerEvgeny Mandrikov <mandrikov@gmail.com>
Thu, 27 Jan 2011 14:11:11 +0000 (17:11 +0300)
* WSUtils has two implementations - one for GWT and another for Java,
  so can be used by unmarshallers in both cases. But this not very good,
  because code is not type-safe. In fact it would be better to use
  emulation of types from org.json.simple for GWT, but this solution is
  more straightforward.

48 files changed:
sonar-gwt-api/pom.xml
sonar-gwt-api/src/main/java/org/sonar/gwt/ui/Page.java
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/GwtUtils.java
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/Sonar.java
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/AbstractUnmarshaller.java [deleted file]
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/DependencyTreeUnmarshaller.java [deleted file]
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/DependencyUnmarshaller.java [deleted file]
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/EventUnmarshaller.java [deleted file]
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/MetricUnmarshaller.java [deleted file]
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/PropertyUnmarshaller.java [deleted file]
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/ResourceUnmarshaller.java [deleted file]
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/ServerUnmarshaller.java [deleted file]
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/SourceUnmarshaller.java [deleted file]
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/TimeMachineUnmarshaller.java [deleted file]
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/Unmarshaller.java [deleted file]
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/Unmarshallers.java [deleted file]
sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/ViolationUnmarshaller.java [deleted file]
sonar-ws-client/src/main/java/org/sonar/wsclient/JdkUtils.java
sonar-ws-client/src/main/java/org/sonar/wsclient/services/WSUtils.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/AbstractUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/DependencyTreeUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/DependencyUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/EventUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/FavouriteUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/MetricUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/PluginUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/PropertyUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/ResourceUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/RuleUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/ServerUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/SourceUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/TimeMachineUnmarshaller.java
sonar-ws-client/src/main/java/org/sonar/wsclient/unmarshallers/ViolationUnmarshaller.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/DependencyTreeUnmarshallerTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/DependencyUnmarshallerTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/EventUnmarshallerTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/JsonUtilsTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/MetricUnmarshallerTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/PluginUnmarshallerTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/PropertyUnmarshallerTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/ResourceUnmarshallerTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/RuleUnmarshallerTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/ServerUnmarshallerTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/SourceUnmarshallerTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/TimeMachineUnmarshallerTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/UnmarshallerTestCase.java [new file with mode: 0644]
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/ViolationUnmarshallerTest.java
sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/WSTestUtils.java [deleted file]

index 7f60b4adf394024664ae9b28ca52a8a777c682a2..1b0e10f2544d3dff280af0aa85a5e34b29963457 100644 (file)
@@ -66,7 +66,7 @@
                   <type>jar</type>
                   <overWrite>true</overWrite>
                   <outputDirectory>${project.build.directory}/classes</outputDirectory>
-                  <includes>**/services/*.java</includes>
+                  <includes>**/services/*.java,**/unmarshallers/*.java</includes>
                 </artifactItem>
               </artifactItems>
               <overWriteReleases>true</overWriteReleases>
index 94b2785f6e9d23e27b6a83324b69036cbb800047..ccd7ad4ed045b0427f0409f4fe1a9bf0db1440ff 100644 (file)
@@ -22,13 +22,18 @@ package org.sonar.gwt.ui;
 import com.google.gwt.core.client.EntryPoint;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.json.client.JSONObject;
 import com.google.gwt.user.client.ui.RootPanel;
 import com.google.gwt.user.client.ui.Widget;
-import org.sonar.wsclient.gwt.unmarshallers.ResourceUnmarshaller;
+import org.sonar.wsclient.gwt.GwtUtils;
 import org.sonar.wsclient.services.Resource;
+import org.sonar.wsclient.services.WSUtils;
+import org.sonar.wsclient.unmarshallers.ResourceUnmarshaller;
 
 public abstract class Page implements EntryPoint {
 
+  private static final ResourceUnmarshaller RESOURCE_UNMARSHALLER = new ResourceUnmarshaller();
+
   private Widget currentWidget = null;
   private Integer currentResourceId = null;
 
@@ -40,7 +45,7 @@ public abstract class Page implements EntryPoint {
 
   private void load() {
     Widget widget = doOnModuleLoad();
-    if (widget!=null) {
+    if (widget != null) {
       getRootPanel().add(widget);
     }
   }
@@ -52,7 +57,11 @@ public abstract class Page implements EntryPoint {
   public final void onResourceLoad() {
     JavaScriptObject json = loadResource();
     if (json != null) {
-      Resource resource = ResourceUnmarshaller.getInstance().toModel(json);
+      if (WSUtils.getINSTANCE() == null) {
+        WSUtils.setInstance(new GwtUtils()); // TODO dirty hack to initialize WSUtils
+      }
+      String jsonStr = (new JSONObject(json)).toString();
+      Resource resource = RESOURCE_UNMARSHALLER.toModel(jsonStr);
 
       RootPanel container = getRootPanel();
       container.clear();
@@ -82,11 +91,10 @@ public abstract class Page implements EntryPoint {
   }
 
   private native JavaScriptObject loadResource()/*-{
-    return $wnd.config['resource'];
-  }-*/;
+                                                return $wnd.config['resource'];
+                                                }-*/;
 
   private native void export(String gwtId, Page page)/*-{
-    $wnd.modules[gwtId]=function() {page.@org.sonar.gwt.ui.Page::onResourceLoad()()};
-  }-*/;
+                                                     $wnd.modules[gwtId]=function() {page.@org.sonar.gwt.ui.Page::onResourceLoad()()};
+                                                     }-*/;
 }
-
index 8fc7df08fb6b4253045cc0b235b5f1c95b065add..ddeeb92d9901519fae714b86cd7e51ae38032e50 100644 (file)
 package org.sonar.wsclient.gwt;
 
 import com.google.gwt.i18n.client.DateTimeFormat;
+import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.json.client.JSONParser;
+import com.google.gwt.json.client.JSONValue;
+import org.sonar.gwt.JsonUtils;
 import org.sonar.wsclient.services.WSUtils;
 
 import java.util.Date;
+import java.util.Set;
 
 public class GwtUtils extends WSUtils {
   @Override
@@ -34,4 +39,64 @@ public class GwtUtils extends WSUtils {
   public String encodeUrl(String url) {
     return com.google.gwt.http.client.URL.encode(url);
   }
+
+  @Override
+  public Object getField(Object json, String field) {
+    return ((JSONObject) json).get(field);
+  }
+
+  @Override
+  public String getString(Object json, String field) {
+    return JsonUtils.getString((JSONObject) json, field);
+  }
+
+  @Override
+  public Boolean getBoolean(Object json, String field) {
+    return JsonUtils.getBoolean((JSONObject) json, field);
+  }
+
+  @Override
+  public Integer getInteger(Object json, String field) {
+    return JsonUtils.getInteger((JSONObject) json, field);
+  }
+
+  @Override
+  public Double getDouble(Object json, String field) {
+    return JsonUtils.getDouble((JSONObject) json, field);
+  }
+
+  @Override
+  public Long getLong(Object json, String field) {
+    Double d = JsonUtils.getDouble((JSONObject) json, field);
+    if (d != null) {
+      return d.longValue();
+    }
+    return null;
+  }
+
+  @Override
+  public Date getDateTime(Object json, String field) {
+    return JsonUtils.getDate((JSONObject) json, field);
+  }
+
+  @Override
+  public int getArraySize(Object array) {
+    return JsonUtils.getArraySize((JSONValue) array);
+  }
+
+  @Override
+  public Object getArrayElement(Object array, int i) {
+    return JsonUtils.getArray((JSONValue) array, i);
+  }
+
+  @Override
+  public Object parse(String jsonStr) {
+    return JSONParser.parse(jsonStr);
+  }
+
+  @Override
+  public Set<String> getFields(Object json) {
+    return ((JSONObject) json).keySet();
+  }
+
 }
index 33f404dd5516df157f56c19cc6efcbeb67da04dc..916b086d01ab5de205ac269e1f819a9cc68b15a1 100644 (file)
@@ -21,18 +21,19 @@ package org.sonar.wsclient.gwt;
 
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.i18n.client.Dictionary;
+import com.google.gwt.json.client.JSONObject;
 import org.sonar.gwt.JsonUtils;
-import org.sonar.wsclient.gwt.unmarshallers.Unmarshaller;
-import org.sonar.wsclient.gwt.unmarshallers.Unmarshallers;
 import org.sonar.wsclient.services.Model;
 import org.sonar.wsclient.services.Query;
 import org.sonar.wsclient.services.WSUtils;
+import org.sonar.wsclient.unmarshallers.Unmarshaller;
+import org.sonar.wsclient.unmarshallers.Unmarshallers;
 
 public class Sonar {
   static {
     WSUtils.setInstance(new GwtUtils());
   }
-  
+
   private static Sonar instance = null;
 
   private final String host;
@@ -56,7 +57,8 @@ public class Sonar {
     JsonUtils.requestJson(getUrl(query), new JsonUtils.JSONHandler() {
       public void onResponse(JavaScriptObject obj) {
         Unmarshaller<MODEL> unmarshaller = Unmarshallers.forModel(query.getModelClass());
-        callback.onResponse(unmarshaller.toModel(obj), obj);
+        String json = (new JSONObject(obj)).toString();
+        callback.onResponse(unmarshaller.toModel(json), obj);
       }
 
       public void onTimeout() {
@@ -73,7 +75,8 @@ public class Sonar {
     JsonUtils.requestJson(getUrl(query), new JsonUtils.JSONHandler() {
       public void onResponse(JavaScriptObject obj) {
         Unmarshaller<MODEL> unmarshaller = Unmarshallers.forModel(query.getModelClass());
-        callback.onResponse(unmarshaller.toModels(obj), obj);
+        String json = (new JSONObject(obj)).toString();
+        callback.onResponse(unmarshaller.toModels(json), obj);
       }
 
       public void onTimeout() {
@@ -89,4 +92,4 @@ public class Sonar {
   private String getUrl(Query query) {
     return host + query.getUrl();
   }
-}
\ No newline at end of file
+}
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/AbstractUnmarshaller.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/AbstractUnmarshaller.java
deleted file mode 100644 (file)
index a7a6f83..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-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 org.sonar.wsclient.services.Model;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public abstract class AbstractUnmarshaller<MODEL extends Model> implements Unmarshaller<MODEL> {
-  public final MODEL toModel(JavaScriptObject json) {
-    JSONArray array = new JSONArray(json);
-    if (array.size() >= 1) {
-      JSONObject elt = array.get(0).isObject();
-      return parse(elt);
-    }
-    return null;
-  }
-
-  public final List<MODEL> toModels(JavaScriptObject json) {
-    List<MODEL> result = new ArrayList<MODEL>();
-    JSONArray array = new JSONArray(json);
-    for (int i = 0; i < array.size(); i++) {
-      JSONObject elt = array.get(i).isObject();
-      if (elt != null) {
-        result.add(parse(elt));
-      }
-    }
-    return result;
-  }
-
-  protected abstract MODEL parse(JSONObject json);
-}
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/DependencyTreeUnmarshaller.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/DependencyTreeUnmarshaller.java
deleted file mode 100644 (file)
index c7c3bb3..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.wsclient.gwt.unmarshallers;
-
-import com.google.gwt.json.client.JSONArray;
-import com.google.gwt.json.client.JSONObject;
-import org.sonar.gwt.JsonUtils;
-import org.sonar.wsclient.services.DependencyTree;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class DependencyTreeUnmarshaller extends AbstractUnmarshaller<DependencyTree> {
-
-  protected DependencyTree parse(JSONObject json) {
-    DependencyTree tree = new DependencyTree()
-        .setDepId(JsonUtils.getString(json, "did"))
-        .setResourceId(JsonUtils.getString(json, "rid"))
-        .setResourceKey(JsonUtils.getString(json, "k"))
-        .setResourceName(JsonUtils.getString(json, "n"))
-        .setResourceScope(JsonUtils.getString(json, "s"))
-        .setResourceQualifier(JsonUtils.getString(json, "q"))
-        .setResourceVersion(JsonUtils.getString(json, "v"))
-        .setUsage(JsonUtils.getString(json, "u"))
-        .setWeight(JsonUtils.getInteger(json, "w"));
-
-    List<DependencyTree> to = new ArrayList<DependencyTree>();
-    tree.setTo(to);
-
-    JSONArray toJson = (JSONArray) json.get("to");
-    if (toJson != null) {
-      for (int index = 0; index < toJson.size(); index++) {
-        to.add(parse((JSONObject) toJson.get(index)));
-      }
-    }
-    return tree;
-  }
-}
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/DependencyUnmarshaller.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/DependencyUnmarshaller.java
deleted file mode 100644 (file)
index 76dd239..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.wsclient.gwt.unmarshallers;
-
-import com.google.gwt.json.client.JSONObject;
-import org.sonar.gwt.JsonUtils;
-import org.sonar.wsclient.services.Dependency;
-
-public class DependencyUnmarshaller extends AbstractUnmarshaller<Dependency> {
-  
-  protected Dependency parse(JSONObject json) {
-    return new Dependency()
-        .setId(JsonUtils.getString(json, "id"))
-        .setFromId(JsonUtils.getDouble(json, "fi").longValue())
-        .setToId(JsonUtils.getDouble(json, "ti").longValue())
-        .setFromKey(JsonUtils.getString(json, "fk"))
-        .setToKey(JsonUtils.getString(json, "tk"))
-        .setUsage(JsonUtils.getString(json, "u"))
-        .setWeight(JsonUtils.getInteger(json, "w"))
-        .setFromName(JsonUtils.getString(json, "fn"))
-        .setFromQualifier(JsonUtils.getString(json, "fq"))
-        .setToName(JsonUtils.getString(json, "tn"))
-        .setToQualifier(JsonUtils.getString(json, "tq"));
-  }
-}
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/EventUnmarshaller.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/EventUnmarshaller.java
deleted file mode 100644 (file)
index bd7ca08..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.wsclient.gwt.unmarshallers;
-
-import com.google.gwt.json.client.JSONObject;
-import org.sonar.gwt.JsonUtils;
-import org.sonar.wsclient.services.Event;
-
-public class EventUnmarshaller extends AbstractUnmarshaller<Event> {
-
-  protected Event parse(JSONObject json) {
-    return new Event()
-        .setId(JsonUtils.getString(json, "id"))
-        .setResourceKey(JsonUtils.getString(json, "rk"))
-        .setName(JsonUtils.getString(json, "n"))
-        .setCategory(JsonUtils.getString(json, "c"))
-        .setDate(JsonUtils.getDate(json, "dt"))
-        .setDescription(JsonUtils.getString(json, "ds"))
-        .setData(JsonUtils.getString(json, "data"));
-  }
-}
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/MetricUnmarshaller.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/MetricUnmarshaller.java
deleted file mode 100644 (file)
index 283f5fe..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.wsclient.gwt.unmarshallers;
-
-import com.google.gwt.json.client.JSONObject;
-import org.sonar.gwt.JsonUtils;
-import org.sonar.wsclient.services.Metric;
-
-public class MetricUnmarshaller extends AbstractUnmarshaller<Metric> {
-
-  protected Metric parse(JSONObject json) {
-    return new Metric()
-        .setKey(JsonUtils.getString(json, "key"))
-        .setName(JsonUtils.getString(json, "name"))
-        .setDomain(JsonUtils.getString(json, "domain"))
-        .setDescription(JsonUtils.getString(json, "description"))
-        .setDirection(JsonUtils.getInteger(json, "direction"))
-        .setType(JsonUtils.getString(json, "val_type"))
-        .setHidden(JsonUtils.getBoolean(json, "hidden"))
-        .setUserManaged(JsonUtils.getBoolean(json, "user_managed"));
-  }
-}
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/PropertyUnmarshaller.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/PropertyUnmarshaller.java
deleted file mode 100644 (file)
index 3ff7931..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.wsclient.gwt.unmarshallers;
-
-import com.google.gwt.json.client.JSONObject;
-import org.sonar.gwt.JsonUtils;
-import org.sonar.wsclient.services.Property;
-
-public class PropertyUnmarshaller extends AbstractUnmarshaller<Property> {
-
-  protected Property parse(JSONObject json) {
-    return new Property()
-        .setKey(JsonUtils.getString(json, "key"))
-        .setValue(JsonUtils.getString(json, "value"));
-  }
-}
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/ResourceUnmarshaller.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/ResourceUnmarshaller.java
deleted file mode 100644 (file)
index 3451bf1..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.wsclient.gwt.unmarshallers;
-
-import com.google.gwt.json.client.JSONObject;
-import com.google.gwt.json.client.JSONValue;
-import org.sonar.gwt.JsonUtils;
-import org.sonar.wsclient.services.Measure;
-import org.sonar.wsclient.services.Resource;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class ResourceUnmarshaller extends AbstractUnmarshaller<Resource> {
-
-  private static final ResourceUnmarshaller INSTANCE = new ResourceUnmarshaller();
-
-  private ResourceUnmarshaller() {
-  }
-
-  public static ResourceUnmarshaller getInstance() {
-    return INSTANCE;
-  }
-
-  protected Resource parse(JSONObject json) {
-    Resource resource = new Resource();
-    parseResourceFields(json, resource);
-    parseMeasures(json, resource);
-    return resource;
-  }
-
-  private void parseResourceFields(JSONObject json, Resource resource) {
-    resource.setId(JsonUtils.getInteger(json, "id"))
-        .setKey(JsonUtils.getString(json, "key"))
-        .setName(JsonUtils.getString(json, "name"))
-        .setLongName(JsonUtils.getString(json, "lname"))
-        .setScope(JsonUtils.getString(json, "scope"))
-        .setQualifier(JsonUtils.getString(json, "qualifier"))
-        .setLanguage(JsonUtils.getString(json, "lang"))
-        .setVersion(JsonUtils.getString(json, "version"))
-        .setDate(JsonUtils.getDate(json, "date"))
-        .setCopy(JsonUtils.getInteger(json, "copy"));
-  }
-
-  private void parseMeasures(JSONObject json, Resource resource) {
-    JSONValue measuresJson = json.get("msr");
-    if (measuresJson != null) {
-      resource.setMeasures(parseMeasures(measuresJson));
-    }
-  }
-
-  private List<Measure> parseMeasures(JSONValue measuresJson) {
-    List<Measure> projectMeasures = new ArrayList<Measure>();
-    int len = JsonUtils.getArraySize(measuresJson);
-    for (int i = 0; i < len; i++) {
-      JSONObject measureJson = JsonUtils.getArray(measuresJson, i);
-      if (measureJson != null) {
-        Measure measure = parseMeasure(measureJson);
-        projectMeasures.add(measure);
-      }
-    }
-    return projectMeasures;
-  }
-
-  private Measure parseMeasure(JSONObject json) {
-    Measure measure = new Measure();
-    measure
-        .setMetricKey(JsonUtils.getString(json, "key"))
-        .setMetricName(JsonUtils.getString(json, "name"))
-        .setValue(JsonUtils.getDouble(json, "val"))
-        .setFormattedValue(JsonUtils.getString(json, "frmt_val"))
-        .setData(JsonUtils.getString(json, "data"))
-        .setTrend(JsonUtils.getInteger(json, "trend"))
-        .setVar(JsonUtils.getInteger(json, "var"))
-        .setRuleKey(JsonUtils.getString(json, "rule_key"))
-        .setRuleName(JsonUtils.getString(json, "rule_name"))
-        .setRuleCategory(JsonUtils.getString(json, "rule_category"))
-        .setRuleSeverity(JsonUtils.getString(json, "rule_priority"))
-        .setCharacteristicKey(JsonUtils.getString(json, "ctic_key"))
-        .setCharacteristicName(JsonUtils.getString(json, "ctic_name"));
-    return measure;
-  }
-}
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/ServerUnmarshaller.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/ServerUnmarshaller.java
deleted file mode 100644 (file)
index ad87a81..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.wsclient.gwt.unmarshallers;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.json.client.JSONObject;
-import org.sonar.gwt.JsonUtils;
-import org.sonar.wsclient.services.Server;
-
-import java.util.Arrays;
-import java.util.List;
-
-public class ServerUnmarshaller implements Unmarshaller<Server> {
-
-  public Server toModel(JavaScriptObject json) {
-    JSONObject map = new JSONObject(json);
-    Server server = new Server()
-        .setId(JsonUtils.getString(map, "id"))
-        .setVersion(JsonUtils.getString(map, "version"));
-    server.setStatusMessage(JsonUtils.getString(map, "status_msg"));
-    String status = JsonUtils.getString(map, "status");
-    if (status != null) {
-      server.setStatus(Server.Status.valueOf(status));
-    }
-    return server;
-  }
-
-  public List<Server> toModels(JavaScriptObject json) {
-    return Arrays.asList(toModel(json));
-  }
-}
-
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/SourceUnmarshaller.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/SourceUnmarshaller.java
deleted file mode 100644 (file)
index bf2c3ef..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.wsclient.gwt.unmarshallers;
-
-import com.google.gwt.json.client.JSONObject;
-import com.google.gwt.json.client.JSONValue;
-import org.sonar.wsclient.services.Source;
-
-public class SourceUnmarshaller extends AbstractUnmarshaller<Source> {
-
-  protected Source parse(JSONObject json) {
-    Source source = new Source();
-
-    for (String key : json.keySet()) {
-      JSONValue val = json.get(key);
-      if (val.isString() != null) {
-        source.addLine(Integer.parseInt(key), val.isString().stringValue());
-      } else {
-        source.addLine(Integer.parseInt(key), "");
-      }
-    }
-
-    return source;
-  }
-}
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/TimeMachineUnmarshaller.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/TimeMachineUnmarshaller.java
deleted file mode 100644 (file)
index 562e986..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.sonar.wsclient.gwt.unmarshallers;
-
-import com.google.gwt.json.client.JSONArray;
-import com.google.gwt.json.client.JSONObject;
-import org.sonar.gwt.JsonUtils;
-import org.sonar.wsclient.services.TimeMachine;
-import org.sonar.wsclient.services.TimeMachineCell;
-import org.sonar.wsclient.services.TimeMachineColumn;
-
-public class TimeMachineUnmarshaller extends AbstractUnmarshaller<TimeMachine> {
-
-  protected TimeMachine parse(JSONObject json) {
-    JSONArray cols = json.get("cols").isArray();
-    JSONArray cells = json.get("cells").isArray();
-    return new TimeMachine(toColumns(cols), toCells(cells));
-  }
-
-  private TimeMachineColumn[] toColumns(JSONArray cols) {
-    int size = cols.size();
-    TimeMachineColumn[] result = new TimeMachineColumn[size];
-    for (int index = 0; index < JsonUtils.getArraySize(cols); index++) {
-      JSONObject elem = JsonUtils.getArray(cols, index);
-      result[index] = new TimeMachineColumn(index, JsonUtils.getString(elem, "metric"), null, null);
-    }
-    return result;
-  }
-
-  private TimeMachineCell[] toCells(JSONArray cells) {
-    int size = JsonUtils.getArraySize(cells);
-    TimeMachineCell[] result = new TimeMachineCell[size];
-    for (int i = 0; i < size; i++) {
-      JSONObject cellJson = JsonUtils.getArray(cells, i);
-      JSONArray valuesJson = cellJson.get("v").isArray();
-
-      Object[] resultValues = new Object[JsonUtils.getArraySize(valuesJson)];
-      for (int indexValue = 0; indexValue < JsonUtils.getArraySize(valuesJson); indexValue++) {
-        Object value = valuesJson.get(indexValue);
-        resultValues[indexValue] = value;
-      }
-      result[i] = new TimeMachineCell(JsonUtils.getDate(cellJson, "d"), resultValues);
-    }
-    return result;
-  }
-
-}
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/Unmarshaller.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/Unmarshaller.java
deleted file mode 100644 (file)
index 39c5628..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.wsclient.gwt.unmarshallers;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import org.sonar.wsclient.services.Model;
-
-import java.util.List;
-
-public interface Unmarshaller<MODEL extends Model> {
-
-  MODEL toModel(JavaScriptObject json);
-
-  List<MODEL> toModels(JavaScriptObject json);
-
-}
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/Unmarshallers.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/Unmarshallers.java
deleted file mode 100644 (file)
index d28a90c..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.wsclient.gwt.unmarshallers;
-
-import org.sonar.wsclient.services.*;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public final class Unmarshallers {
-
-  private Unmarshallers() {
-  }
-
-  private static Map<Class, Unmarshaller> unmarshallers;
-
-  static {
-    unmarshallers = new HashMap<Class, Unmarshaller>();
-    unmarshallers.put(Metric.class, new MetricUnmarshaller());
-    unmarshallers.put(Dependency.class, new DependencyUnmarshaller());
-    unmarshallers.put(Resource.class, ResourceUnmarshaller.getInstance());
-    unmarshallers.put(Property.class, new PropertyUnmarshaller());
-    unmarshallers.put(Source.class, new SourceUnmarshaller());
-    unmarshallers.put(Violation.class, new ViolationUnmarshaller());
-    unmarshallers.put(Server.class, new ServerUnmarshaller());
-    unmarshallers.put(DependencyTree.class, new DependencyTreeUnmarshaller());
-    unmarshallers.put(Event.class, new EventUnmarshaller());
-    // TODO
-    // FavouriteUnmarshaller
-    // PluginUnmarshaller
-    // RuleUnmarshaller
-    unmarshallers.put(TimeMachine.class, new TimeMachineUnmarshaller());
-  }
-
-  public static Unmarshaller forModel(Class modelClass) {
-    return unmarshallers.get(modelClass);
-  }
-}
diff --git a/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/ViolationUnmarshaller.java b/sonar-gwt-api/src/main/java/org/sonar/wsclient/gwt/unmarshallers/ViolationUnmarshaller.java
deleted file mode 100644 (file)
index bf01948..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.wsclient.gwt.unmarshallers;
-
-import com.google.gwt.json.client.JSONObject;
-import org.sonar.gwt.JsonUtils;
-import org.sonar.wsclient.services.Violation;
-
-public class ViolationUnmarshaller extends AbstractUnmarshaller<Violation> {
-
-  protected Violation parse(JSONObject json) {
-    Violation violation = new Violation();
-    violation.setMessage(JsonUtils.getString(json, "message"));
-    violation.setLine(JsonUtils.getInteger(json, "line"));
-    violation.setSeverity(JsonUtils.getString(json, "priority"));
-    violation.setCreatedAt(JsonUtils.getDate(json, "createdAt"));
-
-    JSONObject rule = (JSONObject) json.get("rule");
-    if (rule != null) {
-      violation.setRuleKey(JsonUtils.getString(rule, "key"));
-      violation.setRuleName(JsonUtils.getString(rule, "name"));
-    }
-
-    JSONObject resource = (JSONObject) json.get("resource");
-    if (resource != null) {
-      violation.setResourceKey(JsonUtils.getString(resource, "key"));
-      violation.setResourceName(JsonUtils.getString(resource, "name"));
-      violation.setResourceQualifier(JsonUtils.getString(resource, "qualifier"));
-      violation.setResourceScope(JsonUtils.getString(resource, "scope"));
-    }
-    return violation;
-  }
-}
index 464fe78cb317cceca1cd70285be52449893732b6..d1f21e42646b47fadb27bc528cefe0446b7e665d 100644 (file)
  */
 package org.sonar.wsclient;
 
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
 import org.sonar.wsclient.services.WSUtils;
+import org.sonar.wsclient.unmarshallers.JsonUtils;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.Set;
 
 public final class JdkUtils extends WSUtils {
 
@@ -42,4 +47,58 @@ public final class JdkUtils extends WSUtils {
     }
   }
 
+  @Override
+  public Object getField(Object json, String field) {
+    return ((JSONObject) json).get(field);
+  }
+
+  @Override
+  public String getString(Object json, String field) {
+    return JsonUtils.getString((JSONObject) json, field);
+  }
+
+  @Override
+  public Boolean getBoolean(Object json, String field) {
+    return JsonUtils.getBoolean((JSONObject) json, field);
+  }
+
+  @Override
+  public Integer getInteger(Object json, String field) {
+    return JsonUtils.getInteger((JSONObject) json, field);
+  }
+
+  @Override
+  public Double getDouble(Object json, String field) {
+    return JsonUtils.getDouble((JSONObject) json, field);
+  }
+
+  @Override
+  public Long getLong(Object json, String field) {
+    return JsonUtils.getLong((JSONObject) json, field);
+  }
+
+  @Override
+  public Date getDateTime(Object json, String field) {
+    return JsonUtils.getDateTime((JSONObject) json, field);
+  }
+
+  @Override
+  public int getArraySize(Object array) {
+    return ((ArrayList) array).size();
+  }
+
+  @Override
+  public Object getArrayElement(Object array, int i) {
+    return ((ArrayList) array).get(i);
+  }
+
+  @Override
+  public Object parse(String jsonStr) {
+    return JSONValue.parse(jsonStr);
+  }
+
+  @Override
+  public Set<String> getFields(Object json) {
+    return ((JSONObject) json).keySet();
+  }
 }
index ab4cd8d102876e0138e6a43ab3e6d458a59d5cfa..8119bacee8cb4dd2e9bf6c7e62b4048db936a6ab 100644 (file)
 package org.sonar.wsclient.services;
 
 import java.util.Date;
+import java.util.Set;
 
+/**
+ * Compatibility layer between GWT and plain Java.
+ * Well, this is bad, because code is not type-safe, so all unmarshallers also,
+ * but this allows to remove duplications between sonar-gwt-api and sonar-ws-client.
+ */
 public abstract class WSUtils {
 
   private static WSUtils INSTANCE = null;
@@ -36,4 +42,67 @@ public abstract class WSUtils {
   public abstract String format(Date date, String format);
 
   public abstract String encodeUrl(String url);
+
+  /**
+   * @return value of specified field from specified JSON object,
+   *         or <code>null</code> if field does not exist
+   */
+  public abstract Object getField(Object json, String field);
+
+  /**
+   * @return String value of specified field from specified JSON object,
+   *         or <code>null</code> if field does not exist
+   */
+  public abstract String getString(Object json, String field);
+
+  /**
+   * @return Boolean value of specified field from specified JSON object,
+   *         or <code>null</code> if field does not exist
+   */
+  public abstract Boolean getBoolean(Object json, String field);
+
+  /**
+   * @return Integer value of specified field from specified JSON object,
+   *         or <code>null</code> if field does not exist
+   */
+  public abstract Integer getInteger(Object json, String field);
+
+  /**
+   * @return Double value of specified field from specified JSON object,
+   *         or <code>null</code> if field does not exist
+   */
+  public abstract Double getDouble(Object json, String field);
+
+  /**
+   * @return Long value of specified field from specified JSON object,
+   *         or <code>null</code> if field does not exist
+   */
+  public abstract Long getLong(Object json, String field);
+
+  /**
+   * @return Date value of specified field from specified JSON object,
+   *         or <code>null</code> if field does not exist
+   */
+  public abstract Date getDateTime(Object json, String field);
+
+  /**
+   * @return size of specified JSON array
+   */
+  public abstract int getArraySize(Object array);
+
+  /**
+   * @return element from specified JSON array
+   */
+  public abstract Object getArrayElement(Object array, int i);
+
+  /**
+   * @return JSON object
+   */
+  public abstract Object parse(String jsonStr);
+
+  /**
+   * @return field names in specified JSON object
+   */
+  public abstract Set<String> getFields(Object json);
+
 }
index d906f4ad9d87469c9c38993fdf96b9098eb8bbf1..13ddb93409d48db0408f6aa50b7727ae966ba40a 100644 (file)
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.json.simple.JSONValue;
 import org.sonar.wsclient.services.Model;
+import org.sonar.wsclient.services.WSUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -30,10 +28,11 @@ import java.util.List;
 public abstract class AbstractUnmarshaller<MODEL extends Model> implements Unmarshaller<MODEL> {
 
   public final MODEL toModel(String json) {
-    MODEL  result = null;
-    JSONArray array = (JSONArray) JSONValue.parse(json);
-    if (array.size() >= 1) {
-      JSONObject elt = (JSONObject) array.get(0);
+    WSUtils utils = WSUtils.getINSTANCE();
+    MODEL result = null;
+    Object array = utils.parse(json);
+    if (utils.getArraySize(array) >= 1) {
+      Object elt = utils.getArrayElement(array, 0);
       if (elt != null) {
         result = parse(elt);
       }
@@ -43,10 +42,11 @@ public abstract class AbstractUnmarshaller<MODEL extends Model> implements Unmar
   }
 
   public final List<MODEL> toModels(String json) {
+    WSUtils utils = WSUtils.getINSTANCE();
     List<MODEL> result = new ArrayList<MODEL>();
-    JSONArray array = (JSONArray) JSONValue.parse(json);
-    for (Object anArray : array) {
-      JSONObject elt = (JSONObject) anArray;
+    Object array = utils.parse(json);
+    for (int i = 0; i < utils.getArraySize(array); i++) {
+      Object elt = utils.getArrayElement(array, i);
       if (elt != null) {
         result.add(parse(elt));
       }
@@ -54,5 +54,5 @@ public abstract class AbstractUnmarshaller<MODEL extends Model> implements Unmar
     return result;
   }
 
-  protected abstract MODEL parse(JSONObject elt);
+  protected abstract MODEL parse(Object elt);
 }
index f326ba02176c061a26f261ba90f13c336b5cd5bc..f91b8af085dbe12c87ece3b6402309d82c51cfe4 100644 (file)
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
 import org.sonar.wsclient.services.DependencyTree;
+import org.sonar.wsclient.services.WSUtils;
 
 import java.util.ArrayList;
 import java.util.List;
 
 public class DependencyTreeUnmarshaller extends AbstractUnmarshaller<DependencyTree> {
   @Override
-  protected DependencyTree parse(JSONObject json) {
+  protected DependencyTree parse(Object json) {
+    WSUtils utils = WSUtils.getINSTANCE();
     DependencyTree tree = new DependencyTree()
-        .setDepId(JsonUtils.getString(json, "did"))
-        .setResourceId(JsonUtils.getString(json, "rid"))
-        .setResourceKey(JsonUtils.getString(json, "k"))
-        .setResourceName(JsonUtils.getString(json, "n"))
-        .setResourceScope(JsonUtils.getString(json, "s"))
-        .setResourceQualifier(JsonUtils.getString(json, "q"))
-        .setResourceVersion(JsonUtils.getString(json, "v"))
-        .setUsage(JsonUtils.getString(json, "u"))
-        .setWeight(JsonUtils.getInteger(json, "w"));
+        .setDepId(utils.getString(json, "did"))
+        .setResourceId(utils.getString(json, "rid"))
+        .setResourceKey(utils.getString(json, "k"))
+        .setResourceName(utils.getString(json, "n"))
+        .setResourceScope(utils.getString(json, "s"))
+        .setResourceQualifier(utils.getString(json, "q"))
+        .setResourceVersion(utils.getString(json, "v"))
+        .setUsage(utils.getString(json, "u"))
+        .setWeight(utils.getInteger(json, "w"));
 
     List<DependencyTree> to = new ArrayList<DependencyTree>();
     tree.setTo(to);
 
-    JSONArray toJson = (JSONArray) json.get("to");
+    Object toJson = utils.getField(json, "to");
     if (toJson != null) {
-      for (Object aToJson : toJson) {
-        to.add(parse((JSONObject) aToJson));
+      for (int i = 0; i < utils.getArraySize(toJson); i++) {
+        to.add(parse(utils.getArrayElement(toJson, i)));
       }
     }
     return tree;
index 803753aede7ba346b5bdc53371d1fe20b5f89129..bf8b19db704db2f6a3c8127c01838c0a0b226b88 100644 (file)
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONObject;
 import org.sonar.wsclient.services.Dependency;
+import org.sonar.wsclient.services.WSUtils;
 
 public class DependencyUnmarshaller extends AbstractUnmarshaller<Dependency> {
 
   @Override
-  protected Dependency parse(JSONObject json) {
+  protected Dependency parse(Object json) {
+    WSUtils utils = WSUtils.getINSTANCE();
     return new Dependency()
-        .setId(JsonUtils.getString(json, "id"))
-        .setFromId(JsonUtils.getLong(json, "fi"))
-        .setToId(JsonUtils.getLong(json, "ti"))
-        .setFromKey(JsonUtils.getString(json, "fk"))
-        .setToKey(JsonUtils.getString(json, "tk"))
-        .setUsage(JsonUtils.getString(json, "u"))
-        .setWeight(JsonUtils.getInteger(json, "w"))
-        .setFromName(JsonUtils.getString(json, "fn"))
-        .setFromQualifier(JsonUtils.getString(json, "fq"))
-        .setToName(JsonUtils.getString(json, "tn"))
-        .setToQualifier(JsonUtils.getString(json, "tq"));
+        .setId(utils.getString(json, "id"))
+        .setFromId(utils.getLong(json, "fi"))
+        .setToId(utils.getLong(json, "ti"))
+        .setFromKey(utils.getString(json, "fk"))
+        .setToKey(utils.getString(json, "tk"))
+        .setUsage(utils.getString(json, "u"))
+        .setWeight(utils.getInteger(json, "w"))
+        .setFromName(utils.getString(json, "fn"))
+        .setFromQualifier(utils.getString(json, "fq"))
+        .setToName(utils.getString(json, "tn"))
+        .setToQualifier(utils.getString(json, "tq"));
   }
-}
\ No newline at end of file
+}
index 2f7878e55ef0c223c896ad9ad7a187f463e0d16c..adff1c0f2db842202733baa5007665edb6fc248c 100644 (file)
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONObject;
 import org.sonar.wsclient.services.Event;
+import org.sonar.wsclient.services.WSUtils;
 
 public class EventUnmarshaller extends AbstractUnmarshaller<Event> {
 
   @Override
-  protected Event parse(JSONObject json) {
+  protected Event parse(Object json) {
+    WSUtils utils = WSUtils.getINSTANCE();
     return new Event()
-        .setId(JsonUtils.getString(json, "id"))
-        .setResourceKey(JsonUtils.getString(json, "rk"))
-        .setName(JsonUtils.getString(json, "n"))
-        .setCategory(JsonUtils.getString(json, "c"))
-        .setDate(JsonUtils.getDateTime(json, "dt"))
-        .setDescription(JsonUtils.getString(json, "ds"))
-        .setData(JsonUtils.getString(json, "data"));
+        .setId(utils.getString(json, "id"))
+        .setResourceKey(utils.getString(json, "rk"))
+        .setName(utils.getString(json, "n"))
+        .setCategory(utils.getString(json, "c"))
+        .setDate(utils.getDateTime(json, "dt"))
+        .setDescription(utils.getString(json, "ds"))
+        .setData(utils.getString(json, "data"));
   }
 }
index ab93ef280820da1e0e77d369af35b6e46a737d1f..1d40609208e73f313202820599d5050c13bcf5e7 100644 (file)
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONObject;
 import org.sonar.wsclient.services.Favourite;
+import org.sonar.wsclient.services.WSUtils;
 
 public class FavouriteUnmarshaller extends AbstractUnmarshaller<Favourite> {
 
   @Override
-  protected Favourite parse(JSONObject json) {
+  protected Favourite parse(Object json) {
+    WSUtils utils = WSUtils.getINSTANCE();
     return new Favourite()
-        .setId(JsonUtils.getInteger(json, "id"))
-        .setKey(JsonUtils.getString(json, "key"))
-        .setName(JsonUtils.getString(json, "name"))
-        .setScope(JsonUtils.getString(json, "scope"))
-        .setQualifier(JsonUtils.getString(json, "qualifier"))
-        .setLanguage(JsonUtils.getString(json, "lang"));
+        .setId(utils.getInteger(json, "id"))
+        .setKey(utils.getString(json, "key"))
+        .setName(utils.getString(json, "name"))
+        .setScope(utils.getString(json, "scope"))
+        .setQualifier(utils.getString(json, "qualifier"))
+        .setLanguage(utils.getString(json, "lang"));
   }
 }
index e63bcd8c08b17717fcbf5746fda859ee74864954..123e94583c1762341d6dc487996b7a0bbd2f5493 100644 (file)
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONObject;
 import org.sonar.wsclient.services.Metric;
+import org.sonar.wsclient.services.WSUtils;
 
 public class MetricUnmarshaller extends AbstractUnmarshaller<Metric> {
 
   @Override
-  protected Metric parse(JSONObject json) {
+  protected Metric parse(Object json) {
+    WSUtils utils = WSUtils.getINSTANCE();
     return new Metric()
-        .setKey(JsonUtils.getString(json, "key"))
-        .setName(JsonUtils.getString(json, "name"))
-        .setDomain(JsonUtils.getString(json, "domain"))
-        .setDescription(JsonUtils.getString(json, "description"))
-        .setDirection(JsonUtils.getInteger(json, "direction"))
-        .setType(JsonUtils.getString(json, "val_type"))
-        .setUserManaged(JsonUtils.getBoolean(json, "user_managed"))
-        .setHidden(JsonUtils.getBoolean(json, "hidden"));
+        .setKey(utils.getString(json, "key"))
+        .setName(utils.getString(json, "name"))
+        .setDomain(utils.getString(json, "domain"))
+        .setDescription(utils.getString(json, "description"))
+        .setDirection(utils.getInteger(json, "direction"))
+        .setType(utils.getString(json, "val_type"))
+        .setUserManaged(utils.getBoolean(json, "user_managed"))
+        .setHidden(utils.getBoolean(json, "hidden"));
   }
 }
index 29d785f485e370597a128a1914aca8750a123193..dbcfafa6faa68c5c71d6e87aec24679dd7eb5eb7 100644 (file)
@@ -1,7 +1,7 @@
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONObject;
 import org.sonar.wsclient.services.Plugin;
+import org.sonar.wsclient.services.WSUtils;
 
 /**
  * @since 2.4
@@ -9,11 +9,12 @@ import org.sonar.wsclient.services.Plugin;
 public class PluginUnmarshaller extends AbstractUnmarshaller<Plugin> {
 
   @Override
-  protected Plugin parse(JSONObject json) {
+  protected Plugin parse(Object json) {
+    WSUtils utils = WSUtils.getINSTANCE();
     return new Plugin()
-      .setKey(JsonUtils.getString(json, "key"))
-      .setName(JsonUtils.getString(json, "name"))
-      .setVersion(JsonUtils.getString(json, "version"));
+      .setKey(utils.getString(json, "key"))
+      .setName(utils.getString(json, "name"))
+      .setVersion(utils.getString(json, "version"));
   }
 
 }
index 9df96d1433d3591ca28df518094daa9b8058c44c..5efea1ca8411d6e059ecdb257cb77c02455220a1 100644 (file)
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONObject;
 import org.sonar.wsclient.services.Property;
+import org.sonar.wsclient.services.WSUtils;
 
 public class PropertyUnmarshaller extends AbstractUnmarshaller<Property> {
 
   @Override
-  protected Property parse(JSONObject json) {
+  protected Property parse(Object json) {
+    WSUtils utils = WSUtils.getINSTANCE();
     return new Property()
-        .setKey(JsonUtils.getString(json, "key"))
-        .setValue(JsonUtils.getString(json, "value"));
+        .setKey(utils.getString(json, "key"))
+        .setValue(utils.getString(json, "value"));
   }
-}
\ No newline at end of file
+}
index fba424d4bbe03625db313c06982ba0d822493dfc..bdb9db20e17f34e160119804a1b9e225657b1c4f 100644 (file)
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
 import org.sonar.wsclient.services.Measure;
 import org.sonar.wsclient.services.Resource;
+import org.sonar.wsclient.services.WSUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -30,53 +29,56 @@ import java.util.List;
 public class ResourceUnmarshaller extends AbstractUnmarshaller<Resource> {
 
   @Override
-  protected Resource parse(JSONObject json) {
+  protected Resource parse(Object json) {
     Resource resource = new Resource();
     parseResourceFields(json, resource);
     parseMeasures(json, resource);
     return resource;
   }
 
-  private void parseResourceFields(JSONObject json, Resource resource) {
-    resource.setId(JsonUtils.getInteger(json, "id"))
-        .setKey(JsonUtils.getString(json, "key"))
-        .setName(JsonUtils.getString(json, "name"))
-        .setLongName(JsonUtils.getString(json, "lname"))
-        .setScope(JsonUtils.getString(json, "scope"))
-        .setQualifier(JsonUtils.getString(json, "qualifier"))
-        .setLanguage(JsonUtils.getString(json, "lang"))
-        .setDescription(JsonUtils.getString(json, "description"))
-        .setDate(JsonUtils.getDateTime(json, "date"))
-        .setVersion(JsonUtils.getString(json, "version"))
-        .setPeriod1Mode(JsonUtils.getString(json, "p1"))
-        .setPeriod1Param(JsonUtils.getString(json, "p1p"))
-        .setPeriod1Date(JsonUtils.getDateTime(json, "p1d"))
-        .setPeriod2Mode(JsonUtils.getString(json, "p2"))
-        .setPeriod2Param(JsonUtils.getString(json, "p2p"))
-        .setPeriod2Date(JsonUtils.getDateTime(json, "p2d"))
-        .setPeriod3Mode(JsonUtils.getString(json, "p3"))
-        .setPeriod3Param(JsonUtils.getString(json, "p3p"))
-        .setPeriod3Date(JsonUtils.getDateTime(json, "p3d"))
-        .setPeriod4Mode(JsonUtils.getString(json, "p4"))
-        .setPeriod4Param(JsonUtils.getString(json, "p4p"))
-        .setPeriod4Date(JsonUtils.getDateTime(json, "p4d"))
-        .setPeriod5Mode(JsonUtils.getString(json, "p5"))
-        .setPeriod5Param(JsonUtils.getString(json, "p5p"))
-        .setPeriod5Date(JsonUtils.getDateTime(json, "p5d"));
+  private void parseResourceFields(Object json, Resource resource) {
+    WSUtils utils = WSUtils.getINSTANCE();
+    resource.setId(utils.getInteger(json, "id"))
+        .setKey(utils.getString(json, "key"))
+        .setName(utils.getString(json, "name"))
+        .setLongName(utils.getString(json, "lname"))
+        .setScope(utils.getString(json, "scope"))
+        .setQualifier(utils.getString(json, "qualifier"))
+        .setLanguage(utils.getString(json, "lang"))
+        .setDescription(utils.getString(json, "description"))
+        .setDate(utils.getDateTime(json, "date"))
+        .setVersion(utils.getString(json, "version"))
+        .setPeriod1Mode(utils.getString(json, "p1"))
+        .setPeriod1Param(utils.getString(json, "p1p"))
+        .setPeriod1Date(utils.getDateTime(json, "p1d"))
+        .setPeriod2Mode(utils.getString(json, "p2"))
+        .setPeriod2Param(utils.getString(json, "p2p"))
+        .setPeriod2Date(utils.getDateTime(json, "p2d"))
+        .setPeriod3Mode(utils.getString(json, "p3"))
+        .setPeriod3Param(utils.getString(json, "p3p"))
+        .setPeriod3Date(utils.getDateTime(json, "p3d"))
+        .setPeriod4Mode(utils.getString(json, "p4"))
+        .setPeriod4Param(utils.getString(json, "p4p"))
+        .setPeriod4Date(utils.getDateTime(json, "p4d"))
+        .setPeriod5Mode(utils.getString(json, "p5"))
+        .setPeriod5Param(utils.getString(json, "p5p"))
+        .setPeriod5Date(utils.getDateTime(json, "p5d"));
   }
 
-  private void parseMeasures(JSONObject json, Resource resource) {
-    JSONArray measuresJson = JsonUtils.getArray(json, "msr");
+  private void parseMeasures(Object json, Resource resource) {
+    WSUtils utils = WSUtils.getINSTANCE();
+    Object measuresJson = utils.getField(json, "msr");
     if (measuresJson != null) {
       resource.setMeasures(parseMeasures(measuresJson));
     }
   }
 
-  private List<Measure> parseMeasures(JSONArray measuresJson) {
+  private List<Measure> parseMeasures(Object measuresJson) {
+    WSUtils utils = WSUtils.getINSTANCE();
     List<Measure> projectMeasures = new ArrayList<Measure>();
-    int len = measuresJson.size();
+    int len = utils.getArraySize(measuresJson);
     for (int i = 0; i < len; i++) {
-      JSONObject measureJson = (JSONObject) measuresJson.get(i);
+      Object measureJson = utils.getArrayElement(measuresJson, i);
       if (measureJson != null) {
         Measure measure = parseMeasure(measureJson);
         projectMeasures.add(measure);
@@ -85,27 +87,29 @@ public class ResourceUnmarshaller extends AbstractUnmarshaller<Resource> {
     return projectMeasures;
   }
 
-  private Measure parseMeasure(JSONObject json) {
+  private Measure parseMeasure(Object json) {
+    WSUtils utils = WSUtils.getINSTANCE();
+
     Measure measure = new Measure();
     measure
-        .setMetricKey(JsonUtils.getString(json, "key"))
-        .setMetricName(JsonUtils.getString(json, "name"))
-        .setValue(JsonUtils.getDouble(json, "val"))
-        .setFormattedValue(JsonUtils.getString(json, "frmt_val"))
-        .setTrend(JsonUtils.getInteger(json, "trend"))
-        .setVar(JsonUtils.getInteger(json, "var"))
-        .setData(JsonUtils.getString(json, "data"))
-        .setRuleKey(JsonUtils.getString(json, "rule_key"))
-        .setRuleName(JsonUtils.getString(json, "rule_name"))
-        .setRuleCategory(JsonUtils.getString(json, "rule_category"))
-        .setRuleSeverity(JsonUtils.getString(json, "rule_priority"))
-        .setCharacteristicKey(JsonUtils.getString(json, "ctic_key"))
-        .setCharacteristicName(JsonUtils.getString(json, "ctic_name"))
-        .setVariation1(JsonUtils.getDouble(json, "var1"))
-        .setVariation2(JsonUtils.getDouble(json, "var2"))
-        .setVariation3(JsonUtils.getDouble(json, "var3"))
-        .setVariation4(JsonUtils.getDouble(json, "var4"))
-        .setVariation5(JsonUtils.getDouble(json, "var5"));
+        .setMetricKey(utils.getString(json, "key"))
+        .setMetricName(utils.getString(json, "name"))
+        .setValue(utils.getDouble(json, "val"))
+        .setFormattedValue(utils.getString(json, "frmt_val"))
+        .setTrend(utils.getInteger(json, "trend"))
+        .setVar(utils.getInteger(json, "var"))
+        .setData(utils.getString(json, "data"))
+        .setRuleKey(utils.getString(json, "rule_key"))
+        .setRuleName(utils.getString(json, "rule_name"))
+        .setRuleCategory(utils.getString(json, "rule_category"))
+        .setRuleSeverity(utils.getString(json, "rule_priority"))
+        .setCharacteristicKey(utils.getString(json, "ctic_key"))
+        .setCharacteristicName(utils.getString(json, "ctic_name"))
+        .setVariation1(utils.getDouble(json, "var1"))
+        .setVariation2(utils.getDouble(json, "var2"))
+        .setVariation3(utils.getDouble(json, "var3"))
+        .setVariation4(utils.getDouble(json, "var4"))
+        .setVariation5(utils.getDouble(json, "var5"));
     return measure;
   }
 }
index 041d3afd573014c3859d363df23c0de12a799f37..9cb3b12f56e8033f4f408bc912d1949e78b099e1 100644 (file)
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
 import org.sonar.wsclient.services.Rule;
 import org.sonar.wsclient.services.RuleParam;
+import org.sonar.wsclient.services.WSUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -33,34 +32,40 @@ import java.util.List;
 public class RuleUnmarshaller extends AbstractUnmarshaller<Rule> {
 
   @Override
-  protected Rule parse(JSONObject json) {
+  protected Rule parse(Object json) {
     Rule rule = new Rule();
     parseRuleFields(json, rule);
     parseParams(json, rule);
     return rule;
   }
 
-  private void parseRuleFields(JSONObject json, Rule rule) {
-    rule.setTitle(JsonUtils.getString(json, "title"))
-        .setKey(JsonUtils.getString(json, "key"))
-        .setRepository(JsonUtils.getString(json, "plugin"))
-        .setDescription(JsonUtils.getString(json, "description"))
-        .setSeverity(JsonUtils.getString(json, "priority"))
-        .setActive("ACTIVE".equals(JsonUtils.getString(json, "status")));
+  private void parseRuleFields(Object json, Rule rule) {
+    WSUtils utils = WSUtils.getINSTANCE();
+
+    rule.setTitle(utils.getString(json, "title"))
+        .setKey(utils.getString(json, "key"))
+        .setRepository(utils.getString(json, "plugin"))
+        .setDescription(utils.getString(json, "description"))
+        .setSeverity(utils.getString(json, "priority"))
+        .setActive("ACTIVE".equals(utils.getString(json, "status")));
   }
 
-  private void parseParams(JSONObject json, Rule rule) {
-    JSONArray paramsJson = (JSONArray) json.get("params");
+  private void parseParams(Object json, Rule rule) {
+    WSUtils utils = WSUtils.getINSTANCE();
+
+    Object paramsJson = utils.getField(json, "params");
     if (paramsJson != null) {
       rule.setParams(parseParams(paramsJson));
     }
   }
 
-  private List<RuleParam> parseParams(JSONArray paramsJson) {
+  private List<RuleParam> parseParams(Object paramsJson) {
+    WSUtils utils = WSUtils.getINSTANCE();
+
     List<RuleParam> ruleParams = new ArrayList<RuleParam>();
-    int len = paramsJson.size();
+    int len = utils.getArraySize(paramsJson);
     for (int i = 0; i < len; i++) {
-      JSONObject paramJson = (JSONObject) paramsJson.get(i);
+      Object paramJson = utils.getArrayElement(paramsJson, i);
       if (paramJson != null) {
         RuleParam param = parseParam(paramJson);
         ruleParams.add(param);
@@ -69,11 +74,13 @@ public class RuleUnmarshaller extends AbstractUnmarshaller<Rule> {
     return ruleParams;
   }
 
-  private RuleParam parseParam(JSONObject json) {
+  private RuleParam parseParam(Object json) {
+    WSUtils utils = WSUtils.getINSTANCE();
+
     RuleParam param = new RuleParam();
-    param.setName(JsonUtils.getString(json, "name"))
-        .setDescription(JsonUtils.getString(json, "description"))
-        .setValue(JsonUtils.getString(json, "value"));
+    param.setName(utils.getString(json, "name"))
+        .setDescription(utils.getString(json, "description"))
+        .setValue(utils.getString(json, "value"));
     return param;
   }
 
index a17a36189d4751de3ad74bac81adc45533c82324..829b174dc4788802d1a0a97307978d2e9cb10667 100644 (file)
@@ -19,9 +19,8 @@
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONObject;
-import org.json.simple.JSONValue;
 import org.sonar.wsclient.services.Server;
+import org.sonar.wsclient.services.WSUtils;
 
 import java.util.List;
 
@@ -30,12 +29,13 @@ import java.util.List;
  */
 public class ServerUnmarshaller implements Unmarshaller<Server> {
   public Server toModel(String json) {
-    JSONObject map = (JSONObject) JSONValue.parse(json);
+    WSUtils utils = WSUtils.getINSTANCE();
+    Object map = utils.parse(json);
     Server server = new Server()
-        .setId(JsonUtils.getString(map, "id"))
-        .setVersion(JsonUtils.getString(map, "version"))
-        .setStatusMessage(JsonUtils.getString(map, "status_msg"));
-    String status = JsonUtils.getString(map, "status");
+        .setId(utils.getString(map, "id"))
+        .setVersion(utils.getString(map, "version"))
+        .setStatusMessage(utils.getString(map, "status_msg"));
+    String status = utils.getString(map, "status");
     if (status != null) {
       server.setStatus(Server.Status.valueOf(status));
     }
index cbda6b4c5d03be78f778c3a2b4b763d856e91023..16eb4aff98dae47318b845f18213e5872c9479a0 100644 (file)
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONObject;
 import org.sonar.wsclient.services.Source;
-
-import java.util.Map;
+import org.sonar.wsclient.services.WSUtils;
 
 public class SourceUnmarshaller extends AbstractUnmarshaller<Source> {
 
   @Override
-  protected Source parse(JSONObject json) {
+  protected Source parse(Object json) {
+    WSUtils utils = WSUtils.getINSTANCE();
     Source source = new Source();
 
-    for (Object o : json.entrySet()) {
-      Map.Entry<String, String> entry = (Map.Entry<String, String>) o;
-      source.addLine(Integer.parseInt(entry.getKey()), entry.getValue());
+    for (String field : utils.getFields(json)) {
+      source.addLine(Integer.parseInt(field), utils.getString(json, field));
     }
 
     return source;
index b59a364bc31a1a31e1cddf53b8e20b774b067c67..08a0ac26d879a7584d108be0a670144def6136f3 100644 (file)
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
 import org.sonar.wsclient.services.TimeMachine;
 import org.sonar.wsclient.services.TimeMachineCell;
 import org.sonar.wsclient.services.TimeMachineColumn;
+import org.sonar.wsclient.services.WSUtils;
 
 public class TimeMachineUnmarshaller extends AbstractUnmarshaller<TimeMachine> {
 
-  protected TimeMachine parse(JSONObject json) {
-    JSONArray cols = JsonUtils.getArray(json, "cols");
-    JSONArray cells = JsonUtils.getArray(json, "cells");
+  protected TimeMachine parse(Object json) {
+    WSUtils utils = WSUtils.getINSTANCE();
+    Object cols = utils.getField(json, "cols");
+    Object cells = utils.getField(json, "cells");
     return new TimeMachine(toColumns(cols), toCells(cells));
   }
 
-  private TimeMachineColumn[] toColumns(JSONArray cols) {
-    int size = cols.size();
+  private TimeMachineColumn[] toColumns(Object cols) {
+    WSUtils utils = WSUtils.getINSTANCE();
+    int size = utils.getArraySize(cols);
     TimeMachineColumn[] result = new TimeMachineColumn[size];
     for (int index = 0; index < size; index++) {
-      JSONObject colJson = (JSONObject) cols.get(index);
-      result[index] = new TimeMachineColumn(index, JsonUtils.getString(colJson, "metric"), null, null);
+      Object colJson = utils.getArrayElement(cols, index);
+      result[index] = new TimeMachineColumn(index, utils.getString(colJson, "metric"), null, null);
     }
     return result;
   }
 
-  private TimeMachineCell[] toCells(JSONArray cells) {
-    int size = cells.size();
+  private TimeMachineCell[] toCells(Object cells) {
+    WSUtils utils = WSUtils.getINSTANCE();
+    int size = utils.getArraySize(cells);
     TimeMachineCell[] result = new TimeMachineCell[size];
     for (int i = 0; i < size; i++) {
-      JSONObject cellJson = (JSONObject) cells.get(i);
-      JSONArray valuesJson = JsonUtils.getArray(cellJson, "v");
+      Object cellJson = utils.getArrayElement(cells, i);
+      Object valuesJson = utils.getField(cellJson, "v");
 
-      Object[] resultValues = new Object[valuesJson.size()];
-      for (int indexValue = 0; indexValue < valuesJson.size(); indexValue++) {
-        Object value = valuesJson.get(indexValue);
+      Object[] resultValues = new Object[utils.getArraySize(valuesJson)];
+      for (int indexValue = 0; indexValue < utils.getArraySize(valuesJson); indexValue++) {
+        Object value = utils.getArrayElement(valuesJson, indexValue);
         resultValues[indexValue] = value;
       }
-      result[i] = new TimeMachineCell(JsonUtils.getDateTime(cellJson, "d"), resultValues);
+      result[i] = new TimeMachineCell(utils.getDateTime(cellJson, "d"), resultValues);
     }
     return result;
   }
index 258e5938570a2db796ac1f1cd867971178a471ca..18c297b22cb95a8b4ccfb6042e5494121510c6bd 100644 (file)
  */
 package org.sonar.wsclient.unmarshallers;
 
-import org.json.simple.JSONObject;
 import org.sonar.wsclient.services.Violation;
+import org.sonar.wsclient.services.WSUtils;
 
 public class ViolationUnmarshaller extends AbstractUnmarshaller<Violation> {
 
   @Override
-  protected Violation parse(JSONObject json) {
+  protected Violation parse(Object json) {
+    WSUtils utils = WSUtils.getINSTANCE();
+
     Violation violation = new Violation();
-    violation.setMessage(JsonUtils.getString(json, "message"));
-    violation.setLine(JsonUtils.getInteger(json, "line"));
-    violation.setSeverity(JsonUtils.getString(json, "priority"));
-    violation.setCreatedAt(JsonUtils.getDateTime(json, "createdAt"));
+    violation.setMessage(utils.getString(json, "message"));
+    violation.setLine(utils.getInteger(json, "line"));
+    violation.setSeverity(utils.getString(json, "priority"));
+    violation.setCreatedAt(utils.getDateTime(json, "createdAt"));
 
-    JSONObject rule = (JSONObject) json.get("rule");
+    Object rule = utils.getField(json, "rule");
     if (rule != null) {
-      violation.setRuleKey(JsonUtils.getString(rule, "key"));
-      violation.setRuleName(JsonUtils.getString(rule, "name"));
+      violation.setRuleKey(utils.getString(rule, "key"));
+      violation.setRuleName(utils.getString(rule, "name"));
     }
 
-    JSONObject resource = (JSONObject) json.get("resource");
+    Object resource = utils.getField(json, "resource");
     if (resource != null) {
-      violation.setResourceKey(JsonUtils.getString(resource, "key"));
-      violation.setResourceName(JsonUtils.getString(resource, "name"));
-      violation.setResourceQualifier(JsonUtils.getString(resource, "qualifier"));
-      violation.setResourceScope(JsonUtils.getString(resource, "scope"));
+      violation.setResourceKey(utils.getString(resource, "key"));
+      violation.setResourceName(utils.getString(resource, "name"));
+      violation.setResourceQualifier(utils.getString(resource, "qualifier"));
+      violation.setResourceScope(utils.getString(resource, "scope"));
     }
     return violation;
   }
index 4d5e412330e8f6663e4fd5793dd05cecbde039fa..b96defeba12d843b877de43e0683886808b36c1a 100644 (file)
@@ -27,13 +27,13 @@ import java.util.List;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
-public class DependencyTreeUnmarshallerTest {
+public class DependencyTreeUnmarshallerTest extends UnmarshallerTestCase {
   @Test
   public void singleDepthOfDependencies() {
     List<DependencyTree> trees = new DependencyTreeUnmarshaller().toModels("[]");
     assertThat(trees.size(), is(0));
 
-    trees = new DependencyTreeUnmarshaller().toModels(WSTestUtils.loadFile("/dependency_tree/single_depth.json"));
+    trees = new DependencyTreeUnmarshaller().toModels(loadFile("/dependency_tree/single_depth.json"));
     assertThat(trees.size(), is(2));
     assertThat(trees.get(0).getDepId(), is("12345"));
     assertThat(trees.get(0).getResourceId(), is("2000"));
@@ -48,7 +48,7 @@ public class DependencyTreeUnmarshallerTest {
 
   @Test
   public void manyDepthsOfDependencies() {
-    List<DependencyTree> trees = new DependencyTreeUnmarshaller().toModels(WSTestUtils.loadFile("/dependency_tree/many_depths.json"));
+    List<DependencyTree> trees = new DependencyTreeUnmarshaller().toModels(loadFile("/dependency_tree/many_depths.json"));
     assertThat(trees.size(), is(1));
     List<DependencyTree> secondLevelTrees = trees.get(0).getTo();
     assertThat(secondLevelTrees.size(), is(2));
index d5c999d57ff928996e00001d3ccfc308f9363217..1ad4d090a2aea60746e0bb8caa984b60efb2bdcc 100644 (file)
@@ -28,14 +28,14 @@ import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
-public class DependencyUnmarshallerTest {
+public class DependencyUnmarshallerTest extends UnmarshallerTestCase {
 
   @Test
   public void toModel() {
     Dependency dependency = new DependencyUnmarshaller().toModel("[]");
     assertThat(dependency, nullValue());
 
-    dependency = new DependencyUnmarshaller().toModel(WSTestUtils.loadFile("/dependencies/single.json"));
+    dependency = new DependencyUnmarshaller().toModel(loadFile("/dependencies/single.json"));
     assertThat(dependency.getId(), is("1649"));
     assertThat(dependency.getFromKey(), is("org.apache.shiro:shiro-core:org.apache.shiro.authc.pam"));
     assertThat(dependency.getToKey(), is("org.apache.shiro:shiro-core:org.apache.shiro.realm"));
@@ -52,7 +52,7 @@ public class DependencyUnmarshallerTest {
     Collection<Dependency> dependencies = new DependencyUnmarshaller().toModels("[]");
     assertThat(dependencies.size(), is(0));
 
-    dependencies = new DependencyUnmarshaller().toModels(WSTestUtils.loadFile("/dependencies/many.json"));
+    dependencies = new DependencyUnmarshaller().toModels(loadFile("/dependencies/many.json"));
     assertThat(dependencies.size(), is(15));
   }
 
index 1577760bb234196f2d82dd152cc2de5396a2fddf..b5c19029f0b898047b392653f16e46fb0d9744de 100644 (file)
@@ -29,11 +29,11 @@ import java.util.List;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
-public class EventUnmarshallerTest {
+public class EventUnmarshallerTest extends UnmarshallerTestCase {
 
   @Test
   public void toModel() throws Exception {
-    List<Event> events = new EventUnmarshaller().toModels(WSTestUtils.loadFile("/events/events.json"));
+    List<Event> events = new EventUnmarshaller().toModels(loadFile("/events/events.json"));
     Event event = events.get(0);
     assertThat(event.getId(), is("10"));
     assertThat(event.getName(), is("foo"));
index dde72bf07a16391dc6170d450d276eab03d9cf72..ef2e1c3aaf016bfaf5c50a2debf5e8ebcbb7f40d 100644 (file)
@@ -30,7 +30,7 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.junit.Assert.assertThat;
 
-public class JsonUtilsTest {
+public class JsonUtilsTest extends UnmarshallerTestCase {
 
   @Test
   public void getIntFields() {
index 1ac9d9a83b1296662083a556b89907c8f92c08bc..0eb4ff65fa7f04e84ff4d735d3a04a0308c9895d 100644 (file)
@@ -29,14 +29,14 @@ import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
-public class MetricUnmarshallerTest {
+public class MetricUnmarshallerTest extends UnmarshallerTestCase {
 
   @Test
   public void toModel() {
     Metric metric = new MetricUnmarshaller().toModel("[]");
     assertThat(metric, nullValue());
 
-    metric = new MetricUnmarshaller().toModel(WSTestUtils.loadFile("/metrics/one_metric.json"));
+    metric = new MetricUnmarshaller().toModel(loadFile("/metrics/one_metric.json"));
     assertThat(metric.getKey(), is("ncloc"));
     assertThat(metric.getName(), is("Lines of code"));
     assertThat(metric.getDescription(), is("Non Commenting Lines of Code"));
@@ -49,10 +49,10 @@ public class MetricUnmarshallerTest {
     Collection<Metric> metrics = new MetricUnmarshaller().toModels("[]");
     assertThat(metrics.size(), is(0));
 
-    metrics = new MetricUnmarshaller().toModels(WSTestUtils.loadFile("/metrics/one_metric.json"));
+    metrics = new MetricUnmarshaller().toModels(loadFile("/metrics/one_metric.json"));
     assertThat(metrics.size(), is(1));
 
-    metrics = new MetricUnmarshaller().toModels(WSTestUtils.loadFile("/metrics/many_metrics.json"));
+    metrics = new MetricUnmarshaller().toModels(loadFile("/metrics/many_metrics.json"));
     assertThat(metrics.size(), is(10));
   }
 
index 6b709a3a5945eb8ed76a11c6e7e80a27a74d76eb..12423bf5ef7c362c0addcfaa7ec9aa944666d80c 100644 (file)
@@ -1,18 +1,22 @@
 package org.sonar.wsclient.unmarshallers;
 
 import org.junit.Test;
+import org.sonar.wsclient.JdkUtils;
 import org.sonar.wsclient.services.Plugin;
+import org.sonar.wsclient.services.WSUtils;
 
 import java.util.List;
 
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
-public class PluginUnmarshallerTest {
+public class PluginUnmarshallerTest extends UnmarshallerTestCase {
 
   @Test
   public void toModel() throws Exception {
-    List<Plugin> plugins = new PluginUnmarshaller().toModels(WSTestUtils.loadFile("/plugins/plugins.json"));
+    WSUtils.setInstance(new JdkUtils());
+
+    List<Plugin> plugins = new PluginUnmarshaller().toModels(loadFile("/plugins/plugins.json"));
     Plugin plugin = plugins.get(0);
     assertThat(plugin.getKey(), is("foo"));
     assertThat(plugin.getName(), is("Foo"));
index ea919cb18f65cd76fe494b6f364ab1df622d24df..9ffb0de4b8c848da0ddbfbf3e3aeb807a2ac0256 100644 (file)
@@ -28,13 +28,13 @@ import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
-public class PropertyUnmarshallerTest {
+public class PropertyUnmarshallerTest extends UnmarshallerTestCase {
   @Test
   public void toModel() {
     Property property = new PropertyUnmarshaller().toModel("[]");
     assertThat(property, nullValue());
 
-    property = new PropertyUnmarshaller().toModel(WSTestUtils.loadFile("/properties/single.json"));
+    property = new PropertyUnmarshaller().toModel(loadFile("/properties/single.json"));
     assertThat(property.getKey(), is("myprop"));
     assertThat(property.getValue(), is("myvalue"));
   }
@@ -44,10 +44,10 @@ public class PropertyUnmarshallerTest {
     Collection<Property> properties = new PropertyUnmarshaller().toModels("[]");
     assertThat(properties.size(), is(0));
 
-    properties = new PropertyUnmarshaller().toModels(WSTestUtils.loadFile("/properties/single.json"));
+    properties = new PropertyUnmarshaller().toModels(loadFile("/properties/single.json"));
     assertThat(properties.size(), is(1));
 
-    properties = new PropertyUnmarshaller().toModels(WSTestUtils.loadFile("/properties/many.json"));
+    properties = new PropertyUnmarshaller().toModels(loadFile("/properties/many.json"));
     assertThat(properties.size(), is(3));
   }
 }
index 98df780a5127b3895f54b2f83cd9a9efc5e63522..acfda91f3e55b49f022d01fc2d6c62087bd4df21 100644 (file)
@@ -29,11 +29,11 @@ import static org.hamcrest.core.Is.is;
 import static org.hamcrest.core.IsNot.not;
 import static org.junit.Assert.assertThat;
 
-public class ResourceUnmarshallerTest {
+public class ResourceUnmarshallerTest extends UnmarshallerTestCase {
 
   @Test
   public void singleResource() {
-    String json = WSTestUtils.loadFile("/resources/single-resource.json");
+    String json = loadFile("/resources/single-resource.json");
     assertSonar(new ResourceUnmarshaller().toModel(json));
 
     List<Resource> resources = new ResourceUnmarshaller().toModels(json);
@@ -43,7 +43,7 @@ public class ResourceUnmarshallerTest {
 
   @Test
   public void singleResourceWithMeasures() {
-    Resource resource = new ResourceUnmarshaller().toModel(WSTestUtils.loadFile("/resources/single-resource-with-measures.json"));
+    Resource resource = new ResourceUnmarshaller().toModel(loadFile("/resources/single-resource-with-measures.json"));
     assertSonar(resource);
 
     assertThat(resource.getMeasures().size(), is(2));
@@ -54,7 +54,7 @@ public class ResourceUnmarshallerTest {
 
   @Test
   public void singleResourceWithTrends() {
-    Resource resource = new ResourceUnmarshaller().toModel(WSTestUtils.loadFile("/resources/single-resource-with-trends.json"));
+    Resource resource = new ResourceUnmarshaller().toModel(loadFile("/resources/single-resource-with-trends.json"));
     assertSonar(resource);
 
     assertThat(resource.getMeasures().size(), is(2));
@@ -68,7 +68,7 @@ public class ResourceUnmarshallerTest {
 
   @Test
   public void manyResources() {
-    List<Resource> resources = new ResourceUnmarshaller().toModels(WSTestUtils.loadFile("/resources/many-resources.json"));
+    List<Resource> resources = new ResourceUnmarshaller().toModels(loadFile("/resources/many-resources.json"));
 
     assertThat(resources.size(), is(19));
     for (Resource resource : resources) {
@@ -80,7 +80,7 @@ public class ResourceUnmarshallerTest {
 
   @Test
   public void manyResourcesWithMeasures() {
-    List<Resource> resources = new ResourceUnmarshaller().toModels(WSTestUtils.loadFile("/resources/many-resources-with-measures.json"));
+    List<Resource> resources = new ResourceUnmarshaller().toModels(loadFile("/resources/many-resources-with-measures.json"));
 
     assertThat(resources.size(), is(17));
     for (Resource resource : resources) {
index 71484bbe97e99efcafb21354208daf947191ca7f..6f75b766871f93b700b791be96a79ee4d271bc45 100644 (file)
@@ -28,7 +28,7 @@ import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.nullValue;
 import static org.junit.Assert.assertThat;
 
-public class RuleUnmarshallerTest {
+public class RuleUnmarshallerTest extends UnmarshallerTestCase {
 
   @Test
   public void toModels() {
@@ -38,7 +38,7 @@ public class RuleUnmarshallerTest {
     List<Rule> rules = new RuleUnmarshaller().toModels("[]");
     assertThat(rules.size(), is(0));
 
-    rules = new RuleUnmarshaller().toModels(WSTestUtils.loadFile("/rules/rules.json"));
+    rules = new RuleUnmarshaller().toModels(loadFile("/rules/rules.json"));
     assertThat(rules.size(), is(6));
 
     rule = rules.get(0);
index 8e966d1a7c16180ea3f78dc461f78cb566dda6e3..c6936bc56a5380eeb3af272c9eef55c11ce60f17 100644 (file)
@@ -26,11 +26,11 @@ import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
-public class ServerUnmarshallerTest {
+public class ServerUnmarshallerTest extends UnmarshallerTestCase {
 
   @Test
   public void testToModel() {
-    Server server = new ServerUnmarshaller().toModel(WSTestUtils.loadFile("/server/server.json"));
+    Server server = new ServerUnmarshaller().toModel(loadFile("/server/server.json"));
     assertThat(server.getId(), is("123456789"));
     assertThat(server.getVersion(), is("2.0-SNAPSHOT"));
     assertThat(server.getStatus(), is(Server.Status.UP));
@@ -39,7 +39,7 @@ public class ServerUnmarshallerTest {
 
   @Test
   public void shouldNotFailIfStatusIsMissing() {
-    Server server = new ServerUnmarshaller().toModel(WSTestUtils.loadFile("/server/status_missing.json"));
+    Server server = new ServerUnmarshaller().toModel(loadFile("/server/status_missing.json"));
     assertThat(server.getId(), is("123456789"));
     assertThat(server.getVersion(), is("2.0-SNAPSHOT"));
     assertThat(server.getStatus(), nullValue());
index 31061fa2bbe30a029150ae9fa20efd6cc2f0be91..b97d71c216f7943ec70956cc75633f1d1eb83055 100644 (file)
@@ -26,21 +26,21 @@ import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
-public class SourceUnmarshallerTest {
+public class SourceUnmarshallerTest extends UnmarshallerTestCase {
 
   @Test
   public void toModel() {
     Source source = new SourceUnmarshaller().toModel("[]");
     assertThat(source, nullValue());
 
-    source = new SourceUnmarshaller().toModel(WSTestUtils.loadFile("/sources/source.json"));
+    source = new SourceUnmarshaller().toModel(loadFile("/sources/source.json"));
     assertThat(source.getLines().size(), is(236));
     assertThat(source.getLine(3), is(" * Copyright (C) 2009 SonarSource SA"));
   }
 
   @Test
   public void fromLineToLine() {
-    Source source = new SourceUnmarshaller().toModel(WSTestUtils.loadFile("/sources/from_line_to_line.json"));
+    Source source = new SourceUnmarshaller().toModel(loadFile("/sources/from_line_to_line.json"));
     assertThat(source.getLines().size(), is(15));
     assertThat(source.getLine(1), nullValue());
     assertThat(source.getLine(3), is(" * Copyright (C) 2009 SonarSource SA"));
index 731d58e24f74655e1dd70a87ce3fe3fdd6077081..bad185a6b7912f5ac0df3ff4afe0cac3ec21f0a7 100644 (file)
@@ -26,11 +26,11 @@ import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
 
-public class TimeMachineUnmarshallerTest {
+public class TimeMachineUnmarshallerTest extends UnmarshallerTestCase {
 
   @Test
   public void testToModel() throws Exception {
-    TimeMachine timeMachine = new TimeMachineUnmarshaller().toModel(WSTestUtils.loadFile("/timemachine/timemachine.json"));
+    TimeMachine timeMachine = new TimeMachineUnmarshaller().toModel(loadFile("/timemachine/timemachine.json"));
 
     // columns
     assertThat(timeMachine.getColumns().length, is(2));
@@ -52,7 +52,7 @@ public class TimeMachineUnmarshallerTest {
 
   @Test
   public void shouldAcceptNullValues() throws Exception {
-    TimeMachine timeMachine = new TimeMachineUnmarshaller().toModel(WSTestUtils.loadFile("/timemachine/null-values.json"));
+    TimeMachine timeMachine = new TimeMachineUnmarshaller().toModel(loadFile("/timemachine/null-values.json"));
 
     assertThat(timeMachine.getCells()[0].getValues().length, is(2));
     assertThat(timeMachine.getCells()[0].getValues()[0], nullValue());
@@ -64,7 +64,7 @@ public class TimeMachineUnmarshallerTest {
 
   @Test
   public void shouldCastValues() throws Exception {
-    TimeMachine timeMachine = new TimeMachineUnmarshaller().toModel(WSTestUtils.loadFile("/timemachine/typed-values.json"));
+    TimeMachine timeMachine = new TimeMachineUnmarshaller().toModel(loadFile("/timemachine/typed-values.json"));
 
     assertThat(timeMachine.getCells()[0].getValues().length, is(2));
     assertThat((String) timeMachine.getCells()[0].getValues()[0], is("Sonar way"));
diff --git a/sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/UnmarshallerTestCase.java b/sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/UnmarshallerTestCase.java
new file mode 100644 (file)
index 0000000..82792d3
--- /dev/null
@@ -0,0 +1,25 @@
+package org.sonar.wsclient.unmarshallers;
+
+import org.apache.commons.io.IOUtils;
+import org.junit.BeforeClass;
+import org.sonar.wsclient.JdkUtils;
+import org.sonar.wsclient.services.WSUtils;
+
+import java.io.IOException;
+
+public abstract class UnmarshallerTestCase {
+
+  @BeforeClass
+  public static void setupWsUtils() {
+    WSUtils.setInstance(new JdkUtils());
+  }
+
+  public static String loadFile(String path) {
+    try {
+      return IOUtils.toString(UnmarshallerTestCase.class.getResourceAsStream(path));
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+}
index 22e256dc73bea662e89650fd4b993f712d7cedbe..fd83fcca74bc4c2a3d45250a668efad87c6e596d 100644 (file)
@@ -30,14 +30,14 @@ import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.core.IsNot.not;
 import static org.junit.Assert.assertThat;
 
-public class ViolationUnmarshallerTest {
+public class ViolationUnmarshallerTest extends UnmarshallerTestCase {
 
   @Test
   public void toModels() {
     Violation violation = new ViolationUnmarshaller().toModel("[]");
     assertThat(violation, nullValue());
 
-    List<Violation> violations = new ViolationUnmarshaller().toModels(WSTestUtils.loadFile("/violations/violations.json"));
+    List<Violation> violations = new ViolationUnmarshaller().toModels(loadFile("/violations/violations.json"));
     assertThat(violations.size(), is(2));
 
     violation = violations.get(0);
@@ -56,7 +56,7 @@ public class ViolationUnmarshallerTest {
 
   @Test
   public void violationWithoutLineNumber() {
-    Violation violation = new ViolationUnmarshaller().toModel(WSTestUtils.loadFile("/violations/violation-without-optional-fields.json"));
+    Violation violation = new ViolationUnmarshaller().toModel(loadFile("/violations/violation-without-optional-fields.json"));
     assertThat(violation.getMessage(), not(nullValue()));
     assertThat(violation.getLine(), nullValue());
     assertThat(violation.getCreatedAt(), nullValue());
diff --git a/sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/WSTestUtils.java b/sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/WSTestUtils.java
deleted file mode 100644 (file)
index a6c8981..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2009 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.wsclient.unmarshallers;
-
-import org.apache.commons.io.IOUtils;
-
-import java.io.IOException;
-
-public final class WSTestUtils {
-
-  public static String loadFile(String path) {
-    try {
-      return IOUtils.toString(WSTestUtils.class.getResourceAsStream(path));
-    } catch (IOException e) {
-      throw new RuntimeException(e);
-    }
-  }
-
-  private WSTestUtils() {
-  }
-
-}