package com.airlock.iam.common.domain.model.role;

import com.airlock.iam.common.api.domain.model.role.Role;
import com.airlock.iam.common.api.domain.model.role.RoleTransformation;
import java.util.List;
import java.util.Set;

public final class CompositeRoleTransformation implements RoleTransformation {
   private final List<RoleTransformation> roleTransformations;

   public CompositeRoleTransformation(List<RoleTransformation> roleTransformations) {
      this.roleTransformations = roleTransformations;
   }

   @Override
   public Set<Role> apply(Set<Role> before) {
      return this.roleTransformations.stream().reduce(RoleTransformation.identity(), RoleTransformation::andThen).apply(before);
   }
}
