import org.sonar.core.qualityprofile.db.ActiveRuleKey;
+import javax.annotation.CheckForNull;
import java.util.Map;
public interface ActiveRule {
+ public enum Inheritance {
+ NONE, OVERRIDE, INHERIT
+ }
+
ActiveRuleKey key();
String severity();
- Boolean override();
-
- String inherit();
+ Inheritance inheritance();
- String parent();
+ @CheckForNull
+ ActiveRuleKey parentKey();
Map<String, String> params();
+
}
import org.sonar.core.qualityprofile.db.ActiveRuleKey;
import org.sonar.server.qualityprofile.ActiveRule;
+import javax.annotation.CheckForNull;
import java.util.HashMap;
import java.util.Map;
return this.key;
}
- @Override
- public Boolean override() {
- return (Boolean) this.fields.get(ActiveRuleNormalizer.ActiveRuleField.OVERRIDE.key());
- }
-
@Override
public String severity() {
return (String) this.fields.get(ActiveRuleNormalizer.ActiveRuleField.SEVERITY.key());
}
@Override
- public String inherit() {
- return (String) this.fields.get(ActiveRuleNormalizer.ActiveRuleField.INHERITANCE.key());
+ public ActiveRule.Inheritance inheritance() {
+ String inheritance = (String) this.fields.get(ActiveRuleNormalizer.ActiveRuleField.INHERITANCE.key());
+ if(inheritance != null && !inheritance.isEmpty()){
+ return Inheritance.valueOf(inheritance);
+ } else {
+ return Inheritance.NONE;
+ }
}
@Override
- public String parent() {
- return (String) this.fields.get(ActiveRuleNormalizer.ActiveRuleField.PARENT_ID.key());
+ @CheckForNull
+ public ActiveRuleKey parentKey() {
+ String data = (String) this.fields.get(ActiveRuleNormalizer.ActiveRuleField.PARENT_KEY.key());
+ if(data != null && !data.isEmpty()){
+ return ActiveRuleKey.parse(data);
+ }
+ return null;
}
@Override
public class ActiveRuleNormalizer extends BaseNormalizer<ActiveRuleDto, ActiveRuleKey> {
public static enum ActiveRuleField {
- OVERRIDE("override"),
+ KEY("key"),
INHERITANCE("inheritance"),
PROFILE_ID("profile"),
SEVERITY("severity"),
- PARENT_ID("parent"),
+ PARENT_KEY("parentKey"),
PARAMS("params");
private final String key;
throw new IllegalStateException("Cannot normalize ActiveRuleDto with null key");
}
+
+
document.startObject(RuleNormalizer.RuleField.ACTIVE.key());
document.startObject(key.toString());
- indexField("_id", rule.getKey(), document);
- indexField(ActiveRuleField.OVERRIDE.key(), rule.doesOverride(), document);
+ indexField(ActiveRuleField.KEY.key(), rule.getKey(), document);
indexField(ActiveRuleField.INHERITANCE.key(), rule.getInheritance(), document);
indexField(ActiveRuleField.PROFILE_ID.key(), rule.getProfileId(), document);
indexField(ActiveRuleField.SEVERITY.key(), rule.getSeverityString(), document);
- indexField(ActiveRuleField.PARENT_ID.key(), rule.getParentId(), document);
+
+ //TODO this should be generated by RegisterRule and modified in DTO.
+ if(rule.getParentId() != null){
+ DbSession session = db.openSession(false);
+ ActiveRuleDto dto = this.db.activeRuleDao().getById(rule.getParentId(), session);
+ session.close();
+ indexField(ActiveRuleField.PARENT_KEY.key(), dto.getKey().toString(), document);
+ }
+
/* Done normalizing for Rule */
document.endObject();
@Deprecated
public ActiveRuleDto getById(int activeRuleId, DbSession session) {
- return mapper(session).selectById(activeRuleId);
+ ActiveRuleDto rule = mapper(session).selectById(activeRuleId);
+
+ rule.setKey(ActiveRuleKey.of(
+ profileDao.selectById(rule.getProfileId(), session).getKey(),
+ ruleDao.getById(rule.getRulId(), session).getKey()));
+
+ return rule;
}
@Override
TEMPLATE("template"),
UPDATED_AT("updatedAt"),
PARAMS("params"),
- ACTIVE("active");
+ ACTIVE("active"),
+ DEBT_FUNCTION("debtRemFunction");
private final String key;
indexField(RuleField.LANGUAGE.key(), rule.getLanguage(), document);
indexField(RuleField.INTERNAL_KEY.key(), rule.getConfigKey(), document);
indexField(RuleField.TEMPLATE.key(), rule.getCardinality() == Cardinality.MULTIPLE, document);
+ indexField(RuleField.DEBT_FUNCTION.key(), rule.getDefaultRemediationFunction(),document);
+
+
+
document.array(RuleField.TAGS.key(), rule.getTags().toArray(new String[rule.getTags().size()]));
document.array(RuleField.SYSTEM_TAGS.key(), rule.getSystemTags().toArray(new String[rule.getSystemTags().size()]));
json
.beginObject()
.prop("key",activeRule.key().toString())
- .prop("inherit", activeRule.inherit())
- .prop("override", activeRule.override())
+ .prop("inherit", activeRule.inheritance().name())
.prop("severity", activeRule.severity())
- .prop("parent", activeRule.parent())
+ .prop("parent", activeRule.parentKey().toString())
.name("params").beginArray();
for (Map.Entry<String, String> param : activeRule.params().entrySet()) {
json.beginObject()
private static final Logger LOG = LoggerFactory.getLogger(BaseNormalizer.class);
- private final DbClient db;
+ protected final DbClient db;
protected BaseNormalizer(DbClient db) {
this.db = db;