From 54e898a7ec8d1db0205865884ad28103ba907c55 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Fri, 1 Jun 2018 17:12:14 -0400 Subject: [PATCH] SHIBUI-522: refactoring REST controller for polymorphic filters endpoints --- .../ui/domain/filters/EntityAttributesFilter.java | 6 +++--- .../domain/filters/EntityRoleWhiteListFilter.java | 10 +++------- .../admin/ui/domain/filters/MetadataFilter.java | 15 +++++++++++---- .../PolymorphicFiltersJacksonHandlingTests.groovy | 6 +++--- .../ui/service/JPAFilterServiceImplTests.groovy | 2 +- .../admin/ui/util/TestObjectGenerator.groovy | 3 ++- 6 files changed, 23 insertions(+), 19 deletions(-) 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 c73710ddb..8a3a973b9 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 @@ -32,14 +32,14 @@ @Entity @EqualsAndHashCode(callSuper = true, exclude={"attributeRelease", "relyingPartyOverrides"}) -@NoArgsConstructor @Getter @Setter @ToString public class EntityAttributesFilter extends MetadataFilter { - @JsonProperty("@type") - private final transient String type = "EntityAttributesFilter"; + public EntityAttributesFilter() { + type = "EntityAttributes"; + } @OneToOne(cascade = CascadeType.ALL) private EntityAttributesFilterTarget entityAttributesFilterTarget; diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityRoleWhiteListFilter.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityRoleWhiteListFilter.java index 1d9d502b4..12bccfc08 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityRoleWhiteListFilter.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityRoleWhiteListFilter.java @@ -1,11 +1,7 @@ package edu.internet2.tier.shibboleth.admin.ui.domain.filters; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; import lombok.EqualsAndHashCode; import lombok.Getter; -import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @@ -19,14 +15,14 @@ @Entity @EqualsAndHashCode(callSuper = true) -@NoArgsConstructor @Getter @Setter @ToString public class EntityRoleWhiteListFilter extends MetadataFilter { - @JsonProperty("@type") - private final transient String type = "EntityRoleWhiteList"; + public EntityRoleWhiteListFilter() { + type = "EntityRoleWhiteList"; + } private Boolean removeRolelessEntityDescriptors = true; diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/MetadataFilter.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/MetadataFilter.java index fec19468f..1c29afd00 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/MetadataFilter.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/MetadataFilter.java @@ -1,6 +1,9 @@ package edu.internet2.tier.shibboleth.admin.ui.domain.filters; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeId; import com.fasterxml.jackson.annotation.JsonTypeInfo; import edu.internet2.tier.shibboleth.admin.ui.domain.AbstractAuditable; import lombok.EqualsAndHashCode; @@ -21,16 +24,20 @@ */ @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) -@EqualsAndHashCode(callSuper = true, exclude={"version"}) +@EqualsAndHashCode(callSuper = true, exclude={"version", "type"}) @NoArgsConstructor @Getter @Setter @ToString -//@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") -/*@JsonSubTypes({@JsonSubTypes.Type(value=EntityRoleWhiteListFilter.class, name="EntityRoleWhiteList"), - @JsonSubTypes.Type(value=EntityAttributesFilter.class, name="EntityAttributesFilter")})*/ +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "@type", visible = true) +@JsonSubTypes({@JsonSubTypes.Type(value=EntityRoleWhiteListFilter.class, name="EntityRoleWhiteList"), + @JsonSubTypes.Type(value=EntityAttributesFilter.class, name="EntityAttributes")}) public class MetadataFilter extends AbstractAuditable { + //@JsonTypeId + @JsonProperty("@type") + transient String type; + private String name; @Column(unique=true) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/PolymorphicFiltersJacksonHandlingTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/PolymorphicFiltersJacksonHandlingTests.groovy index 270fb4402..e7d1b0d39 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/PolymorphicFiltersJacksonHandlingTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/PolymorphicFiltersJacksonHandlingTests.groovy @@ -32,13 +32,13 @@ class PolymorphicFiltersJacksonHandlingTests extends Specification { def "Correct polymorphic serialization of EntityRoleWhiteListFilter"() { given: def givenFilterJson = """ - { - "type" : "EntityRoleWhiteList", + { + "@type" : "EntityRoleWhiteList", "createdDate" : null, "modifiedDate" : null, "createdBy" : null, "modifiedBy" : null, - "name" : "EntityRoleWhiteListFilter", + "name" : "EntityRoleWhiteList", "resourceId" : "r1", "filterEnabled" : false, "version" : 0, diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAFilterServiceImplTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAFilterServiceImplTests.groovy index 069555ce7..828242646 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAFilterServiceImplTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAFilterServiceImplTests.groovy @@ -63,7 +63,7 @@ class JPAFilterServiceImplTests extends Specification { def "createRepresentationFromFilter properly creates a representation from a filter"() { given: - def filter = testObjectGenerator.buildEntityAttributesFilter() + def filter = testObjectGenerator.buildFilter { testObjectGenerator.entityAttributesFilter() } when: def result = service.createRepresentationFromFilter(filter) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy index 4d7e86e42..8d92873fe 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy @@ -44,6 +44,7 @@ class TestObjectGenerator { EntityRoleWhiteListFilter entityRoleWhitelistFilter() { new EntityRoleWhiteListFilter().with { + it.name = 'EntityRoleWhiteList' it.retainedRoles = ['role1', 'role2'] it.removeRolelessEntityDescriptors = true it @@ -52,6 +53,7 @@ class TestObjectGenerator { EntityAttributesFilter entityAttributesFilter() { new EntityAttributesFilter().with { + it.name = 'EntityAttributes' it.setEntityAttributesFilterTarget(buildEntityAttributesFilterTarget()) it.setAttributes(buildAttributesList()) it.intoTransientRepresentation() @@ -61,7 +63,6 @@ class TestObjectGenerator { MetadataFilter buildFilter(Supplier filterSupplier) { MetadataFilter filter = filterSupplier.get() - filter.setName(generator.randomString(10)) filter.setFilterEnabled(generator.randomBoolean()) filter.setResourceId(generator.randomId()) return filter