Skip to content
This repository has been archived by the owner on Jun 25, 2024. It is now read-only.

Add mutable spring-backed config QUES-36 #43

Merged
merged 8 commits into from
Nov 10, 2020
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.pkb.common.config;

public abstract class AbstractMutableConfigStorage extends AbstractBaseConfigStorage {

@Override
public void setValue(String key, String value) {
if (!MUTABLE_CONFIG_KEY.equals(key)) {
setValueInternal(key, value);
}
}

abstract void setValueInternal(String key, String value);

}
5 changes: 3 additions & 2 deletions config/src/main/java/com/pkb/common/config/ConfigStorage.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@ public interface ConfigStorage {

Long getLong(String key, long defaultValue);

boolean isMutableConfigEnabled();
default boolean isMutableConfigEnabled() {
return getBoolean(MUTABLE_CONFIG_KEY, false);
}

void setValue(String key, String value);

OverrideRemovalResult removeOverrideAtKey(String key);

void reset();

ImmutableConfigStorage getImmutableConfig();
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public static ConfigStorage getConfigStorage() {
}


public static ConfigStorage getConfigStorage(ImmutableConfigStorage baseStorage) {
public static ConfigStorage getConfigStorage(ConfigStorage baseStorage) {
if (baseStorage.isMutableConfigEnabled()) {
return new MutableRawConfigStorage(baseStorage);
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.pkb.common.config;

import java.util.HashMap;
import java.util.Map;

import static java.util.Collections.emptyMap;
import static java.util.Collections.unmodifiableMap;

public final class ImmutableRawConfigStorage extends AbstractBaseConfigStorage implements ImmutableConfigStorage {
import java.util.HashMap;
import java.util.Map;

public final class ImmutableRawConfigStorage extends AbstractBaseConfigStorage {

public static final ImmutableRawConfigStorage EMPTY = new ImmutableRawConfigStorage(emptyMap());

Expand Down Expand Up @@ -36,4 +36,19 @@ public String getString(String key, String defaultValue) {
return storage.getOrDefault(key, defaultValue);
}

@Override
public void setValue(String key, String value) {
//No-op
}

@Override
public OverrideRemovalResult removeOverrideAtKey(String key) {
return OverrideRemovalResult.NO_OP_AS_CONFIG_IS_IMMUTABLE;
}

@Override
public void reset() {
//No-op
}

}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
import java.util.Map;
import java.util.function.Supplier;

public final class MutableRawConfigStorage extends AbstractBaseConfigStorage implements MutableConfigStorage {
public final class MutableRawConfigStorage extends AbstractMutableConfigStorage {

private final Map<String, String> overrideMap = new HashMap<>();
private final ImmutableConfigStorage configStorage;
private final ConfigStorage configStorage;

MutableRawConfigStorage(ImmutableConfigStorage configStorage) {
MutableRawConfigStorage(ConfigStorage configStorage) {
this.configStorage = configStorage;
}

Expand All @@ -24,10 +24,8 @@ public String getString(String key, String defaultValue) {
}

@Override
public void setValue(String key, String value) {
if (!MUTABLE_CONFIG_KEY.equals(key)) {
overrideMap.put(key, value);
}
void setValueInternal(String key, String value) {
overrideMap.put(key, value);
karsaig marked this conversation as resolved.
Show resolved Hide resolved
}

@Override
Expand All @@ -45,15 +43,15 @@ public void reset() {
overrideMap.clear();
}

@Override
public ImmutableConfigStorage getImmutableConfig() {
return configStorage;
}

private String getOverriddenOrOriginalValue(String key, Supplier<String> originalSupplier) {
if (overrideMap.containsKey(key)) {
return overrideMap.get(key);
}
return originalSupplier.get();
}

@Override
public boolean isMutableConfigEnabled() {
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import static com.github.karsaig.approvalcrest.jupiter.MatcherAssert.assertThrows;
import static com.github.karsaig.approvalcrest.jupiter.matcher.Matchers.sameJsonAsApproved;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.sameInstance;
import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.HashMap;
Expand Down Expand Up @@ -197,9 +196,4 @@ public void removingNonExistentKey() {
assertEquals(OverrideRemovalResult.NO_OP_AS_CONFIG_IS_IMMUTABLE, removalResult);
}

@Test
void getImmutableConfigReturnsSelf() {
ConfigStorage configStorage = underTest.getImmutableConfig();
assertThat(configStorage, sameInstance(underTest));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import static com.github.karsaig.approvalcrest.jupiter.MatcherAssert.assertThrows;
import static com.github.karsaig.approvalcrest.jupiter.matcher.Matchers.sameJsonAsApproved;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.sameInstance;
import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.HashMap;
Expand Down Expand Up @@ -195,11 +194,6 @@ void mutableConfigCannotBeOverridden() {
assertThat(underTest.isMutableConfigEnabled(), is(true));
}

@Test
void getImmutableConfigReturnsOriginalImmutableConfig() {
ConfigStorage configStorage = underTest.getImmutableConfig();
assertThat(configStorage, sameInstance(immutableRawConfigStorage));
}

@DisplayName("getInt returns original value without override")
@Test
Expand Down
48 changes: 48 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,11 @@
<phr-pulsar.version>12-a115018-86851</phr-pulsar.version>
<restassured.version>3.0.7-PKB</restassured.version>

<spring.version>5.2.3.RELEASE</spring.version> <!-- copied from PHR -->
<commons.testing.version>20-789c720-63866</commons.testing.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<hibernate-core.version>5.3.15.Final</hibernate-core.version>
<spring.boot.version>2.3.5.RELEASE</spring.boot.version>
</properties>

<modules>
Expand All @@ -64,10 +68,23 @@
<module>spring-infrastructure</module>
<module>testlogging</module>
<module>testsupport</module>
<module>spring-boot-infrastructure</module>
</modules>

<dependencyManagement>
<dependencies>

<dependency>
<groupId>com.pkb.pkbcommon</groupId>
<artifactId>infrastructure</artifactId>
<version>${revision}${changelist}</version>
</dependency>
<dependency>
<groupId>com.pkb</groupId>
<artifactId>commons-testing-base</artifactId>
<version>${commons.testing.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
Expand Down Expand Up @@ -210,6 +227,13 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
Expand All @@ -226,6 +250,30 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>${spring.boot.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>

Expand Down
69 changes: 69 additions & 0 deletions spring-boot-infrastructure/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>pkb-common</artifactId>
<groupId>com.pkb.pkbcommon</groupId>
<version>${revision}${changelist}</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>spring-boot-infrastructure</artifactId>

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring.boot.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.pkb.pkbcommon</groupId>
<artifactId>config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>com.github.karsaig</groupId>
<artifactId>approvalcrest-junit-jupiter</artifactId>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
</dependencies>

</project>
Loading