package pl.touk.sputnik.connector.gerrit; import com.google.common.base.Strings; import com.google.gerrit.extensions.api.GerritApi; import com.urswolfer.gerrit.client.rest.GerritAuthData; import com.urswolfer.gerrit.client.rest.GerritRestApiFactory; import com.urswolfer.gerrit.client.rest.http.HttpClientBuilderExtension; import lombok.extern.slf4j.Slf4j; import org.apache.http.impl.client.HttpClientBuilder; import org.jetbrains.annotations.NotNull; import pl.touk.sputnik.configuration.Configuration; import pl.touk.sputnik.configuration.CliOption; import pl.touk.sputnik.connector.ConnectorDetails; import pl.touk.sputnik.connector.http.HttpHelper; import static org.apache.commons.lang3.Validate.notBlank; @Slf4j public class GerritFacadeBuilder { private HttpHelper httpHelper = new HttpHelper(); @NotNull public GerritFacade build(Configuration configuration) { final ConnectorDetails connectorDetails = new ConnectorDetails(configuration); GerritPatchset gerritPatchset = buildGerritPatchset(configuration); GerritRestApiFactory gerritRestApiFactory = new GerritRestApiFactory(); String hostUri = httpHelper.buildHttpHostUri(connectorDetails); if (!Strings.isNullOrEmpty(connectorDetails.getPath())) { hostUri += connectorDetails.getPath(); } log.info("Using Gerrit URL: {}", hostUri); GerritAuthData.Basic authData = new GerritAuthData.Basic(hostUri, connectorDetails.getUsername(), connectorDetails.getPassword()); GerritApi gerritApi = gerritRestApiFactory.create(authData, new HttpClientBuilderExtension() { @Override public HttpClientBuilder extend(HttpClientBuilder httpClientBuilder, GerritAuthData authData) { HttpClientBuilder clientBuilder = super.extend(httpClientBuilder, authData); clientBuilder.setSSLSocketFactory(httpHelper.buildSSLSocketFactory(connectorDetails)); return clientBuilder; } }); return new GerritFacade(gerritApi, gerritPatchset); } @NotNull private GerritPatchset buildGerritPatchset(Configuration configuration) { String changeId = configuration.getProperty(CliOption.CHANGE_ID); String revisionId = configuration.getProperty(CliOption.REVISION_ID); notBlank(changeId, "You must provide non blank Gerrit change Id"); notBlank(revisionId, "You must provide non blank Gerrit revision Id"); return new GerritPatchset(changeId, revisionId); } }