/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.component.braintree; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; import com.braintreegateway.BraintreeGateway; import com.braintreegateway.Environment; import org.apache.camel.component.braintree.internal.BraintreeApiName; import org.apache.camel.component.braintree.internal.BraintreeLogHandler; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriParams; import org.apache.camel.spi.UriPath; import org.apache.camel.util.ObjectHelper; /** * Component configuration for Braintree component. */ @UriParams public class BraintreeConfiguration { private static final String ENVIRONMENT = "environment"; private static final String MERCHANT_ID = "merchant_id"; private static final String PUBLIC_KEY = "public_key"; private static final String PRIVATE_KEY = "private_key"; @UriPath @Metadata(required = "true") private BraintreeApiName apiName; @UriPath private String methodName; @UriParam @Metadata(required = "true") private String environment; @UriParam @Metadata(required = "true") private String merchantId; @UriParam @Metadata(required = "true") private String publicKey; @UriParam @Metadata(required = "true") private String privateKey; @UriParam @Metadata(label = "proxy") private String proxyHost; @UriParam @Metadata(label = "proxy") private Integer proxyPort; @UriParam(javaType = "java.lang.String") @Metadata(label = "advanced,logging") private Level httpLogLevel; @Metadata(label = "advanced,logging") private String httpLogName; @UriParam @Metadata(label = "advanced") private Integer httpReadTimeout; public BraintreeApiName getApiName() { return apiName; } /** * What kind of operation to perform */ public void setApiName(BraintreeApiName apiName) { this.apiName = apiName; } public String getMethodName() { return methodName; } /** * What sub operation to use for the selected operation */ public void setMethodName(String methodName) { this.methodName = methodName; } public String getEnvironment() { return ObjectHelper.notNull(environment, ENVIRONMENT); } /** * The environment Either SANDBOX or PRODUCTION */ public void setEnvironment(String environment) { this.environment = environment; } public String getMerchantId() { return ObjectHelper.notNull(merchantId, MERCHANT_ID); } /** * The merchant id provided by Braintree. */ public void setMerchantId(String merchantId) { this.merchantId = merchantId; } public String getPublicKey() { return ObjectHelper.notNull(publicKey, PUBLIC_KEY); } /** * The public key provided by Braintree. */ public void setPublicKey(String publicKey) { this.publicKey = publicKey; } public String getPrivateKey() { return ObjectHelper.notNull(privateKey, PRIVATE_KEY); } /** * The private key provided by Braintree. */ public void setPrivateKey(String privateKey) { this.privateKey = privateKey; } public String getProxyHost() { return proxyHost; } /** * The proxy host */ public void setProxyHost(String proxyHost) { this.proxyHost = proxyHost; } public Integer getProxyPort() { return proxyPort; } /** * The proxy port */ public void setProxyPort(Integer proxyPort) { this.proxyPort = proxyPort; } public Level getHttpLogLevel() { return httpLogLevel; } /** * Set logging level for http calls, @see java.util.logging.Level */ public void setHttpLogLevel(String httpLogLevel) { this.httpLogLevel = Level.parse(httpLogLevel); } /** * Set logging level for http calls, @see java.util.logging.Level */ public void setHttpLogLevel(Level httpLogLevel) { this.httpLogLevel = httpLogLevel; } public String getHttpLogName() { return httpLogName; } /** * Set log category to use to log http calls, default "Braintree" */ public void setHttpLogName(String httpLogName) { this.httpLogName = httpLogName; } public Integer getHttpReadTimeout() { return httpReadTimeout; } /** * Set read timeout for http calls. */ public void setHttpReadTimeout(Integer httpReadTimeout) { this.httpReadTimeout = httpReadTimeout; } /** * Helper method to get and Environment object from its name */ private Environment getBraintreeEnvironment() { String name = getEnvironment(); if (ObjectHelper.equal(Environment.DEVELOPMENT.getEnvironmentName(), name, true)) { return Environment.DEVELOPMENT; } if (ObjectHelper.equal(Environment.SANDBOX.getEnvironmentName(), name, true)) { return Environment.SANDBOX; } if (ObjectHelper.equal(Environment.PRODUCTION.getEnvironmentName(), name, true)) { return Environment.PRODUCTION; } throw new IllegalArgumentException(String.format( "Environment should be development, sandbox or production, got %s", name)); } /** * Construct a BraintreeGateway from configuration */ synchronized BraintreeGateway newBraintreeGateway() { final BraintreeGateway gateway = new BraintreeGateway( getBraintreeEnvironment(), getMerchantId(), getPublicKey(), getPrivateKey()); if (ObjectHelper.isNotEmpty(proxyHost) && ObjectHelper.isNotEmpty(proxyPort)) { gateway.setProxy(proxyHost, proxyPort); } if (httpReadTimeout != null) { gateway.getConfiguration().setTimeout(httpReadTimeout); } // If custom log name is defined, a new logger wil be requested otherwise // the one supplied by Braintree' SDK will be used final Logger logger = ObjectHelper.isNotEmpty(httpLogName) ? Logger.getLogger(httpLogName) : gateway.getConfiguration().getLogger(); // Cleanup handlers as by default braintree install a ConsoleHandler for (Handler handler : logger.getHandlers()) { logger.removeHandler(handler); } logger.addHandler(new BraintreeLogHandler()); if (httpLogLevel != null) { logger.setLevel(httpLogLevel); } gateway.getConfiguration().setLogger(logger); return gateway; } }