in export/src/main/java/com/google/cloud/healthcare/imaging/dicomadapter/ExportAdapter.java [48:145]
public static void main(String[] args) throws IOException {
Flags flags = new Flags();
JCommander jCommander = new JCommander(flags);
jCommander.parse(args);
// Adjust logging.
LogUtil.Log4jToStdout(flags.verbose ? "DEBUG" : "ERROR");
// DicomWeb client for source of DICOM.
GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
if (!flags.oauthScopes.isEmpty()) {
credentials = credentials.createScoped(Arrays.asList(flags.oauthScopes.split(",")));
}
DicomWebClient dicomWebClient =
new DicomWebClient(createHttpRequestFactory(credentials), StringUtil.trim(flags.dicomwebAddr), "studies");
// Initialize Monitoring
if (!flags.monitoringProjectId.isEmpty()) {
HttpRequestFactory monitoringRequestFactory = createHttpRequestFactory(credentials);
MonitoringService
.initialize(flags.monitoringProjectId, Event.values(), monitoringRequestFactory);
MonitoringService.addEvent(Event.STARTED);
} else {
MonitoringService.disable();
}
// Use either C-STORE or STOW-RS to send DICOM, based on flags.
boolean isStowRs = !flags.peerDicomwebAddress.isEmpty()
|| (!flags.peerDicomwebAddr.isEmpty() && !flags.peerDicomwebStowPath.isEmpty());
boolean isCStore =
!flags.peerDimseAET.isEmpty() && !flags.peerDimseIP.isEmpty() && flags.peerDimsePort != 0 && !flags.clientAET.isEmpty();
DicomSender dicomSender = null;
if (isStowRs && isCStore) {
System.err.println("Both C-STORE and STOW-RS flags should not be specified.");
System.exit(1);
} else if (isStowRs) {
// STOW-RS sender.
boolean isLegacyAdress = flags.peerDicomwebAddress.isEmpty();
String peerDicomwebAddress =
isLegacyAdress ? flags.peerDicomwebAddr : flags.peerDicomwebAddress;
String peerDicomwebStowpath = isLegacyAdress ? flags.peerDicomwebStowPath : "studies";
IDicomWebClient exportDicomWebClient =
new DicomWebClientJetty(flags.useGcpApplicationDefaultCredentials ? null : credentials,
StringUtil.joinPath(peerDicomwebAddress, peerDicomwebStowpath), false);
dicomSender =
new StowRsSender(dicomWebClient, exportDicomWebClient);
System.out.printf(
"Export adapter set-up to export via STOW-RS to address: %s, path: %s\n",
peerDicomwebAddress, peerDicomwebStowpath);
} else if (isCStore) {
// C-Store sender.
//
// DIMSE application entity.
ApplicationEntity applicationEntity = new ApplicationEntity(StringUtil.trim(flags.clientAET));
Connection conn = new Connection();
DeviceUtil.createClientDevice(applicationEntity, conn);
applicationEntity.addConnection(conn);
dicomSender =
new CStoreSender(
applicationEntity,
flags.peerDimseAET,
flags.peerDimseIP,
flags.peerDimsePort,
dicomWebClient);
System.out.printf(
"Export adapter set-up to export via C-STORE to AET: %s, IP: %s, Port: %d, client AET: %s\n",
flags.peerDimseAET, flags.peerDimseIP, flags.peerDimsePort, flags.clientAET);
} else {
System.err.println("Neither C-STORE nor STOW-RS flags have been specified.");
System.exit(1);
}
Subscriber subscriber = null;
try {
ProjectSubscriptionName subscriptionName =
ProjectSubscriptionName.of(Flags.projectId, Flags.subscriptionId);
subscriber =
Subscriber.newBuilder(subscriptionName, new ExportMessageReceiver(dicomSender)).build();
subscriber.addListener(
new Subscriber.Listener() {
@Override
public void failed(Subscriber.State from, Throwable failure) {
System.err.println(failure);
}
},
MoreExecutors.directExecutor());
ApiService service = subscriber.startAsync();
service.awaitRunning();
System.out.println("Pubsub listener up and running.");
service.awaitTerminated();
} finally {
if (subscriber != null) {
subscriber.stopAsync();
}
}
}