From 1f7ddcb95f4de6fc7a05d7a74d95a5f6bd41f9c5 Mon Sep 17 00:00:00 2001 From: Jim Hahn Date: Wed, 17 Feb 2021 14:27:03 -0500 Subject: Remove more duplicate code from models Addressed sonar "duplicate code" issue by extracting a common ToscaNameVersion class from the XxxIdentifier classes. Also removed junit test for class that no longer exists and renamed another junit to match the renaming of the class being tested. Issue-ID: POLICY-2905 Change-Id: I4a28cd7de2478f2771a864439c0b440ad8310299 Signed-off-by: Jim Hahn --- .../concepts/ToscaConceptIdentifier.java | 61 +++--------- .../concepts/ToscaConceptIdentifierOptVersion.java | 48 +++------ .../authorative/concepts/ToscaNameVersion.java | 87 +++++++++++++++++ .../concepts/ToscaConceptIdentifierTest.java | 108 +++++++++++++++++++++ .../authorative/concepts/ToscaNameVersionTest.java | 100 +++++++++++++++++++ .../concepts/ToscaPolicyConceptIdentifierTest.java | 108 --------------------- .../ToscaPolicyTypeConceptIdentifierTest.java | 94 ------------------ 7 files changed, 319 insertions(+), 287 deletions(-) create mode 100644 models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNameVersion.java create mode 100644 models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConceptIdentifierTest.java create mode 100644 models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNameVersionTest.java delete mode 100644 models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyConceptIdentifierTest.java delete mode 100644 models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeConceptIdentifierTest.java diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConceptIdentifier.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConceptIdentifier.java index 4cc8892c2..9033c8fa0 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConceptIdentifier.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConceptIdentifier.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Models * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,43 +22,33 @@ package org.onap.policy.models.tosca.authorative.concepts; import java.io.Serializable; -import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.NonNull; -import org.apache.commons.lang3.ObjectUtils; import org.onap.policy.common.parameters.BeanValidationResult; import org.onap.policy.common.parameters.ValidationResult; -import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; /** * Identifies a concept. Both the name and version must be non-null. */ -@Data +@EqualsAndHashCode(callSuper = true) @NoArgsConstructor -public class ToscaConceptIdentifier implements Serializable, Comparable { +public class ToscaConceptIdentifier extends ToscaNameVersion + implements Serializable, Comparable { private static final long serialVersionUID = 8010649773816325786L; - @NonNull - private String name; - - @NonNull - private String version; - public ToscaConceptIdentifier(@NonNull String name, @NonNull String version) { - this.name = name; - this.version = version; + super(name, version); } public ToscaConceptIdentifier(@NonNull PfKey key) { - this.name = key.getName(); - this.version = key.getVersion(); + super(key); } public ToscaConceptIdentifier(ToscaConceptIdentifier source) { - this.name = source.name; - this.version = source.version; + super(source); } /** @@ -67,43 +57,16 @@ public class ToscaConceptIdentifier implements Serializable, Comparable { - - @NonNull - private String name; - - private String version; +public class ToscaConceptIdentifierOptVersion extends ToscaNameVersion + implements Serializable, Comparable { + private static final long serialVersionUID = 8010649773816325786L; public ToscaConceptIdentifierOptVersion(@NonNull String name, String version) { - this.name = name; - this.version = version; + super(name, version); } public ToscaConceptIdentifierOptVersion(ToscaConceptIdentifierOptVersion source) { - this.name = source.name; - this.version = source.version; + super(source); } public ToscaConceptIdentifierOptVersion(ToscaConceptIdentifier source) { - this.name = source.getName(); - this.version = source.getVersion(); + super(source.getName(), source.getVersion()); } @Override public int compareTo(ToscaConceptIdentifierOptVersion other) { - if (this == other) { - return 0; - } - - if (other == null) { - return 1; - } - - int result = ObjectUtils.compare(getName(), other.getName()); - if (result != 0) { - return result; - } - - return ObjectUtils.compare(getVersion(), other.getVersion()); - } - - @Override - public String toString() { - return this.name + " " + this.version; + return commonCompareTo(other); } } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNameVersion.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNameVersion.java new file mode 100644 index 000000000..6c83269f1 --- /dev/null +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNameVersion.java @@ -0,0 +1,87 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Models + * ================================================================================ + * Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.tosca.authorative.concepts; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import org.apache.commons.lang3.ObjectUtils; +import org.onap.policy.models.base.PfConceptKey; +import org.onap.policy.models.base.PfKey; + +/** + * Concept with an optional name and version. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ToscaNameVersion { + + private String name; + + private String version; + + public ToscaNameVersion(@NonNull PfKey key) { + this.name = key.getName(); + this.version = key.getVersion(); + } + + public ToscaNameVersion(ToscaNameVersion source) { + this.name = source.name; + this.version = source.version; + } + + /** + * Create a PfConcceptKey from the TOSCA identifier. + * + * @return the key + */ + public PfConceptKey asConceptKey() { + return new PfConceptKey(name, version); + } + + protected int commonCompareTo(ToscaNameVersion other) { + if (this == other) { + return 0; + } + + if (other == null) { + return 1; + } + + if (getClass() != other.getClass()) { + return getClass().getSimpleName().compareTo(other.getClass().getSimpleName()); + } + + int result = ObjectUtils.compare(getName(), other.getName()); + if (result != 0) { + return result; + } + + return ObjectUtils.compare(getVersion(), other.getVersion()); + } + + @Override + public String toString() { + return this.name + " " + this.version; + } +} diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConceptIdentifierTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConceptIdentifierTest.java new file mode 100644 index 000000000..88a49dbe3 --- /dev/null +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaConceptIdentifierTest.java @@ -0,0 +1,108 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Models + * ================================================================================ + * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.tosca.authorative.concepts; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.onap.policy.common.parameters.ValidationResult; +import org.onap.policy.models.base.PfConceptKey; + +/** + * Test methods not tested by {@link PojosTest}. + */ +public class ToscaConceptIdentifierTest extends ToscaIdentifierTestBase { + + public ToscaConceptIdentifierTest() { + super(ToscaConceptIdentifier.class, "name", "version"); + } + + @Test + public void testAllArgsConstructor() { + assertThatThrownBy(() -> new ToscaConceptIdentifier(null, VERSION)).isInstanceOf(NullPointerException.class); + assertThatThrownBy(() -> new ToscaConceptIdentifier(NAME, null)).isInstanceOf(NullPointerException.class); + + ToscaConceptIdentifier orig = new ToscaConceptIdentifier(NAME, VERSION); + assertEquals(NAME, orig.getName()); + assertEquals(VERSION, orig.getVersion()); + } + + @Test + public void testCopyConstructor() { + assertThatThrownBy(() -> new ToscaConceptIdentifier((ToscaConceptIdentifier) null)) + .isInstanceOf(NullPointerException.class); + + ToscaConceptIdentifier orig = new ToscaConceptIdentifier(); + + // verify with null values + assertEquals(orig.toString(), new ToscaConceptIdentifier(orig).toString()); + + // verify with all values + orig = new ToscaConceptIdentifier(NAME, VERSION); + assertEquals(orig.toString(), new ToscaConceptIdentifier(orig).toString()); + } + + + @Test + public void testPfKey() { + assertThatThrownBy(() -> new ToscaConceptIdentifier((PfConceptKey) null)) + .isInstanceOf(NullPointerException.class); + + PfConceptKey origKey = new PfConceptKey("Hello", "0.0.1"); + + assertEquals(origKey.getName(), new ToscaConceptIdentifier(origKey).getName()); + + assertEquals(origKey, new ToscaConceptIdentifier(origKey).asConceptKey()); + } + + @Test + public void testValidatePapRest() throws Exception { + ToscaConceptIdentifier ident = new ToscaConceptIdentifier(NAME, VERSION); + ValidationResult result = ident.validatePapRest(); + assertNotNull(result); + assertTrue(result.isValid()); + assertNull(result.getResult()); + + ident = makeIdent(NAME, null); + result = ident.validatePapRest(); + assertNotNull(result); + assertFalse(result.isValid()); + assertNotNull(result.getResult()); + + ident = makeIdent(null, VERSION); + result = ident.validatePapRest(); + assertNotNull(result); + assertFalse(result.isValid()); + assertNotNull(result.getResult()); + } + + @Test + @Override + public void testCompareTo() throws Exception { + super.testCompareTo(); + } +} diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNameVersionTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNameVersionTest.java new file mode 100644 index 000000000..2a3586e07 --- /dev/null +++ b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaNameVersionTest.java @@ -0,0 +1,100 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.tosca.authorative.concepts; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.models.base.PfConceptKey; +import org.onap.policy.models.base.PfKey; + +public class ToscaNameVersionTest { + + private static final String MY_NAME = "MyName"; + private static final String MY_VERSION = "1.2.3"; + + private ToscaNameVersion tosca; + + @Before + public void setUp() { + tosca = new ToscaNameVersion(MY_NAME, MY_VERSION); + } + + @Test + public void testToscaNameVersionPfKey() { + tosca = new ToscaNameVersion(new PfConceptKey(MY_NAME, MY_VERSION)); + assertEquals(MY_NAME, tosca.getName()); + assertEquals(MY_VERSION, tosca.getVersion()); + + assertThatThrownBy(() -> new ToscaNameVersion((PfKey) null)).isInstanceOf(NullPointerException.class) + .hasMessageContaining("key").hasMessageContaining("is null"); + } + + @Test + public void testToscaNameVersionToscaNameVersion() { + tosca = new ToscaNameVersion(tosca); + assertEquals(MY_NAME, tosca.getName()); + assertEquals(MY_VERSION, tosca.getVersion()); + } + + @Test + public void testAsConceptKey() { + assertEquals(new PfConceptKey(MY_NAME, MY_VERSION), tosca.asConceptKey()); + } + + @Test + public void testCommonCompareTo() { + assertThat(tosca.commonCompareTo(tosca)).isZero(); + assertThat(tosca.commonCompareTo(null)).isNotZero(); + assertThat(tosca.commonCompareTo(new MyNameVersion(MY_NAME, MY_VERSION))).isNotZero(); + assertThat(tosca.commonCompareTo(new ToscaNameVersion(tosca))).isZero(); + assertThat(tosca.commonCompareTo(new ToscaNameVersion(MY_NAME, null))).isNotZero(); + assertThat(tosca.commonCompareTo(new ToscaNameVersion(null, MY_VERSION))).isNotZero(); + } + + @Test + public void testToString() { + assertEquals(MY_NAME + " " + MY_VERSION, tosca.toString()); + } + + @Test + public void testToscaNameVersion() { + tosca = new ToscaNameVersion(); + assertNull(tosca.getName()); + assertNull(tosca.getVersion()); + } + + @Test + public void testToscaNameVersionStringString() { + assertEquals(MY_NAME, tosca.getName()); + assertEquals(MY_VERSION, tosca.getVersion()); + } + + private static class MyNameVersion extends ToscaNameVersion { + public MyNameVersion(String name, String version) { + super(name, version); + } + } +} diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyConceptIdentifierTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyConceptIdentifierTest.java deleted file mode 100644 index 993c21e35..000000000 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyConceptIdentifierTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP Policy Models - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * Modifications Copyright (C) 2021 Nordix Foundation. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.models.tosca.authorative.concepts; - -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; -import org.onap.policy.common.parameters.ValidationResult; -import org.onap.policy.models.base.PfConceptKey; - -/** - * Test methods not tested by {@link PojosTest}. - */ -public class ToscaPolicyConceptIdentifierTest extends ToscaIdentifierTestBase { - - public ToscaPolicyConceptIdentifierTest() { - super(ToscaConceptIdentifier.class, "name", "version"); - } - - @Test - public void testAllArgsConstructor() { - assertThatThrownBy(() -> new ToscaConceptIdentifier(null, VERSION)).isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> new ToscaConceptIdentifier(NAME, null)).isInstanceOf(NullPointerException.class); - - ToscaConceptIdentifier orig = new ToscaConceptIdentifier(NAME, VERSION); - assertEquals(NAME, orig.getName()); - assertEquals(VERSION, orig.getVersion()); - } - - @Test - public void testCopyConstructor() { - assertThatThrownBy(() -> new ToscaConceptIdentifier((ToscaConceptIdentifier) null)) - .isInstanceOf(NullPointerException.class); - - ToscaConceptIdentifier orig = new ToscaConceptIdentifier(); - - // verify with null values - assertEquals(orig.toString(), new ToscaConceptIdentifier(orig).toString()); - - // verify with all values - orig = new ToscaConceptIdentifier(NAME, VERSION); - assertEquals(orig.toString(), new ToscaConceptIdentifier(orig).toString()); - } - - - @Test - public void testPfKey() { - assertThatThrownBy(() -> new ToscaConceptIdentifier((PfConceptKey) null)) - .isInstanceOf(NullPointerException.class); - - PfConceptKey origKey = new PfConceptKey("Hello", "0.0.1"); - - assertEquals(origKey.getName(), new ToscaConceptIdentifier(origKey).getName()); - - assertEquals(origKey, new ToscaConceptIdentifier(origKey).asConceptKey()); - } - - @Test - public void testValidatePapRest() throws Exception { - ToscaConceptIdentifier ident = new ToscaConceptIdentifier(NAME, VERSION); - ValidationResult result = ident.validatePapRest(); - assertNotNull(result); - assertTrue(result.isValid()); - assertNull(result.getResult()); - - ident = makeIdent(NAME, null); - result = ident.validatePapRest(); - assertNotNull(result); - assertFalse(result.isValid()); - assertNotNull(result.getResult()); - - ident = makeIdent(null, VERSION); - result = ident.validatePapRest(); - assertNotNull(result); - assertFalse(result.isValid()); - assertNotNull(result.getResult()); - } - - @Test - @Override - public void testCompareTo() throws Exception { - super.testCompareTo(); - } -} diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeConceptIdentifierTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeConceptIdentifierTest.java deleted file mode 100644 index d37f29360..000000000 --- a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeConceptIdentifierTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP Policy Models - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * Modifications Copyright (C) 2021 Nordix Foundation. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.models.tosca.authorative.concepts; - -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; -import org.onap.policy.common.parameters.ValidationResult; - -/** - * Test methods not tested by {@link PojosTest}. - */ -public class ToscaPolicyTypeConceptIdentifierTest extends ToscaIdentifierTestBase { - - public ToscaPolicyTypeConceptIdentifierTest() { - super(ToscaConceptIdentifier.class, "name", "version"); - } - - @Test - public void testAllArgsConstructor() { - assertThatThrownBy(() -> new ToscaConceptIdentifier(null, VERSION)).isInstanceOf(NullPointerException.class); - assertThatThrownBy(() -> new ToscaConceptIdentifier(NAME, null)).isInstanceOf(NullPointerException.class); - - ToscaConceptIdentifier orig = new ToscaConceptIdentifier(NAME, VERSION); - assertEquals(NAME, orig.getName()); - assertEquals(VERSION, orig.getVersion()); - } - - @Test - public void testCopyConstructor() { - assertThatThrownBy(() -> new ToscaConceptIdentifier((ToscaConceptIdentifier) null)) - .isInstanceOf(NullPointerException.class); - - ToscaConceptIdentifier orig = new ToscaConceptIdentifier(); - - // verify with null values - assertEquals(orig.toString(), new ToscaConceptIdentifier(orig).toString()); - - // verify with all values - orig = new ToscaConceptIdentifier(NAME, VERSION); - assertEquals(orig.toString(), new ToscaConceptIdentifier(orig).toString()); - } - - @Test - public void testValidatePapRest() throws Exception { - ToscaConceptIdentifier ident = new ToscaConceptIdentifier(NAME, VERSION); - ValidationResult result = ident.validatePapRest(); - assertNotNull(result); - assertTrue(result.isValid()); - assertNull(result.getResult()); - - ident = makeIdent(NAME, null); - result = ident.validatePapRest(); - assertNotNull(result); - assertFalse(result.isValid()); - assertNotNull(result.getResult()); - - ident = makeIdent(null, VERSION); - result = ident.validatePapRest(); - assertNotNull(result); - assertFalse(result.isValid()); - assertNotNull(result.getResult()); - } - - @Test - @Override - public void testCompareTo() throws Exception { - super.testCompareTo(); - } -} -- cgit 1.2.3-korg