All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.sentry.Attachment Maven / Gradle / Ivy

There is a newer version: 8.0.0-rc.4
Show newest version
package io.sentry;

import io.sentry.protocol.ViewHierarchy;
import java.io.File;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

/** You can use an attachment to store additional files alongside an event or transaction. */
public final class Attachment {

  private @Nullable byte[] bytes;
  private final @Nullable JsonSerializable serializable;
  private @Nullable String pathname;
  private final @NotNull String filename;
  private final @Nullable String contentType;
  private final boolean addToTransactions;

  /** The special type of this attachment */
  private @Nullable String attachmentType = DEFAULT_ATTACHMENT_TYPE;

  /** A standard attachment without special meaning */
  private static final String DEFAULT_ATTACHMENT_TYPE = "event.attachment";

  private static final String VIEW_HIERARCHY_ATTACHMENT_TYPE = "event.view_hierarchy";

  /**
   * Initializes an Attachment with bytes and a filename. Sets addToTransaction to false
   * .
   *
   * @param bytes The bytes of file.
   * @param filename The name of the attachment to display in Sentry.
   */
  public Attachment(final @NotNull byte[] bytes, final @NotNull String filename) {
    this(bytes, filename, null);
  }

  /**
   * Initializes an Attachment with bytes, a filename, and a content type. Sets addToTransaction to
   * false.
   *
   * @param bytes The bytes of file.
   * @param filename The name of the attachment to display in Sentry.
   * @param contentType The content type of the attachment.
   */
  public Attachment(
      final @NotNull byte[] bytes,
      final @NotNull String filename,
      final @Nullable String contentType) {
    this(bytes, filename, contentType, false);
  }

  /**
   * Initializes an Attachment with bytes, a filename, a content type, and addToTransactions.
   *
   * @param bytes The bytes of file.
   * @param filename The name of the attachment to display in Sentry.
   * @param contentType The content type of the attachment.
   * @param addToTransactions true if the SDK should add this attachment to every
   *     {@link ITransaction} or set to false if it shouldn't.
   */
  public Attachment(
      final @NotNull byte[] bytes,
      final @NotNull String filename,
      final @Nullable String contentType,
      final boolean addToTransactions) {
    this(bytes, filename, contentType, DEFAULT_ATTACHMENT_TYPE, addToTransactions);
  }

  /**
   * Initializes an Attachment with bytes, a filename, a content type, and addToTransactions.
   *
   * @param bytes The bytes of file.
   * @param filename The name of the attachment to display in Sentry.
   * @param contentType The content type of the attachment.
   * @param attachmentType the attachment type.
   * @param addToTransactions true if the SDK should add this attachment to every
   *     {@link ITransaction} or set to false if it shouldn't.
   */
  public Attachment(
      final @NotNull byte[] bytes,
      final @NotNull String filename,
      final @Nullable String contentType,
      final @Nullable String attachmentType,
      final boolean addToTransactions) {
    this.bytes = bytes;
    this.serializable = null;
    this.filename = filename;
    this.contentType = contentType;
    this.attachmentType = attachmentType;
    this.addToTransactions = addToTransactions;
  }

  /**
   * Initializes an Attachment with bytes factory, a filename, a content type, and
   * addToTransactions.
   *
   * @param serializable A json serializable holding the attachment payload
   * @param filename The name of the attachment to display in Sentry.
   * @param contentType The content type of the attachment.
   * @param attachmentType the attachment type.
   * @param addToTransactions true if the SDK should add this attachment to every
   *     {@link ITransaction} or set to false if it shouldn't.
   */
  public Attachment(
      final @NotNull JsonSerializable serializable,
      final @NotNull String filename,
      final @Nullable String contentType,
      final @Nullable String attachmentType,
      final boolean addToTransactions) {
    this.bytes = null;
    this.serializable = serializable;
    this.filename = filename;
    this.contentType = contentType;
    this.attachmentType = attachmentType;
    this.addToTransactions = addToTransactions;
  }

  /**
   * Initializes an Attachment with a path. The filename of the file located at the path is used.
   * Sets addToTransaction to false.
   *
   * 

The file located at the pathname is read lazily when the SDK captures an event or * transaction not when the attachment is initialized. The pathname string is converted into an * abstract pathname before reading the file. * * @param pathname The pathname string of the file to upload as an attachment. */ public Attachment(final @NotNull String pathname) { this(pathname, new File(pathname).getName()); } /** * Initializes an Attachment with a path and a filename. Sets addToTransaction to false * . * *

The file located at the pathname is read lazily when the SDK captures an event or * transaction not when the attachment is initialized. The pathname string is converted into an * abstract pathname before reading the file. * * @param pathname The pathname string of the file to upload as an attachment. * @param filename The name of the attachment to display in Sentry. */ public Attachment(final @NotNull String pathname, final @NotNull String filename) { this(pathname, filename, null); } /** * Initializes an Attachment with a path, a filename, and a content type. Sets addToTransaction to * false. * *

The file located at the pathname is read lazily when the SDK captures an event or * transaction not when the attachment is initialized. The pathname string is converted into an * abstract pathname before reading the file. * * @param pathname The pathname string of the file to upload as an attachment. * @param filename The name of the attachment to display in Sentry. * @param contentType The content type of the attachment. */ public Attachment( final @NotNull String pathname, final @NotNull String filename, final @Nullable String contentType) { this(pathname, filename, contentType, DEFAULT_ATTACHMENT_TYPE, false); } /** * Initializes an Attachment with a path, a filename, a content type, and addToTransactions. * *

The file located at the pathname is read lazily when the SDK captures an event or * transaction not when the attachment is initialized. The pathname string is converted into an * abstract pathname before reading the file. * * @param pathname The pathname string of the file to upload as an attachment. * @param filename The name of the attachment to display in Sentry. * @param contentType The content type of the attachment. * @param attachmentType The attachment type. * @param addToTransactions true if the SDK should add this attachment to every * {@link ITransaction} or set to false if it shouldn't. */ public Attachment( final @NotNull String pathname, final @NotNull String filename, final @Nullable String contentType, final @Nullable String attachmentType, final boolean addToTransactions) { this.pathname = pathname; this.filename = filename; this.serializable = null; this.contentType = contentType; this.attachmentType = attachmentType; this.addToTransactions = addToTransactions; } /** * Initializes an Attachment with a path, a filename, a content type, and addToTransactions. * *

The file located at the pathname is read lazily when the SDK captures an event or * transaction not when the attachment is initialized. The pathname string is converted into an * abstract pathname before reading the file. * * @param pathname The pathname string of the file to upload as an attachment. * @param filename The name of the attachment to display in Sentry. * @param contentType The content type of the attachment. * @param addToTransactions true if the SDK should add this attachment to every * {@link ITransaction} or set to false if it shouldn't. */ public Attachment( final @NotNull String pathname, final @NotNull String filename, final @Nullable String contentType, final boolean addToTransactions) { this.pathname = pathname; this.filename = filename; this.serializable = null; this.contentType = contentType; this.addToTransactions = addToTransactions; } /** * Initializes an Attachment with a path, a filename, a content type, addToTransactions, and * attachmentType. * *

The file located at the pathname is read lazily when the SDK captures an event or * transaction not when the attachment is initialized. The pathname string is converted into an * abstract pathname before reading the file. * * @param pathname The pathname string of the file to upload as an attachment. * @param filename The name of the attachment to display in Sentry. * @param contentType The content type of the attachment. * @param addToTransactions true if the SDK should add this attachment to every * {@link ITransaction} or set to false if it shouldn't. * @param attachmentType The content type of the attachment. */ public Attachment( final @NotNull String pathname, final @NotNull String filename, final @Nullable String contentType, final boolean addToTransactions, final @Nullable String attachmentType) { this.pathname = pathname; this.filename = filename; this.serializable = null; this.contentType = contentType; this.addToTransactions = addToTransactions; this.attachmentType = attachmentType; } /** * Gets the bytes of the attachment. * * @return the bytes. */ public @Nullable byte[] getBytes() { return bytes; } /** * Provides the bytes of the attachment. * * @return the bytes factory responsible for providing the bytes. */ public @Nullable JsonSerializable getSerializable() { return serializable; } /** * Gets the pathname string of the attachment. * * @return the pathname string. */ public @Nullable String getPathname() { return pathname; } /** * Gets the name of the attachment to display in Sentry. * * @return the filename. */ public @NotNull String getFilename() { return filename; } /** * Gets the content type of the attachment. The server infers "application/octet-stream" if not * set. * * @return the content type or null if not set. */ public @Nullable String getContentType() { return contentType; } /** * Returns true if the SDK should add this attachment to every {@link ITransaction} * and false if it shouldn't. Default is false. * * @return true if attachment should be added to every {@link ITransaction}. */ boolean isAddToTransactions() { return addToTransactions; } /** * Returns the attachmentType type * * @return the attachmentType */ public @Nullable String getAttachmentType() { return attachmentType; } /** * Creates a new Screenshot Attachment * * @param screenshotBytes the array bytes * @return the Attachment */ public static @NotNull Attachment fromScreenshot(final byte[] screenshotBytes) { return new Attachment(screenshotBytes, "screenshot.png", "image/png", false); } /** * Creates a new View Hierarchy Attachment * * @param viewHierarchy the View Hierarchy * @return the Attachment */ public static @NotNull Attachment fromViewHierarchy(final ViewHierarchy viewHierarchy) { return new Attachment( viewHierarchy, "view-hierarchy.json", "application/json", VIEW_HIERARCHY_ATTACHMENT_TYPE, false); } /** * Creates a new Thread Dump Attachment * * @param bytes the array bytes * @return the Attachment */ public static @NotNull Attachment fromThreadDump(final byte[] bytes) { return new Attachment(bytes, "thread-dump.txt", "text/plain", false); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy