org.gradle.plugin.use.resolve.service.internal.PluginResolutionServiceClient Maven / Gradle / Ivy
/*
* Copyright 2013 the original author or authors.
*
* Licensed 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.gradle.plugin.use.resolve.service.internal;
import net.jcip.annotations.ThreadSafe;
import org.gradle.api.Nullable;
import org.gradle.plugin.management.internal.PluginRequestInternal;
import java.io.Closeable;
/**
* A client for a Gradle Plugin Resolution web service.
*
* Methods of this interface take a {@code portalUrl} parameter.
* This should be the base of the web service address space, without the Gradle version number component.
* So, for the public instance this should be {@code "https://plugins.gradle.org/api"}.
*
* Methods of this interface take a {@code shouldValidate} parameter.
* When this parameter is true, implementations SHOULD ensure that the returned data is up to date.
* That is, cached responses should not be used.
* However, implementations can choose to ignore this.
* As such, callers should not always expect this to be honoured.
*/
@ThreadSafe
public interface PluginResolutionServiceClient extends Closeable {
/**
* Fetch information about a particular plugin at a particular version.
*
* This maps to the {@code /«gradle version»/plugin/use/«id»/«version»} service.
*
* @param portalUrl the base url of the web service
* @param shouldValidate whether cached information should be validated
* @param pluginRequest the plugin identity and version
* @return the plugin data
*/
Response queryPluginMetadata(String portalUrl, boolean shouldValidate, PluginRequestInternal pluginRequest);
/**
* Fetch status information about the current client.
*
* This maps to the {@code /«gradle version»} service.
*
* The {@code checksum} parameter can be used as a hint for the suitability of a cached response.
* If {@code shouldValidate} is false and the client has cached response with the given checksum, the cached response may be returned.
* This checksum value is provided by {@link PluginResolutionServiceClient.Response#getClientStatusChecksum()} of all responses returned by this interface.
* If the checksum value is not known, pass {@code null} which will force a refresh of the status.
*
* @param portalUrl the base url of the web service
* @param shouldValidate whether cached information should be validated
* @param checksum the latest checksum value for the status if known, otherwise {@code null}
* @return the client status
*/
Response queryClientStatus(String portalUrl, boolean shouldValidate, @Nullable String checksum);
public static interface Response {
boolean isError();
int getStatusCode();
ErrorResponse getErrorResponse();
T getResponse();
String getUrl();
@Nullable
String getClientStatusChecksum();
}
class ErrorResponseResponse implements Response {
private final ErrorResponse errorResponse;
private final int statusCode;
private final String url;
private final String clientStatusChecksum;
public ErrorResponseResponse(ErrorResponse errorResponse, int statusCode, String url, String clientStatusChecksum) {
this.errorResponse = errorResponse;
this.statusCode = statusCode;
this.url = url;
this.clientStatusChecksum = clientStatusChecksum;
}
public String getUrl() {
return url;
}
public String getClientStatusChecksum() {
return clientStatusChecksum;
}
public boolean isError() {
return true;
}
public int getStatusCode() {
return statusCode;
}
public ErrorResponse getErrorResponse() {
return errorResponse;
}
public T getResponse() {
return null;
}
}
class SuccessResponse implements Response {
private final T response;
private final int statusCode;
private final String url;
private final String clientStatusChecksum;
public SuccessResponse(T response, int statusCode, String url, String clientStatusChecksum) {
this.response = response;
this.statusCode = statusCode;
this.url = url;
this.clientStatusChecksum = clientStatusChecksum;
}
public String getUrl() {
return url;
}
public String getClientStatusChecksum() {
return clientStatusChecksum;
}
public boolean isError() {
return false;
}
public int getStatusCode() {
return statusCode;
}
public ErrorResponse getErrorResponse() {
return null;
}
public T getResponse() {
return response;
}
}
}