Skip to content

Commit

Permalink
Refactor persistence implementation for attribute filter
Browse files Browse the repository at this point in the history
  • Loading branch information
dima767 committed Aug 15, 2018
1 parent ce446f5 commit b3f93be
Show file tree
Hide file tree
Showing 7 changed files with 17 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand All @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -48,25 +46,29 @@ public EntityAttributesFilter() {
@Transient
private List<String> attributeRelease = new ArrayList<>();

public void setAttributeRelease(List<String> 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<edu.internet2.tier.shibboleth.admin.ui.domain.Attribute>) (List<? extends org.opensaml.saml.saml2.core.Attribute>)getAttributeListFromAttributeReleaseList(this.attributeRelease));
this.attributes.addAll((List<edu.internet2.tier.shibboleth.admin.ui.domain.Attribute>) (List<? extends org.opensaml.saml.saml2.core.Attribute>)getAttributeListFromRelyingPartyOverridesRepresentation(this.relyingPartyOverrides));
}

@PostLoad
public void intoTransientRepresentation() {
this.attributeRelease = getAttributeReleaseListFromAttributeList(this.attributes);
this.relyingPartyOverrides = getRelyingPartyOverridesRepresentationFromAttributeList(attributes);
}

@PrePersist
@PreUpdate
public void fromTransientRepresentation() {
List<org.opensaml.saml.saml2.core.Attribute> attributeList = new ArrayList<>();
attributeList.addAll(getAttributeListFromAttributeReleaseList(this.attributeRelease));
attributeList.addAll(getAttributeListFromRelyingPartyOverridesRepresentation(this.relyingPartyOverrides));

if(!attributeList.isEmpty()) {
this.attributes.clear();
this.attributes.addAll((List<edu.internet2.tier.shibboleth.admin.ui.domain.Attribute>) (List<? extends org.opensaml.saml.saml2.core.Attribute>) attributeList);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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"})
Expand Down Expand Up @@ -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<EntityAttributesFilter> getAvailableEntityAttributesFilters() {
return this.metadataFilters.stream()
.filter(EntityAttributesFilter.class::isInstance)
.map(EntityAttributesFilter.class::cast)
.collect(toList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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)

Expand Down

0 comments on commit b3f93be

Please sign in to comment.