diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java index 52f1a50ac..15ae5d236 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java @@ -61,7 +61,6 @@ public ResponseEntity unableToParseJson(Exception ex) { @Transactional(readOnly = true) public ResponseEntity getAll() { List resolvers = positionOrderContainerService.getAllMetadataResolversInDefinedOrderOrUnordered(); - resolvers.forEach(MetadataResolver::updateVersion); return ResponseEntity.ok(resolvers); } @@ -86,7 +85,6 @@ public ResponseEntity getOne(@PathVariable String resourceId) { if (resolver == null) { return ResponseEntity.notFound().build(); } - resolver.updateVersion(); return ResponseEntity.ok(resolver); } @@ -103,11 +101,9 @@ public ResponseEntity create(@RequestBody MetadataResolver newResolver) { } newResolver.convertFiltersFromTransientRepresentationIfNecessary(); - resolverRepository.save(newResolver); - MetadataResolver persistedResolver = resolverRepository.findByResourceId(newResolver.getResourceId()); + MetadataResolver persistedResolver = resolverRepository.save(newResolver); positionOrderContainerService.appendPositionOrderForNew(persistedResolver); - persistedResolver.updateVersion(); persistedResolver.convertFiltersIntoTransientRepresentationIfNecessary(); return ResponseEntity.created(getResourceUriFor(persistedResolver)).body(persistedResolver); } @@ -119,9 +115,9 @@ public ResponseEntity update(@PathVariable String resourceId, @RequestBody Me if (existingResolver == null) { return ResponseEntity.notFound().build(); } - if (existingResolver.hashCode() != updatedResolver.getVersion()) { + if (existingResolver.getVersion() != updatedResolver.getVersion()) { log.info("Metadata Resolver version conflict. Latest resolver in database version: {}. Resolver version sent from UI: {}", - existingResolver.hashCode(), updatedResolver.getVersion()); + existingResolver.getVersion(), updatedResolver.getVersion()); return ResponseEntity.status(HttpStatus.CONFLICT).build(); } @@ -133,10 +129,8 @@ public ResponseEntity update(@PathVariable String resourceId, @RequestBody Me updatedResolver.setAudId(existingResolver.getAudId()); updatedResolver.convertFiltersFromTransientRepresentationIfNecessary(); - resolverRepository.save(updatedResolver); - MetadataResolver persistedResolver = resolverRepository.findByResourceId(updatedResolver.getResourceId()); + MetadataResolver persistedResolver = resolverRepository.save(updatedResolver); - persistedResolver.updateVersion(); persistedResolver.convertFiltersFromTransientRepresentationIfNecessary(); return ResponseEntity.ok(persistedResolver); } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java index 7d0fc03d1..cb3b7c9d9 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java @@ -1,5 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers; +import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -73,10 +74,14 @@ public class MetadataResolver extends AbstractAuditable { private List metadataFilters = new ArrayList<>(); @Transient - private int version; - - public void updateVersion() { - this.version = hashCode(); + private Integer version; + + @JsonGetter("version") + public int getVersion() { + if (this.version != null && this.version != 0 ) { + return this.version; + } + return this.hashCode(); } public void convertFiltersIntoTransientRepresentationIfNecessary() {