try {
ListMultimap<String, RulesProfile> profilesByLanguage = profilesByLanguage();
for (String language : profilesByLanguage.keySet()) {
- List<RulesProfile> profiles = profilesByLanguage.get(language);
- verifyLanguage(language, profiles);
+ List<RulesProfile> profileDefs = profilesByLanguage.get(language);
+ verifyLanguage(language, profileDefs);
- for (Map.Entry<String, Collection<RulesProfile>> entry : profilesByName(profiles).entrySet()) {
+ for (Map.Entry<String, Collection<RulesProfile>> entry : profilesByName(profileDefs).entrySet()) {
String profileName = entry.getKey();
QualityProfileKey profileKey = QualityProfileKey.of(profileName, language);
if (shouldRegister(profileKey, session)) {
}
defaultProfilesCache.put(language, profileName);
}
- setDefault(language, profiles, session);
+ setDefault(language, profileDefs, session);
}
session.commit();
} finally {
session.commit();
}
- private void setDefault(String language, List<RulesProfile> profiles, DbSession session) {
+ private void setDefault(String language, List<RulesProfile> profileDefs, DbSession session) {
String propertyKey = "sonar.profile." + language;
boolean upToDate = false;
String currentDefault = settings.getString(propertyKey);
if (currentDefault != null) {
- for (RulesProfile profile : profiles) {
- if (StringUtils.equals(currentDefault, profile.getName())) {
- upToDate = true;
- }
+ // check validity
+ QualityProfileDto profile = dbClient.qualityProfileDao().getByKey(QualityProfileKey.of(currentDefault, language), session);
+ if (profile != null) {
+ upToDate = true;
}
}
if (!upToDate) {
- String defaultProfileName = defaultProfileName(profiles);
+ String defaultProfileName = defaultProfileName(profileDefs);
LOGGER.info("Set default " + language + " profile: " + defaultProfileName);
settings.saveProperty(propertyKey, defaultProfileName);
}
public ActiveRuleDoc(Map<String, Object> fields) {
super(fields);
- this.key = ActiveRuleKey.parse((String) getField(ActiveRuleNormalizer.ActiveRuleField.KEY.key()));
+ this.key = ActiveRuleKey.parse((String) getNullableField(ActiveRuleNormalizer.ActiveRuleField.KEY.key()));
Preconditions.checkArgument(key!=null, "Invalid ActiveRuleKey!");
}
@Override
public String severity() {
- return (String) getField(ActiveRuleNormalizer.ActiveRuleField.SEVERITY.key());
+ return (String) getNullableField(ActiveRuleNormalizer.ActiveRuleField.SEVERITY.key());
}
@Override
public ActiveRule.Inheritance inheritance() {
- String inheritance = getField(ActiveRuleNormalizer.ActiveRuleField.INHERITANCE.key());
+ String inheritance = getNullableField(ActiveRuleNormalizer.ActiveRuleField.INHERITANCE.key());
if (inheritance == null || inheritance.isEmpty() ||
inheritance.toLowerCase().contains("none")) {
return Inheritance.NONE;
@Override
@CheckForNull
public ActiveRuleKey parentKey() {
- String data = getField(ActiveRuleNormalizer.ActiveRuleField.PARENT_KEY.key());
+ String data = getNullableField(ActiveRuleNormalizer.ActiveRuleField.PARENT_KEY.key());
if (data != null && !data.isEmpty()) {
return ActiveRuleKey.parse(data);
}
@Override
public Map<String, String> params() {
Map<String, String> params = new HashMap<String, String>();
- List<Map<String, String>> allParams = getField(ActiveRuleNormalizer.ActiveRuleField.PARAMS.key());
+ List<Map<String, String>> allParams = getNullableField(ActiveRuleNormalizer.ActiveRuleField.PARAMS.key());
if (allParams != null) {
for (Map<String, String> param : allParams) {
params.put(param.get(ActiveRuleNormalizer.ActiveRuleParamField.NAME.key()),
// Debt definitions are set to null if the sub-characteristic and the remediation function are null
DebtRemediationFunction debtRemediationFunction = subCharacteristic != null ? def.debtRemediationFunction() : null;
boolean hasDebt = subCharacteristic != null && debtRemediationFunction != null;
- return mergeDebtDefinitions(def, dto,
- hasDebt ? subCharacteristic.getId() : null,
- debtRemediationFunction != null ? debtRemediationFunction.type().name() : null,
- hasDebt ? debtRemediationFunction.coefficient() : null,
- hasDebt ? debtRemediationFunction.offset() : null,
- hasDebt ? def.effortToFixDescription() : null);
+ if (hasDebt) {
+ return mergeDebtDefinitions(def, dto,
+ subCharacteristic.getId(),
+ debtRemediationFunction.type().name(),
+ debtRemediationFunction.coefficient(),
+ debtRemediationFunction.offset(),
+ def.effortToFixDescription());
+ }
+ return mergeDebtDefinitions(def, dto, null, null, null, null, null);
}
private boolean mergeDebtDefinitions(RulesDefinition.Rule def, RuleDto dto, @Nullable Integer characteristicId, @Nullable String remediationFunction,
if (toBeRemoved && !RuleStatus.REMOVED.toString().equals(ruleDto.getStatus())) {
LOG.info(String.format("Disable rule %s", ruleDto.getKey()));
ruleDto.setStatus(Rule.STATUS_REMOVED);
- ruleDto.setSystemTags(Collections.EMPTY_SET);
- ruleDto.setTags(Collections.EMPTY_SET);
+ ruleDto.setSystemTags(Collections.<String>emptySet());
+ ruleDto.setTags(Collections.<String>emptySet());
dbClient.ruleDao().update(session, ruleDto);
removedRules.add(ruleDto);
if (removedRules.size() % 100 == 0) {
throw new UnsupportedOperationException("Rules cannot be deleted");
}
+ /**
+ * @deprecated in 4.4. Use keys.
+ */
@CheckForNull
@Deprecated
public RuleDto getById(int id, DbSession session) {
import org.sonar.server.search.BaseDoc;
import org.sonar.server.search.IndexUtils;
-import javax.annotation.CheckForNull;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Override
public RuleKey key() {
- String key = getField(RuleNormalizer.RuleField.KEY.key());
- if (key == null || key.isEmpty()) {
- throw new IllegalStateException("Missing values for RuleKey in RuleDoc");
- } else {
- return RuleKey.parse(key);
- }
+ return RuleKey.parse(this.<String>getField(RuleNormalizer.RuleField.KEY.key()));
}
/**
}
@Override
- @CheckForNull
public String internalKey() {
- return getField(RuleNormalizer.RuleField.INTERNAL_KEY.key());
- }
-
- @Override
- public String markdownNote() {
- return getField(RuleNormalizer.RuleField.NOTE.key());
+ return getNullableField(RuleNormalizer.RuleField.INTERNAL_KEY.key());
}
@Override
- @CheckForNull
public String language() {
return getField(RuleNormalizer.RuleField.LANGUAGE.key());
}
@Override
- @CheckForNull
public String name() {
return getField(RuleNormalizer.RuleField.NAME.key());
}
@Override
- @CheckForNull
public String htmlDescription() {
- return getField(RuleNormalizer.RuleField.HTML_DESCRIPTION.key());
+ return getNullableField(RuleNormalizer.RuleField.HTML_DESCRIPTION.key());
}
@Override
- @CheckForNull
public String severity() {
return (String) getField(RuleNormalizer.RuleField.SEVERITY.key());
}
@Override
- @CheckForNull
public RuleStatus status() {
return RuleStatus.valueOf((String) getField(RuleNormalizer.RuleField.STATUS.key()));
}
@Override
- @CheckForNull
public boolean template() {
return (Boolean) getField(RuleNormalizer.RuleField.TEMPLATE.key());
}
@Override
- @CheckForNull
public List<String> tags() {
return (List<String>) getField(RuleNormalizer.RuleField.TAGS.key());
}
@Override
- @CheckForNull
public List<String> systemTags() {
return (List<String>) getField(RuleNormalizer.RuleField.SYSTEM_TAGS.key());
}
@Override
- @CheckForNull
public List<RuleParam> params() {
List<RuleParam> params = new ArrayList<RuleParam>();
- if (this.getField(RuleNormalizer.RuleField.PARAMS.key()) != null) {
- List<Map<String, Object>> esParams = this.getField(RuleNormalizer.RuleField.PARAMS.key());
- for (final Map<String, Object> param : esParams) {
+ List<Map<String, Object>> esParams = getNullableField(RuleNormalizer.RuleField.PARAMS.key());
+ if (esParams != null) {
+ for (final Map<String, Object> esParam : esParams) {
params.add(new RuleParam() {
{
- this.fields = param;
+ this.fields = esParam;
}
Map<String, Object> fields;
@Override
public String key() {
- return (String) param.get(RuleNormalizer.RuleParamField.NAME.key());
+ return (String) esParam.get(RuleNormalizer.RuleParamField.NAME.key());
}
@Override
public String description() {
- return (String) param.get(RuleNormalizer.RuleParamField.DESCRIPTION.key());
+ return (String) esParam.get(RuleNormalizer.RuleParamField.DESCRIPTION.key());
}
@Override
public String defaultValue() {
- return (String) param.get(RuleNormalizer.RuleParamField.DEFAULT_VALUE.key());
+ return (String) esParam.get(RuleNormalizer.RuleParamField.DEFAULT_VALUE.key());
}
@Override
public RuleParamType type() {
return RuleParamType
- .parse((String) param.get(RuleNormalizer.RuleParamField.TYPE.key()));
+ .parse((String) esParam.get(RuleNormalizer.RuleParamField.TYPE.key()));
}
});
}
}
@Override
- @CheckForNull
public String debtCharacteristicKey() {
- return (String) getField(RuleNormalizer.RuleField.CHARACTERISTIC.key());
+ return (String) getNullableField(RuleNormalizer.RuleField.CHARACTERISTIC.key());
}
@Override
- @CheckForNull
public String debtSubCharacteristicKey() {
- return (String) getField(RuleNormalizer.RuleField.SUB_CHARACTERISTIC.key());
+ return (String) getNullableField(RuleNormalizer.RuleField.SUB_CHARACTERISTIC.key());
}
@Override
- @CheckForNull
public DebtRemediationFunction debtRemediationFunction() {
- final String function = this.getField(RuleNormalizer.RuleField.DEBT_FUNCTION_TYPE.key());
+ final String function = getNullableField(RuleNormalizer.RuleField.DEBT_FUNCTION_TYPE.key());
if (function == null || function.isEmpty()) {
return null;
} else {
@Override
public String coefficient() {
- return (String) getField(RuleNormalizer.RuleField.DEBT_FUNCTION_COEFFICIENT.key());
+ return (String) getNullableField(RuleNormalizer.RuleField.DEBT_FUNCTION_COEFFICIENT.key());
}
@Override
public String offset() {
- return (String) getField(RuleNormalizer.RuleField.DEBT_FUNCTION_OFFSET.key());
+ return (String) getNullableField(RuleNormalizer.RuleField.DEBT_FUNCTION_OFFSET.key());
}
};
}
}
@Override
- @CheckForNull
+ public String markdownNote() {
+ return getNullableField(RuleNormalizer.RuleField.NOTE.key());
+ }
+
+ @Override
public String noteLogin() {
- return (String) getField(RuleNormalizer.RuleField.NOTE_LOGIN.key());
+ return (String) getNullableField(RuleNormalizer.RuleField.NOTE_LOGIN.key());
}
@Override
public Date noteCreatedAt() {
- return IndexUtils.parseDateTime((String) getField(RuleNormalizer.RuleField.NOTE_CREATED_AT.key()));
+ return IndexUtils.parseDateTime((String) getNullableField(RuleNormalizer.RuleField.NOTE_CREATED_AT.key()));
}
@Override
public Date noteUpdatedAt() {
- return IndexUtils.parseDateTime((String) getField(RuleNormalizer.RuleField.NOTE_UPDATED_AT.key()));
+ return IndexUtils.parseDateTime((String) getNullableField(RuleNormalizer.RuleField.NOTE_UPDATED_AT.key()));
}
@Override
- @CheckForNull
public Date createdAt() {
- return IndexUtils.parseDateTime((String) getField(RuleNormalizer.RuleField.CREATED_AT.key()));
+ return IndexUtils.parseDateTime((String) getNullableField(RuleNormalizer.RuleField.CREATED_AT.key()));
}
@Override
- @CheckForNull
public Date updatedAt() {
- return IndexUtils.parseDateTime((String) getField(RuleNormalizer.RuleField.UPDATED_AT.key()));
+ return IndexUtils.parseDateTime((String) getNullableField(RuleNormalizer.RuleField.UPDATED_AT.key()));
}
@Override
*/
public abstract class BaseDoc {
- private final Map<String,Object> fields;
+ private final Map<String, Object> fields;
- protected BaseDoc(Map<String,Object> fields) {
+ protected BaseDoc(Map<String, Object> fields) {
this.fields = fields;
}
public String keyField() {
- return (String)fields.get("key");
+ return (String) fields.get("key");
}
+ /**
+ * Use this method when field value can be null
+ */
@CheckForNull
- public <K> K getField(String key) {
+ public <K> K getNullableField(String key) {
if (!fields.containsKey(key)) {
throw new IllegalStateException(String.format("Field %s not specified in query options", key));
}
- return (K)fields.get(key);
+ return (K) fields.get(key);
+ }
+
+ /**
+ * Use this method when you are sure that the value can't be null in ES document
+ */
+ public <K> K getField(String key) {
+ K value = getNullableField(key);
+ if (value == null) {
+ throw new IllegalStateException("Value of index field is null: " + key);
+ }
+ return value;
}
}
@CheckForNull
public static Date parseDateTime(@Nullable String s) {
- DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
if (s == null) {
return null;
}
try {
+ DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
return sdf.parse(s);
} catch (ParseException e) {
throw new IllegalArgumentException("Cannot parse ES date: " + s, e);
@Override
public void write(JsonWriter json, BaseDoc doc) {
- Object val = doc.getField(indexFields[0]);
+ Object val = doc.getNullableField(indexFields[0]);
json.prop(key, val != null ? val.toString() : null);
}
}
@Override
public void write(JsonWriter json, BaseDoc doc) {
- Boolean val = doc.getField(indexFields[0]);
+ Boolean val = doc.getNullableField(indexFields[0]);
json.prop(key, val != null ? val.booleanValue() : null);
}
}
@Override
public void write(JsonWriter json, BaseDoc doc) {
- Iterable<String> values = doc.getField(indexFields[0]);
+ Iterable<String> values = doc.getNullableField(indexFields[0]);
json.name(key).beginArray().values(values).endArray();
}
}
@Override
public void write(JsonWriter json, BaseDoc doc) {
- String val = doc.getField(indexFields[0]);
+ String val = doc.getNullableField(indexFields[0]);
if (val != null) {
json.propDateTime(key, IndexUtils.parseDateTime(val));
}
<% end %>
</div>
-<% if @rule.noteAsMarkdown() %>
+<% if @rule.markdownNote() %>
<div class="marginbottom10">
- <%= Api::Utils.markdown_to_html(@rule.noteAsMarkdown()) -%>
+ <%= Api::Utils.markdown_to_html(@rule.markdownNote()) -%>
</div>
<% end %>
BaseDoc doc = new BaseDoc(fields) {
};
- assertThat(doc.getField("a_string")).isEqualTo("foo");
- assertThat(doc.getField("a_int")).isEqualTo(42);
- assertThat(doc.getField("a_null")).isNull();
+ assertThat(doc.getNullableField("a_string")).isEqualTo("foo");
+ assertThat(doc.getNullableField("a_int")).isEqualTo(42);
+ assertThat(doc.getNullableField("a_null")).isNull();
}
@Test
};
try {
- doc.getField("a_string");
+ doc.getNullableField("a_string");
fail();
} catch (IllegalStateException e) {
assertThat(e).hasMessage("Field a_string not specified in query options");