/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.threatconnect.sdk.conn; import com.threatconnect.sdk.app.AppUtil; import com.threatconnect.sdk.app.SdkAppConfig; import com.threatconnect.sdk.config.Configuration; import com.threatconnect.sdk.config.URLConfiguration; import org.apache.http.impl.client.CloseableHttpClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.Closeable; import java.io.IOException; import java.util.Properties; /** * @author dtineo */ public class Connection implements Closeable { private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName()); private CloseableHttpClient apiClient; private CloseableHttpClient externalClient; protected Configuration config; private AbstractRequestExecutor executor; private final URLConfiguration urlConfig; public Connection() throws IOException { String fileName = System.getProperties().getProperty("threatconnect.api.config"); Properties props = ConnectionUtil.loadProperties(fileName); this.config = Configuration.build(props); this.urlConfig = URLConfiguration.build(); } public Connection(Configuration config) throws IOException { this.config = config; this.urlConfig = URLConfiguration.build(); } /* * public void setInMemoryDispatcher(Object dispatcher) { if ( executor == * null ) { executor = new InMemoryRequestExecutor(this); } * ((InMemoryRequestExecutor)executor).setDispatcher((Dispatcher) * dispatcher); } * public void setInMemoryProviderFactory(Object providerFactory) { if ( * executor == null ) { executor = new InMemoryRequestExecutor(this); } * ((InMemoryRequestExecutor)executor).setResteasyProviderFactory(( * ResteasyProviderFactory)providerFactory); } * public void setInMemoryRegistry(Object registry) { * ((InMemoryRequestExecutor)executor).setRegistry((Registry)registry); } */ public AbstractRequestExecutor getExecutor() { if (executor == null) { if (config.getTcApiUrl().equalsIgnoreCase("embedded")) { executor = new InMemoryRequestExecutor(this); } else { executor = new HttpRequestExecutor(this); } } return executor; } /** * @return the config */ public Configuration getConfig() { return config; } /** * @param config * to set */ public void setConfig(Configuration config) { this.config = config; } CloseableHttpClient getApiClient() { if (apiClient == null) { // :TODO: should we add an SDK param to trust self signed certs? apiClient = AppUtil.createClient(SdkAppConfig.getInstance().isProxyTC(), true); } return apiClient; } CloseableHttpClient getExternalClient() { if (externalClient == null) { // :TODO: should we add an SDK param to trust self signed certs? externalClient = AppUtil.createClient(SdkAppConfig.getInstance().isProxyExternal(), true); } return externalClient; } /** * @return the urlConfig */ public URLConfiguration getUrlConfig() { return urlConfig; } public void disconnect() { if (apiClient != null) { try { apiClient.close(); } catch (IOException ex) { logger.error("Error disconnecting from httpClient", ex); } finally { apiClient = null; } } } /** * Calls disconnect to close httpClient * * @throws IOException * if an I/O error occurs */ @Override public void close() throws IOException { this.disconnect(); } }