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

com.github.marcoblos.mastercardmpgssdk.predicate.MastercardOrderPredicate Maven / Gradle / Ivy

package com.github.marcoblos.mastercardmpgssdk.predicate;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;

import com.github.marcoblos.mastercardmpgssdk.model.MastercardAPIRequest;

import lombok.Getter;

/**
 * 
 * @author marcoblos 2018-02-22
 *
 */
@Getter
public enum MastercardOrderPredicate {

	// * amount = length > 0 and < 15
	// * currency = A - Z (capitalized letters) length == 3
	// * orderReference = length > 0 and < 41

	AMOUNT_IS_VALID("mastercard.order.amount", (MastercardAPIRequest r) -> amountIsValid(r.getOrder().getAmount())),
	CURRENCY_IS_VALID("mastercard.order.currency", (MastercardAPIRequest r) -> currencyIsValid(r.getOrder().getCurrency())),
	ORDER_REFERENCE_IS_VALID("mastercard.order.reference", (MastercardAPIRequest r) -> orderReferenceIsValid(r.getOrder().getReference()));

	private String code;
	private String field;
	private Predicate predicate;

	MastercardOrderPredicate(String field, Predicate predicate) {
		code = this.name();
		this.field = field;
		this.predicate = predicate;
	}

	private static boolean orderReferenceIsValid(String orderReference) {
		return orderReference != null ? orderReference.length() > 0 && orderReference.length() < 41 : false;
	}

	private static boolean currencyIsValid(String currency) {
		return "EUR".equals(currency) || "GBP".equals(currency) || "USD".equals(currency) || "AUD".equals(currency);
	}

	private static boolean amountIsValid(BigDecimal amount) {
		return amount != null ? amount.toPlainString().length() > 0 && amount.toPlainString().length() < 15 : false;
	}

	public static Map> getPredicates() {
		Map> predicates = new HashMap<>();
		for (MastercardOrderPredicate p : MastercardOrderPredicate.values()) {
			predicates.put(p.getField(), p.getPredicate());
		}
		return predicates;
	}

	public static Map> getPredicates(List customPredicates) {
		Map> predicates = new HashMap<>();
		for (MastercardOrderPredicate p : MastercardOrderPredicate.values()) {
			if (customPredicates.contains(p)) {
				predicates.put(p.getField(), p.getPredicate());
			}
		}
		return predicates;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy