final Event convertToLegacyEvent()

in invoker/core/src/main/java/com/google/cloud/functions/invoker/CloudEvents.java [143:183]


    final Event convertToLegacyEvent(CloudEvent cloudEvent) {
      /*
        Ex 1: "//firebaseauth.googleapis.com/projects/my-project-id"
        m.group(0): "//firebaseauth.googleapis.com/projects/my-project-id"
        m.group(1): "firebaseauth.googleapis.com"
        m.group(2): "projects/my-project-id"

        Ex 2: "//pubsub.googleapis.com/projects/sample-project/topics/gcf-test"
        m.group(0): "//pubsub.googleapis.com/projects/sample-project/topics/gcf-test"
        m.group(1): "pubsub.googleapis.com"
        m.group(2): "projects/sample-project/topics/gcf-test"
      */
      Matcher m = sourcePattern.matcher(cloudEvent.getSource().toString());
      if (!m.find() || m.groupCount() != 2) {
        throw new IllegalArgumentException(
            String.format(
                "Invalid CloudEvent source '%s', unable to parse into resource service and name",
                cloudEvent.getSource().toString()));
      }

      String service = m.group(1);
      String name = m.group(2);
      String resource = String.format("%s/%s", name, cloudEvent.getSubject());
      ParsedCloudEvent parsed = new ParsedCloudEvent(resource, service, name);

      OffsetDateTime timestamp =
          Optional.ofNullable(cloudEvent.getTime()).orElse(OffsetDateTime.now());

      CloudFunctionsContext.Builder ctxBuilder =
          CloudFunctionsContext.builder()
              .setEventId(cloudEvent.getId())
              .setEventType(this.legacyEventType)
              .setResource(resource)
              .setTimestamp(DateTimeFormatter.ISO_INSTANT.format(timestamp));

      JsonObject data =
          GSON.fromJson(
              new String(cloudEvent.getData().toBytes(), java.nio.charset.StandardCharsets.UTF_8),
              JsonObject.class);
      return createLegacyEvent(parsed, ctxBuilder, data);
    }