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            .setPeriod1Mode(JsonUtils.getString(json, "p1"))
052            .setPeriod1Param(JsonUtils.getString(json, "p1p"))
053            .setPeriod1Date(JsonUtils.getDateTime(json, "p1d"))
054            .setPeriod2Mode(JsonUtils.getString(json, "p2"))
055            .setPeriod2Param(JsonUtils.getString(json, "p2p"))
056            .setPeriod2Date(JsonUtils.getDateTime(json, "p2d"))
057            .setPeriod3Mode(JsonUtils.getString(json, "p3"))
058            .setPeriod3Param(JsonUtils.getString(json, "p3p"))
059            .setPeriod3Date(JsonUtils.getDateTime(json, "p3d"))
060            .setPeriod4Mode(JsonUtils.getString(json, "p4"))
061            .setPeriod4Param(JsonUtils.getString(json, "p4p"))
062            .setPeriod4Date(JsonUtils.getDateTime(json, "p4d"))
063            .setPeriod5Mode(JsonUtils.getString(json, "p5"))
064            .setPeriod5Param(JsonUtils.getString(json, "p5p"))
065            .setPeriod5Date(JsonUtils.getDateTime(json, "p5d"));
066      }
067    
068      private void parseMeasures(JSONObject json, Resource resource) {
069        JSONArray measuresJson = JsonUtils.getArray(json, "msr");
070        if (measuresJson != null) {
071          resource.setMeasures(parseMeasures(measuresJson));
072        }
073      }
074    
075      private List<Measure> parseMeasures(JSONArray measuresJson) {
076        List<Measure> projectMeasures = new ArrayList<Measure>();
077        int len = measuresJson.size();
078        for (int i = 0; i < len; i++) {
079          JSONObject measureJson = (JSONObject) measuresJson.get(i);
080          if (measureJson != null) {
081            Measure measure = parseMeasure(measureJson);
082            projectMeasures.add(measure);
083          }
084        }
085        return projectMeasures;
086      }
087    
088      private Measure parseMeasure(JSONObject json) {
089        Measure measure = new Measure();
090        measure
091            .setMetricKey(JsonUtils.getString(json, "key"))
092            .setMetricName(JsonUtils.getString(json, "name"))
093            .setValue(JsonUtils.getDouble(json, "val"))
094            .setFormattedValue(JsonUtils.getString(json, "frmt_val"))
095            .setTrend(JsonUtils.getInteger(json, "trend"))
096            .setVar(JsonUtils.getInteger(json, "var"))
097            .setData(JsonUtils.getString(json, "data"))
098            .setRuleKey(JsonUtils.getString(json, "rule_key"))
099            .setRuleName(JsonUtils.getString(json, "rule_name"))
100            .setRuleCategory(JsonUtils.getString(json, "rule_category"))
101            .setRuleSeverity(JsonUtils.getString(json, "rule_priority"))
102            .setCharacteristicKey(JsonUtils.getString(json, "ctic_key"))
103            .setCharacteristicName(JsonUtils.getString(json, "ctic_name"))
104            .setVariation1(JsonUtils.getDouble(json, "var1"))
105            .setVariation2(JsonUtils.getDouble(json, "var2"))
106            .setVariation3(JsonUtils.getDouble(json, "var3"))
107            .setVariation4(JsonUtils.getDouble(json, "var4"))
108            .setVariation5(JsonUtils.getDouble(json, "var5"));
109        return measure;
110      }
111    }