docs: public static PrincipalNameTransformer newPrincipalNameTransformer(final PrincipalTransformationProperties p) {
          val chain = new ChainingPrincipalNameTransformer();
  
          if (p.getGroovy().getLocation() != null) {
              val t = new GroovyPrincipalNameTransformer(p.getGroovy().getLocation());
              chain.addTransformer(t);
          }
  
          if (StringUtils.isNotBlank(p.getPattern())) {
              val t = new RegexPrincipalNameTransformer(p.getPattern());
              chain.addTransformer(t);
          }
  
          if (StringUtils.isNotBlank(p.getPrefix()) || StringUtils.isNotBlank(p.getSuffix())) {
              val t = new PrefixSuffixPrincipalNameTransformer();
              t.setPrefix(p.getPrefix());
              t.setSuffix(p.getSuffix());
              chain.addTransformer(t);
          } else {
              chain.addTransformer(new NoOpPrincipalNameTransformer());
          }
  
          if (p.getCaseConversion() == PrincipalTransformationProperties.CaseConversion.UPPERCASE) {
              val t = new ConvertCasePrincipalNameTransformer();
              t.setToUpperCase(true);
              chain.addTransformer(t);
          }
  
          if (p.getCaseConversion() == PrincipalTransformationProperties.CaseConversion.LOWERCASE) {
              val t = new ConvertCasePrincipalNameTransformer();
              t.setToUpperCase(false);
              chain.addTransformer(t);
          }
  
          return chain;
      }