package pl.touk.sputnik.connector.stash;
import org.apache.http.HttpHost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.client.CloseableHttpClient;
import org.jetbrains.annotations.NotNull;
import pl.touk.sputnik.configuration.CliOption;
import pl.touk.sputnik.configuration.Configuration;
import pl.touk.sputnik.configuration.GeneralOption;
import pl.touk.sputnik.connector.ConnectorDetails;
import pl.touk.sputnik.connector.http.HttpConnector;
import pl.touk.sputnik.connector.http.HttpHelper;
import static org.apache.commons.lang3.Validate.notBlank;
public class StashFacadeBuilder {
private HttpHelper httpHelper = new HttpHelper();
@NotNull
public StashFacade build(Configuration configuration) {
ConnectorDetails connectorDetails = new ConnectorDetails(configuration);
StashPatchset stashPatchset = buildStashPatchset(configuration);
HttpHost httpHost = httpHelper.buildHttpHost(connectorDetails);
HttpClientContext httpClientContext = httpHelper.buildClientContext(httpHost, new BasicScheme());
CloseableHttpClient closeableHttpClient = httpHelper.buildClient(httpHost, connectorDetails);
return new StashFacade(new StashConnector(
new HttpConnector(closeableHttpClient, httpClientContext, connectorDetails.getPath()), stashPatchset), configuration);
}
@NotNull
public StashPatchset buildStashPatchset(Configuration configuration) {
String pullRequestId = configuration.getProperty(CliOption.PULL_REQUEST_ID);
String repositorySlug = configuration.getProperty(GeneralOption.REPOSITORY);
String projectKey = configuration.getProperty(GeneralOption.PROJECT);
notBlank(pullRequestId, "You must provide non blank Stash pull request id");
notBlank(repositorySlug, "You must provide non blank Stash repository slug");
notBlank(projectKey, "You must provide non blank Stash project key");
return new StashPatchset(pullRequestId, repositorySlug, projectKey);
}
}