public static void main()

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