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;
}
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
}
}
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();
}
Aggregations