class DefaultLimitViolationDetector extends AbstractContingencyBlindDetector {

    @Override
    public void checkCurrent(Branch branch, Branch.Side side, double value, Consumer<LimitViolation> consumer) {

        Branch.Overload overload = LimitViolationUtils.checkTemporaryLimits(branch, side, limitReduction, value);

        if (currentLimitTypes.contains(Security.CurrentLimitType.TATL) && (overload != null)) {
            consumer.accept(new LimitViolation(branch.getId(),
                    ((Branch<?>) branch).getOptionalName().orElse(null),
                    LimitViolationType.CURRENT,
                    overload.getPreviousLimitName(),
                    overload.getTemporaryLimit().getAcceptableDuration(),
                    overload.getPreviousLimit(),
                    limitReduction,
                    value,
                    side));
        } else if (currentLimitTypes.contains(Security.CurrentLimitType.PATL)) {
            checkPermanentLimit(branch, side, value, consumer);
        }
    }

    public  DefaultLimitViolationDetector(float limitReduction, Collection<Security.CurrentLimitType> currentLimitTypes);
    public  DefaultLimitViolationDetector(Collection<Security.CurrentLimitType> currentLimitTypes);
    public  DefaultLimitViolationDetector();

}