All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.brihaspathee.zeus.validator.rules.RuleUtil Maven / Gradle / Ivy

package com.brihaspathee.zeus.validator.rules;

import com.brihaspathee.zeus.constants.MessageType;
import com.brihaspathee.zeus.domain.entity.RuleImplementation;
import com.brihaspathee.zeus.domain.entity.RuleSetImplementation;
import com.brihaspathee.zeus.dto.rules.RuleDto;
import com.brihaspathee.zeus.dto.rules.RuleTransactionDto;
import com.brihaspathee.zeus.dto.transaction.TransactionDto;
import com.brihaspathee.zeus.dto.transaction.TransactionMemberDto;
import com.brihaspathee.zeus.dto.transaction.TransactionMemberIdentifierDto;
import com.brihaspathee.zeus.exception.RuleImplNotFound;
import com.brihaspathee.zeus.validator.MemberValidationResult;
import com.brihaspathee.zeus.validator.TransactionValidationResult;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
 * Created in Intellij IDEA
 * User: Balaji Varadharajan
 * Date: 05, October 2022
 * Time: 4:06 PM
 * Project: Zeus
 * Package Name: com.brihaspathee.zeus.validator.rules
 * To change this template use File | Settings | File and Code Template
 */
public class RuleUtil {

    /**
     * This method check the individual rule messages to check
     * if the rule overall passed or failed
     * @param ruleResult
     */
    public static void checkIfRulePassed(RuleResult ruleResult){
        long numberOfCriticalAndErrors = ruleResult.getRuleMessages().stream()
                .filter(ruleMessage ->
                        ruleMessage.getMessageTypeCode().equals(MessageType.CRITICAL.toString()) ||
                                ruleMessage.getMessageCode().equals(MessageType.ERROR.toString())).count();
        if(numberOfCriticalAndErrors == 0){
            ruleResult.setRulePassed(true);
        }else{
            ruleResult.setRulePassed(false);
        }
    }

    /**
     * Check of the rule applies for the specific transaction
     * @param ruleTransactions
     * @param transactionType
     * @return
     */
    public static boolean doesRuleApply(List ruleTransactions, String transactionType){
        boolean doesRuleApply =
                ruleTransactions.stream().anyMatch(
                ruleTransaction -> ruleTransaction.getTransactionTypeCode().equals(
                        transactionType));
        return doesRuleApply;
    }

    /**
     * Get the name of the rule implementation
     * @param ruleSetImplementation
     * @param ruleId
     * @return
     */
    public static String getRuleImplName(RuleSetImplementation ruleSetImplementation,
                                         String ruleId){
        Optional ruleImplementation = ruleSetImplementation.getRuleImplementations().stream().filter(ruleImpl -> {
            return ruleImpl.getRuleId().equals(ruleId);
        }).findFirst();
        if(ruleImplementation.isEmpty()){
            throw new RuleImplNotFound("No implementation found for rule " + ruleId);
        }else{
            return ruleImplementation.get().getRuleImplName();
        }
    }

    /**
     * Identify the member validation result
     * @param memberDto
     * @param transactionValidationResult
     * @return
     */
    public static MemberValidationResult getMemberValidationResult(TransactionMemberDto memberDto,
                                                                   TransactionValidationResult transactionValidationResult){
        return transactionValidationResult
                .getMemberValidationResults()
                .stream()
                .filter(
                        temp ->
                                temp.getMemberCode()
                                        .equals(memberDto.getTransactionMemberCode()))
                .findFirst()
                .orElseThrow();
    }

    /**
     * Create the rule result object based on the rule
     * @param rule
     * @return
     */
    public static RuleResult createRuleResult(RuleDto rule){
        return RuleResult.builder()
                .ruleId(rule.getRuleId())
                .ruleName(rule.getRuleName())
                .ruleMessages(new ArrayList())
                .build();
    }

    /**
     * Get the identifier type
     * @param transactionMemberDto
     * @param identifierType
     * @return
     */
    public static TransactionMemberIdentifierDto getMemberId(TransactionMemberDto transactionMemberDto, String identifierType){
        return transactionMemberDto.getIdentifiers()
                .stream()
                .filter(
                        transactionMemberIdentifierDto ->
                                transactionMemberIdentifierDto.getIdentifierTypeCode().equals(identifierType))
                .findFirst()
                .orElse(null);

    }

    /**
     * Get primary subscriber from the transaction
     * @param transactionDto
     * @return
     */
    public static TransactionMemberDto getPrimarySubscriber(TransactionDto transactionDto){
        return transactionDto.getMembers()
                .stream()
                .filter(transactionMemberDto ->
                        transactionMemberDto.getRelationshipTypeCode().equals("HOH"))
                .findFirst()
                .orElse(null);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy