From 52356c9edbaba09e2f43e0eb1e43e7a47dee252d Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Thu, 28 Nov 2024 18:07:56 -0800 Subject: [PATCH 1/2] Fixes circular dependency introdeuced by model and dtos --- pom.xml | 1 + .../switcherapi/client/model/Switcher.java | 2 +- .../client/model/SwitcherResult.java | 44 +++++-------------- .../client/remote/ClientWSImpl.java | 10 ++--- .../switcherapi/client/remote/Constants.java | 3 +- .../client/remote/dto/AuthResponse.java | 7 +++ .../client/remote/dto/CriteriaRequest.java | 21 +++++---- .../remote/dto/SnapshotVersionResponse.java | 6 +++ .../client/service/SwitcherFactory.java | 27 ++++++++++++ .../service/local/ClientLocalService.java | 13 +++--- .../service/local/SwitcherLocalService.java | 12 +++-- .../service/remote/SwitcherRemoteService.java | 11 ++--- .../switcherapi/client/utils/Mapper.java | 26 +++++++++++ .../client/utils/SnapshotLoader.java | 4 +- .../client/utils/SwitcherUtils.java | 4 +- .../switcherapi/client/utils/Utils.java | 8 ++++ .../client/remote/ClientRemoteTest.java | 6 +-- 17 files changed, 132 insertions(+), 73 deletions(-) create mode 100644 src/main/java/com/github/switcherapi/client/service/SwitcherFactory.java create mode 100644 src/main/java/com/github/switcherapi/client/utils/Mapper.java create mode 100644 src/main/java/com/github/switcherapi/client/utils/Utils.java diff --git a/pom.xml b/pom.xml index 1b6b5ea2..7619f15b 100644 --- a/pom.xml +++ b/pom.xml @@ -81,6 +81,7 @@ **/model/**/*.java, **/remote/dto/*.java, + **/utils/Utils.java, **/exception/**/*.java, **/service/validators/RegexValidatorV8.java, **/client/remote/Constants.java diff --git a/src/main/java/com/github/switcherapi/client/model/Switcher.java b/src/main/java/com/github/switcherapi/client/model/Switcher.java index ba6abb3f..1f3a0778 100644 --- a/src/main/java/com/github/switcherapi/client/model/Switcher.java +++ b/src/main/java/com/github/switcherapi/client/model/Switcher.java @@ -84,7 +84,7 @@ public boolean isItOn() throws SwitcherException { @Override public SwitcherResult submit() throws SwitcherException { if (SwitcherExecutor.getBypass().containsKey(switcherKey)) { - return SwitcherExecutor.getBypass().get(switcherKey).buildFromSwitcher(this); + return SwitcherExecutor.getBypass().get(switcherKey).buildFromSwitcher(switcherKey, entry); } if (canUseAsync()) { diff --git a/src/main/java/com/github/switcherapi/client/model/SwitcherResult.java b/src/main/java/com/github/switcherapi/client/model/SwitcherResult.java index 8fe40739..5addfa4f 100644 --- a/src/main/java/com/github/switcherapi/client/model/SwitcherResult.java +++ b/src/main/java/com/github/switcherapi/client/model/SwitcherResult.java @@ -1,19 +1,18 @@ package com.github.switcherapi.client.model; -import java.util.*; - -import com.github.switcherapi.client.remote.dto.CriteriaResponse; import com.google.gson.Gson; +import java.util.*; + /** * @author Roger Floriano (petruki) * @since 2019-12-24 */ public class SwitcherResult { - private static final String DEFAULT_REASON = "Default result"; + public static final String DEFAULT_REASON = "Default result"; - private static final String DEFAULT_SUCCESS = "Success"; + public static final String DEFAULT_SUCCESS = "Success"; private boolean result; @@ -32,22 +31,22 @@ public SwitcherResult() { entry = new ArrayList<>(); } - private SwitcherResult(final boolean result, final String reason, final Switcher switcher) { + public SwitcherResult(String switcherKey, boolean result, String reason, List entry) { this(); this.result = result; this.reason = reason; - this.switcherKey = switcher.getSwitcherKey(); - this.entry = switcher.getEntry(); + this.switcherKey = switcherKey; + this.entry = entry; } - public SwitcherResult buildFromSwitcher(Switcher switcher) { - this.switcherKey = switcher.getSwitcherKey(); - this.entry = switcher.getEntry(); + public SwitcherResult buildFromSwitcher(String switcherKey, List entry) { + this.switcherKey = switcherKey; + this.entry = entry; if (Objects.nonNull(entry)) { for (Entry inputEntry : entry) { if (!isEntryMatching(inputEntry)) { - return new SwitcherResult(!this.result, this.reason, switcher); + return new SwitcherResult(switcherKey, !this.result, this.reason, entry); } } } @@ -60,27 +59,6 @@ private boolean isEntryMatching(Entry inputEntry) { entryWhen.get(inputEntry.getStrategy()).contains(inputEntry.getInput()); } - public static SwitcherResult buildFromDefault(Switcher switcher) { - return new SwitcherResult(Boolean.parseBoolean(switcher.getDefaultResult()), DEFAULT_REASON, switcher); - } - - public static SwitcherResult buildResultFail(String reason, Switcher switcher) { - return new SwitcherResult(Boolean.FALSE, reason, switcher); - } - - public static SwitcherResult buildResultSuccess(Switcher switcher) { - return new SwitcherResult(Boolean.TRUE, DEFAULT_SUCCESS, switcher); - } - - public static SwitcherResult buildResultFromRemote(CriteriaResponse criteriaResponse) { - SwitcherResult switcherResult = new SwitcherResult(); - switcherResult.setSwitcherKey(criteriaResponse.getSwitcherKey()); - switcherResult.setResult(criteriaResponse.getResult()); - switcherResult.setReason(criteriaResponse.getReason()); - switcherResult.setMetadata(criteriaResponse.getMetadata()); - return switcherResult; - } - public boolean isItOn() { return result; } diff --git a/src/main/java/com/github/switcherapi/client/remote/ClientWSImpl.java b/src/main/java/com/github/switcherapi/client/remote/ClientWSImpl.java index 91d69da8..9b25bfc1 100644 --- a/src/main/java/com/github/switcherapi/client/remote/ClientWSImpl.java +++ b/src/main/java/com/github/switcherapi/client/remote/ClientWSImpl.java @@ -62,7 +62,7 @@ public CriteriaResponse executeCriteria(final CriteriaRequest criteriaRequest, f final HttpResponse response = client.send(HttpRequest.newBuilder() .uri(uri) .headers(HEADER_AUTHORIZATION, String.format(TOKEN_TEXT, token), - CONTENT_TYPE[0], CONTENT_TYPE[1]) + HEADER_CONTENT_TYPE, HEADER_JSON) .timeout(Duration.ofMillis(timeoutMs)) .POST(HttpRequest.BodyPublishers.ofString(gson.toJson(criteriaRequest.getInputRequest()))) .build(), HttpResponse.BodyHandlers.ofString()); @@ -92,7 +92,7 @@ public Optional auth() { final HttpResponse response = client.send(HttpRequest.newBuilder() .uri(URI.create(String.format(AUTH_URL, url))) .headers(HEADER_APIKEY, switcherProperties.getValue(ContextKey.APIKEY), - CONTENT_TYPE[0], CONTENT_TYPE[1]) + HEADER_CONTENT_TYPE, HEADER_JSON) .timeout(Duration.ofMillis(timeoutMs)) .POST(HttpRequest.BodyPublishers.ofString(gson.toJson(authRequest)) ).build(), HttpResponse.BodyHandlers.ofString()); @@ -115,7 +115,7 @@ public Snapshot resolveSnapshot(final String token) { final HttpResponse response = client.send(HttpRequest.newBuilder() .uri(URI.create(String.format(SNAPSHOT_URL, url))) .headers(HEADER_AUTHORIZATION, String.format(TOKEN_TEXT, token), - CONTENT_TYPE[0], CONTENT_TYPE[1]) + HEADER_CONTENT_TYPE, HEADER_JSON) .timeout(Duration.ofMillis(timeoutMs)) .POST(HttpRequest.BodyPublishers.ofString(String.format(QUERY, switcherProperties.getValue(ContextKey.DOMAIN), @@ -141,7 +141,7 @@ public SnapshotVersionResponse checkSnapshotVersion(final long version, final St final HttpResponse response = client.send(HttpRequest.newBuilder() .uri(URI.create(String.format(SNAPSHOT_VERSION_CHECK, url, version))) .headers(HEADER_AUTHORIZATION, String.format(TOKEN_TEXT, token), - CONTENT_TYPE[0], CONTENT_TYPE[1]) + HEADER_CONTENT_TYPE, HEADER_JSON) .timeout(Duration.ofMillis(timeoutMs)) .GET().build(), HttpResponse.BodyHandlers.ofString()); @@ -181,7 +181,7 @@ public SwitchersCheck checkSwitchers(Set switchers, final String token) .uri(URI.create(String.format(CHECK_SWITCHERS, url))) .timeout(Duration.ofMillis(timeoutMs)) .headers(HEADER_AUTHORIZATION, String.format(TOKEN_TEXT, token), - CONTENT_TYPE[0], CONTENT_TYPE[1]) + HEADER_CONTENT_TYPE, HEADER_JSON) .POST(HttpRequest.BodyPublishers.ofString(gson.toJson(new SwitchersCheck(switchers))) ).build(), HttpResponse.BodyHandlers.ofString()); diff --git a/src/main/java/com/github/switcherapi/client/remote/Constants.java b/src/main/java/com/github/switcherapi/client/remote/Constants.java index df0a3f4f..c61772ea 100644 --- a/src/main/java/com/github/switcherapi/client/remote/Constants.java +++ b/src/main/java/com/github/switcherapi/client/remote/Constants.java @@ -8,8 +8,9 @@ public final class Constants { public static final int DEFAULT_POOL_SIZE = 2; public static final String HEADER_AUTHORIZATION = "Authorization"; public static final String HEADER_APIKEY = "switcher-api-key"; + public static final String HEADER_CONTENT_TYPE = "Content-Type"; + public static final String HEADER_JSON = "application/json"; public static final String TOKEN_TEXT = "Bearer %s"; - public static final String[] CONTENT_TYPE = { "Content-Type", "application/json" }; public static final String QUERY = "{\"query\":\"{ domain(name: \\\"%s\\\", environment: \\\"%s\\\", _component: \\\"%s\\\") { " + diff --git a/src/main/java/com/github/switcherapi/client/remote/dto/AuthResponse.java b/src/main/java/com/github/switcherapi/client/remote/dto/AuthResponse.java index c9031ea8..db336a61 100644 --- a/src/main/java/com/github/switcherapi/client/remote/dto/AuthResponse.java +++ b/src/main/java/com/github/switcherapi/client/remote/dto/AuthResponse.java @@ -26,4 +26,11 @@ public boolean isExpired() { return (this.exp * 1000) < System.currentTimeMillis(); } + @Override + public String toString() { + return "AuthResponse{" + + "token='" + token + '\'' + + ", exp=" + exp + + '}'; + } } diff --git a/src/main/java/com/github/switcherapi/client/remote/dto/CriteriaRequest.java b/src/main/java/com/github/switcherapi/client/remote/dto/CriteriaRequest.java index f9097683..8a06239f 100644 --- a/src/main/java/com/github/switcherapi/client/remote/dto/CriteriaRequest.java +++ b/src/main/java/com/github/switcherapi/client/remote/dto/CriteriaRequest.java @@ -1,7 +1,6 @@ package com.github.switcherapi.client.remote.dto; import com.github.switcherapi.client.model.Entry; -import com.github.switcherapi.client.model.Switcher; import java.util.ArrayList; import java.util.List; @@ -15,26 +14,30 @@ public class CriteriaRequest { private boolean bypassMetric; - public static CriteriaRequest build(final Switcher switcher) { - final CriteriaRequest request = new CriteriaRequest(); - request.switcherKey = switcher.getSwitcherKey(); - request.entry = switcher.getEntry(); - request.bypassMetric = switcher.isBypassMetrics(); - return request; - } - public String getSwitcherKey() { return switcherKey; } + public void setSwitcherKey(String switcherKey) { + this.switcherKey = switcherKey; + } + public List getEntry() { return entry; } + public void setEntry(List entry) { + this.entry = entry; + } + public boolean isBypassMetric() { return bypassMetric; } + public void setBypassMetric(boolean bypassMetric) { + this.bypassMetric = bypassMetric; + } + /** * This method builds up the request made by the client to reach the Switcher API. * diff --git a/src/main/java/com/github/switcherapi/client/remote/dto/SnapshotVersionResponse.java b/src/main/java/com/github/switcherapi/client/remote/dto/SnapshotVersionResponse.java index 833e51c8..530b6e10 100644 --- a/src/main/java/com/github/switcherapi/client/remote/dto/SnapshotVersionResponse.java +++ b/src/main/java/com/github/switcherapi/client/remote/dto/SnapshotVersionResponse.java @@ -16,4 +16,10 @@ public void setStatus(boolean status) { this.status = status; } + @Override + public String toString() { + return "SnapshotVersionResponse{" + + "status=" + status + + '}'; + } } diff --git a/src/main/java/com/github/switcherapi/client/service/SwitcherFactory.java b/src/main/java/com/github/switcherapi/client/service/SwitcherFactory.java new file mode 100644 index 00000000..42c9ef22 --- /dev/null +++ b/src/main/java/com/github/switcherapi/client/service/SwitcherFactory.java @@ -0,0 +1,27 @@ +package com.github.switcherapi.client.service; + +import com.github.switcherapi.client.model.Switcher; +import com.github.switcherapi.client.model.SwitcherResult; +import com.github.switcherapi.client.utils.Utils; + +import static com.github.switcherapi.client.model.SwitcherResult.DEFAULT_REASON; +import static com.github.switcherapi.client.model.SwitcherResult.DEFAULT_SUCCESS; + +public class SwitcherFactory extends Utils { + + public static SwitcherResult buildFromDefault(Switcher switcher) { + return new SwitcherResult( + switcher.getSwitcherKey(), + Boolean.parseBoolean(switcher.getDefaultResult()), + DEFAULT_REASON, switcher.getEntry()); + } + + public static SwitcherResult buildResultFail(String reason, Switcher switcher) { + return new SwitcherResult(switcher.getSwitcherKey(), Boolean.FALSE, reason, switcher.getEntry()); + } + + public static SwitcherResult buildResultSuccess(Switcher switcher) { + return new SwitcherResult(switcher.getSwitcherKey(), Boolean.TRUE, DEFAULT_SUCCESS, switcher.getEntry()); + } + +} diff --git a/src/main/java/com/github/switcherapi/client/service/local/ClientLocalService.java b/src/main/java/com/github/switcherapi/client/service/local/ClientLocalService.java index 98c2107a..f11c987d 100644 --- a/src/main/java/com/github/switcherapi/client/service/local/ClientLocalService.java +++ b/src/main/java/com/github/switcherapi/client/service/local/ClientLocalService.java @@ -9,6 +9,7 @@ import com.github.switcherapi.client.model.criteria.Group; import com.github.switcherapi.client.model.criteria.Strategy; import com.github.switcherapi.client.model.SwitcherResult; +import com.github.switcherapi.client.service.SwitcherFactory; import com.github.switcherapi.client.service.SwitcherValidator; import com.github.switcherapi.client.utils.SwitcherUtils; import org.apache.commons.lang3.ArrayUtils; @@ -63,7 +64,7 @@ public List checkSwitchers(final Set switchers, final Domain dom @Override public SwitcherResult executeCriteria(final Switcher switcher, final Domain domain) { if (!domain.isActivated()) { - return SwitcherResult.buildResultFail(DISABLED_DOMAIN, switcher); + return SwitcherFactory.buildResultFail(DISABLED_DOMAIN, switcher); } Config config; @@ -80,18 +81,18 @@ public SwitcherResult executeCriteria(final Switcher switcher, final Domain doma private SwitcherResult getSwitcherResult(Switcher switcher, Group group, Config config) { if (!group.isActivated()) { - return SwitcherResult.buildResultFail(DISABLED_GROUP, switcher); + return SwitcherFactory.buildResultFail(DISABLED_GROUP, switcher); } if (!config.isActivated()) { - return SwitcherResult.buildResultFail(DISABLED_CONFIG, switcher); + return SwitcherFactory.buildResultFail(DISABLED_CONFIG, switcher); } if (ArrayUtils.isNotEmpty(config.getStrategies())) { return this.processOperation(config.getStrategies(), switcher.getEntry(), switcher); } - return SwitcherResult.buildResultSuccess(switcher); + return SwitcherFactory.buildResultSuccess(switcher); } private Config findConfigInGroup(final Group group, final String switcherKey) { @@ -129,11 +130,11 @@ private SwitcherResult processOperation(final Strategy[] configStrategies, final } } - return SwitcherResult.buildResultSuccess(switcher); + return SwitcherFactory.buildResultSuccess(switcher); } private SwitcherResult strategyFailed(Switcher switcher, Strategy strategy, String pattern) { - return SwitcherResult.buildResultFail(String.format(pattern, strategy.getStrategy()), switcher); + return SwitcherFactory.buildResultFail(String.format(pattern, strategy.getStrategy()), switcher); } private Entry tryGetSwitcherInput(final List input, Strategy strategy) { diff --git a/src/main/java/com/github/switcherapi/client/service/local/SwitcherLocalService.java b/src/main/java/com/github/switcherapi/client/service/local/SwitcherLocalService.java index 79f0b5b1..67627d7e 100644 --- a/src/main/java/com/github/switcherapi/client/service/local/SwitcherLocalService.java +++ b/src/main/java/com/github/switcherapi/client/service/local/SwitcherLocalService.java @@ -2,12 +2,16 @@ import com.github.switcherapi.client.SwitcherExecutor; import com.github.switcherapi.client.SwitcherProperties; -import com.github.switcherapi.client.exception.*; +import com.github.switcherapi.client.exception.SwitcherException; +import com.github.switcherapi.client.exception.SwitcherKeyNotFoundException; +import com.github.switcherapi.client.exception.SwitcherSnapshotLoadException; +import com.github.switcherapi.client.exception.SwitchersValidationException; import com.github.switcherapi.client.model.ContextKey; import com.github.switcherapi.client.model.Switcher; -import com.github.switcherapi.client.remote.dto.CriteriaRequest; import com.github.switcherapi.client.model.SwitcherResult; +import com.github.switcherapi.client.service.SwitcherFactory; import com.github.switcherapi.client.service.remote.ClientRemote; +import com.github.switcherapi.client.utils.Mapper; import com.github.switcherapi.client.utils.SnapshotEventHandler; import com.github.switcherapi.client.utils.SnapshotLoader; import com.github.switcherapi.client.utils.SwitcherUtils; @@ -106,7 +110,7 @@ public SwitcherResult executeCriteria(final Switcher switcher) { SwitcherResult response; try { if (switcher.isRemote()) { - response = SwitcherResult.buildResultFromRemote(this.clientRemote.executeCriteria(CriteriaRequest.build(switcher))); + response = Mapper.mapFrom(this.clientRemote.executeCriteria(Mapper.mapFrom(switcher))); SwitcherUtils.debug(logger, "[Remote] response: {}", response); } else { response = this.clientLocal.executeCriteria(switcher, this.domain); @@ -117,7 +121,7 @@ public SwitcherResult executeCriteria(final Switcher switcher) { throw e; } - response = SwitcherResult.buildFromDefault(switcher); + response = SwitcherFactory.buildFromDefault(switcher); SwitcherUtils.debug(logger, "[Default] response: {}", response); } diff --git a/src/main/java/com/github/switcherapi/client/service/remote/SwitcherRemoteService.java b/src/main/java/com/github/switcherapi/client/service/remote/SwitcherRemoteService.java index 2323945f..e76f8ee6 100644 --- a/src/main/java/com/github/switcherapi/client/service/remote/SwitcherRemoteService.java +++ b/src/main/java/com/github/switcherapi/client/service/remote/SwitcherRemoteService.java @@ -5,10 +5,11 @@ import com.github.switcherapi.client.exception.SwitchersValidationException; import com.github.switcherapi.client.model.ContextKey; import com.github.switcherapi.client.model.Switcher; -import com.github.switcherapi.client.remote.dto.SwitchersCheck; -import com.github.switcherapi.client.remote.dto.CriteriaRequest; import com.github.switcherapi.client.model.SwitcherResult; import com.github.switcherapi.client.remote.dto.CriteriaResponse; +import com.github.switcherapi.client.remote.dto.SwitchersCheck; +import com.github.switcherapi.client.service.SwitcherFactory; +import com.github.switcherapi.client.utils.Mapper; import com.github.switcherapi.client.utils.SwitcherUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -40,10 +41,10 @@ public SwitcherResult executeCriteria(final Switcher switcher) { SwitcherUtils.debug(logger, "[Remote] request: {}", switcher); try { - final CriteriaResponse response = this.clientRemote.executeCriteria(CriteriaRequest.build(switcher)); + final CriteriaResponse response = this.clientRemote.executeCriteria(Mapper.mapFrom(switcher)); SwitcherUtils.debug(logger, "[Remote] response: {}", response); - return SwitcherResult.buildResultFromRemote(response); + return Mapper.mapFrom(response); } catch (final SwitcherRemoteException e) { logger.error("Failed to execute criteria - Cause: {}", e.getMessage(), e.getCause()); return tryExecuteLocalCriteria(switcher, e); @@ -60,7 +61,7 @@ private SwitcherResult tryExecuteLocalCriteria(final Switcher switcher, } if (StringUtils.isNotBlank(switcher.getDefaultResult())) { - final SwitcherResult response = SwitcherResult.buildFromDefault(switcher); + final SwitcherResult response = SwitcherFactory.buildFromDefault(switcher); SwitcherUtils.debug(logger, "[Default] response: {}", response); return response; diff --git a/src/main/java/com/github/switcherapi/client/utils/Mapper.java b/src/main/java/com/github/switcherapi/client/utils/Mapper.java new file mode 100644 index 00000000..20833221 --- /dev/null +++ b/src/main/java/com/github/switcherapi/client/utils/Mapper.java @@ -0,0 +1,26 @@ +package com.github.switcherapi.client.utils; + +import com.github.switcherapi.client.model.Switcher; +import com.github.switcherapi.client.model.SwitcherResult; +import com.github.switcherapi.client.remote.dto.CriteriaRequest; +import com.github.switcherapi.client.remote.dto.CriteriaResponse; + +public class Mapper extends Utils { + + public static CriteriaRequest mapFrom(final Switcher switcher) { + CriteriaRequest request = new CriteriaRequest(); + request.setSwitcherKey(switcher.getSwitcherKey()); + request.setEntry(switcher.getEntry()); + request.setBypassMetric(switcher.isBypassMetrics()); + return request; + } + + public static SwitcherResult mapFrom(final CriteriaResponse criteriaResponse) { + SwitcherResult switcherResult = new SwitcherResult(); + switcherResult.setSwitcherKey(criteriaResponse.getSwitcherKey()); + switcherResult.setResult(criteriaResponse.getResult()); + switcherResult.setReason(criteriaResponse.getReason()); + switcherResult.setMetadata(criteriaResponse.getMetadata()); + return switcherResult; + } +} diff --git a/src/main/java/com/github/switcherapi/client/utils/SnapshotLoader.java b/src/main/java/com/github/switcherapi/client/utils/SnapshotLoader.java index 8312abe4..01c85ab5 100644 --- a/src/main/java/com/github/switcherapi/client/utils/SnapshotLoader.java +++ b/src/main/java/com/github/switcherapi/client/utils/SnapshotLoader.java @@ -19,13 +19,11 @@ * @author Roger Floriano (petruki) * @since 2019-12-24 */ -public class SnapshotLoader { +public class SnapshotLoader extends Utils { private static final String SNAPSHOT_FILE_FORMAT = "%s/%s.json"; private static final Gson gson = new Gson(); - - private SnapshotLoader() {} /** * Load a specific snapshot file diff --git a/src/main/java/com/github/switcherapi/client/utils/SwitcherUtils.java b/src/main/java/com/github/switcherapi/client/utils/SwitcherUtils.java index e4507b6b..eb1cc104 100644 --- a/src/main/java/com/github/switcherapi/client/utils/SwitcherUtils.java +++ b/src/main/java/com/github/switcherapi/client/utils/SwitcherUtils.java @@ -19,15 +19,13 @@ * @author Roger Floriano (petruki) * @since 2019-12-24 */ -public class SwitcherUtils { +public class SwitcherUtils extends Utils { private static final String[] DURATION_UNIT = { "s", "m", "h", "d" }; private static final String ENV_VARIABLE_PATTERN = "\\$\\{(\\w+)}"; private static final String ENV_DEFAULT_VARIABLE_PATTERN = "\\$\\{(\\w+):(.+)?}"; private static final String PAYLOAD_PATTERN = "%s.%s"; - private SwitcherUtils() {} - public static Date addTimeDuration(final String addValue, final Date date) throws SwitcherInvalidDateTimeArgumentException { switch (addValue.charAt(addValue.length() - 1)) { diff --git a/src/main/java/com/github/switcherapi/client/utils/Utils.java b/src/main/java/com/github/switcherapi/client/utils/Utils.java new file mode 100644 index 00000000..3723865f --- /dev/null +++ b/src/main/java/com/github/switcherapi/client/utils/Utils.java @@ -0,0 +1,8 @@ +package com.github.switcherapi.client.utils; + +public abstract class Utils { + + protected Utils() { + throw new IllegalStateException("Utility class"); + } +} diff --git a/src/test/java/com/github/switcherapi/client/remote/ClientRemoteTest.java b/src/test/java/com/github/switcherapi/client/remote/ClientRemoteTest.java index 4303218c..46a5327a 100644 --- a/src/test/java/com/github/switcherapi/client/remote/ClientRemoteTest.java +++ b/src/test/java/com/github/switcherapi/client/remote/ClientRemoteTest.java @@ -4,9 +4,8 @@ import com.github.switcherapi.client.ContextBuilder; import com.github.switcherapi.client.SwitcherProperties; import com.github.switcherapi.client.model.Switcher; -import com.github.switcherapi.client.remote.dto.SwitchersCheck; -import com.github.switcherapi.client.remote.dto.CriteriaRequest; import com.github.switcherapi.client.model.SwitcherResult; +import com.github.switcherapi.client.remote.dto.SwitchersCheck; import com.github.switcherapi.client.service.SwitcherValidator; import com.github.switcherapi.client.service.ValidatorService; import com.github.switcherapi.client.service.local.ClientLocal; @@ -15,6 +14,7 @@ import com.github.switcherapi.client.service.remote.ClientRemote; import com.github.switcherapi.client.service.remote.ClientRemoteService; import com.github.switcherapi.client.service.remote.SwitcherRemoteService; +import com.github.switcherapi.client.utils.Mapper; import com.github.switcherapi.fixture.MockWebServerHelper; import mockwebserver3.QueueDispatcher; import org.junit.jupiter.api.AfterAll; @@ -76,7 +76,7 @@ void shouldExecuteCriteria() { new SwitcherLocalService(clientRemote, clientLocal, Switchers.getSwitcherProperties()))); //test - SwitcherResult actual = SwitcherResult.buildResultFromRemote(clientRemote.executeCriteria(CriteriaRequest.build(switcher))); + SwitcherResult actual = Mapper.mapFrom(clientRemote.executeCriteria(Mapper.mapFrom(switcher))); assertTrue(actual.isItOn()); } From b29a58493ec6776527a6113d2015a7ca2da58dbf Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Thu, 28 Nov 2024 18:12:59 -0800 Subject: [PATCH 2/2] Fixes code smell --- .../switcherapi/client/service/SwitcherFactory.java | 5 +++-- .../java/com/github/switcherapi/client/utils/Mapper.java | 4 +++- .../github/switcherapi/client/utils/SnapshotLoader.java | 4 +++- .../github/switcherapi/client/utils/SwitcherUtils.java | 4 +++- .../java/com/github/switcherapi/client/utils/Utils.java | 8 -------- 5 files changed, 12 insertions(+), 13 deletions(-) delete mode 100644 src/main/java/com/github/switcherapi/client/utils/Utils.java diff --git a/src/main/java/com/github/switcherapi/client/service/SwitcherFactory.java b/src/main/java/com/github/switcherapi/client/service/SwitcherFactory.java index 42c9ef22..253cbef1 100644 --- a/src/main/java/com/github/switcherapi/client/service/SwitcherFactory.java +++ b/src/main/java/com/github/switcherapi/client/service/SwitcherFactory.java @@ -2,12 +2,13 @@ import com.github.switcherapi.client.model.Switcher; import com.github.switcherapi.client.model.SwitcherResult; -import com.github.switcherapi.client.utils.Utils; import static com.github.switcherapi.client.model.SwitcherResult.DEFAULT_REASON; import static com.github.switcherapi.client.model.SwitcherResult.DEFAULT_SUCCESS; -public class SwitcherFactory extends Utils { +public class SwitcherFactory { + + private SwitcherFactory() {} public static SwitcherResult buildFromDefault(Switcher switcher) { return new SwitcherResult( diff --git a/src/main/java/com/github/switcherapi/client/utils/Mapper.java b/src/main/java/com/github/switcherapi/client/utils/Mapper.java index 20833221..00d9b134 100644 --- a/src/main/java/com/github/switcherapi/client/utils/Mapper.java +++ b/src/main/java/com/github/switcherapi/client/utils/Mapper.java @@ -5,7 +5,9 @@ import com.github.switcherapi.client.remote.dto.CriteriaRequest; import com.github.switcherapi.client.remote.dto.CriteriaResponse; -public class Mapper extends Utils { +public class Mapper { + + private Mapper() {} public static CriteriaRequest mapFrom(final Switcher switcher) { CriteriaRequest request = new CriteriaRequest(); diff --git a/src/main/java/com/github/switcherapi/client/utils/SnapshotLoader.java b/src/main/java/com/github/switcherapi/client/utils/SnapshotLoader.java index 01c85ab5..150b3778 100644 --- a/src/main/java/com/github/switcherapi/client/utils/SnapshotLoader.java +++ b/src/main/java/com/github/switcherapi/client/utils/SnapshotLoader.java @@ -19,12 +19,14 @@ * @author Roger Floriano (petruki) * @since 2019-12-24 */ -public class SnapshotLoader extends Utils { +public class SnapshotLoader { private static final String SNAPSHOT_FILE_FORMAT = "%s/%s.json"; private static final Gson gson = new Gson(); + private SnapshotLoader() {} + /** * Load a specific snapshot file * diff --git a/src/main/java/com/github/switcherapi/client/utils/SwitcherUtils.java b/src/main/java/com/github/switcherapi/client/utils/SwitcherUtils.java index eb1cc104..74ec7dbe 100644 --- a/src/main/java/com/github/switcherapi/client/utils/SwitcherUtils.java +++ b/src/main/java/com/github/switcherapi/client/utils/SwitcherUtils.java @@ -19,12 +19,14 @@ * @author Roger Floriano (petruki) * @since 2019-12-24 */ -public class SwitcherUtils extends Utils { +public class SwitcherUtils { private static final String[] DURATION_UNIT = { "s", "m", "h", "d" }; private static final String ENV_VARIABLE_PATTERN = "\\$\\{(\\w+)}"; private static final String ENV_DEFAULT_VARIABLE_PATTERN = "\\$\\{(\\w+):(.+)?}"; private static final String PAYLOAD_PATTERN = "%s.%s"; + + private SwitcherUtils() {} public static Date addTimeDuration(final String addValue, final Date date) throws SwitcherInvalidDateTimeArgumentException { diff --git a/src/main/java/com/github/switcherapi/client/utils/Utils.java b/src/main/java/com/github/switcherapi/client/utils/Utils.java deleted file mode 100644 index 3723865f..00000000 --- a/src/main/java/com/github/switcherapi/client/utils/Utils.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.github.switcherapi.client.utils; - -public abstract class Utils { - - protected Utils() { - throw new IllegalStateException("Utility class"); - } -}