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     */
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            .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    }