use of org.hl7.gravity.refimpl.sdohexchange.exception.ServerNotFoundException in project Gravity-SDOH-Exchange-RI by FHIR.
the class ResourceService method getTaskResources.
public TaskJsonResourcesDto getTaskResources(Integer serverId, String taskId) {
Server server = serverRepository.findById(serverId).orElseThrow(() -> new ServerNotFoundException(String.format("No server was found by id '%s'", serverId)));
IGenericClient fhirClient = fhirContext.newRestfulGenericClient(server.getFhirServerUrl());
// Doesn't support now
// fhirClient.registerInterceptor(new BearerTokenAuthInterceptor(
// authorizationClient.getTokenResponse(URI.create(server.getAuthServerUrl()), server.getClientId(),
// server.getClientSecret(), SCOPE)
// .getAccessToken()));
// Getting task by id with Patient, requester Organization and ServiceRequest
Bundle taskBundle = fhirClient.search().forResource(Task.class).where(Task.RES_ID.exactly().code(taskId)).include(Task.INCLUDE_FOCUS).include(Task.INCLUDE_PATIENT).include(Task.INCLUDE_REQUESTER).returnBundle(Bundle.class).execute();
Task task = FhirUtil.getFromBundle(taskBundle, Task.class).stream().findFirst().orElseThrow(() -> new ResourceNotFoundException(new IdType(Task.class.getSimpleName(), taskId)));
// We expect that task was validated and contains all resources
ServiceRequest serviceRequest = FhirUtil.getFirstFromBundle(taskBundle, ServiceRequest.class);
Patient patient = FhirUtil.getFirstFromBundle(taskBundle, Patient.class);
Organization requester = FhirUtil.getFirstFromBundle(taskBundle, Organization.class);
// Load all Task Procedures and ServiceRequest required resources as one transaction
Map<Class<? extends Resource>, List<Resource>> loadedResources = resourceLoader.getResources(fhirClient, collectAllReferences(task, serviceRequest));
TaskJsonResourcesDto resourcesDto = new TaskJsonResourcesDto();
resourcesDto.setTask(resourceParser.parse(task));
resourcesDto.setServiceRequest(resourceParser.parse(serviceRequest));
resourcesDto.setPatient(resourceParser.parse(patient));
resourcesDto.setRequester(resourceParser.parse(requester));
resourcesDto.setConsent(resourceParser.parse(loadedResources.get(Consent.class)).stream().findFirst().orElse(null));
resourcesDto.setConditions(resourceParser.parse(loadedResources.get(Condition.class)));
resourcesDto.setGoals(resourceParser.parse(loadedResources.get(Goal.class)));
resourcesDto.setProcedures(resourceParser.parse(loadedResources.get(Procedure.class)));
return resourcesDto;
}
use of org.hl7.gravity.refimpl.sdohexchange.exception.ServerNotFoundException in project Gravity-SDOH-Exchange-RI by FHIR.
the class ServerService method updateServer.
@Transactional
public ServerDto updateServer(Integer id, NewServerDto newServerDto) throws AuthClientException {
Server server = serverRepository.findById(id).orElseThrow(() -> new ServerNotFoundException(String.format("No Server was found by id '%s'", id)));
if (serverRepository.findByServerName(newServerDto.getServerName()).isPresent() && !server.getServerName().equals(newServerDto.getServerName())) {
throw new DuplicateServerNameNotAllowedException(newServerDto.getServerName());
}
// Just a validation of credentials.
authorizationClient.getTokenResponse(URI.create(newServerDto.getAuthServerUrl()), newServerDto.getClientId(), newServerDto.getClientSecret(), SCOPE);
modelMapper.map(newServerDto, server);
return modelMapper.map(server, ServerDto.class);
}
use of org.hl7.gravity.refimpl.sdohexchange.exception.ServerNotFoundException in project Gravity-SDOH-Exchange-RI by FHIR.
the class TaskService method update.
public void update(String id, UpdateTaskRequestDto update) throws AuthClientException {
Server server = serverRepository.findById(update.getServerId()).orElseThrow(() -> new ServerNotFoundException(String.format("No server was found by id '%s'", update.getServerId())));
IGenericClient fhirClient = fhirContext.newRestfulGenericClient(server.getFhirServerUrl());
// Doesn't support now
// fhirClient.registerInterceptor(new BearerTokenAuthInterceptor(
// authorizationClient.getTokenResponse(URI.create(server.getAuthServerUrl()), server.getClientId(),
// server.getClientSecret(), SCOPE)
// .getAccessToken()));
TaskRepository taskRepository = new TaskRepository(fhirClient, applicationUrl);
// Validates and converts Procedure codes to Coding
List<Coding> procedureCodes = Optional.ofNullable(update.getProcedureCodes()).orElse(Collections.emptyList()).stream().map(code -> sdohMappings.findResourceCoding(Procedure.class, code)).collect(Collectors.toList());
Bundle taskBundle = taskRepository.find(id, Lists.newArrayList(Task.INCLUDE_FOCUS));
TaskInfoBundleExtractor.TaskInfoHolder taskInfo = new TaskInfoBundleExtractor().extract(taskBundle).stream().findFirst().orElseThrow(() -> new ResourceNotFoundException(new IdType(Task.class.getSimpleName(), id)));
TaskUpdateBundleFactory bundleFactory = new TaskUpdateBundleFactory();
bundleFactory.setTask(taskInfo.getTask());
bundleFactory.setStatus(update.getTaskStatus());
bundleFactory.setServiceRequest(taskInfo.getServiceRequest());
bundleFactory.setStatusReason(update.getStatusReason());
bundleFactory.setComment(update.getComment());
bundleFactory.setOutcome(update.getOutcome());
bundleFactory.setProcedureCodes(procedureCodes);
taskRepository.transaction(bundleFactory.createUpdateBundle());
}
use of org.hl7.gravity.refimpl.sdohexchange.exception.ServerNotFoundException in project Gravity-SDOH-Exchange-RI by FHIR.
the class TaskService method read.
public TaskDto read(Integer serverId, String taskId) {
Server server = serverRepository.findById(serverId).orElseThrow(() -> new ServerNotFoundException(String.format("No server was found by id '%s'", serverId)));
IGenericClient fhirClient = fhirContext.newRestfulGenericClient(server.getFhirServerUrl());
// Doesn't support now
// fhirClient.registerInterceptor(new BearerTokenAuthInterceptor(
// authorizationClient.getTokenResponse(URI.create(server.getAuthServerUrl()), server.getClientId(),
// server.getClientSecret(), SCOPE)
// .getAccessToken()));
TaskRepository taskRepository = new TaskRepository(fhirClient, applicationUrl);
Bundle taskBundle = taskRepository.find(taskId, Lists.newArrayList(Task.INCLUDE_FOCUS));
Task task = FhirUtil.getFirstFromBundle(taskBundle, Task.class);
if (Objects.isNull(task)) {
throw new ResourceNotFoundException(new IdType(Task.class.getSimpleName(), taskId));
}
if (!task.getIntent().equals(Task.TaskIntent.FILLERORDER)) {
throw new TaskReadException("The intent of Task/" + taskId + " is not filler-order.");
}
return new TaskBundleToDtoConverter(serverId).convert(taskBundle).stream().findFirst().get();
}
Aggregations