From b3f93bebfd3981f413d23cf6e6c2f6d2d549e9f6 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Wed, 15 Aug 2018 09:10:12 -0400 Subject: [PATCH] Refactor persistence implementation for attribute filter --- .../controller/MetadataFiltersController.java | 5 --- .../MetadataResolversController.java | 4 --- .../filters/EntityAttributesFilter.java | 32 ++++++++++--------- .../ui/domain/resolvers/MetadataResolver.java | 18 ----------- .../MetadataFiltersControllerTests.groovy | 3 -- ...ymorphicFiltersJacksonHandlingTests.groovy | 1 - .../MetadataResolverRepositoryTests.groovy | 5 --- 7 files changed, 17 insertions(+), 51 deletions(-) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java index a6491fa86..52122b64f 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java @@ -68,11 +68,6 @@ public ResponseEntity create(@PathVariable String metadataResolverId, @Reques return ResponseEntity.notFound().build(); } metadataResolver.getMetadataFilters().add(createdFilter); - - //convert before saving into database - if(createdFilter instanceof EntityAttributesFilter) { - EntityAttributesFilter.class.cast(createdFilter).fromTransientRepresentation(); - } MetadataResolver persistedMr = repository.save(metadataResolver); // we reload the filters here after save 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 15ae5d236..be6ab51a4 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 @@ -100,11 +100,9 @@ public ResponseEntity create(@RequestBody MetadataResolver newResolver) { return validationErrorResponse; } - newResolver.convertFiltersFromTransientRepresentationIfNecessary(); MetadataResolver persistedResolver = resolverRepository.save(newResolver); positionOrderContainerService.appendPositionOrderForNew(persistedResolver); - persistedResolver.convertFiltersIntoTransientRepresentationIfNecessary(); return ResponseEntity.created(getResourceUriFor(persistedResolver)).body(persistedResolver); } @@ -128,10 +126,8 @@ public ResponseEntity update(@PathVariable String resourceId, @RequestBody Me updatedResolver.setAudId(existingResolver.getAudId()); - updatedResolver.convertFiltersFromTransientRepresentationIfNecessary(); MetadataResolver persistedResolver = resolverRepository.save(updatedResolver); - persistedResolver.convertFiltersFromTransientRepresentationIfNecessary(); return ResponseEntity.ok(persistedResolver); } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilter.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilter.java index e5e923918..8492e745d 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilter.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilter.java @@ -14,8 +14,6 @@ import javax.persistence.OneToOne; import javax.persistence.OrderColumn; import javax.persistence.PostLoad; -import javax.persistence.PrePersist; -import javax.persistence.PreUpdate; import javax.persistence.Transient; import java.util.ArrayList; @@ -48,25 +46,29 @@ public EntityAttributesFilter() { @Transient private List attributeRelease = new ArrayList<>(); + public void setAttributeRelease(List attributeRelease) { + this.attributeRelease = attributeRelease; + this.rebuildAttributes(); + } + @Transient private RelyingPartyOverridesRepresentation relyingPartyOverrides; + public void setRelyingPartyOverrides(RelyingPartyOverridesRepresentation relyingPartyOverridesRepresentation) { + this.relyingPartyOverrides = relyingPartyOverridesRepresentation; + this.rebuildAttributes(); + } + + //TODO: yeah, I'm not too happy, either + private void rebuildAttributes() { + this.attributes.clear(); + this.attributes.addAll((List) (List)getAttributeListFromAttributeReleaseList(this.attributeRelease)); + this.attributes.addAll((List) (List)getAttributeListFromRelyingPartyOverridesRepresentation(this.relyingPartyOverrides)); + } + @PostLoad public void intoTransientRepresentation() { this.attributeRelease = getAttributeReleaseListFromAttributeList(this.attributes); this.relyingPartyOverrides = getRelyingPartyOverridesRepresentationFromAttributeList(attributes); } - - @PrePersist - @PreUpdate - public void fromTransientRepresentation() { - List attributeList = new ArrayList<>(); - attributeList.addAll(getAttributeListFromAttributeReleaseList(this.attributeRelease)); - attributeList.addAll(getAttributeListFromRelyingPartyOverridesRepresentation(this.relyingPartyOverrides)); - - if(!attributeList.isEmpty()) { - this.attributes.clear(); - this.attributes.addAll((List) (List) attributeList); - } - } } \ No newline at end of file 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 cb3b7c9d9..599503f75 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 @@ -5,7 +5,6 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import edu.internet2.tier.shibboleth.admin.ui.domain.AbstractAuditable; -import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter; import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -25,8 +24,6 @@ import java.util.List; import java.util.UUID; -import static java.util.stream.Collectors.toList; - @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @EqualsAndHashCode(callSuper = true, exclude = {"version"}) @@ -83,19 +80,4 @@ public int getVersion() { } return this.hashCode(); } - - public void convertFiltersIntoTransientRepresentationIfNecessary() { - getAvailableEntityAttributesFilters().forEach(EntityAttributesFilter::intoTransientRepresentation); - } - - public void convertFiltersFromTransientRepresentationIfNecessary() { - getAvailableEntityAttributesFilters().forEach(EntityAttributesFilter::fromTransientRepresentation); - } - - private List getAvailableEntityAttributesFilters() { - return this.metadataFilters.stream() - .filter(EntityAttributesFilter.class::isInstance) - .map(EntityAttributesFilter.class::cast) - .collect(toList()); - } } diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy index e28a05cb3..40c6cefef 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy @@ -200,9 +200,6 @@ class MetadataFiltersControllerTests extends Specification { then: def expectedJson = new JsonSlurper().parseText(postedJsonBody) - if (filterType == 'entityAttributes') { - EntityAttributesFilter.cast(updatedFilter).fromTransientRepresentation() - } expectedJson << [version: updatedFilter.getVersion()] result.andExpect(status().isOk()) .andExpect(content().json(JsonOutput.toJson(expectedJson), true)) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/filters/PolymorphicFiltersJacksonHandlingTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/filters/PolymorphicFiltersJacksonHandlingTests.groovy index 56112a350..7841e045b 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/filters/PolymorphicFiltersJacksonHandlingTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/filters/PolymorphicFiltersJacksonHandlingTests.groovy @@ -73,7 +73,6 @@ class PolymorphicFiltersJacksonHandlingTests extends Specification { def simulatedPrePersistentFilter = new EntityAttributesFilter() simulatedPrePersistentFilter.attributeRelease = simulatedPersistentFilter.attributeRelease simulatedPrePersistentFilter.relyingPartyOverrides = simulatedPersistentFilter.relyingPartyOverrides - simulatedPrePersistentFilter.fromTransientRepresentation() expect: simulatedPersistentFilter.attributes.size() == simulatedPrePersistentFilter.attributes.size() diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/MetadataResolverRepositoryTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/MetadataResolverRepositoryTests.groovy index 646d3e4aa..872182ce8 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/MetadataResolverRepositoryTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/MetadataResolverRepositoryTests.groovy @@ -88,9 +88,6 @@ class MetadataResolverRepositoryTests extends Specification { } MetadataResolver metadataResolver = metadataResolverRepository.findAll().iterator().next() - //convert before saving into database - filter.fromTransientRepresentation() - metadataResolver.getMetadataFilters().add(filter) MetadataResolver persistedMr = metadataResolverRepository.save(metadataResolver) @@ -141,8 +138,6 @@ class MetadataResolverRepositoryTests extends Specification { filterToBeUpdated.relyingPartyOverrides = filter.relyingPartyOverrides filterToBeUpdated.attributeRelease = filter.attributeRelease - //convert before saving into database - filterToBeUpdated.fromTransientRepresentation() entityManager.clear() persistedMr = metadataResolverRepository.save(metadataResolver)