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 .setDate(JsonUtils.getDate(json, "date"))
059 .setCopy(JsonUtils.getInteger(json, "copy"));
060 }
061
062 private void parseMeasures(JSONObject json, Resource resource) {
063 JSONValue measuresJson = json.get("msr");
064 if (measuresJson != null) {
065 resource.setMeasures(parseMeasures(measuresJson));
066 }
067 }
068
069 private List<Measure> parseMeasures(JSONValue measuresJson) {
070 List<Measure> projectMeasures = new ArrayList<Measure>();
071 int len = JsonUtils.getArraySize(measuresJson);
072 for (int i = 0; i < len; i++) {
073 JSONObject measureJson = JsonUtils.getArray(measuresJson, i);
074 if (measureJson != null) {
075 Measure measure = parseMeasure(measureJson);
076 projectMeasures.add(measure);
077 }
078 }
079 return projectMeasures;
080 }
081
082 private Measure parseMeasure(JSONObject json) {
083 Measure measure = new Measure();
084 measure
085 .setMetricKey(JsonUtils.getString(json, "key"))
086 .setMetricName(JsonUtils.getString(json, "name"))
087 .setValue(JsonUtils.getDouble(json, "val"))
088 .setFormattedValue(JsonUtils.getString(json, "frmt_val"))
089 .setData(JsonUtils.getString(json, "data"))
090 .setTrend(JsonUtils.getInteger(json, "trend"))
091 .setVar(JsonUtils.getInteger(json, "var"))
092 .setRuleKey(JsonUtils.getString(json, "rule_key"))
093 .setRuleName(JsonUtils.getString(json, "rule_name"))
094 .setRuleCategory(JsonUtils.getString(json, "rule_category"))
095 .setRulePriority(JsonUtils.getString(json, "rule_priority"))
096 .setCharacteristicKey(JsonUtils.getString(json, "ctic_key"))
097 .setCharacteristicName(JsonUtils.getString(json, "ctic_name"));
098 return measure;
099 }
100 }