001/*
002 * SonarQube, open source software quality management tool.
003 * Copyright (C) 2008-2014 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * SonarQube 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 * SonarQube 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 License
017 * along with this program; if not, write to the Free Software Foundation,
018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
019 */
020package org.sonar.wsclient.unmarshallers;
021
022import org.sonar.wsclient.services.Measure;
023import org.sonar.wsclient.services.Resource;
024import org.sonar.wsclient.services.WSUtils;
025
026import java.util.ArrayList;
027import java.util.List;
028
029public 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        .setCreationDate(utils.getDateTime(json, "creationDate"))
052        .setVersion(utils.getString(json, "version"))
053        .setPeriod1Mode(utils.getString(json, "p1"))
054        .setPeriod1Param(utils.getString(json, "p1p"))
055        .setPeriod1Date(utils.getDateTime(json, "p1d"))
056        .setPeriod2Mode(utils.getString(json, "p2"))
057        .setPeriod2Param(utils.getString(json, "p2p"))
058        .setPeriod2Date(utils.getDateTime(json, "p2d"))
059        .setPeriod3Mode(utils.getString(json, "p3"))
060        .setPeriod3Param(utils.getString(json, "p3p"))
061        .setPeriod3Date(utils.getDateTime(json, "p3d"))
062        .setPeriod4Mode(utils.getString(json, "p4"))
063        .setPeriod4Param(utils.getString(json, "p4p"))
064        .setPeriod4Date(utils.getDateTime(json, "p4d"))
065        .setPeriod5Mode(utils.getString(json, "p5"))
066        .setPeriod5Param(utils.getString(json, "p5p"))
067        .setPeriod5Date(utils.getDateTime(json, "p5d"));
068  }
069
070  private void parseMeasures(Object json, Resource resource) {
071    WSUtils utils = WSUtils.getINSTANCE();
072    Object measuresJson = utils.getField(json, "msr");
073    if (measuresJson != null) {
074      resource.setMeasures(parseMeasures(measuresJson));
075    }
076  }
077
078  private List<Measure> parseMeasures(Object measuresJson) {
079    WSUtils utils = WSUtils.getINSTANCE();
080    List<Measure> projectMeasures = new ArrayList<Measure>();
081    int len = utils.getArraySize(measuresJson);
082    for (int i = 0; i < len; i++) {
083      Object measureJson = utils.getArrayElement(measuresJson, i);
084      if (measureJson != null) {
085        Measure measure = parseMeasure(measureJson);
086        projectMeasures.add(measure);
087      }
088    }
089    return projectMeasures;
090  }
091
092  private Measure parseMeasure(Object json) {
093    WSUtils utils = WSUtils.getINSTANCE();
094
095    Measure measure = new Measure();
096    measure
097        .setMetricKey(utils.getString(json, "key"))
098        .setMetricName(utils.getString(json, "name"))
099        .setValue(utils.getDouble(json, "val"))
100        .setFormattedValue(utils.getString(json, "frmt_val"))
101        .setAlertStatus(utils.getString(json, "alert"))
102        .setAlertText(utils.getString(json, "alert_text"))
103        .setTrend(utils.getInteger(json, "trend"))
104        .setVar(utils.getInteger(json, "var"))
105        .setData(utils.getString(json, "data"))
106        .setRuleKey(utils.getString(json, "rule_key"))
107        .setRuleName(utils.getString(json, "rule_name"))
108        .setRuleCategory(utils.getString(json, "rule_category"))
109        .setRuleSeverity(utils.getString(json, "rule_priority"))
110        .setCharacteristicKey(utils.getString(json, "ctic_key"))
111        .setCharacteristicName(utils.getString(json, "ctic_name"))
112        .setVariation1(utils.getDouble(json, "var1"))
113        .setVariation2(utils.getDouble(json, "var2"))
114        .setVariation3(utils.getDouble(json, "var3"))
115        .setVariation4(utils.getDouble(json, "var4"))
116        .setVariation5(utils.getDouble(json, "var5"));
117    return measure;
118  }
119}