Search in sources :

Example 1 with Bundle

use of com.b2international.snowowl.core.bundle.Bundle in project snow-owl by b2ihealthcare.

the class BaseResourceCreateRequest method execute.

@Override
public final String execute(TransactionContext context) {
    // validate ID before use, IDs sometimes being used as branch paths, so must be a valid branch path
    try {
        BranchNameValidator.DEFAULT.checkName(id);
    } catch (BadRequestException e) {
        throw new BadRequestException(e.getMessage().replace("Branch name", getClass().getSimpleName().replace("CreateRequest", ".id")));
    }
    // validate URL format
    getResourceURLSchemaSupport(context).validate(url);
    // id checked against all resources
    final boolean existingId = ResourceRequests.prepareSearch().setLimit(0).filterById(getId()).build().execute(context).getTotal() > 0;
    if (existingId) {
        throw new AlreadyExistsException("Resource", getId());
    }
    // url checked against all resources
    final boolean existingUrl = ResourceRequests.prepareSearch().setLimit(0).filterByUrl(getUrl()).build().execute(context).getTotal() > 0;
    if (existingUrl) {
        throw new AlreadyExistsException("Resource", ResourceDocument.Fields.URL, getUrl());
    }
    preExecute(context);
    final List<String> bundleAncestorIds;
    if (IComponent.ROOT_ID.equals(bundleId)) {
        // "-1" is the only key that will show up both as the parent and as an ancestor
        bundleAncestorIds = List.of(IComponent.ROOT_ID);
    } else {
        final Bundles bundles = ResourceRequests.bundles().prepareSearch().filterById(bundleId).one().build().execute(context);
        if (bundles.getTotal() == 0) {
            throw new NotFoundException("Bundle parent", bundleId).toBadRequestException();
        }
        final Bundle bundleParent = bundles.first().get();
        bundleAncestorIds = bundleParent.getResourcePathSegments();
    }
    context.add(createResourceDocument(context, bundleAncestorIds));
    return id;
}
Also used : AlreadyExistsException(com.b2international.commons.exceptions.AlreadyExistsException) Bundle(com.b2international.snowowl.core.bundle.Bundle) BadRequestException(com.b2international.commons.exceptions.BadRequestException) NotFoundException(com.b2international.commons.exceptions.NotFoundException) Bundles(com.b2international.snowowl.core.bundle.Bundles)

Example 2 with Bundle

use of com.b2international.snowowl.core.bundle.Bundle in project snow-owl by b2ihealthcare.

the class BundleRestService method delete.

@Operation(summary = "Delete a bundle", description = "Delete a bundle with the given parameters")
@ApiResponses({ @ApiResponse(responseCode = "204", description = "Deletion successful"), @ApiResponse(responseCode = "409", description = "Bundle cannot be deleted") })
@DeleteMapping(value = "/{bundleId}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void delete(@Parameter(description = "The bundle identifier") @PathVariable(value = "bundleId") final String bundleId, @RequestHeader(value = X_AUTHOR, required = false) final String author) {
    try {
        final Bundle bundle = ResourceRequests.bundles().prepareGet(bundleId).buildAsync().execute(getBus()).getSync(1, TimeUnit.MINUTES);
        ResourceRequests.bundles().prepareDelete(bundleId).commit().setAuthor(author).setCommitComment(String.format("Deleted Bundle %s", bundle.getTitle())).buildAsync().execute(getBus()).getSync(COMMIT_TIMEOUT, TimeUnit.MINUTES);
    } catch (NotFoundException e) {
    // already deleted, ignore error
    }
}
Also used : Bundle(com.b2international.snowowl.core.bundle.Bundle) NotFoundException(com.b2international.commons.exceptions.NotFoundException) Operation(io.swagger.v3.oas.annotations.Operation) ApiResponses(io.swagger.v3.oas.annotations.responses.ApiResponses)

Example 3 with Bundle

use of com.b2international.snowowl.core.bundle.Bundle in project snow-owl by b2ihealthcare.

the class BaseResourceUpdateRequest method getBundleAncestorIds.

private List<String> getBundleAncestorIds(final TransactionContext context, final String resourceId) {
    if (IComponent.ROOT_ID.equals(bundleId)) {
        return List.of(bundleId);
    }
    final Bundles bundles = ResourceRequests.bundles().prepareSearch().filterById(bundleId).one().build().execute(context);
    if (bundles.getTotal() == 0) {
        throw new NotFoundException("Bundle parent", bundleId).toBadRequestException();
    }
    final Bundle parentBundle = bundles.first().get();
    if (parentBundle.getBundleId().equals(resourceId) || parentBundle.getBundleAncestorIds().contains(resourceId)) {
        throw new CycleDetectedException("Setting parent bundle ID to '" + bundleId + "' would create a loop.");
    }
    return parentBundle.getResourcePathSegments();
}
Also used : Bundle(com.b2international.snowowl.core.bundle.Bundle) CycleDetectedException(com.b2international.commons.exceptions.CycleDetectedException) NotFoundException(com.b2international.commons.exceptions.NotFoundException) Bundles(com.b2international.snowowl.core.bundle.Bundles)

Aggregations

NotFoundException (com.b2international.commons.exceptions.NotFoundException)3 Bundle (com.b2international.snowowl.core.bundle.Bundle)3 Bundles (com.b2international.snowowl.core.bundle.Bundles)2 AlreadyExistsException (com.b2international.commons.exceptions.AlreadyExistsException)1 BadRequestException (com.b2international.commons.exceptions.BadRequestException)1 CycleDetectedException (com.b2international.commons.exceptions.CycleDetectedException)1 Operation (io.swagger.v3.oas.annotations.Operation)1 ApiResponses (io.swagger.v3.oas.annotations.responses.ApiResponses)1