@Override
public List<UpdateRequest> normalize(ActiveRuleDto activeRuleDto) {
List<UpdateRequest> requests = new ArrayList<UpdateRequest>();
ActiveRuleKey key = activeRuleDto.getKey();
Preconditions.checkArgument(key != null, "Cannot normalize ActiveRuleDto with null key");
Map<String, Object> newRule = new HashMap<String, Object>();
newRule.put("_parent", key.ruleKey().toString());
newRule.put(ActiveRuleField.RULE_KEY.field(), key.ruleKey().toString());
newRule.put(ActiveRuleField.KEY.field(), key.toString());
newRule.put(ActiveRuleField.INHERITANCE.field(),
(activeRuleDto.getInheritance() != null) ?
activeRuleDto.getInheritance() :
ActiveRule.Inheritance.NONE.name());
newRule.put(ActiveRuleField.SEVERITY.field(), activeRuleDto.getSeverityString());
newRule.put(ActiveRuleField.KEY.field(), key.toString());
newRule.put(ActiveRuleField.CREATED_AT.field(), activeRuleDto.getCreatedAt());
newRule.put(ActiveRuleField.UPDATED_AT.field(), activeRuleDto.getUpdatedAt());
DbSession session = db.openSession(false);
try {
// TODO because DTO uses legacy ID pattern
QualityProfileDto profile = db.qualityProfileDao().getById(activeRuleDto.getProfileId(), session);
if (profile == null) {
throw new IllegalStateException("Profile is null : " + activeRuleDto.getProfileId());
}
newRule.put(ActiveRuleField.PROFILE_KEY.field(), profile.getKey());
// TODO this should be generated by RegisterRule and modified in DTO.
String parentKey = null;
Integer parentId = activeRuleDto.getParentId();
if (parentId != null) {
ActiveRuleDto parentDto = db.activeRuleDao().getById(session, parentId);
if (parentDto != null) {
parentKey = parentDto.getKey().toString();
}
}
/* Creating updateRequest */
requests.add(new UpdateRequest()
.replicationType(ReplicationType.ASYNC)
.routing(key.ruleKey().toString())
.id(activeRuleDto.getKey().toString())
.parent(activeRuleDto.getKey().ruleKey().toString())
.doc(newRule)
.upsert(getUpsertFor(ActiveRuleField.ALL_FIELDS, newRule)));