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            .setRuleSeverity(JsonUtils.getString(json, "rule_priority"))
096            .setCharacteristicKey(JsonUtils.getString(json, "ctic_key"))
097            .setCharacteristicName(JsonUtils.getString(json, "ctic_name"));
098        return measure;
099      }
100    }