@@ -0,0 +1,2057 @@
+package pl.openrest.filters.remote.predicate;%0A%0Aimport lombok.Getter;%0A%0Aimport org.springframework.core.convert.ConversionService;%0A%0Apublic abstract class LogicalPredicate implements Predicate %7B%0A%0A    protected final String separator;%0A    protected final @Getter Predicate predicates%5B%5D;%0A%0A    public LogicalPredicate(String separator, Predicate... predicates) %7B%0A        this.separator = separator;%0A        this.predicates = predicates;%0A    %7D%0A%0A    @Override%0A    public String toString(ConversionService conversionService) %7B%0A        String predicatesStr%5B%5D = new String%5Bpredicates.length%5D;%0A        for (int i = 0; i %3C predicates.length; i++) %7B%0A            if (conversionService == null)%0A            predicatesStr%5Bi%5D = predicates%5Bi%5D.toString(conversionService);%0A        %7D%0A        return String.join(separator, predicatesStr);%0A    %7D%0A%0A    public static OrPredicate or(Predicate... predicates) %7B%0A        return new OrPredicate(predicates);%0A    %7D%0A%0A    public static AndPredicate and(Predicate... predicates) %7B%0A        return new AndPredicate(predicates);%0A    %7D%0A%0A    @Override%0A    public String toString() %7B%0A        String predicatesStr%5B%5D = new String%5Bpredicates.length%5D;%0A        for (int i = 0; i %3C predicates.length; i++) %7B%0A            predicatesStr%5Bi%5D = predicates%5Bi%5D.toString();%0A        %7D%0A        return String.join(%22,%22, predicatesStr);%0A    %7D%0A%0A    public static class OrPredicate extends LogicalPredicate %7B%0A%0A        private static final String SEPARATOR = %22;or;%22;%0A%0A        public OrPredicate(Predicate%5B%5D predicates) %7B%0A            super(SEPARATOR, predicates);%0A        %7D%0A%0A        @Override%0A        public String toString() %7B%0A            return String.format(%22OR(%25s)%22, super.toString());%0A        %7D%0A    %7D%0A%0A    public static class AndPredicate extends LogicalPredicate %7B%0A%0A        private static final String SEPARATOR = %22;and;%22;%0A%0A        public AndPredicate(Predicate%5B%5D predicates) %7B%0A            super(SEPARATOR, predicates);%0A        %7D%0A%0A        @Override%0A        public String toString() %7B%0A            return String.format(%22AND(%25s)%22, super.toString());%0A        %7D%0A    %7D%0A%7D%0A

Add LogicalPredicate for joining predicates