/* * Sonar is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * Sonar is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with Sonar; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 */ package org.codehaus.sonar.plugins.testability.client.model; import com.google.gwt.json.client.*; import java.util.Set; import static org.codehaus.sonar.plugins.testability.client.model.SerializationConstants.*; public class MethodTestabilityCostDataDecoderImpl implements MethodTestabilityCostDataDecoder { public MethodTestabilityCostData decode(String data) { JSONValue jsonValue = JSONParser.parse(data); JSONObject rootObject = jsonValue.isObject(); MethodTestabilityCostData methodTestabilityCostData = new MethodTestabilityCostData(); parseMethodCosts(rootObject.get("methodCosts").isObject(), methodTestabilityCostData); parseViolationCosts(rootObject.get("violationCosts").isObject(), methodTestabilityCostData); return methodTestabilityCostData; } public void parseViolationCosts(JSONObject object, MethodTestabilityCostData methodTestabilityCostData) { Set<String> keySet = object.keySet(); for (String key : keySet) { JSONArray violations = object.get(key).isArray(); for (int i = 0; i < violations.size(); i++) { methodTestabilityCostData.addViolationCost(Integer.valueOf(key), createViolationCost(violations.get(i).isObject())); } } } public ViolationCostDetail createViolationCost(JSONObject object) { return new ViolationCostDetail(getCyclomatic(object), getGlobal(object), getLod(object), getOverall(object), getReason(object)); } private String getReason(JSONObject object) { JSONString string = object.get(REASON).isString(); return string.stringValue(); } public void parseMethodCosts(JSONObject object, MethodTestabilityCostData methodTestabilityCostData) { Set<String> keySet = object.keySet(); for (String key : keySet) { methodTestabilityCostData.addMethodCost(Integer.valueOf(key), createMethodCost(object.get(key).isObject())); } } public MethodTestabilityCostDetail createMethodCost(JSONObject object) { return new MethodTestabilityCostDetail(getCyclomatic(object), getGlobal(object), getLod(object), getOverall(object)); } private int getOverall(JSONObject object) { return getInt(object.get(OVERALL)); } private int getLod(JSONObject object) { return getInt(object.get(LOD)); } private int getGlobal(JSONObject object) { return getInt(object.get(GLOBAL)); } private int getInt(JSONValue value) { double doubleValue = value.isNumber().doubleValue(); return Double.valueOf(doubleValue).intValue(); } private int getCyclomatic(JSONObject object) { return getInt(object.get(CYCLOMATIC)); } }