diff options
Diffstat (limited to 'models-base')
-rw-r--r-- | models-base/src/main/java/org/onap/policy/models/base/PfTimestampKey.java | 156 | ||||
-rw-r--r-- | models-base/src/test/java/org/onap/policy/models/base/PfTimestampKeyTest.java | 95 |
2 files changed, 251 insertions, 0 deletions
diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfTimestampKey.java b/models-base/src/main/java/org/onap/policy/models/base/PfTimestampKey.java new file mode 100644 index 000000000..a2f11290d --- /dev/null +++ b/models-base/src/main/java/org/onap/policy/models/base/PfTimestampKey.java @@ -0,0 +1,156 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Model + * ================================================================================ + * Copyright (C) 2019 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.base; + +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Embeddable; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NonNull; +import org.onap.policy.common.utils.validation.Assertions; + +@Embeddable +@Getter +@EqualsAndHashCode(callSuper = false) +public class PfTimestampKey extends PfKeyImpl { + private static final long serialVersionUID = -8410208962541783805L; + + private static final String TIMESTAMP_TOKEN = "timeStamp"; + + @Column(name = NAME_TOKEN, length = 120) + private String name; + + @Column(name = VERSION_TOKEN, length = 20) + private String version; + + @Column(name = TIMESTAMP_TOKEN) + private Date timeStamp; + + + /** + * The default constructor creates a null concept key. + */ + public PfTimestampKey() { + this(NULL_KEY_NAME, NULL_KEY_VERSION, new Date(0)); + } + + /** + * Copy constructor. + * + * @param copyConcept the concept to copy from + */ + public PfTimestampKey(@NonNull final PfTimestampKey copyConcept) { + super(copyConcept); + this.timeStamp = new Date(copyConcept.getTimeStamp().getTime()); + } + + /** + * Constructor to create a key with the specified name and version. + * + * @param name the key name + * @param version the key version + * @param timeStamp the timestamp of key + */ + public PfTimestampKey(@NonNull final String name, @NonNull final String version, + @NonNull final Date timeStamp) { + super(name, version); + this.timeStamp = new Date(timeStamp.getTime()); + } + + /** + * Constructor to create a key using the key and version from the specified key ID. + * + * @param id the key ID in a format that respects the KEY_ID_REGEXP + */ + public PfTimestampKey(final String id) { + super(id.substring(0, id.lastIndexOf(':'))); + this.timeStamp = new Date(Long.parseLong(id.substring(id.lastIndexOf(':') + 1))); + } + + @Override + public String getId() { + return getName() + ':' + getVersion() + ':' + getTimeStamp().getTime(); + } + + /** + * Get a null key. + * + * @return a null key + */ + public static final PfTimestampKey getNullKey() { + return new PfTimestampKey(PfKey.NULL_KEY_NAME, PfKey.NULL_KEY_VERSION, new Date(0)); + } + + @Override + public String toString() { + return "PfTimestampKey(name=" + getName() + ", version=" + getVersion() + ", timestamp=" + + getTimeStamp().getTime() + ")"; + } + + @Override + public boolean isNewerThan(@NonNull PfKey otherKey) { + Assertions.instanceOf(otherKey, PfTimestampKey.class); + + final PfTimestampKey otherConceptKey = (PfTimestampKey) otherKey; + + if (this.equals(otherConceptKey)) { + return false; + } + + if (!timeStamp.equals(otherConceptKey.timeStamp)) { + return timeStamp.after(otherConceptKey.timeStamp); + } + + return super.isNewerThan(otherKey); + } + + public void setTimeStamp(@NonNull final Date timeStamp) { + this.timeStamp = new Date(timeStamp.getTime()); + } + + @Override + public boolean isNullKey() { + return super.isNullKey() && getTimeStamp().getTime() == 0; + } + + @Override + public int compareTo(@NonNull final PfConcept otherObj) { + int result = super.compareTo(otherObj); + if (0 == result) { + final PfTimestampKey other = (PfTimestampKey) otherObj; + return timeStamp.compareTo(other.timeStamp); + } + return result; + } + + @Override + public void setName(@NonNull String name) { + this.name = Assertions.validateStringParameter(NAME_TOKEN, name, getNameRegEx()); + } + + @Override + public void setVersion(@NonNull String version) { + this.version = Assertions.validateStringParameter(VERSION_TOKEN, version, getVersionRegEx()); + } +} diff --git a/models-base/src/test/java/org/onap/policy/models/base/PfTimestampKeyTest.java b/models-base/src/test/java/org/onap/policy/models/base/PfTimestampKeyTest.java new file mode 100644 index 000000000..28b9fd922 --- /dev/null +++ b/models-base/src/test/java/org/onap/policy/models/base/PfTimestampKeyTest.java @@ -0,0 +1,95 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Model + * ================================================================================ + * Copyright (C) 2019 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.models.base; + +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.assertTrue; + +import java.util.Date; +import org.junit.Test; + +public class PfTimestampKeyTest { + private static final String VERSION001 = "0.0.1"; + private static final String CONCEPT_IS_NULL = "copyConcept is marked @NonNull but is null"; + private static final String NAME_IS_NULL = "name is marked @NonNull but is null"; + private static final String VERSION_IS_NULL = "version is marked @NonNull but is null"; + private static final String TIMESTAMP_IS_NULL = "timeStamp is marked @NonNull but is null"; + private static final long timeStamp = 1574832537641L; + + @Test + public void testTimestampKey() { + PfTimestampKey someKey0 = new PfTimestampKey(); + assertEquals(PfTimestampKey.getNullKey(), someKey0); + assertTrue(someKey0.isNullKey()); + assertEquals("PfTimestampKey(name=NULL, version=0.0.0, timestamp=0)", someKey0.toString()); + + PfTimestampKey someKey1 = new PfTimestampKey("my-name", VERSION001, new Date(timeStamp)); + PfTimestampKey someKey2 = new PfTimestampKey(someKey1); + PfTimestampKey someKey3 = new PfTimestampKey(someKey1.getId()); + assertEquals(someKey1, someKey2); + assertEquals(someKey1, someKey3); + assertFalse(someKey1.isNullVersion()); + assertEquals("PfTimestampKey(name=my-name, version=0.0.1, timestamp=1574832537641)", someKey1.toString()); + + assertEquals("my-name", someKey1.getName()); + assertEquals(VERSION001, someKey1.getVersion()); + + assertEquals(someKey2, someKey1.getKey()); + assertEquals(1, someKey1.getKeys().size()); + + assertThatThrownBy(() -> new PfTimestampKey((PfTimestampKey) null)).isInstanceOf(NullPointerException.class) + .hasMessage(CONCEPT_IS_NULL); + assertThatThrownBy(() -> new PfTimestampKey(null, null, null)).isInstanceOf(NullPointerException.class) + .hasMessage(NAME_IS_NULL); + assertThatThrownBy(() -> new PfTimestampKey("my-name", null, null)).isInstanceOf(NullPointerException.class) + .hasMessage(VERSION_IS_NULL); + assertThatThrownBy(() -> new PfTimestampKey("my-name", VERSION001, null)) + .isInstanceOf(NullPointerException.class).hasMessage(TIMESTAMP_IS_NULL); + + assertThatThrownBy(() -> someKey0.setName(null)).isInstanceOf(NullPointerException.class) + .hasMessage(NAME_IS_NULL); + assertThatThrownBy(() -> someKey0.setVersion(null)).isInstanceOf(NullPointerException.class) + .hasMessage(VERSION_IS_NULL); + assertThatThrownBy(() -> someKey0.setTimeStamp(null)).isInstanceOf(NullPointerException.class) + .hasMessage(TIMESTAMP_IS_NULL); + + assertFalse(someKey1.isNewerThan(someKey2)); + assertThatThrownBy(() -> someKey1.isNewerThan((PfKey) null)).isInstanceOf(NullPointerException.class) + .hasMessage("otherKey is marked @NonNull but is null"); + someKey2.setTimeStamp(new Date(timeStamp + 1)); + assertTrue(someKey2.isNewerThan(someKey1)); + someKey3.setName("my-name3"); + assertTrue(someKey3.isNewerThan(someKey1)); + + assertEquals(-1, someKey1.compareTo(someKey2)); + assertEquals(-1, someKey1.compareTo(someKey3)); + assertThatThrownBy(() -> someKey1.compareTo((PfConcept) null)).isInstanceOf(NullPointerException.class) + .hasMessage("otherObj is marked @NonNull but is null"); + + PfTimestampKey someKey4 = new PfTimestampKey("NULL", "0.0.0", new Date(timeStamp)); + assertFalse(someKey4.isNullKey()); + assertFalse(someKey1.isNullKey()); + } +} |