blob: f4e38c46bd80df21b0479fce667c3f9eecc0cfcd [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.beam.sdk.io.gcp.healthcare;
import com.google.api.services.healthcare.v1beta1.model.DeidentifyConfig;
import com.google.api.services.healthcare.v1beta1.model.DicomStore;
import com.google.api.services.healthcare.v1beta1.model.Empty;
import com.google.api.services.healthcare.v1beta1.model.FhirStore;
import com.google.api.services.healthcare.v1beta1.model.Hl7V2Store;
import com.google.api.services.healthcare.v1beta1.model.HttpBody;
import com.google.api.services.healthcare.v1beta1.model.IngestMessageResponse;
import com.google.api.services.healthcare.v1beta1.model.ListMessagesResponse;
import com.google.api.services.healthcare.v1beta1.model.Message;
import com.google.api.services.healthcare.v1beta1.model.Operation;
import java.io.IOException;
import java.net.URISyntaxException;
import java.text.ParseException;
import java.util.List;
import java.util.Map;
import org.apache.beam.sdk.io.gcp.healthcare.HttpHealthcareApiClient.HealthcareHttpException;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.joda.time.Instant;
/** Defines a client that talks to the Cloud Healthcare API. */
public interface HealthcareApiClient {
/**
* Fetches an Hl7v2 message by its name from a Hl7v2 store.
*
* @param msgName the msg name
* @return HL7v2 message
* @throws IOException the io exception
* @throws ParseException the parse exception
*/
Message getHL7v2Message(String msgName) throws IOException, ParseException;
/**
* Delete hl 7 v 2 message empty.
*
* @param msgName the msg name
* @return the empty
* @throws IOException the io exception
*/
Empty deleteHL7v2Message(String msgName) throws IOException;
/**
* Gets HL7v2 store.
*
* @param storeName the store name
* @return the HL7v2 store
* @throws IOException the io exception
*/
Hl7V2Store getHL7v2Store(String storeName) throws IOException;
/**
* Gets earliest hl 7 v 2 send time.
*
* @param hl7v2Store the hl 7 v 2 store
* @param filter the filter
* @return the earliest hl 7 v 2 send time
* @throws IOException the io exception
*/
Instant getEarliestHL7v2SendTime(String hl7v2Store, @Nullable String filter) throws IOException;
Instant getLatestHL7v2SendTime(String hl7v2Store, @Nullable String filter) throws IOException;
/**
* Make send time bound hl 7 v 2 list request.
*
* @param hl7v2Store the hl 7 v 2 store
* @param start the start
* @param end the end
* @param otherFilter the other filter
* @param orderBy the order by
* @param pageToken the page token
* @return the list messages response
* @throws IOException the io exception
*/
ListMessagesResponse makeSendTimeBoundHL7v2ListRequest(
String hl7v2Store,
Instant start,
@Nullable Instant end,
@Nullable String otherFilter,
@Nullable String orderBy,
@Nullable String pageToken)
throws IOException;
/**
* Make hl 7 v 2 list request list messages response.
*
* @param hl7v2Store the hl 7 v 2 store
* @param filter the filter
* @param orderBy the order by
* @param pageToken the page token
* @return the list messages response
* @throws IOException the io exception
*/
ListMessagesResponse makeHL7v2ListRequest(
String hl7v2Store,
@Nullable String filter,
@Nullable String orderBy,
@Nullable String pageToken)
throws IOException;
/**
* Ingest hl 7 v 2 message ingest message response.
*
* @param hl7v2Store the hl 7 v 2 store
* @param msg the msg
* @return the ingest message response
* @throws IOException the io exception
*/
IngestMessageResponse ingestHL7v2Message(String hl7v2Store, Message msg) throws IOException;
/**
* Create hl 7 v 2 message message.
*
* @param hl7v2Store the hl 7 v 2 store
* @param msg the msg
* @return the message
* @throws IOException the io exception
*/
Message createHL7v2Message(String hl7v2Store, Message msg) throws IOException;
Operation importFhirResource(
String fhirStore, String gcsSourcePath, @Nullable String contentStructure) throws IOException;
Operation exportFhirResourceToGcs(String fhirStore, String gcsDestinationPrefix)
throws IOException;
Operation deidentifyFhirStore(
String sourceFhirStore, String destinationFhirStore, DeidentifyConfig deidConfig)
throws IOException;
Operation pollOperation(Operation operation, Long sleepMs)
throws InterruptedException, IOException;
/**
* Execute fhir bundle http body.
*
* @param fhirStore the fhir store
* @param bundle the bundle
* @return the http body
* @throws IOException the io exception
*/
HttpBody executeFhirBundle(String fhirStore, String bundle)
throws IOException, HealthcareHttpException;
/**
* Read fhir resource http body.
*
* @param resourceId the resource
* @return the http body
* @throws IOException the io exception
*/
HttpBody readFhirResource(String resourceId) throws IOException;
/**
* Search fhir resource http body.
*
* @param fhirStore the fhir store
* @param resourceType the resource type
* @param parameters the parameters
* @return the http body
* @throws IOException
*/
HttpBody searchFhirResource(
String fhirStore,
String resourceType,
@Nullable Map<String, Object> parameters,
String pageToken)
throws IOException;
/**
* Create hl 7 v 2 store hl 7 v 2 store.
*
* @param dataset the dataset
* @param name the name
* @return the hl 7 v 2 store
* @throws IOException the io exception
*/
Hl7V2Store createHL7v2Store(String dataset, String name) throws IOException;
FhirStore createFhirStore(String dataset, String name, String version, String pubsubTopic)
throws IOException;
FhirStore createFhirStore(String dataset, String name, String version) throws IOException;
/**
* List all FHIR stores in a dataset.
*
* @param dataset the dataset, in the format:
* projects/project_id/locations/location_id/datasets/dataset_id
* @return a list of FhirStore
* @throws IOException
*/
List<FhirStore> listAllFhirStores(String dataset) throws IOException;
/**
* Delete hl 7 v 2 store empty.
*
* @param store the store
* @return the empty
* @throws IOException the io exception
*/
Empty deleteHL7v2Store(String store) throws IOException;
Empty deleteFhirStore(String store) throws IOException;
String retrieveDicomStudyMetadata(String dicomWebPath) throws IOException;
DicomStore createDicomStore(String dataset, String name) throws IOException;
DicomStore createDicomStore(String dataset, String name, String pubsubTopic) throws IOException;
Empty deleteDicomStore(String name) throws IOException;
Empty uploadToDicomStore(String webPath, String filePath) throws IOException, URISyntaxException;
}