Skip to content

Commit

Permalink
SHIBUI-1783
Browse files Browse the repository at this point in the history
Refactored filters to move object specific code out of caller (which was
checking by type to do type logic) to the actual subtypes themselves
  • Loading branch information
chasegawa committed May 25, 2021
1 parent 7229ea5 commit 0d63979
Show file tree
Hide file tree
Showing 8 changed files with 103 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ public ResponseEntity<?> update(@PathVariable String metadataResolverId,

filterTobeUpdated.setName(updatedFilter.getName());
filterTobeUpdated.setFilterEnabled(updatedFilter.isFilterEnabled());
updateConcreteFilterTypeData(filterTobeUpdated, updatedFilter);
updatedFilter.updateConcreteFilterTypeData(filterTobeUpdated);

MetadataFilter persistedFilter = filterRepository.save(filterTobeUpdated);

Expand Down Expand Up @@ -206,49 +206,6 @@ private MetadataFilter newlyPersistedFilter(Stream<MetadataFilter> filters, fina
return persistedFilter;
}

/**
* Add else if instanceof block here for each concrete filter types we add in the future
*/
private void updateConcreteFilterTypeData(MetadataFilter filterToBeUpdated, MetadataFilter filterWithUpdatedData) {
//TODO: Could we maybe use Dozer here before things get out of control? https://dozermapper.github.io
// Mapper mapper = new net.sf.dozer.Mapper(); // or autowire one
// mapper.map(fromFilter, toFilter);
if (filterWithUpdatedData instanceof EntityAttributesFilter) {
EntityAttributesFilter toFilter = EntityAttributesFilter.class.cast(filterToBeUpdated);
EntityAttributesFilter fromFilter = EntityAttributesFilter.class.cast(filterWithUpdatedData);
toFilter.setEntityAttributesFilterTarget(fromFilter.getEntityAttributesFilterTarget());
toFilter.setRelyingPartyOverrides(fromFilter.getRelyingPartyOverrides());
toFilter.setAttributeRelease(fromFilter.getAttributeRelease());
} else if (filterWithUpdatedData instanceof EntityRoleWhiteListFilter) {
EntityRoleWhiteListFilter toFilter = EntityRoleWhiteListFilter.class.cast(filterToBeUpdated);
EntityRoleWhiteListFilter fromFilter = EntityRoleWhiteListFilter.class.cast(filterWithUpdatedData);
toFilter.setRemoveEmptyEntitiesDescriptors(fromFilter.getRemoveEmptyEntitiesDescriptors());
toFilter.setRemoveRolelessEntityDescriptors(fromFilter.getRemoveRolelessEntityDescriptors());
toFilter.setRetainedRoles(fromFilter.getRetainedRoles());
} else if (filterWithUpdatedData instanceof SignatureValidationFilter) {
SignatureValidationFilter toFilter = SignatureValidationFilter.class.cast(filterToBeUpdated);
SignatureValidationFilter fromFilter = SignatureValidationFilter.class.cast(filterWithUpdatedData);
toFilter.setRequireSignedRoot(fromFilter.getRequireSignedRoot());
toFilter.setCertificateFile(fromFilter.getCertificateFile());
toFilter.setDefaultCriteriaRef(fromFilter.getDefaultCriteriaRef());
toFilter.setSignaturePrevalidatorRef(fromFilter.getSignaturePrevalidatorRef());
toFilter.setDynamicTrustedNamesStrategyRef(fromFilter.getDynamicTrustedNamesStrategyRef());
toFilter.setTrustEngineRef(fromFilter.getTrustEngineRef());
toFilter.setPublicKey(fromFilter.getPublicKey());
} else if (filterWithUpdatedData instanceof RequiredValidUntilFilter) {
RequiredValidUntilFilter toFilter = RequiredValidUntilFilter.class.cast(filterToBeUpdated);
RequiredValidUntilFilter fromFilter = RequiredValidUntilFilter.class.cast(filterWithUpdatedData);
toFilter.setMaxValidityInterval(fromFilter.getMaxValidityInterval());
} else if (filterWithUpdatedData instanceof NameIdFormatFilter) {
NameIdFormatFilter toFilter = NameIdFormatFilter.class.cast(filterToBeUpdated);
NameIdFormatFilter fromFilter = NameIdFormatFilter.class.cast(filterWithUpdatedData);
toFilter.setRemoveExistingFormats(fromFilter.getRemoveExistingFormats());
toFilter.setFormats(fromFilter.getFormats());
toFilter.setNameIdFormatFilterTarget(fromFilter.getNameIdFormatFilterTarget());
}
//TODO: add other types of concrete filters update here
}

private static URI getResourceUriFor(MetadataResolver mr, String filterResourceId) {
return ServletUriComponentsBuilder
.fromCurrentServletMapping().path("/api/MetadataResolvers/")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,16 @@ public void intoTransientRepresentation() {
this.attributeRelease = getAttributeReleaseListFromAttributeList(this.attributes);
this.relyingPartyOverrides = getRelyingPartyOverridesRepresentationFromAttributeList(this.attributes);
}

private EntityAttributesFilter updateConcreteFilterTypeData(EntityAttributesFilter filterToBeUpdated) {
filterToBeUpdated.setEntityAttributesFilterTarget(getEntityAttributesFilterTarget());
filterToBeUpdated.setRelyingPartyOverrides(getRelyingPartyOverrides());
filterToBeUpdated.setAttributeRelease(getAttributeRelease());
return filterToBeUpdated;
}

@Override
public MetadataFilter updateConcreteFilterTypeData(MetadataFilter filterToBeUpdated) {
return updateConcreteFilterTypeData((EntityAttributesFilter) filterToBeUpdated);
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.envers.Audited;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OrderColumn;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.envers.Audited;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Entity
@EqualsAndHashCode(callSuper = true)
Expand All @@ -36,4 +38,16 @@ public EntityRoleWhiteListFilter() {
@Column(name="RETAINED_ROLE")
@OrderColumn
private List<String> retainedRoles = new ArrayList<>();

private EntityRoleWhiteListFilter updateConcreteFilterTypeData(EntityRoleWhiteListFilter filterToBeUpdated) {
filterToBeUpdated.setRemoveEmptyEntitiesDescriptors(getRemoveEmptyEntitiesDescriptors());
filterToBeUpdated.setRemoveRolelessEntityDescriptors(getRemoveRolelessEntityDescriptors());
filterToBeUpdated.setRetainedRoles(getRetainedRoles());
return filterToBeUpdated;
}

@Override
public MetadataFilter updateConcreteFilterTypeData(MetadataFilter filterToBeUpdated) {
return updateConcreteFilterTypeData((EntityRoleWhiteListFilter) filterToBeUpdated);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

/**
* Concrete implementations of the MetadataFilter should implement the updateConcreteFilterTypeData signature to
* populate specific type data from the existing filter to the target filter.
*/
public interface IConcreteMetadataFilterType<T> {

/**
* @param filterToBeUpdated the target of the data
* @return the filterToBeUpdated with the updated information from the existing filter
*/
T updateConcreteFilterTypeData(T filterToBeUpdated);
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
@JsonSubTypes.Type(value=NameIdFormatFilter.class, name="NameIDFormat")})
@Audited
@AuditOverride(forClass = AbstractAuditable.class)
public class MetadataFilter extends AbstractAuditable {
public abstract class MetadataFilter extends AbstractAuditable implements IConcreteMetadataFilterType<MetadataFilter> {

@JsonProperty("@type")
@Transient
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.envers.Audited;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.OneToOne;
import javax.persistence.OrderColumn;
import java.util.List;

import org.hibernate.envers.Audited;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Entity
@EqualsAndHashCode(callSuper = true)
Expand All @@ -34,4 +36,16 @@ public NameIdFormatFilter() {
@OneToOne(cascade = CascadeType.ALL)
private NameIdFormatFilterTarget nameIdFormatFilterTarget;

private NameIdFormatFilter updateConcreteFilterTypeData(NameIdFormatFilter filterToBeUpdated) {
filterToBeUpdated.setRemoveExistingFormats(getRemoveExistingFormats());
filterToBeUpdated.setFormats(getFormats());
filterToBeUpdated.setNameIdFormatFilterTarget(getNameIdFormatFilterTarget());
return filterToBeUpdated;
}

@Override
public MetadataFilter updateConcreteFilterTypeData(MetadataFilter filterToBeUpdated) {
return updateConcreteFilterTypeData((NameIdFormatFilter) filterToBeUpdated);
}

}
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

import javax.persistence.Entity;

import org.hibernate.envers.Audited;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.envers.Audited;

import javax.persistence.Entity;

@Entity
@EqualsAndHashCode(callSuper = true)
Expand All @@ -25,4 +26,14 @@ public RequiredValidUntilFilter() {
public boolean xmlShouldBeGenerated() {
return (maxValidityInterval != null) && (!maxValidityInterval.equals("PT0S"));
}

private RequiredValidUntilFilter updateConcreteFilterTypeData(RequiredValidUntilFilter filterToBeUpdated) {
filterToBeUpdated.setMaxValidityInterval(getMaxValidityInterval());
return filterToBeUpdated;
}

@Override
public MetadataFilter updateConcreteFilterTypeData(MetadataFilter filterToBeUpdated) {
return updateConcreteFilterTypeData((RequiredValidUntilFilter) filterToBeUpdated);
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.filters;

import javax.persistence.Entity;

import org.hibernate.envers.Audited;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.envers.Audited;

import javax.persistence.Entity;

@Entity
@EqualsAndHashCode(callSuper = true)
Expand Down Expand Up @@ -37,4 +38,20 @@ public SignatureValidationFilter() {
public boolean xmlShouldBeGenerated() {
return requireSignedRoot;
}

private SignatureValidationFilter updateConcreteFilterTypeData(SignatureValidationFilter filterToBeUpdated) {
filterToBeUpdated.setRequireSignedRoot(getRequireSignedRoot());
filterToBeUpdated.setCertificateFile(getCertificateFile());
filterToBeUpdated.setDefaultCriteriaRef(getDefaultCriteriaRef());
filterToBeUpdated.setSignaturePrevalidatorRef(getSignaturePrevalidatorRef());
filterToBeUpdated.setDynamicTrustedNamesStrategyRef(getDynamicTrustedNamesStrategyRef());
filterToBeUpdated.setTrustEngineRef(getTrustEngineRef());
filterToBeUpdated.setPublicKey(getPublicKey());
return filterToBeUpdated;
}

@Override
public MetadataFilter updateConcreteFilterTypeData(MetadataFilter filterToBeUpdated) {
return updateConcreteFilterTypeData((SignatureValidationFilter) filterToBeUpdated);
}
}

0 comments on commit 0d63979

Please sign in to comment.