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.api.measures; 021 022 import org.sonar.api.BatchExtension; 023 import org.sonar.api.ServerExtension; 024 import org.sonar.api.database.BaseIdentifiable; 025 026 import javax.persistence.*; 027 028 /** 029 * @since 1.10 030 */ 031 @Table(name = "metrics") 032 @Entity(name = "Metric") 033 public class Metric extends BaseIdentifiable implements ServerExtension, BatchExtension { 034 035 /** 036 * A metric bigger value means a degradation 037 */ 038 public final static int DIRECTION_WORST = -1; 039 /** 040 * A metric bigger value means an improvement 041 */ 042 public final static int DIRECTION_BETTER = 1; 043 /** 044 * The metric direction has no meaning 045 */ 046 public final static int DIRECTION_NONE = 0; 047 048 public enum ValueType { 049 INT, FLOAT, PERCENT, BOOL, STRING, MILLISEC, DATA, LEVEL, DISTRIB 050 } 051 052 public enum Level { 053 OK("Green"), WARN("Orange"), ERROR("Red"); 054 055 private String colorName; 056 057 Level(String colorName) { 058 this.colorName = colorName; 059 } 060 061 public String getColorName() { 062 return colorName; 063 } 064 } 065 066 public enum Origin { 067 JAV, GUI, WS 068 } 069 070 @Transient 071 private Formula formula; 072 073 @Column(name = "name", updatable = false, nullable = false, length = 64) 074 private String key; 075 076 @Column(name = "description", updatable = true, nullable = true, length = 255) 077 private String description; 078 079 @Column(name = "val_type", updatable = true, nullable = true) 080 @Enumerated(EnumType.STRING) 081 private ValueType type; 082 083 @Column(name = "direction", updatable = true, nullable = true) 084 private Integer direction; 085 086 @Column(name = "domain", updatable = true, nullable = true, length = 60) 087 private String domain; 088 089 @Column(name = "short_name", updatable = true, nullable = true, length = 64) 090 private String name; 091 092 @Column(name = "qualitative", updatable = true, nullable = true) 093 private Boolean qualitative = Boolean.FALSE; 094 095 @Column(name = "user_managed", updatable = true, nullable = true) 096 private Boolean userManaged = Boolean.FALSE; 097 098 @Column(name = "enabled", updatable = true, nullable = true) 099 private Boolean enabled = Boolean.TRUE; 100 101 @Column(name = "origin", updatable = true, nullable = true, length = 3) 102 @Enumerated(EnumType.STRING) 103 private Origin origin; 104 105 public Metric() { 106 } 107 108 public Metric(String key) { 109 this(key, ValueType.INT); 110 } 111 112 public Metric(String key, ValueType type) { 113 this(key, key, key, type, -1, Boolean.FALSE, null, false); 114 } 115 116 public Metric(String key, String name, String description, ValueType type, Integer direction, Boolean qualitative, String domain) { 117 this(key, name, description, type, direction, qualitative, domain, false); 118 } 119 120 @Deprecated 121 public Metric(String key, String name, String description, ValueType type, Integer direction, Boolean qualitative, String domain, boolean userManaged) { 122 this.key = key; 123 this.description = description; 124 this.type = type; 125 this.direction = direction; 126 this.domain = domain; 127 this.name = name; 128 this.qualitative = qualitative; 129 this.userManaged = userManaged; 130 this.origin = Origin.JAV; 131 } 132 133 public Metric(String key, String name, ValueType type, Integer direction, Boolean qualitative, String domain, Formula formula) { 134 this.key = key; 135 this.name = name; 136 this.type = type; 137 this.direction = direction; 138 this.domain = domain; 139 this.qualitative = qualitative; 140 this.origin = Origin.JAV; 141 this.enabled = true; 142 this.userManaged = false; 143 this.formula = formula; 144 } 145 146 public Formula getFormula() { 147 return formula; 148 } 149 150 public Metric setFormula(Formula formula) { 151 this.formula = formula; 152 return this; 153 } 154 155 public Boolean getQualitative() { 156 return qualitative; 157 } 158 159 public void setQualitative(Boolean qualitative) { 160 this.qualitative = qualitative; 161 } 162 163 public String getKey() { 164 return key; 165 } 166 167 public void setKey(String key) { 168 this.key = key; 169 } 170 171 public ValueType getType() { 172 return type; 173 } 174 175 public void setType(ValueType type) { 176 this.type = type; 177 } 178 179 public String getDescription() { 180 return description; 181 } 182 183 public void setDescription(String description) { 184 this.description = description; 185 } 186 187 public Boolean getUserManaged() { 188 return userManaged; 189 } 190 191 public void setUserManaged(Boolean userManaged) { 192 this.userManaged = userManaged; 193 } 194 195 public Boolean getEnabled() { 196 return enabled; 197 } 198 199 public void setEnabled(Boolean enabled) { 200 this.enabled = enabled; 201 } 202 203 public Integer getDirection() { 204 return direction; 205 } 206 207 public void setDirection(Integer direction) { 208 this.direction = direction; 209 } 210 211 public String getDomain() { 212 return domain; 213 } 214 215 public void setDomain(String domain) { 216 this.domain = domain; 217 } 218 219 public String getName() { 220 return name; 221 } 222 223 public void setName(String name) { 224 this.name = name; 225 } 226 227 public Origin getOrigin() { 228 return origin; 229 } 230 231 public void setOrigin(Origin origin) { 232 this.origin = origin; 233 } 234 235 public boolean isNumericType() { 236 return ValueType.INT.equals(type) 237 || ValueType.FLOAT.equals(type) 238 || ValueType.PERCENT.equals(type) 239 || ValueType.BOOL.equals(type) 240 || ValueType.MILLISEC.equals(type); 241 } 242 243 public boolean isDataType() { 244 return ValueType.DATA.equals(type) || ValueType.DISTRIB.equals(type); 245 } 246 247 public boolean isPercentageType() { 248 return ValueType.PERCENT.equals(type); 249 } 250 251 252 @Override 253 public int hashCode() { 254 return key.hashCode(); 255 } 256 257 @Override 258 public boolean equals(Object obj) { 259 if (!(obj instanceof Metric)) { 260 return false; 261 } 262 if (this == obj) { 263 return true; 264 } 265 Metric other = (Metric) obj; 266 return key.equals(other.getKey()); 267 } 268 269 @Override 270 public String toString() { 271 return key; 272 } 273 274 }