/* * Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved. */ package com.gooddata; import com.gooddata.account.AccountService; import com.gooddata.dataset.DatasetService; import com.gooddata.gdc.DataStoreService; import com.gooddata.gdc.GdcService; import com.gooddata.http.client.GoodDataHttpClient; import com.gooddata.http.client.LoginSSTRetrievalStrategy; import com.gooddata.http.client.SSTRetrievalStrategy; import com.gooddata.md.MetadataService; import com.gooddata.model.ModelService; import com.gooddata.project.ProjectService; import com.gooddata.report.ReportService; import org.apache.http.HttpHost; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.VersionInfo; import org.springframework.http.MediaType; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; import java.util.Arrays; import static com.gooddata.Validate.notEmpty; import static java.util.Collections.singletonMap; import static org.apache.http.util.VersionInfo.loadVersionInfo; /** * Entry point for GoodData SDK usage. *
* Configure connection to GoodData using one of constructors. One can then get initialized service he needs from * the newly constructed instance. This instance can be also used later for logout from GoodData Platform. * * Usage example: *
* GoodData gd = new GoodData("[email protected]", "Roman1");
* // do something useful like: gd.getSomeService().doSomething()
* gd.logout();
*
*/
public class GoodData {
public static final String GDC_REQUEST_ID_HEADER = "X-GDC-REQUEST";
private static final String PROTOCOL = "https";
private static final int PORT = 443;
private static final String HOSTNAME = "secure.gooddata.com";
private static final String UNKNOWN_VERSION = "UNKNOWN";
private final AccountService accountService;
private final ProjectService projectService;
private final MetadataService metadataService;
private final ModelService modelService;
private final GdcService gdcService;
private final DataStoreService dataStoreService;
private final DatasetService datasetService;
private final ReportService reportService;
/**
* Create instance configured to communicate with GoodData Platform under user with given credentials.
*
* @param login GoodData user's login
* @param password GoodData user's password
*/
public GoodData(String login, String password) {
this(HOSTNAME, login, password);
}
/**
* Create instance configured to communicate with GoodData Platform running on given host using given user's
* credentials.
*
* @param hostname GoodData Platform's host name (e.g. secure.gooddata.com)
* @param login GoodData user's login
* @param password GoodData user's password
*/
public GoodData(String hostname, String login, String password) {
this(hostname, login, password, PORT, PROTOCOL);
}
/**
* Create instance configured to communicate with GoodData Platform running on given host, port and protocol using
* given user's credentials.
*
* @param hostname GoodData Platform's host name (e.g. secure.gooddata.com)
* @param login GoodData user's login
* @param password GoodData user's password
* @param port GoodData Platform's API port (e.g. 443)
* @param protocol GoodData Platform's API protocol (e.g. https)
*/
public GoodData(String hostname, String login, String password, int port, String protocol) {
notEmpty(hostname, "hostname");
notEmpty(login, "login");
notEmpty(password, "password");
notEmpty(protocol, "protocol");
final HttpClientBuilder httpClientBuilder = HttpClientBuilder.create()
.setUserAgent(getUserAgent());
final RestTemplate restTemplate = createRestTemplate(login, password, hostname, httpClientBuilder, port,
protocol);
accountService = new AccountService(restTemplate);
projectService = new ProjectService(restTemplate, accountService);
metadataService = new MetadataService(restTemplate);
modelService = new ModelService(restTemplate);
gdcService = new GdcService(restTemplate);
dataStoreService = new DataStoreService(httpClientBuilder, gdcService, login, password);
datasetService = new DatasetService(restTemplate, dataStoreService);
reportService = new ReportService(restTemplate);
}
private RestTemplate createRestTemplate(String login, String password, String hostname, HttpClientBuilder builder,
int port, String protocol) {
final HttpClient client = createHttpClient(login, password, hostname, port, protocol, builder);
final UriPrefixingClientHttpRequestFactory factory = new UriPrefixingClientHttpRequestFactory(
new HttpComponentsClientHttpRequestFactory(client), hostname, port, protocol);
final RestTemplate restTemplate = new RestTemplate(factory);
restTemplate.setInterceptors(Arrays.