Загрузка данных


public interface TransitionFilter {
    boolean accept(Transition<?, ?> transition);
}

@Component
@ConditionalOnProperty(name = "app.test-mode", havingValue = "false", matchIfMissing = true)
public class TestOnlyFilter implements TransitionFilter {

    private static final String TEST_ONLY = "test-only";

    private final TestContext testContext;

    public TestOnlyFilter(TestContext testContext) {
        this.testContext = testContext;
    }

    @Override
    public boolean accept(Transition<?, ?> transition) {

        Object meta = transition.getMetadata().get(TEST_ONLY);
        boolean testOnly = Boolean.TRUE.equals(meta);

        return !testOnly || testContext.isTestMode();
    }
}

@Service
@RequiredArgsConstructor
public class TransitionAccessService {

    private final List<TransitionFilter> filters;

    public boolean isAcceptedByFilters(Transition<?, ?> transition) {

        return filters.stream()
                .allMatch(filter -> filter.accept(transition));
    }
}