From d232924dca448cd2eaf65dbee38156748f2695cd Mon Sep 17 00:00:00 2001 From: Christos Tranoris Date: Tue, 2 Dec 2025 16:50:41 +0200 Subject: [PATCH 1/2] fix for #30 --- .../ProductSpecificationCharacteristic.java | 115 ++++++++++++++++++ ...ecificationCharacteristicRelationship.java | 9 ++ 2 files changed, 124 insertions(+) diff --git a/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristic.java b/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristic.java index 9f5f3bd..363b8a8 100644 --- a/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristic.java +++ b/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristic.java @@ -19,12 +19,18 @@ */ package org.etsi.osl.tmf.pcm620.model; +import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Set; import com.fasterxml.jackson.annotation.JsonProperty; import org.etsi.osl.tmf.common.model.BaseEntity; +import org.etsi.osl.tmf.scm633.model.ServiceSpecCharRelationship; +import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristicValue; import org.springframework.validation.annotation.Validated; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.CascadeType; @@ -379,4 +385,113 @@ public class ProductSpecificationCharacteristic extends BaseEntity { } return o.toString().replace("\n", "\n "); } + + public void updateWith(ProductSpecificationCharacteristic src) { + this.name = src.getName(); + this.description = src.getDescription(); + this.maxCardinality = src.getMaxCardinality(); + this.minCardinality = src.getMinCardinality(); + this.regex = src.getRegex(); + this.isUnique =src.isUnique; + this.configurable =src.isConfigurable(); + this.extensible =src.isExtensible(); + this.valueType =src.valueType; + + this.updateProductSpecCharacteristicValues(src.getProductSpecCharacteristicValue()); + this.updateProductSpecCharRelationships(src.getProductSpecCharRelationship()); + + } + + + private void updateProductSpecCharacteristicValues( + @Valid Set srcSet) { + if ( srcSet == null ) { + return; + } + + Map idAddedUpdated = new HashMap<>(); + /** + * update, add the incomings + */ + for (ProductSpecificationCharacteristicValue r : srcSet) { + + boolean valueExists = false; + for (ProductSpecificationCharacteristicValue thisCharVal : this.productSpecCharacteristicValue) { + if ( thisCharVal.hashCode() == r.hashCode() ) { + valueExists = true; + idAddedUpdated.put(thisCharVal.hashCode(), true); + break; + } + } + + if (!valueExists) { + ProductSpecificationCharacteristicValue nr = new ProductSpecificationCharacteristicValue( r ); + this.addProductSpecCharacteristicValueItem( nr ); + idAddedUpdated.put( nr.hashCode(), true); + } + + } + + /** + * remove those that don't exist anymore + */ + + List toRemove = new ArrayList<>(); + for (ProductSpecificationCharacteristicValue ss : this.productSpecCharacteristicValue) { + if ( idAddedUpdated.get( ss.hashCode() ) == null ) { + toRemove.add(ss); + } + } + + for (ProductSpecificationCharacteristicValue r : toRemove) { + this.productSpecCharacteristicValue.remove(r); + } + + + } + + + private void updateProductSpecCharRelationships( + @Valid Set productSpecCharRelationship2) { + + + Map< String, Boolean> idAddedUpdated = new HashMap<>(); + /** + * update, add the incomings + */ + for (ProductSpecificationCharacteristicRelationship r : productSpecCharRelationship2) { + + boolean valueExists = false; + for (ProductSpecificationCharacteristicRelationship thisCharVal : this.productSpecCharRelationship) { + if ( (thisCharVal.getId()!=null) && (thisCharVal.getId().equals(r.getId() ) )) { + valueExists = true; + idAddedUpdated.put( thisCharVal.getId() , true); + break; + } + } + + if (!valueExists) { + this.productSpecCharRelationship.add( new ProductSpecificationCharacteristicRelationship( r )); + idAddedUpdated.put( r.getId(), true); + } + + } + + /** + * remove those that don't exist anymore + */ + + List toRemove = new ArrayList<>(); + for (ProductSpecificationCharacteristicRelationship ss : this.productSpecCharRelationship) { + if ( idAddedUpdated.get( ss.getId() ) == null ) { + toRemove.add(ss); + } + } + + for (ProductSpecificationCharacteristicRelationship r : toRemove) { + this.productSpecCharRelationship.remove(r); + } + + } + } diff --git a/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristicRelationship.java b/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristicRelationship.java index a340803..fa77f36 100644 --- a/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristicRelationship.java +++ b/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristicRelationship.java @@ -23,6 +23,7 @@ import java.util.Objects; import com.fasterxml.jackson.annotation.JsonProperty; import org.etsi.osl.tmf.common.model.BaseEntity; +import org.etsi.osl.tmf.common.model.TimePeriod; import org.springframework.validation.annotation.Validated; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Entity; @@ -50,6 +51,14 @@ public class ProductSpecificationCharacteristicRelationship extends BaseEntity private String relationshipType = null; + public ProductSpecificationCharacteristicRelationship( + ProductSpecificationCharacteristicRelationship src) { + name = src.name; + relationshipType = src.relationshipType; + validFor = new TimePeriod( src.validFor ); + id = src.id; + } + public ProductSpecificationCharacteristicRelationship id(String id) { this.id = id; return this; -- GitLab From ff7014934ccfb6ee8a5350a9363f7084c8a0e4a8 Mon Sep 17 00:00:00 2001 From: Christos Tranoris Date: Wed, 3 Dec 2025 20:01:39 +0200 Subject: [PATCH 2/2] fix for #30 --- .../model/ProductSpecificationCharacteristic.java | 2 +- ...uctSpecificationCharacteristicRelationship.java | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristic.java b/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristic.java index 363b8a8..0d8fdf6 100644 --- a/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristic.java +++ b/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristic.java @@ -471,7 +471,7 @@ public class ProductSpecificationCharacteristic extends BaseEntity { } if (!valueExists) { - this.productSpecCharRelationship.add( new ProductSpecificationCharacteristicRelationship( r )); + this.productSpecCharRelationship.add( r.getNewProductSpecificationCharacteristicRelationship( r )); idAddedUpdated.put( r.getId(), true); } diff --git a/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristicRelationship.java b/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristicRelationship.java index fa77f36..eb76610 100644 --- a/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristicRelationship.java +++ b/src/main/java/org/etsi/osl/tmf/pcm620/model/ProductSpecificationCharacteristicRelationship.java @@ -51,12 +51,16 @@ public class ProductSpecificationCharacteristicRelationship extends BaseEntity private String relationshipType = null; - public ProductSpecificationCharacteristicRelationship( + + public ProductSpecificationCharacteristicRelationship getNewProductSpecificationCharacteristicRelationship( ProductSpecificationCharacteristicRelationship src) { - name = src.name; - relationshipType = src.relationshipType; - validFor = new TimePeriod( src.validFor ); - id = src.id; + ProductSpecificationCharacteristicRelationship newp = new ProductSpecificationCharacteristicRelationship(); + newp.name = src.name; + newp.relationshipType = src.relationshipType; + newp.validFor = new TimePeriod( src.validFor ); + newp.id = src.id; + + return newp; } public ProductSpecificationCharacteristicRelationship id(String id) { -- GitLab