package com.softwaremill.common.paypal.service; import com.softwaremill.common.paypal.process.*; import com.softwaremill.common.paypal.process.processors.PayPalProcessor; import com.softwaremill.common.paypal.process.processors.PayPalProcessorsFactory; import com.softwaremill.common.paypal.process.status.DefaultPayPalStatusVerifier; import com.softwaremill.common.paypal.process.status.PayPalStatus; import com.softwaremill.common.paypal.process.status.PayPalStatusVerifier; /** * @Author: lukasz.zuchowski at gmail dot com * Date: 05.04.12 * Time: 12:14 */ public class PayPalVerificationService { public static final PayPalStatusVerifier DefaultStatusVerifier = new DefaultPayPalStatusVerifier(); private String payPalAddress; private PayPalErrorHandler errorHandler; private PayPalStatusVerifier statusVerifier; private PayPalProcessorsFactory processorsFactory; public PayPalVerificationService(String payPalAddress, PayPalProcessorsFactory palProcessorsFactory, PayPalErrorHandler errorHandler) { this(payPalAddress, palProcessorsFactory, errorHandler, DefaultStatusVerifier); } public PayPalVerificationService(String payPalAddress, PayPalProcessorsFactory processorsFactory, PayPalErrorHandler errorHandler, PayPalStatusVerifier statusVerifier) { this.payPalAddress = payPalAddress; this.processorsFactory = processorsFactory; this.errorHandler = errorHandler; this.statusVerifier = statusVerifier; } public PayPalStatus verify(RequestParameters requestParameters) { PayPalStatus status = statusVerifier.verify(payPalAddress, requestParameters); // assign values PayPalParameters parameters = PayPalParameters.create(requestParameters); PayPalErrorHandler.ErrorMessage errorMessage = errorHandler.prepareErrorMessage(); errorMessage.appendPayPalParameters(parameters); process(errorMessage, status, parameters); return status; } protected void process(PayPalErrorHandler.ErrorMessage errorMessage, PayPalStatus status, PayPalParameters parameters) { for (PayPalProcessor processor : processorsFactory.buildProcessors()) { if (processor.accept(status)) { processor.process(status, parameters); if (processor.isError()) { errorMessage.appendProcessingError(processor.getErrorMessage()); errorHandler.processErrorMessage(errorMessage); } return; } } throw new IllegalStateException("Unable to fin proper PayPalProcessor for status:"+status); } }