From 74109fbd17c16ef28d6616ac0119a9b93c385c3b Mon Sep 17 00:00:00 2001 From: Stephane Gamard Date: Wed, 4 Jun 2014 11:50:20 +0200 Subject: [PATCH] SONAR-5007 - Added idField and idValue to native updateList script --- .../index/ActiveRuleNormalizer.java | 62 +++++++++---------- .../server/rule/index/RuleNormalizer.java | 4 +- .../sonar/server/search/es/ListUpdate.java | 28 ++++++--- 3 files changed, 51 insertions(+), 43 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleNormalizer.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleNormalizer.java index 8058e8813ea..21e38b22500 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleNormalizer.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleNormalizer.java @@ -46,20 +46,20 @@ public class ActiveRuleNormalizer extends BaseNormalizer ALL_FIELDS = getAllFields(); - private static Set getAllFields(){ + private static Set getAllFields() { Set fields = new HashSet(); - for(Field classField :ActiveRuleField.class.getDeclaredFields()){ - if(classField.getType().isAssignableFrom(IndexField.class)){ + for (Field classField : ActiveRuleField.class.getDeclaredFields()) { + if (classField.getType().isAssignableFrom(IndexField.class)) { //Modifier.isStatic(classField.getModifiers()) try { fields.add(IndexField.class.cast(classField.get(null))); @@ -74,15 +74,15 @@ public class ActiveRuleNormalizer extends BaseNormalizer ALL_FIELDS = getAllFields(); - private static Set getAllFields(){ + private static Set getAllFields() { Set fields = new HashSet(); - for(Field classField :ActiveRuleParamField.class.getDeclaredFields()){ - if(classField.getType().isAssignableFrom(IndexField.class)){ + for (Field classField : ActiveRuleParamField.class.getDeclaredFields()) { + if (classField.getType().isAssignableFrom(IndexField.class)) { //Modifier.isStatic(classField.getModifiers()) try { fields.add(IndexField.class.cast(classField.get(null))); @@ -114,23 +114,6 @@ public class ActiveRuleNormalizer extends BaseNormalizer normalize(ActiveRuleParamDto param, ActiveRuleKey key) { - Preconditions.checkArgument(key != null, "Cannot normalize ActiveRuleParamDto for null key of ActiveRule"); - - Map newParam = new HashMap(); - newParam.put("_id", param.getKey()); - newParam.put(ActiveRuleParamField.NAME.field(), param.getKey()); - newParam.put(ActiveRuleParamField.VALUE.field(), param.getValue()); - - return ImmutableList.of(new UpdateRequest() - .id(key.toString()) - .script(ListUpdate.NAME) - .addScriptParam(ListUpdate.FIELD, ActiveRuleField.PARAMS.field()) - .addScriptParam(ListUpdate.VALUE, newParam) - .addScriptParam(ListUpdate.ID, param.getKey()) - ); - } - @Override public List normalize(ActiveRuleDto activeRuleDto) { ActiveRuleKey key = activeRuleDto.getKey(); @@ -175,4 +158,21 @@ public class ActiveRuleNormalizer extends BaseNormalizer normalize(ActiveRuleParamDto param, ActiveRuleKey key) { + Preconditions.checkArgument(key != null, "Cannot normalize ActiveRuleParamDto for null key of ActiveRule"); + + Map newParam = new HashMap(); + newParam.put(ActiveRuleParamField.NAME.field(), param.getKey()); + newParam.put(ActiveRuleParamField.VALUE.field(), param.getValue()); + + return ImmutableList.of(new UpdateRequest() + .id(key.toString()) + .script(ListUpdate.NAME) + .addScriptParam(ListUpdate.FIELD, ActiveRuleField.PARAMS.field()) + .addScriptParam(ListUpdate.VALUE, newParam) + .addScriptParam(ListUpdate.ID_FIELD, ActiveRuleParamField.NAME.field()) + .addScriptParam(ListUpdate.ID_VALUE, param.getKey()) + ); + } } diff --git a/sonar-server/src/main/java/org/sonar/server/rule/index/RuleNormalizer.java b/sonar-server/src/main/java/org/sonar/server/rule/index/RuleNormalizer.java index cc22e2e7c62..4931e4c9ad2 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule/index/RuleNormalizer.java +++ b/sonar-server/src/main/java/org/sonar/server/rule/index/RuleNormalizer.java @@ -238,7 +238,6 @@ public class RuleNormalizer extends BaseNormalizer { public List normalize(RuleParamDto param, RuleKey key) { Map newParam = new HashMap(); - newParam.put("_id", param.getName()); newParam.put(RuleParamField.NAME.field(), param.getName()); newParam.put(RuleParamField.TYPE.field(), param.getType()); newParam.put(RuleParamField.DESCRIPTION.field(), param.getDescription()); @@ -249,7 +248,8 @@ public class RuleNormalizer extends BaseNormalizer { .script(ListUpdate.NAME) .addScriptParam(ListUpdate.FIELD, RuleField.PARAMS.field()) .addScriptParam(ListUpdate.VALUE, newParam) - .addScriptParam(ListUpdate.ID, param.getName()) + .addScriptParam(ListUpdate.ID_FIELD, RuleParamField.NAME.field()) + .addScriptParam(ListUpdate.ID_VALUE, param.getName()) ); } } diff --git a/sonar-server/src/main/java/org/sonar/server/search/es/ListUpdate.java b/sonar-server/src/main/java/org/sonar/server/search/es/ListUpdate.java index e682d4d41d9..a47f4f16537 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/es/ListUpdate.java +++ b/sonar-server/src/main/java/org/sonar/server/search/es/ListUpdate.java @@ -36,19 +36,24 @@ public class ListUpdate extends AbstractExecutableScript { public static final String NAME = "listUpdate"; - public static final String ID = "id"; + public static final String ID_FIELD = "idField"; + public static final String ID_VALUE = "idValue"; public static final String FIELD = "field"; public static final String VALUE = "value"; public static class UpdateListScriptFactory implements NativeScriptFactory { @Override public ExecutableScript newScript(@Nullable Map params) { - String id = XContentMapValues.nodeStringValue(params.get(ID), null); + String idField = XContentMapValues.nodeStringValue(params.get(ID_FIELD), null); + String idValue = XContentMapValues.nodeStringValue(params.get(ID_VALUE), null); String field = XContentMapValues.nodeStringValue(params.get(FIELD), null); Map value = XContentMapValues.nodeMapValue(params.get(VALUE), "Update item"); - if (id == null) { - throw new IllegalStateException("Missing '" + ID + "' parameter"); + if (idField == null) { + throw new IllegalStateException("Missing '" + ID_FIELD + "' parameter"); + } + if (idValue == null) { + throw new IllegalStateException("Missing '" + ID_VALUE + "' parameter"); } if (field == null) { throw new IllegalStateException("Missing '" + FIELD + "' parameter"); @@ -57,19 +62,21 @@ public class ListUpdate extends AbstractExecutableScript { throw new IllegalStateException("Missing '" + VALUE + "' parameter"); } - return new ListUpdate(id, field, value); + return new ListUpdate(idField, idValue, field, value); } } - private final String id; + private final String idField; + private final String idValue; private final String field; private final Map value; private Map ctx; - public ListUpdate(String id, String field, Map value) { - this.id = id; + public ListUpdate(String idField, String idValue, String field, Map value) { + this.idField = idField; + this.idValue = idValue; this.field = field; this.value = value; } @@ -105,8 +112,9 @@ public class ListUpdate extends AbstractExecutableScript { // 3. field is a list Collection items = ((Collection) fieldValue); for (Object item : items) { - String idValue = XContentMapValues.nodeStringValue(item, null); - if (idValue != null && idValue.equals(id)) { + Map fields = (Map) item; + String itemIdValue = XContentMapValues.nodeStringValue(fields.get(idField), null); + if (itemIdValue != null && itemIdValue.equals(idValue)) { items.remove(item); } } -- 2.39.5