in java/com/google/gerrit/plugins/checks/api/CreateChecker.java [82:140]
public Response<CheckerInfo> apply(TopLevelResource parentResource, CheckerInput input)
throws RestApiException, PermissionBackendException, IOException, ConfigInvalidException,
StorageException {
if (!self.get().isIdentifiedUser()) {
throw new AuthException("Authentication required");
}
permissionBackend.currentUser().check(permission);
if (input == null) {
input = new CheckerInput();
}
if (Strings.isNullOrEmpty(input.uuid)) {
throw new BadRequestException("uuid is required");
}
String uuidStr = input.uuid;
CheckerUuid checkerUuid =
CheckerUuid.tryParse(input.uuid)
.orElseThrow(() -> new BadRequestException("invalid uuid: " + uuidStr));
String name = CheckerName.clean(input.name);
if (name.isEmpty()) {
throw new BadRequestException("name is required");
}
Project.NameKey repository = resolveRepository(input.repository);
CheckerCreation.Builder checkerCreationBuilder =
CheckerCreation.builder()
.setCheckerUuid(checkerUuid)
.setName(name)
.setRepository(repository);
CheckerUpdate.Builder checkerUpdateBuilder = CheckerUpdate.builder();
if (input.description != null && !input.description.trim().isEmpty()) {
checkerUpdateBuilder.setDescription(input.description.trim());
}
if (input.url != null) {
checkerUpdateBuilder.setUrl(UrlValidator.clean(input.url));
}
if (input.status != null) {
checkerUpdateBuilder.setStatus(input.status);
}
if (input.blocking != null) {
checkerUpdateBuilder.setBlockingConditions(ImmutableSortedSet.copyOf(input.blocking));
}
if (input.query != null) {
checkerUpdateBuilder.setQuery(validateQuery(checkerUuid, repository, input.query));
}
try {
Checker checker =
checkersUpdate
.get()
.createChecker(checkerCreationBuilder.build(), checkerUpdateBuilder.build());
return Response.created(checkerJson.format(checker));
} catch (DuplicateKeyException e) {
throw new ResourceConflictException(e.getMessage());
}
}