From b1393056f9651303d62ee90cda01f6dc51998703 Mon Sep 17 00:00:00 2001 From: ALEXEY ZVEREV Date: Mon, 31 Jul 2023 15:45:27 +0300 Subject: [PATCH] Return logic into the model (#7) --- .../releng/JiraComponentVersionFormatter.java | 14 +- .../JiraComponentVersionSerializer.java | 11 +- .../releng/dto/JiraComponentVersion.java | 199 ++++++------------ .../JiraComponentVersionDeserializer.kt | 55 +++-- .../octopusden/octopus/releng/VersionType.kt | 2 +- .../JiraComponentVersionFormatterTest.java | 8 +- .../releng/JiraComponentVersionProvider.java | 14 +- 7 files changed, 123 insertions(+), 180 deletions(-) diff --git a/src/main/java/org/octopusden/octopus/releng/JiraComponentVersionFormatter.java b/src/main/java/org/octopusden/octopus/releng/JiraComponentVersionFormatter.java index 60031b1..a3b0029 100644 --- a/src/main/java/org/octopusden/octopus/releng/JiraComponentVersionFormatter.java +++ b/src/main/java/org/octopusden/octopus/releng/JiraComponentVersionFormatter.java @@ -32,7 +32,7 @@ public String getBuildVersion(JiraComponent jiraComponent, String version) { } public String getLineVersion(JiraComponentVersion jiraComponentVersion) { - return getLineVersion(jiraComponentVersion.component, jiraComponentVersion.version); + return getLineVersion(jiraComponentVersion.getComponent(), jiraComponentVersion.getVersion()); } public String getLineVersion(JiraComponent jiraComponent, String version) { @@ -57,7 +57,7 @@ public boolean matchesReleaseVersionFormat(JiraComponent jiraComponent, String v } public boolean matchesReleaseVersionFormat(JiraComponentVersion jiraComponentVersion, String version) { - return matchesReleaseVersionFormat(jiraComponentVersion.component, version, true); + return matchesReleaseVersionFormat(jiraComponentVersion.getComponent(), version, true); } public boolean matchesReleaseVersionFormat(JiraComponent jiraComponent, String version) { @@ -70,11 +70,11 @@ public boolean matchesMajorVersionFormat(JiraComponent jiraComponent, String ver } public boolean matchesMajorVersionFormat(JiraComponentVersion jiraComponentVersion, String version) { - return matchesMajorVersionFormat(jiraComponentVersion.component, version, true); + return matchesMajorVersionFormat(jiraComponentVersion.getComponent(), version, true); } public boolean matchesBuildVersionFormat(JiraComponentVersion jiraComponentVersion, String version) { - return matchesBuildVersionFormat(jiraComponentVersion.component, version, true); + return matchesBuildVersionFormat(jiraComponentVersion.getComponent(), version, true); } public boolean matchesBuildVersionFormat(JiraComponent jiraComponent, String version, boolean strict) { @@ -92,12 +92,12 @@ public boolean matchesLineVersionFormat(JiraComponent jiraComponent, String vers } public boolean matchesAny(JiraComponentVersion jiraComponentVersion, String version) { - return matchesAny(jiraComponentVersion.component, version, true); + return matchesAny(jiraComponentVersion.getComponent(), version, true); } public boolean matchesAny(JiraComponentVersion jiraComponentVersion, String version, boolean strict) { - return matchesAny(jiraComponentVersion.component, version, strict); + return matchesAny(jiraComponentVersion.getComponent(), version, strict); } public boolean matchesAny(JiraComponent jiraComponent, String version, boolean strict) { @@ -107,7 +107,7 @@ public boolean matchesAny(JiraComponent jiraComponent, String version, boolean s } public boolean matchesRCVersionFormat(JiraComponentVersion jiraComponentVersion, String version) { - return matchesRCVersionFormat(jiraComponentVersion.component, version, true); + return matchesRCVersionFormat(jiraComponentVersion.getComponent(), version, true); } public boolean matchesRCVersionFormat(JiraComponent jiraComponent, String version, boolean strict) { diff --git a/src/main/java/org/octopusden/octopus/releng/JiraComponentVersionSerializer.java b/src/main/java/org/octopusden/octopus/releng/JiraComponentVersionSerializer.java index 68acfb9..ddad48f 100644 --- a/src/main/java/org/octopusden/octopus/releng/JiraComponentVersionSerializer.java +++ b/src/main/java/org/octopusden/octopus/releng/JiraComponentVersionSerializer.java @@ -5,13 +5,13 @@ import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.type.CollectionType; +import org.apache.commons.lang3.Validate; import org.octopusden.octopus.releng.dto.ComponentVersion; import org.octopusden.octopus.releng.dto.JiraComponent; import org.octopusden.octopus.releng.dto.JiraComponentVersion; import org.octopusden.releng.versions.ComponentVersionFormat; import org.octopusden.releng.versions.KotlinVersionFormatter; import org.octopusden.releng.versions.VersionFormatter; -import org.apache.commons.lang3.Validate; import org.octopusden.releng.versions.VersionNames; import java.io.IOException; @@ -125,10 +125,11 @@ private JiraComponentVersion deserializeFromRequestString(String component) { JiraComponent jiraComponent = new JiraComponent(projectKey, "", versionFormat, null, false); JiraComponentVersionFormatter jiraComponentVersionFormatter = new JiraComponentVersionFormatter(versionNames); - return JiraComponentVersion.builder(jiraComponentVersionFormatter) - .componentVersion(ComponentVersion.create(componentName, releaseVersion)) - .component(jiraComponent) - .build(); + return new JiraComponentVersion( + ComponentVersion.create(componentName, releaseVersion), + jiraComponent, + jiraComponentVersionFormatter + ); } boolean isValidJSON(final String json) { diff --git a/src/main/java/org/octopusden/octopus/releng/dto/JiraComponentVersion.java b/src/main/java/org/octopusden/octopus/releng/dto/JiraComponentVersion.java index 4e1bcea..a58c4c3 100644 --- a/src/main/java/org/octopusden/octopus/releng/dto/JiraComponentVersion.java +++ b/src/main/java/org/octopusden/octopus/releng/dto/JiraComponentVersion.java @@ -1,10 +1,10 @@ package org.octopusden.octopus.releng.dto; +import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; import org.octopusden.octopus.releng.JiraComponentVersionFormatter; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -12,155 +12,41 @@ @JsonInclude(JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public class JiraComponentVersion { - + @JsonIgnore public static final String RC_SUFFIX = "_RC"; @JsonProperty - public final ComponentVersion componentVersion; + private final ComponentVersion componentVersion; @JsonProperty - public final JiraComponent component; - - @JsonIgnore - public final String lineVersion; - - @JsonIgnore - public final String minorVersion; - - @JsonIgnore - public final String releaseVersion; - + private final JiraComponent component; @JsonIgnore - public final String buildVersion; + private final JiraComponentVersionFormatter jiraComponentVersionFormatter; @JsonIgnore - public final ComponentVersion releaseComponentVersion; + private String lineVersion = null; @JsonIgnore - public final ComponentVersion buildComponentVersion; + private String minorVersion = null; @JsonIgnore - public final ComponentVersion rCComponentVersion; + private String releaseVersion = null; @JsonIgnore - public final String version; + private String buildVersion = null; - @JsonIgnore - public final String rCversion; - - @JsonIgnore - public final String majorVersion; - - public static Builder builder(JiraComponentVersionFormatter jiraComponentVersionFormatter) { - return new Builder(jiraComponentVersionFormatter); + @JsonCreator + public JiraComponentVersion(@JsonProperty("componentVersion") ComponentVersion componentVersion, + @JsonProperty("component") JiraComponent component, + JiraComponentVersionFormatter jiraComponentVersionFormatter) { + this.componentVersion = componentVersion; + this.component = component; + this.jiraComponentVersionFormatter = jiraComponentVersionFormatter; } - @JsonPOJOBuilder(withPrefix = "") - public static class Builder { - - private final JiraComponentVersionFormatter jiraComponentVersionFormatter; - private ComponentVersion componentVersion; - private JiraComponent component; - - private String version; - - private String majorVersion; - - private String releaseVersion; - - private String rCversion; - private ComponentVersion releaseComponentVersion; - - private String buildVersion; - private ComponentVersion buildComponentVersion; - private ComponentVersion rCComponentVersion; - private String minorVersion; - private String lineVersion; - - public Builder(JiraComponentVersionFormatter jiraComponentVersionFormatter) { - this.jiraComponentVersionFormatter = jiraComponentVersionFormatter; - } - - public Builder componentVersion(ComponentVersion componentVersion) { - this.componentVersion = componentVersion; - return this; - } - - public Builder componentVersionByNameAndVersion(String componentName, String version) { - this.componentVersion = ComponentVersion.create(componentName, version); - return this; - } - - public Builder component(JiraComponent component) { - this.component = component; - return this; - } - - - private String getReleaseVersion() { - return (componentVersionFormatIsNotSpecified() || component.getComponentVersionFormat().getReleaseVersionFormat() == null) ? - componentVersion.getVersion() : jiraComponentVersionFormatter.getReleaseVersion(component, version); - } - - private ComponentVersion getComponentVersion(String version) { - return ComponentVersion.create(componentVersion.getComponentName(), version); - } - - private String getBuildVersion() { - String buildVersionFormat = jiraComponentVersionFormatter.getBuildVersionFormat(component); - if (buildVersionFormat == null) { - return version; - } - return jiraComponentVersionFormatter.getBuildVersion(component, version); - } - - private boolean componentVersionFormatIsNotSpecified() { - return component == null || component.getComponentVersionFormat() == null; - } - - private String getMinorVersion() { - if (componentVersionFormatIsNotSpecified() || component.getComponentVersionFormat().getMajorVersionFormat() == null) { - return version; - } - return jiraComponentVersionFormatter.getMajorVersion(component, version); - } - - private String getLineVersion() { - if (componentVersionFormatIsNotSpecified() || component.getComponentVersionFormat().getLineVersionFormat() == null) { - return majorVersion; - } - return jiraComponentVersionFormatter.getLineVersion(component, version); - } - - public JiraComponentVersion build() { - version = componentVersion.getVersion(); - releaseVersion = getReleaseVersion(); - rCversion = releaseVersion + RC_SUFFIX; - releaseComponentVersion = getComponentVersion(releaseVersion); - buildVersion = getBuildVersion(); - buildComponentVersion = getComponentVersion(buildVersion); - rCComponentVersion = getComponentVersion(rCversion); - minorVersion = getMinorVersion(); - majorVersion = minorVersion; - lineVersion = getLineVersion(); - return new JiraComponentVersion(this); - } - } - - private JiraComponentVersion(Builder builder) { - this.componentVersion = builder.componentVersion; - this.component = builder.component; - this.version = builder.version; - this.releaseVersion = builder.releaseVersion; - this.rCversion = builder.rCversion; - this.releaseComponentVersion = builder.releaseComponentVersion; - this.buildVersion = builder.buildVersion; - this.buildComponentVersion = builder.buildComponentVersion; - this.rCComponentVersion = builder.rCComponentVersion; - this.minorVersion = builder.minorVersion; - this.majorVersion = builder.majorVersion; - this.lineVersion = builder.lineVersion; + public JiraComponent getComponent() { + return component; } @JsonIgnore @@ -170,20 +56,29 @@ public ComponentVersion getComponentVersion() { @JsonIgnore public String getReleaseVersion() { + if (releaseVersion == null) { + if (componentVersionFormatIsNotSpecified() || component.getComponentVersionFormat().getReleaseVersionFormat() == null) { + releaseVersion = getVersion(); + } else { + releaseVersion = jiraComponentVersionFormatter.getReleaseVersion(getComponent(), getVersion()); + } + } return releaseVersion; } @JsonIgnore public ComponentVersion getReleaseComponentVersion() { - return releaseComponentVersion; + return getComponentVersion(getReleaseVersion()); } + @JsonIgnore public ComponentVersion getBuildComponentVersion() { - return buildComponentVersion; + return getComponentVersion(getBuildVersion()); } + @JsonIgnore public ComponentVersion getRCComponentVersion() { - return rCComponentVersion; + return getComponentVersion(getRCVersion()); } @JsonIgnore @@ -195,24 +90,52 @@ private boolean componentVersionFormatIsNotSpecified() { return component == null || component.getComponentVersionFormat() == null; } + @JsonIgnore public String getMajorVersion() { - return majorVersion; + if (minorVersion == null) { + if (componentVersionFormatIsNotSpecified() || component.getComponentVersionFormat().getMajorVersionFormat() == null) { + minorVersion = getVersion(); + } else { + minorVersion = jiraComponentVersionFormatter.getMajorVersion(getComponent(), getVersion()); + } + } + return minorVersion; } + @JsonIgnore public String getLineVersion() { + if (lineVersion == null) { + if (componentVersionFormatIsNotSpecified() || component.getComponentVersionFormat().getLineVersionFormat() == null) { + lineVersion = getMajorVersion(); + } else { + lineVersion = jiraComponentVersionFormatter.getLineVersion(this); + } + } return lineVersion; } + @JsonIgnore public String getVersion() { - return version; + return componentVersion.getVersion(); } + @JsonIgnore public String getBuildVersion() { + if (buildVersion == null) { + String buildVersionFormat = jiraComponentVersionFormatter.getBuildVersionFormat(getComponent()); + if (buildVersionFormat == null) { + buildVersion = getVersion(); + } else { + buildVersion = jiraComponentVersionFormatter.getBuildVersion(getComponent(), getVersion()); + } + } return buildVersion; } + + @JsonIgnore public String getRCVersion() { - return rCversion; + return getReleaseVersion() + RC_SUFFIX; } @Override diff --git a/src/main/kotlin/org/octopusden/octopus/releng/JiraComponentVersionDeserializer.kt b/src/main/kotlin/org/octopusden/octopus/releng/JiraComponentVersionDeserializer.kt index 9002440..95c3008 100644 --- a/src/main/kotlin/org/octopusden/octopus/releng/JiraComponentVersionDeserializer.kt +++ b/src/main/kotlin/org/octopusden/octopus/releng/JiraComponentVersionDeserializer.kt @@ -13,7 +13,7 @@ import org.octopusden.releng.versions.VersionNames class JiraComponentVersionDeserializer( private val versionNames: VersionNames -): JsonDeserializer() { +) : JsonDeserializer() { override fun deserialize(jsonParser: JsonParser, context: DeserializationContext): JiraComponentVersion { val node: JsonNode = jsonParser.codec!!.readTree(jsonParser) @@ -25,14 +25,12 @@ class JiraComponentVersionDeserializer( val componentVersion = getComponentVersion(node) val jiraComponent = getJiraComponent(node) val jiraComponentVersionFormatter = JiraComponentVersionFormatter(versionNames) - return JiraComponentVersion.builder(jiraComponentVersionFormatter) - .componentVersion(componentVersion) - .component(jiraComponent).build() + return JiraComponentVersion(componentVersion, jiraComponent, jiraComponentVersionFormatter) } private fun getComponentVersion(node: JsonNode): ComponentVersion? { - val searchNode = if (node.get("componentVersion") != null) { - node.get("componentVersion") + val searchNode = if (node.get(COMPONENT_VERSION) != null) { + node.get(COMPONENT_VERSION) } else { node } @@ -59,11 +57,11 @@ class JiraComponentVersionDeserializer( } fun getJiraComponent(parentNode: JsonNode): JiraComponent? { - if (!parentNode.has("component")) { + if (!parentNode.has(COMPONENT)) { return null } - val node = parentNode.get("component") + val node = parentNode.get(COMPONENT) assert(node.isContainerNode) val projectKeyNode = getStringNode(node, "projectKey") @@ -71,15 +69,21 @@ class JiraComponentVersionDeserializer( val componentInfo = getComponentInfo(node) val technical = getBooleanNode(node, "technical") - return JiraComponent(projectKeyNode.toString(), getDisplayName(node), componentVersionFormat, componentInfo, technical) + return JiraComponent( + projectKeyNode.toString(), + getDisplayName(node), + componentVersionFormat, + componentInfo, + technical + ) } fun getComponentVersionFormat(parentNode: JsonNode): ComponentVersionFormat? { - if (!parentNode.has("componentVersionFormat")) { + if (!parentNode.has(COMPONENT_VERSION_FORMAT)) { return null } - val node = parentNode.get("componentVersionFormat") + val node = parentNode.get(COMPONENT_VERSION_FORMAT) assert(node.isContainerNode) val majorVersionFormat = getStringNode(node, "majorVersionFormat") @@ -87,14 +91,19 @@ class JiraComponentVersionDeserializer( val buildVersionFormat = getStringNode(node, "buildVersionFormat") val lineVersionFormat = getStringNode(node, "lineVersionFormat") - return ComponentVersionFormat.create(majorVersionFormat, releaseVersionFormat, buildVersionFormat, lineVersionFormat) + return ComponentVersionFormat.create( + majorVersionFormat, + releaseVersionFormat, + buildVersionFormat, + lineVersionFormat + ) } fun getComponentInfo(parentNode: JsonNode): ComponentInfo? { val componentInfoNode = if (parentNode.has("componentInfo")) { parentNode.get("componentInfo") } else { - parentNode.get("customerInfo") + parentNode.get(CUSTOMER_INFO) } componentInfoNode ?: return null; @@ -105,15 +114,23 @@ class JiraComponentVersionDeserializer( } fun getDisplayName(node: JsonNode): String? { - if (node.has("displayName")) { - return getStringNode(node, "displayName") + if (node.has(DISPLAY_NAME)) { + return getStringNode(node, DISPLAY_NAME) } - if (node.has("customerInfo")) { - val customerInfoNode = node.get("customerInfo") - if (customerInfoNode.has("displayName")) { - return customerInfoNode.get("displayName").asText() + if (node.has(CUSTOMER_INFO)) { + val customerInfoNode = node.get(CUSTOMER_INFO) + if (customerInfoNode.has(DISPLAY_NAME)) { + return customerInfoNode.get(DISPLAY_NAME).asText() } } return "" } + + companion object { + private const val COMPONENT = "component" + private const val COMPONENT_VERSION_FORMAT = "componentVersionFormat" + private const val COMPONENT_VERSION = "componentVersion" + private const val CUSTOMER_INFO = "customerInfo" + private const val DISPLAY_NAME = "displayName" + } } \ No newline at end of file diff --git a/src/main/kotlin/org/octopusden/octopus/releng/VersionType.kt b/src/main/kotlin/org/octopusden/octopus/releng/VersionType.kt index 92ec293..b85093f 100644 --- a/src/main/kotlin/org/octopusden/octopus/releng/VersionType.kt +++ b/src/main/kotlin/org/octopusden/octopus/releng/VersionType.kt @@ -7,7 +7,7 @@ enum class VersionType(val name2Display: String, val action: String, val column: override fun getVersion(jiraComponentVersion: JiraComponentVersion) = jiraComponentVersion.buildVersion }, RC("Release Candidate", "rc", "RCVERSION") { - override fun getVersion(jiraComponentVersion: JiraComponentVersion) = jiraComponentVersion.rCversion + override fun getVersion(jiraComponentVersion: JiraComponentVersion) = jiraComponentVersion.rcVersion }, RELEASE("Release", "release", "RELEASE_VERSION") { override fun getVersion(jiraComponentVersion: JiraComponentVersion) = jiraComponentVersion.releaseVersion; diff --git a/src/test/java/org/octopusden/octopus/releng/JiraComponentVersionFormatterTest.java b/src/test/java/org/octopusden/octopus/releng/JiraComponentVersionFormatterTest.java index ebc1aac..d3ecf71 100644 --- a/src/test/java/org/octopusden/octopus/releng/JiraComponentVersionFormatterTest.java +++ b/src/test/java/org/octopusden/octopus/releng/JiraComponentVersionFormatterTest.java @@ -22,7 +22,7 @@ class JiraComponentVersionFormatterTest { @Test void testGetJiraComponentVersion() { - assertEquals("testcomponent-2.15.1505.147-1128", jiraComponentVersion.buildVersion); + assertEquals("testcomponent-2.15.1505.147-1128", jiraComponentVersion.getBuildVersion()); } @Test @@ -109,6 +109,10 @@ private JiraComponentVersion getJiraComponentVersionWithNullBuildVersion() { null, null); JiraComponent jiraComponent = new JiraComponent("C1", "C1", componentVersionFormat, null, true); ComponentVersion componentVersion = ComponentVersion.create("c1", "version"); - return JiraComponentVersion.builder(jiraComponentVersionFormatter).componentVersion(componentVersion).component(jiraComponent).build(); + return new JiraComponentVersion( + componentVersion, + jiraComponent, + jiraComponentVersionFormatter + ); } } diff --git a/src/test/java/org/octopusden/octopus/releng/JiraComponentVersionProvider.java b/src/test/java/org/octopusden/octopus/releng/JiraComponentVersionProvider.java index 7b993d5..028162a 100644 --- a/src/test/java/org/octopusden/octopus/releng/JiraComponentVersionProvider.java +++ b/src/test/java/org/octopusden/octopus/releng/JiraComponentVersionProvider.java @@ -14,10 +14,7 @@ public static JiraComponentVersion getJiraComponentVersion(JiraComponentVersionF ComponentInfo componentInfo = new ComponentInfo("testcomponent", "$versionPrefix-$baseVersionFormat"); JiraComponent jiraComponent = new JiraComponent("APP", "TestComponent Application", componentVersionFormat, componentInfo, true); ComponentVersion componentVersion = ComponentVersion.create("app-testcomponent", "2.15.1505.147-1128"); - return JiraComponentVersion.builder(jiraComponentVersionFormatter) - .componentVersion(componentVersion) - .component(jiraComponent) - .build(); + return new JiraComponentVersion(componentVersion, jiraComponent, jiraComponentVersionFormatter); } public static JiraComponentVersion getJiraComponentVersionWithoutLineVersionFormat(JiraComponentVersionFormatter jiraComponentVersionFormatter) { @@ -26,9 +23,10 @@ public static JiraComponentVersion getJiraComponentVersionWithoutLineVersionForm ComponentInfo componentInfo = new ComponentInfo("testcomponent", "$versionPrefix-$baseVersionFormat"); JiraComponent jiraComponent = new JiraComponent("APP", "TestComponent Application", componentVersionFormat, componentInfo, true); ComponentVersion componentVersion = ComponentVersion.create("app-testcomponent", "2.15.1505.147-1128"); - return JiraComponentVersion.builder(jiraComponentVersionFormatter) - .componentVersion(componentVersion) - .component(jiraComponent) - .build(); + return new JiraComponentVersion( + componentVersion, + jiraComponent, + jiraComponentVersionFormatter + ); } }