001 /*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2009 SonarSource SA
004 * mailto:contact AT sonarsource DOT com
005 *
006 * Sonar is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * Sonar is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with Sonar; if not, write to the Free Software
018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
019 */
020 package org.sonar.wsclient.gwt.unmarshallers;
021
022 import com.google.gwt.json.client.JSONObject;
023 import com.google.gwt.json.client.JSONValue;
024 import org.sonar.gwt.JsonUtils;
025 import org.sonar.wsclient.services.Measure;
026 import org.sonar.wsclient.services.Resource;
027
028 import java.util.ArrayList;
029 import java.util.List;
030
031 public class ResourceUnmarshaller extends AbstractUnmarshaller<Resource> {
032
033 private static final ResourceUnmarshaller INSTANCE = new ResourceUnmarshaller();
034
035 private ResourceUnmarshaller() {
036 }
037
038 public static ResourceUnmarshaller getInstance() {
039 return INSTANCE;
040 }
041
042 protected Resource parse(JSONObject json) {
043 Resource resource = new Resource();
044 parseResourceFields(json, resource);
045 parseMeasures(json, resource);
046 return resource;
047 }
048
049 private void parseResourceFields(JSONObject json, Resource resource) {
050 resource.setId(JsonUtils.getInteger(json, "id"))
051 .setKey(JsonUtils.getString(json, "key"))
052 .setName(JsonUtils.getString(json, "name"))
053 .setLongName(JsonUtils.getString(json, "lname"))
054 .setScope(JsonUtils.getString(json, "scope"))
055 .setQualifier(JsonUtils.getString(json, "qualifier"))
056 .setLanguage(JsonUtils.getString(json, "lang"))
057 .setVersion(JsonUtils.getString(json, "version"));
058 }
059
060 private void parseMeasures(JSONObject json, Resource resource) {
061 JSONValue measuresJson = json.get("msr");
062 if (measuresJson != null) {
063 resource.setMeasures(parseMeasures(measuresJson));
064 }
065 }
066
067 private List<Measure> parseMeasures(JSONValue measuresJson) {
068 List<Measure> projectMeasures = new ArrayList<Measure>();
069 int len = JsonUtils.getArraySize(measuresJson);
070 for (int i = 0; i < len; i++) {
071 JSONObject measureJson = JsonUtils.getArray(measuresJson, i);
072 if (measureJson != null) {
073 Measure measure = parseMeasure(measureJson);
074 projectMeasures.add(measure);
075 }
076 }
077 return projectMeasures;
078 }
079
080 private Measure parseMeasure(JSONObject json) {
081 Measure measure = new Measure();
082 measure
083 .setMetricKey(JsonUtils.getString(json, "key"))
084 .setMetricName(JsonUtils.getString(json, "name"))
085 .setValue(JsonUtils.getDouble(json, "val"))
086 .setFormattedValue(JsonUtils.getString(json, "frmt_val"))
087 .setData(JsonUtils.getString(json, "data"))
088 .setTrend(JsonUtils.getInteger(json, "trend"))
089 .setVar(JsonUtils.getInteger(json, "var"))
090 .setRuleKey(JsonUtils.getString(json, "rule_key"))
091 .setRuleName(JsonUtils.getString(json, "rule_name"))
092 .setRuleCategory(JsonUtils.getString(json, "rule_category"))
093 .setRulePriority(JsonUtils.getString(json, "rule_priority"));
094 return measure;
095 }
096 }