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.unmarshallers;
021
022 import org.json.simple.JSONArray;
023 import org.json.simple.JSONObject;
024 import org.sonar.wsclient.services.Measure;
025 import org.sonar.wsclient.services.Resource;
026
027 import java.util.ArrayList;
028 import java.util.List;
029
030 public class ResourceUnmarshaller extends AbstractUnmarshaller<Resource> {
031
032 @Override
033 protected Resource parse(JSONObject json) {
034 Resource resource = new Resource();
035 parseResourceFields(json, resource);
036 parseMeasures(json, resource);
037 return resource;
038 }
039
040 private void parseResourceFields(JSONObject json, Resource resource) {
041 resource.setId(JsonUtils.getInteger(json, "id"))
042 .setKey(JsonUtils.getString(json, "key"))
043 .setName(JsonUtils.getString(json, "name"))
044 .setLongName(JsonUtils.getString(json, "lname"))
045 .setScope(JsonUtils.getString(json, "scope"))
046 .setQualifier(JsonUtils.getString(json, "qualifier"))
047 .setLanguage(JsonUtils.getString(json, "lang"))
048 .setDescription(JsonUtils.getString(json, "description"))
049 .setDate(JsonUtils.getDateTime(json, "date"))
050 .setVersion(JsonUtils.getString(json, "version"));
051 }
052
053 private void parseMeasures(JSONObject json, Resource resource) {
054 JSONArray measuresJson = (JSONArray) json.get("msr");
055 if (measuresJson != null) {
056 resource.setMeasures(parseMeasures(measuresJson));
057 }
058 }
059
060 private List<Measure> parseMeasures(JSONArray measuresJson) {
061 List<Measure> projectMeasures = new ArrayList<Measure>();
062 int len = measuresJson.size();
063 for (int i = 0; i < len; i++) {
064 JSONObject measureJson = (JSONObject) measuresJson.get(i);
065 if (measureJson != null) {
066 Measure measure = parseMeasure(measureJson);
067 projectMeasures.add(measure);
068 }
069 }
070 return projectMeasures;
071 }
072
073 private Measure parseMeasure(JSONObject json) {
074 Measure measure = new Measure();
075 measure
076 .setMetricKey(JsonUtils.getString(json, "key"))
077 .setMetricName(JsonUtils.getString(json, "name"))
078 .setValue(JsonUtils.getDouble(json, "val"))
079 .setFormattedValue(JsonUtils.getString(json, "frmt_val"))
080 .setTrend(JsonUtils.getInteger(json, "trend"))
081 .setVar(JsonUtils.getInteger(json, "var"))
082 .setData(JsonUtils.getString(json, "data"))
083 .setRuleKey(JsonUtils.getString(json, "rule_key"))
084 .setRuleName(JsonUtils.getString(json, "rule_name"))
085 .setRuleCategory(JsonUtils.getString(json, "rule_category"))
086 .setRulePriority(JsonUtils.getString(json, "rule_priority"))
087 .setCharacteristicKey(JsonUtils.getString(json, "ctic_key"))
088 .setCharacteristicName(JsonUtils.getString(json, "ctic_name"));
089 return measure;
090 }
091 }