001// -------------------------------------------------------------------------------- 002// Copyright 2002-2025 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.model.control.payment.server.logic; 018 019import com.echothree.model.control.payment.common.exception.DuplicatePaymentProcessorActionException; 020import com.echothree.model.control.payment.common.exception.UnknownPaymentProcessorActionException; 021import com.echothree.model.control.payment.server.control.PaymentProcessorActionControl; 022import com.echothree.model.data.payment.server.entity.PaymentProcessorAction; 023import com.echothree.util.common.message.ExecutionErrors; 024import com.echothree.util.common.persistence.BasePK; 025import com.echothree.util.server.control.BaseLogic; 026import com.echothree.util.server.message.ExecutionErrorAccumulator; 027import com.echothree.util.server.persistence.EntityPermission; 028import com.echothree.util.server.persistence.Session; 029import javax.enterprise.context.ApplicationScoped; 030import javax.enterprise.inject.spi.CDI; 031 032@ApplicationScoped 033public class PaymentProcessorActionLogic 034 extends BaseLogic { 035 036 protected PaymentProcessorActionLogic() { 037 super(); 038 } 039 040 public static PaymentProcessorActionLogic getInstance() { 041 return CDI.current().select(PaymentProcessorActionLogic.class).get(); 042 } 043 044 public PaymentProcessorAction createPaymentProcessorAction(final ExecutionErrorAccumulator eea, final String paymentProcessorName, 045 final String paymentProcessorActionTypeName, final BasePK createdBy) { 046 var paymentProcessor = PaymentProcessorLogic.getInstance().getPaymentProcessorByName(eea, paymentProcessorName); 047 var paymentProcessorActionType = PaymentProcessorActionTypeLogic.getInstance().getPaymentProcessorActionTypeByName(eea, paymentProcessorActionTypeName); 048 PaymentProcessorAction paymentProcessorAction = null; 049 050 if(!eea.hasExecutionErrors()) { 051 var paymentProcessorTypeAction = PaymentProcessorTypeActionLogic.getInstance().getPaymentProcessorTypeAction(eea, 052 paymentProcessor.getLastDetail().getPaymentProcessorType(), paymentProcessorActionType); 053 054 if(!eea.hasExecutionErrors()) { 055 var paymentProcessorActionControl = Session.getModelController(PaymentProcessorActionControl.class); 056 057 paymentProcessorAction = paymentProcessorActionControl.getPaymentProcessorAction(paymentProcessor, paymentProcessorTypeAction); 058 059 if(paymentProcessorAction == null) { 060 paymentProcessorAction = paymentProcessorActionControl.createPaymentProcessorAction(paymentProcessor, paymentProcessorTypeAction, createdBy); 061 062 } else { 063 handleExecutionError(DuplicatePaymentProcessorActionException.class, eea, ExecutionErrors.DuplicatePaymentProcessorAction.name(), 064 paymentProcessor.getLastDetail().getPaymentProcessorName(), paymentProcessorActionType.getLastDetail().getPaymentProcessorActionTypeName()); 065 } 066 } 067 } 068 069 return paymentProcessorAction; 070 } 071 072 public PaymentProcessorAction getPaymentProcessorActionByNames(final ExecutionErrorAccumulator eea, final String paymentProcessorName, 073 final String paymentProcessorActionTypeName, final EntityPermission entityPermission) { 074 var paymentProcessor = PaymentProcessorLogic.getInstance().getPaymentProcessorByName(eea, paymentProcessorName); 075 var paymentProcessorActionType = PaymentProcessorActionTypeLogic.getInstance().getPaymentProcessorActionTypeByName(eea, paymentProcessorActionTypeName); 076 PaymentProcessorAction paymentProcessorAction = null; 077 078 if(!eea.hasExecutionErrors()) { 079 var paymentProcessorTypeAction = PaymentProcessorTypeActionLogic.getInstance().getPaymentProcessorTypeAction(eea, 080 paymentProcessor.getLastDetail().getPaymentProcessorType(), paymentProcessorActionType); 081 082 if(!eea.hasExecutionErrors()) { 083 var paymentProcessorActionControl = Session.getModelController(PaymentProcessorActionControl.class); 084 085 paymentProcessorAction = paymentProcessorActionControl.getPaymentProcessorAction(paymentProcessor, paymentProcessorTypeAction, entityPermission); 086 087 if(paymentProcessorAction == null) { 088 handleExecutionError(UnknownPaymentProcessorActionException.class, eea, ExecutionErrors.UnknownPaymentProcessorAction.name(), 089 paymentProcessor.getLastDetail().getPaymentProcessorName(), paymentProcessorActionType.getLastDetail().getPaymentProcessorActionTypeName()); 090 } 091 } 092 } 093 094 return paymentProcessorAction; 095 } 096 097 public PaymentProcessorAction getPaymentProcessorActionByNames(final ExecutionErrorAccumulator eea, final String paymentProcessorName, 098 final String paymentProcessorActionTypeName) { 099 return getPaymentProcessorActionByNames(eea, paymentProcessorName, paymentProcessorActionTypeName, EntityPermission.READ_ONLY); 100 } 101 102 public PaymentProcessorAction getPaymentProcessorActionByNamesForUpdate(final ExecutionErrorAccumulator eea, final String paymentProcessorName, 103 final String paymentProcessorActionTypeName) { 104 return getPaymentProcessorActionByNames(eea, paymentProcessorName, paymentProcessorActionTypeName, EntityPermission.READ_WRITE); 105 } 106 107 public void deletePaymentProcessorAction(final ExecutionErrorAccumulator eea, final PaymentProcessorAction paymentProcessorAction, 108 final BasePK deletedBy) { 109 var paymentProcessorActionControl = Session.getModelController(PaymentProcessorActionControl.class); 110 111 paymentProcessorActionControl.deletePaymentProcessorAction(paymentProcessorAction, deletedBy); 112 } 113}