001 /* 002 * Sonar, open source software quality management tool. 003 * Copyright (C) 2008-2011 SonarSource 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.api.web.gwt.client.webservices; 021 022 import com.google.gwt.core.client.JavaScriptObject; 023 024 import java.util.ArrayList; 025 import java.util.List; 026 027 /** 028 * @deprecated since 2.8. Use sonar-gwt-api instead. 029 */ 030 @Deprecated 031 public final class WSMetrics { 032 033 private WSMetrics() { 034 } 035 036 private final static List<Metric> DICTIONNARY = new ArrayList<Metric>(); 037 038 public static final Metric NCLOC = add(new Metric("ncloc")); 039 public static final Metric LINES = add(new Metric("lines")); 040 public static final Metric CLASSES = add(new Metric("classes")); 041 public static final Metric PACKAGES = add(new Metric("packages")); 042 public static final Metric FUNCTIONS = add(new Metric("functions")); 043 public static final Metric ACCESSORS = add(new Metric("accessors")); 044 public static final Metric FILES = add(new Metric("files")); 045 public static final Metric DIRECTORIES = add(new Metric("directories")); 046 public static final Metric PUBLIC_API = add(new Metric("public_api")); 047 048 /* complexity */ 049 public static final Metric COMPLEXITY = add(new Metric("complexity")); 050 public static final Metric CLASS_COMPLEXITY = add(new Metric("class_complexity")); 051 public static final Metric FUNCTION_COMPLEXITY = add(new Metric("function_complexity")); 052 public static final Metric FILE_COMPLEXITY = add(new Metric("file_complexity")); 053 public static final Metric STATEMENTS = add(new Metric("statements")); 054 055 public static final Metric CLASS_COMPLEXITY_DISTRIBUTION = add(new Metric("class_complexity_distribution")); 056 public static final Metric FUNCTION_COMPLEXITY_DISTRIBUTION = add(new Metric("function_complexity_distribution")); 057 058 /* comments */ 059 public static final Metric COMMENT_LINES = add(new Metric("comment_lines")); 060 public static final Metric COMMENT_LINES_DENSITY = add(new Metric("comment_lines_density")); 061 public static final Metric PUBLIC_DOCUMENTED_API_DENSITY = add(new Metric("public_documented_api_density")); 062 public static final Metric PUBLIC_UNDOCUMENTED_API = add(new Metric("public_undocumented_api")); 063 public static final Metric COMMENTED_OUT_CODE_LINES = add(new Metric("commented_out_code_lines")); 064 065 /* unit tests */ 066 public static final Metric TESTS = add(new Metric("tests")); 067 public static final Metric TESTS_EXECUTION_TIME = add(new Metric("test_execution_time")); 068 public static final Metric TEST_ERRORS = add(new Metric("test_errors")); 069 public static final Metric SKIPPED_TESTS = add(new Metric("skipped_tests")); 070 public static final Metric TEST_FAILURES = add(new Metric("test_failures")); 071 public static final Metric TEST_SUCCESS_DENSITY = add(new Metric("test_success_density")); 072 public static final Metric TEST_DATA = add(new Metric("test_data")); 073 074 /* coverage */ 075 public static final Metric COVERAGE = add(new Metric("coverage")); 076 public static final Metric LINE_COVERAGE = add(new Metric("line_coverage")); 077 public static final Metric UNCOVERED_LINES = add(new Metric("uncovered_lines")); 078 public static final Metric BRANCH_COVERAGE = add(new Metric("branch_coverage")); 079 public static final Metric UNCOVERED_CONDITIONS = add(new Metric("uncovered_conditions")); 080 public static final Metric COVERAGE_LINE_HITS_DATA = add(new Metric("coverage_line_hits_data")); 081 public static final Metric BRANCH_COVERAGE_HITS_DATA = add(new Metric("branch_coverage_hits_data")); 082 083 /* duplicated lines */ 084 public static final Metric DUPLICATED_LINES = add(new Metric("duplicated_lines")); 085 public static final Metric DUPLICATED_BLOCKS = add(new Metric("duplicated_blocks")); 086 public static final Metric DUPLICATED_FILES = add(new Metric("duplicated_files")); 087 public static final Metric DUPLICATED_LINES_DENSITY = add(new Metric("duplicated_lines_density")); 088 public static final Metric DUPLICATIONS_DATA = add(new Metric("duplications_data")); 089 090 /* coding rules */ 091 public static final Metric VIOLATIONS_DENSITY = add(new Metric("violations_density")); 092 public static final Metric VIOLATIONS = add(new Metric("violations")); 093 public static final Metric WEIGHTED_VIOLATIONS = add(new Metric("weighted_violations")); 094 095 /* design */ 096 public static final Metric LCOM4 = add(new Metric("lcom4")); 097 public static final Metric RFC = add(new Metric("rfc")); 098 099 public static class MetricsList extends ResponsePOJO { 100 101 private List<Metric> metrics = new ArrayList<Metric>(); 102 103 public List<Metric> getMetrics() { 104 return metrics; 105 } 106 } 107 108 /** 109 * Generates a callback that will update the metrics definitions from the WSMetrics metrics constants list with data 110 * received from a MetricsQuery call 111 * 112 * @param callback 113 * @return 114 */ 115 public static QueryCallBack<MetricsList> getUpdateMetricsFromServer(final QueryCallBack<MetricsList> callback) { 116 return new QueryCallBack<MetricsList>() { 117 public void onResponse(MetricsList response, JavaScriptObject jsonRawResponse) { 118 for (Metric metric : response.getMetrics()) { 119 Metric WSMetricConstant = get(metric.getKey()); 120 if (WSMetricConstant != null) { 121 WSMetricConstant.updateFrom(metric); 122 } else { 123 add(metric); 124 } 125 } 126 callback.onResponse(response, jsonRawResponse); 127 } 128 129 public void onError(int errorCode, String errorMessage) { 130 callback.onError(errorCode, errorMessage); 131 } 132 133 public void onTimeout() { 134 callback.onTimeout(); 135 } 136 }; 137 } 138 139 public static class Metric { 140 public enum ValueType { 141 INT, FLOAT, PERCENT, BOOL, STRING, MILLISEC, DATA, LEVEL, DISTRIB, RATING 142 } 143 144 private String key; 145 private String name; 146 private String description; 147 private String domain; 148 private boolean qualitative; 149 private boolean userManaged; 150 private int direction; 151 private ValueType type; 152 153 public Metric(String key) { 154 super(); 155 this.key = key; 156 } 157 158 public Metric(String key, String name, String description, String domain, 159 boolean qualitative, boolean userManaged, int direction, ValueType type) { 160 super(); 161 this.key = key; 162 this.name = name; 163 this.description = description; 164 this.domain = domain; 165 this.qualitative = qualitative; 166 this.userManaged = userManaged; 167 this.direction = direction; 168 this.type = type; 169 } 170 171 public void updateFrom(Metric metric) { 172 this.name = metric.getName(); 173 this.description = metric.getDescription(); 174 this.domain = metric.getDomain(); 175 this.qualitative = metric.isQualitative(); 176 this.userManaged = metric.isUserManaged(); 177 this.direction = metric.getDirection(); 178 this.type = metric.getType(); 179 } 180 181 public String getName() { 182 return name; 183 } 184 185 public ValueType getType() { 186 return type; 187 } 188 189 public String getDescription() { 190 return description; 191 } 192 193 public String getDomain() { 194 return domain; 195 } 196 197 public boolean isQualitative() { 198 return qualitative; 199 } 200 201 public boolean isUserManaged() { 202 return userManaged; 203 } 204 205 public int getDirection() { 206 return direction; 207 } 208 209 public String getKey() { 210 return key; 211 } 212 213 @Override 214 public int hashCode() { 215 return key.hashCode(); 216 } 217 218 @Override 219 public boolean equals(Object obj) { 220 if (!(obj instanceof Metric)) { 221 return false; 222 } 223 if (this == obj) { 224 return true; 225 } 226 Metric other = (Metric) obj; 227 return key.equals(other.getKey()); 228 } 229 } 230 231 public static Metric add(Metric metric) { 232 if (!DICTIONNARY.contains(metric)) { 233 DICTIONNARY.add(metric); 234 } 235 return metric; 236 } 237 238 public static Metric get(String metricKey) { 239 for (Metric metric : DICTIONNARY) { 240 if (metric.getKey().equals(metricKey)) { 241 return metric; 242 } 243 } 244 return new Metric(metricKey); 245 } 246 247 }