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 9f5f3bd18d8f31ff88b90f92bf26e4aa937df72b..0d8fdf6e1ce4704f3b97d98fc3c8d36ef48336cb 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( r.getNewProductSpecificationCharacteristicRelationship( 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 a3408039d45aee5f1ce84e12b44944b84e94875b..eb76610d2412c342d52b4cfb7d3b7e9c0f73c646 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,18 @@ public class ProductSpecificationCharacteristicRelationship extends BaseEntity private String relationshipType = null; + + public ProductSpecificationCharacteristicRelationship getNewProductSpecificationCharacteristicRelationship( + ProductSpecificationCharacteristicRelationship src) { + 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) { this.id = id; return this;