001 /*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2008-2012 SonarSource
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.sonar.wsclient.services.Measure;
023 import org.sonar.wsclient.services.Resource;
024 import org.sonar.wsclient.services.WSUtils;
025
026 import java.util.ArrayList;
027 import java.util.List;
028
029 public class ResourceUnmarshaller extends AbstractUnmarshaller<Resource> {
030
031 @Override
032 protected Resource parse(Object json) {
033 Resource resource = new Resource();
034 parseResourceFields(json, resource);
035 parseMeasures(json, resource);
036 return resource;
037 }
038
039 private void parseResourceFields(Object json, Resource resource) {
040 WSUtils utils = WSUtils.getINSTANCE();
041 resource.setId(utils.getInteger(json, "id"))
042 .setKey(utils.getString(json, "key"))
043 .setName(utils.getString(json, "name"))
044 .setLongName(utils.getString(json, "lname"))
045 .setCopy(utils.getInteger(json, "copy"))
046 .setScope(utils.getString(json, "scope"))
047 .setQualifier(utils.getString(json, "qualifier"))
048 .setLanguage(utils.getString(json, "lang"))
049 .setDescription(utils.getString(json, "description"))
050 .setDate(utils.getDateTime(json, "date"))
051 .setVersion(utils.getString(json, "version"))
052 .setPeriod1Mode(utils.getString(json, "p1"))
053 .setPeriod1Param(utils.getString(json, "p1p"))
054 .setPeriod1Date(utils.getDateTime(json, "p1d"))
055 .setPeriod2Mode(utils.getString(json, "p2"))
056 .setPeriod2Param(utils.getString(json, "p2p"))
057 .setPeriod2Date(utils.getDateTime(json, "p2d"))
058 .setPeriod3Mode(utils.getString(json, "p3"))
059 .setPeriod3Param(utils.getString(json, "p3p"))
060 .setPeriod3Date(utils.getDateTime(json, "p3d"))
061 .setPeriod4Mode(utils.getString(json, "p4"))
062 .setPeriod4Param(utils.getString(json, "p4p"))
063 .setPeriod4Date(utils.getDateTime(json, "p4d"))
064 .setPeriod5Mode(utils.getString(json, "p5"))
065 .setPeriod5Param(utils.getString(json, "p5p"))
066 .setPeriod5Date(utils.getDateTime(json, "p5d"));
067 }
068
069 private void parseMeasures(Object json, Resource resource) {
070 WSUtils utils = WSUtils.getINSTANCE();
071 Object measuresJson = utils.getField(json, "msr");
072 if (measuresJson != null) {
073 resource.setMeasures(parseMeasures(measuresJson));
074 }
075 }
076
077 private List<Measure> parseMeasures(Object measuresJson) {
078 WSUtils utils = WSUtils.getINSTANCE();
079 List<Measure> projectMeasures = new ArrayList<Measure>();
080 int len = utils.getArraySize(measuresJson);
081 for (int i = 0; i < len; i++) {
082 Object measureJson = utils.getArrayElement(measuresJson, i);
083 if (measureJson != null) {
084 Measure measure = parseMeasure(measureJson);
085 projectMeasures.add(measure);
086 }
087 }
088 return projectMeasures;
089 }
090
091 private Measure parseMeasure(Object json) {
092 WSUtils utils = WSUtils.getINSTANCE();
093
094 Measure measure = new Measure();
095 measure
096 .setMetricKey(utils.getString(json, "key"))
097 .setMetricName(utils.getString(json, "name"))
098 .setValue(utils.getDouble(json, "val"))
099 .setFormattedValue(utils.getString(json, "frmt_val"))
100 .setTrend(utils.getInteger(json, "trend"))
101 .setVar(utils.getInteger(json, "var"))
102 .setData(utils.getString(json, "data"))
103 .setRuleKey(utils.getString(json, "rule_key"))
104 .setRuleName(utils.getString(json, "rule_name"))
105 .setRuleCategory(utils.getString(json, "rule_category"))
106 .setRuleSeverity(utils.getString(json, "rule_priority"))
107 .setCharacteristicKey(utils.getString(json, "ctic_key"))
108 .setCharacteristicName(utils.getString(json, "ctic_name"))
109 .setVariation1(utils.getDouble(json, "var1"))
110 .setVariation2(utils.getDouble(json, "var2"))
111 .setVariation3(utils.getDouble(json, "var3"))
112 .setVariation4(utils.getDouble(json, "var4"))
113 .setVariation5(utils.getDouble(json, "var5"));
114 return measure;
115 }
116 }