-/*-
+/*
* ============LICENSE_START=======================================================
* Copyright (C) 2019 Nordix Foundation.
+ * Modifications Copyright (C) 2019 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.
import javax.persistence.Column;
import javax.persistence.Embeddable;
-import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.ToString;
import org.onap.policy.common.utils.validation.Assertions;
import org.onap.policy.models.base.PfValidationResult.ValidationResult;
* regular expressions respectively.
*/
@Embeddable
-@Data
+@Getter
+@ToString
@EqualsAndHashCode(callSuper = false)
public class PfConceptKey extends PfKey {
private static final long serialVersionUID = 8932717618579392561L;
private static final String NAME_TOKEN = "name";
private static final String VERSION_TOKEN = "version";
- @Column(name = NAME_TOKEN)
+ @Column(name = NAME_TOKEN, length = 120)
private String name;
- @Column(name = VERSION_TOKEN)
+ @Column(name = VERSION_TOKEN, length = 20)
private String version;
/**
*
* @param copyConcept the concept to copy from
*/
- public PfConceptKey(final PfConceptKey copyConcept) {
+ public PfConceptKey(@NonNull final PfConceptKey copyConcept) {
super(copyConcept);
+ this.name = copyConcept.name;
+ this.version = copyConcept.version;
}
/**
* @param name the key name
* @param version the key version
*/
- public PfConceptKey(final String name, final String version) {
+ public PfConceptKey(@NonNull final String name, @NonNull final String version) {
super();
this.name = Assertions.validateStringParameter(NAME_TOKEN, name, NAME_REGEXP);
this.version = Assertions.validateStringParameter(VERSION_TOKEN, version, VERSION_REGEXP);
*
* @param id the key ID in a format that respects the KEY_ID_REGEXP
*/
- public PfConceptKey(final String id) {
- Assertions.argumentNotNull(id, "id may not be null");
-
+ public PfConceptKey(@NonNull final String id) {
// Check the incoming ID is valid
Assertions.validateStringParameter("id", id, KEY_ID_REGEXP);
return this;
}
+ public void setName(@NonNull final String name) {
+ this.name = Assertions.validateStringParameter(NAME_TOKEN, name, NAME_REGEXP);
+ }
+
+ public void setVersion(@NonNull final String version) {
+ this.version = Assertions.validateStringParameter(VERSION_TOKEN, version, VERSION_REGEXP);
+ }
+
@Override
public List<PfKey> getKeys() {
final List<PfKey> keyList = new ArrayList<>();
}
@Override
- public PfKey.Compatibility getCompatibility(final PfKey otherKey) {
+ public boolean isNullKey() {
+ return this.equals(PfConceptKey.getNullKey());
+ }
+
+ /**
+ * Determines if the version is "null".
+ *
+ * @return {@code true} if the version is null, {@code false} otherwise
+ */
+ public boolean isNullVersion() {
+ return PfKey.NULL_KEY_VERSION.equals(getVersion());
+ }
+
+ @Override
+ public PfKey.Compatibility getCompatibility(@NonNull final PfKey otherKey) {
if (!(otherKey instanceof PfConceptKey)) {
return Compatibility.DIFFERENT;
}
}
@Override
- public boolean isCompatible(final PfKey otherKey) {
+ public boolean isCompatible(@NonNull final PfKey otherKey) {
if (!(otherKey instanceof PfConceptKey)) {
return false;
}
return !(compatibility == Compatibility.DIFFERENT || compatibility == Compatibility.MAJOR);
}
+ @Override
+ public boolean isNewerThan(@NonNull final PfKey otherKey) {
+ Assertions.instanceOf(otherKey, PfConceptKey.class);
+
+ final PfConceptKey otherConceptKey = (PfConceptKey) otherKey;
+
+ if (this.equals(otherConceptKey)) {
+ return false;
+ }
+
+ if (!this.getName().equals(otherConceptKey.getName())) {
+ return this.getName().compareTo(otherConceptKey.getName()) > 0;
+ }
+
+ final String[] thisVersionArray = getVersion().split("\\.");
+ final String[] otherVersionArray = otherConceptKey.getVersion().split("\\.");
+
+ // There must always be at least one element in each version
+ if (!thisVersionArray[0].equals(otherVersionArray[0])) {
+ return Integer.valueOf(thisVersionArray[0]) > Integer.valueOf(otherVersionArray[0]);
+ }
+
+ if (thisVersionArray.length >= 2 && otherVersionArray.length >= 2
+ && !thisVersionArray[1].equals(otherVersionArray[1])) {
+ return Integer.valueOf(thisVersionArray[1]) > Integer.valueOf(otherVersionArray[1]);
+ }
+
+ if (thisVersionArray.length >= 3 && otherVersionArray.length >= 3
+ && !thisVersionArray[2].equals(otherVersionArray[2])) {
+ return Integer.valueOf(thisVersionArray[2]) > Integer.valueOf(otherVersionArray[2]);
+ }
+
+ return false;
+ }
+
+ @Override
+ public int getMajorVersion() {
+ final String[] versionArray = getVersion().split("\\.");
+
+ // There must always be at least one element in each version
+ return Integer.parseInt(versionArray[0]);
+ }
+
+ @Override
+ public int getMinorVersion() {
+ final String[] versionArray = getVersion().split("\\.");
+
+ if (versionArray.length >= 2) {
+ return Integer.parseInt(versionArray[1]);
+ }
+ else {
+ return 0;
+ }
+ }
+
+ @Override
+ public int getPatchVersion() {
+ final String[] versionArray = getVersion().split("\\.");
+
+ if (versionArray.length >= 3) {
+ return Integer.parseInt(versionArray[2]);
+ }
+ else {
+ return 0;
+ }
+ }
+
@Override
public PfValidationResult validate(final PfValidationResult result) {
final String nameValidationErrorMessage = Assertions.getStringParameterValidationMessage(NAME_TOKEN, name,
}
@Override
- public PfConcept copyTo(final PfConcept target) {
- Assertions.argumentNotNull(target, "target may not be null");
-
- final PfConcept copyObject = target;
- Assertions.instanceOf(copyObject, PfConceptKey.class);
-
- final PfConceptKey copy = ((PfConceptKey) copyObject);
- copy.setName(name);
- copy.setVersion(version);
-
- return copyObject;
- }
-
- @Override
- public int compareTo(final PfConcept otherObj) {
+ public int compareTo(@NonNull final PfConcept otherObj) {
Assertions.argumentNotNull(otherObj, "comparison object may not be null");
if (this == otherObj) {
return 0;
}
if (getClass() != otherObj.getClass()) {
- return this.hashCode() - otherObj.hashCode();
+ return getClass().getName().compareTo(otherObj.getClass().getName());
}
final PfConceptKey other = (PfConceptKey) otherObj;