Skip to content

Commit

Permalink
SONAR-7975 Return parentValue, parentValues and parentFieldsValues
Browse files Browse the repository at this point in the history
  • Loading branch information
julienlancelot committed Aug 30, 2016
1 parent 3588f94 commit 2e3c74b
Show file tree
Hide file tree
Showing 7 changed files with 283 additions and 99 deletions.
4 changes: 2 additions & 2 deletions it/it-tests/src/test/java/it/settings/PropertySetsTest.java
Expand Up @@ -120,9 +120,9 @@ public void delete_property_set() throws Exception {

private void assertPropertySet(String baseSettingKey, List<Map.Entry<String, String>>... fieldsValues) {
Settings.Setting setting = getSetting(baseSettingKey);
assertThat(setting.getFieldsValues().getFieldsValuesList()).hasSize(fieldsValues.length);
assertThat(setting.getFieldsValues().getFieldValuesList()).hasSize(fieldsValues.length);
int index = 0;
for (Settings.FieldsValues.Value fieldsValue : setting.getFieldsValues().getFieldsValuesList()) {
for (Settings.FieldValues.Value fieldsValue : setting.getFieldsValues().getFieldValuesList()) {
assertThat(fieldsValue.getValue()).containsOnly(fieldsValues[index].toArray(new Map.Entry[] {}));
index++;
}
Expand Down
4 changes: 2 additions & 2 deletions it/it-tests/src/test/java/it/settings/SettingsTest.java
Expand Up @@ -68,14 +68,14 @@ public void should_get_settings_default_value() {
@Test
public void global_property_change_extension_point() throws IOException {
orchestrator.getServer().adminWsClient().post("api/properties/create?id=globalPropertyChange.received&value=NEWVALUE");
assertThat(FileUtils.readFileToString(orchestrator.getServer().getLogs()).contains("Received change: NEWVALUE"));
assertThat(FileUtils.readFileToString(orchestrator.getServer().getLogs())).contains("Received change: [key=globalPropertyChange.received, newValue=NEWVALUE]");
}

@Test
public void get_default_value() throws Exception {
Settings.Setting setting = getSetting(PLUGIN_SETTING_KEY);
assertThat(setting.getValue()).isEqualTo("aDefaultValue");
assertThat(setting.getDefault()).isTrue();
assertThat(setting.getInherited()).isTrue();
}

@Test
Expand Down
Expand Up @@ -21,7 +21,6 @@

import com.google.common.base.Splitter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
Expand Down Expand Up @@ -143,10 +142,6 @@ private void checkAdminPermission(Optional<ComponentDto> component) {
}

private List<Setting> loadSettings(DbSession dbSession, Optional<ComponentDto> component, Set<String> keys) {
if (keys.isEmpty()) {
return Collections.emptyList();
}

// List of settings must be kept in the following orders : default -> global -> component
List<Setting> settings = new ArrayList<>();
settings.addAll(loadDefaultSettings(keys));
Expand Down Expand Up @@ -175,15 +170,16 @@ private Map<String, String> getKeysToDisplayMap(Set<String> keys) {

private static class ValuesResponseBuilder {
private final List<Setting> settings;
private final Optional<ComponentDto> component;
private final Optional<ComponentDto> requestedComponent;

private final ValuesWsResponse.Builder valuesWsBuilder = ValuesWsResponse.newBuilder();
private final Map<String, Settings.Setting.Builder> settingsBuilderByKey = new HashMap<>();
private final Map<String, Setting> settingsByParentKey = new HashMap<>();
private final Map<String, String> keysToDisplayMap;

ValuesResponseBuilder(List<Setting> settings, Optional<ComponentDto> component, Map<String, String> keysToDisplayMap) {
ValuesResponseBuilder(List<Setting> settings, Optional<ComponentDto> requestedComponent, Map<String, String> keysToDisplayMap) {
this.settings = settings;
this.component = component;
this.requestedComponent = requestedComponent;
this.keysToDisplayMap = keysToDisplayMap;
}

Expand All @@ -196,9 +192,9 @@ ValuesWsResponse build() {
private void processSettings() {
settings.forEach(setting -> {
Settings.Setting.Builder valueBuilder = getOrCreateValueBuilder(keysToDisplayMap.get(setting.getKey()));
valueBuilder.setDefault(setting.isDefault());
setInherited(setting, valueBuilder);
setValue(setting, valueBuilder);
setParent(setting, valueBuilder);
});
}

Expand All @@ -211,6 +207,14 @@ private Settings.Setting.Builder getOrCreateValueBuilder(String key) {
return valueBuilder;
}

private void setInherited(Setting setting, Settings.Setting.Builder valueBuilder) {
boolean isDefault = setting.isDefault();
boolean isGlobal = !requestedComponent.isPresent();
boolean isOnComponent = requestedComponent.isPresent() && Objects.equals(setting.getComponentId(), requestedComponent.get().getId());
boolean isSet = isGlobal || isOnComponent;
valueBuilder.setInherited(isDefault || !isSet);
}

private void setValue(Setting setting, Settings.Setting.Builder valueBuilder) {
PropertyDefinition definition = setting.getDefinition();
String value = setting.getValue();
Expand All @@ -219,25 +223,46 @@ private void setValue(Setting setting, Settings.Setting.Builder valueBuilder) {
return;
}
if (definition.type().equals(PROPERTY_SET)) {
Settings.FieldsValues.Builder builder = Settings.FieldsValues.newBuilder();
for (Map<String, String> propertySetMap : setting.getPropertySets()) {
builder.addFieldsValuesBuilder().putAllValue(propertySetMap);
}
valueBuilder.setFieldsValues(builder);
valueBuilder.setFieldsValues(createFieldValuesBuilder(setting.getPropertySets()));
} else if (definition.multiValues()) {
List<String> values = COMMA_SPLITTER.splitToList(value).stream().map(v -> v.replace(COMMA_ENCODED_VALUE, ",")).collect(Collectors.toList());
valueBuilder.setValues(Settings.Values.newBuilder().addAllValues(values));
valueBuilder.setValues(createValuesBuilder(value));
} else {
valueBuilder.setValue(value);
}
}

private void setInherited(Setting setting, Settings.Setting.Builder valueBuilder) {
if (setting.isDefault()) {
valueBuilder.setInherited(false);
} else {
valueBuilder.setInherited(component.isPresent() && !Objects.equals(setting.getComponentId(), component.get().getId()));
private void setParent(Setting setting, Settings.Setting.Builder valueBuilder) {
Setting parent = settingsByParentKey.get(setting.getKey());
if (parent != null) {
String value = valueBuilder.getInherited() ? setting.getValue() : parent.getValue();
PropertyDefinition definition = setting.getDefinition();
if (definition == null) {
valueBuilder.setParentValue(value);
return;
}

if (definition.type().equals(PROPERTY_SET)) {
valueBuilder.setParentFieldValues(createFieldValuesBuilder(valueBuilder.getInherited() ? setting.getPropertySets() : parent.getPropertySets()));
} else if (definition.multiValues()) {
valueBuilder.setParentValues(createValuesBuilder(value));
} else {
valueBuilder.setParentValue(value);
}
}
settingsByParentKey.put(setting.getKey(), setting);
}

private static Settings.Values.Builder createValuesBuilder(String value) {
List<String> values = COMMA_SPLITTER.splitToList(value).stream().map(v -> v.replace(COMMA_ENCODED_VALUE, ",")).collect(Collectors.toList());
return Settings.Values.newBuilder().addAllValues(values);
}

private static Settings.FieldValues.Builder createFieldValuesBuilder(List<Map<String, String>> fieldValues) {
Settings.FieldValues.Builder builder = Settings.FieldValues.newBuilder();
for (Map<String, String> propertySetMap : fieldValues) {
builder.addFieldValuesBuilder().putAllValue(propertySetMap);
}
return builder;
}
}

Expand Down
Expand Up @@ -3,8 +3,7 @@
{
"key": "sonar.test.jira",
"value": "abc",
"default": true,
"inherited": false
"inherited": true
},
{
"key": "sonar.autogenerated",
Expand All @@ -13,7 +12,6 @@
"val2",
"val3"
],
"default": false,
"inherited": false
},
{
Expand All @@ -28,7 +26,6 @@
"text": "bar"
}
],
"default": false,
"inherited": false
}
]
Expand Down

0 comments on commit 2e3c74b

Please sign in to comment.