/*
 * Licensed 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.
 */
/*
 * This code was generated by https://github.com/googleapis/google-api-java-client-services/
 * Modify at your own risk.
 */

package com.google.api.services.contentwarehouse.v1.model;

/**
 * This class holds the EXIf/IPTC meta data Next Id: 104
 *
 * <p> This is the Java data model class that specifies how to parse/serialize into the JSON that is
 * transmitted over HTTP when working with the Document AI Warehouse API. For a detailed explanation
 * see:
 * <a href="https://developers.google.com/api-client-library/java/google-http-java-client/json">https://developers.google.com/api-client-library/java/google-http-java-client/json</a>
 * </p>
 *
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public final class ImageExifImageEmbeddedMetadata extends com.google.api.client.json.GenericJson {

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double altitude;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float aperture;

  /**
   * Text fields EXIF_TAG_ARTIST
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String author;

  /**
   * EXIF_TAG_XP_AUTHOR
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String author2;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float brightness;

  /**
   * Device - Camera raw text without normalization
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String cameraMaker;

  /**
   * raw text without normalization
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String cameraModel;

  /**
   * This is the extracted serial number from EXIF (the source depends on camera, most of the
   * cameras store it in makers note tag).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String cameraSerialNumber;

  /**
   * Capturing settings in time_t
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.lang.Long captureTime;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer colorSpace;

  /**
   * EXIF_TAG_USER_COMMENT
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String comments;

  /**
   * EXIF_TAG_XP_COMMENT
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String comments2;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean continousDriveMode;

  /**
   * EXIF_TAG_COPYRIGHT
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String copyright;

  /**
   * Location from IPTC @deprecated: Use iptc.location instead.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String deprecatedCity;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String deprecatedCountry;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String deprecatedState;

  /**
   * EXIF_TAG_IMAGE_DESCRIPTION
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String description;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double destBearing;

  /**
   * Bearing and distance to destination point.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double destBearingRef;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double destDistance;

  /**
   * GPS location of destination point.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double destLatitude;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double destLongitude;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float digitalZoomRatio;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float exposureBias;

  /**
   * 1-8, see EXIF definition
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer exposureProgram;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float exposureTime;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean flashUsed;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float focalLength;

  /**
   * convert to match 35mm film camera
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float focalLength35mm;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer focalPlaneResUnit;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float focalPlaneXres;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String focusMode;

  /**
   * Dilution of precision. HDOP/PDOP depends on measure mode. Find out more at
   * http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double gpsDop;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String gpsMeasureMode;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String gpsStatus;

  /**
   * in meters
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double hPositioningError;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer imageHeight;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer imageWidth;

  /**
   * GPS Heading 0.00 to 359.99 degrees
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double imgDirection;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String imgDirectionRef;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private ImageExifIPTCMetadata iptc;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer iso;

  /**
   * EXIF_TAG_XP_KEYWORDS
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String keywords;

  /**
   * GPS location +/- 90 inclusive
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double latitude;

  /**
   * Device - Lens We use this extended id to identify a lens uniquely. Canon: "%d %d %d"=.. Nikon:
   * "%.2X %.2X %.2X %.2X %.2X %.2X %.2X %.2X" Don't change the format of the internal lens id
   * because we use them to look up the lens names.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String lensId;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String lensMaker;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer lightSource;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer longFocal;

  /**
   * +/- 180 inclusive
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double longitude;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float maxApertureAtLongFocal;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float maxApertureAtShortFocal;

  /**
   * 1-6, see EXIF definition
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer meteringMode;

  /**
   * in time_t
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.lang.Long modificationTime;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String orientation;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer shortFocal;

  /**
   * EXIF_TAG_SOFTWARE
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String software;

  /**
   * EXIF_TAG_XP_SUBJECT
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String subject;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float subjectDistance;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer subjectLocationX;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer subjectLocationY;

  /**
   * EXIF_TAG_XP_TITLE
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String title;

  /**
   * pixels per inch
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float xResolution;

  /**
   * pixels per inch
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float yResolution;

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Double getAltitude() {
    return altitude;
  }

  /**
   * @param altitude altitude or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setAltitude(java.lang.Double altitude) {
    this.altitude = altitude;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getAperture() {
    return aperture;
  }

  /**
   * @param aperture aperture or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setAperture(java.lang.Float aperture) {
    this.aperture = aperture;
    return this;
  }

  /**
   * Text fields EXIF_TAG_ARTIST
   * @return value or {@code null} for none
   */
  public java.lang.String getAuthor() {
    return author;
  }

  /**
   * Text fields EXIF_TAG_ARTIST
   * @param author author or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setAuthor(java.lang.String author) {
    this.author = author;
    return this;
  }

  /**
   * EXIF_TAG_XP_AUTHOR
   * @return value or {@code null} for none
   */
  public java.lang.String getAuthor2() {
    return author2;
  }

  /**
   * EXIF_TAG_XP_AUTHOR
   * @param author2 author2 or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setAuthor2(java.lang.String author2) {
    this.author2 = author2;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getBrightness() {
    return brightness;
  }

  /**
   * @param brightness brightness or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setBrightness(java.lang.Float brightness) {
    this.brightness = brightness;
    return this;
  }

  /**
   * Device - Camera raw text without normalization
   * @return value or {@code null} for none
   */
  public java.lang.String getCameraMaker() {
    return cameraMaker;
  }

  /**
   * Device - Camera raw text without normalization
   * @param cameraMaker cameraMaker or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setCameraMaker(java.lang.String cameraMaker) {
    this.cameraMaker = cameraMaker;
    return this;
  }

  /**
   * raw text without normalization
   * @return value or {@code null} for none
   */
  public java.lang.String getCameraModel() {
    return cameraModel;
  }

  /**
   * raw text without normalization
   * @param cameraModel cameraModel or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setCameraModel(java.lang.String cameraModel) {
    this.cameraModel = cameraModel;
    return this;
  }

  /**
   * This is the extracted serial number from EXIF (the source depends on camera, most of the
   * cameras store it in makers note tag).
   * @return value or {@code null} for none
   */
  public java.lang.String getCameraSerialNumber() {
    return cameraSerialNumber;
  }

  /**
   * This is the extracted serial number from EXIF (the source depends on camera, most of the
   * cameras store it in makers note tag).
   * @param cameraSerialNumber cameraSerialNumber or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setCameraSerialNumber(java.lang.String cameraSerialNumber) {
    this.cameraSerialNumber = cameraSerialNumber;
    return this;
  }

  /**
   * Capturing settings in time_t
   * @return value or {@code null} for none
   */
  public java.lang.Long getCaptureTime() {
    return captureTime;
  }

  /**
   * Capturing settings in time_t
   * @param captureTime captureTime or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setCaptureTime(java.lang.Long captureTime) {
    this.captureTime = captureTime;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getColorSpace() {
    return colorSpace;
  }

  /**
   * @param colorSpace colorSpace or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setColorSpace(java.lang.Integer colorSpace) {
    this.colorSpace = colorSpace;
    return this;
  }

  /**
   * EXIF_TAG_USER_COMMENT
   * @return value or {@code null} for none
   */
  public java.lang.String getComments() {
    return comments;
  }

  /**
   * EXIF_TAG_USER_COMMENT
   * @param comments comments or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setComments(java.lang.String comments) {
    this.comments = comments;
    return this;
  }

  /**
   * EXIF_TAG_XP_COMMENT
   * @return value or {@code null} for none
   */
  public java.lang.String getComments2() {
    return comments2;
  }

  /**
   * EXIF_TAG_XP_COMMENT
   * @param comments2 comments2 or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setComments2(java.lang.String comments2) {
    this.comments2 = comments2;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getContinousDriveMode() {
    return continousDriveMode;
  }

  /**
   * @param continousDriveMode continousDriveMode or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setContinousDriveMode(java.lang.Boolean continousDriveMode) {
    this.continousDriveMode = continousDriveMode;
    return this;
  }

  /**
   * EXIF_TAG_COPYRIGHT
   * @return value or {@code null} for none
   */
  public java.lang.String getCopyright() {
    return copyright;
  }

  /**
   * EXIF_TAG_COPYRIGHT
   * @param copyright copyright or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setCopyright(java.lang.String copyright) {
    this.copyright = copyright;
    return this;
  }

  /**
   * Location from IPTC @deprecated: Use iptc.location instead.
   * @return value or {@code null} for none
   */
  public java.lang.String getDeprecatedCity() {
    return deprecatedCity;
  }

  /**
   * Location from IPTC @deprecated: Use iptc.location instead.
   * @param deprecatedCity deprecatedCity or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setDeprecatedCity(java.lang.String deprecatedCity) {
    this.deprecatedCity = deprecatedCity;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getDeprecatedCountry() {
    return deprecatedCountry;
  }

  /**
   * @param deprecatedCountry deprecatedCountry or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setDeprecatedCountry(java.lang.String deprecatedCountry) {
    this.deprecatedCountry = deprecatedCountry;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getDeprecatedState() {
    return deprecatedState;
  }

  /**
   * @param deprecatedState deprecatedState or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setDeprecatedState(java.lang.String deprecatedState) {
    this.deprecatedState = deprecatedState;
    return this;
  }

  /**
   * EXIF_TAG_IMAGE_DESCRIPTION
   * @return value or {@code null} for none
   */
  public java.lang.String getDescription() {
    return description;
  }

  /**
   * EXIF_TAG_IMAGE_DESCRIPTION
   * @param description description or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setDescription(java.lang.String description) {
    this.description = description;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Double getDestBearing() {
    return destBearing;
  }

  /**
   * @param destBearing destBearing or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setDestBearing(java.lang.Double destBearing) {
    this.destBearing = destBearing;
    return this;
  }

  /**
   * Bearing and distance to destination point.
   * @return value or {@code null} for none
   */
  public java.lang.Double getDestBearingRef() {
    return destBearingRef;
  }

  /**
   * Bearing and distance to destination point.
   * @param destBearingRef destBearingRef or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setDestBearingRef(java.lang.Double destBearingRef) {
    this.destBearingRef = destBearingRef;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Double getDestDistance() {
    return destDistance;
  }

  /**
   * @param destDistance destDistance or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setDestDistance(java.lang.Double destDistance) {
    this.destDistance = destDistance;
    return this;
  }

  /**
   * GPS location of destination point.
   * @return value or {@code null} for none
   */
  public java.lang.Double getDestLatitude() {
    return destLatitude;
  }

  /**
   * GPS location of destination point.
   * @param destLatitude destLatitude or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setDestLatitude(java.lang.Double destLatitude) {
    this.destLatitude = destLatitude;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Double getDestLongitude() {
    return destLongitude;
  }

  /**
   * @param destLongitude destLongitude or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setDestLongitude(java.lang.Double destLongitude) {
    this.destLongitude = destLongitude;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getDigitalZoomRatio() {
    return digitalZoomRatio;
  }

  /**
   * @param digitalZoomRatio digitalZoomRatio or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setDigitalZoomRatio(java.lang.Float digitalZoomRatio) {
    this.digitalZoomRatio = digitalZoomRatio;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getExposureBias() {
    return exposureBias;
  }

  /**
   * @param exposureBias exposureBias or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setExposureBias(java.lang.Float exposureBias) {
    this.exposureBias = exposureBias;
    return this;
  }

  /**
   * 1-8, see EXIF definition
   * @return value or {@code null} for none
   */
  public java.lang.Integer getExposureProgram() {
    return exposureProgram;
  }

  /**
   * 1-8, see EXIF definition
   * @param exposureProgram exposureProgram or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setExposureProgram(java.lang.Integer exposureProgram) {
    this.exposureProgram = exposureProgram;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getExposureTime() {
    return exposureTime;
  }

  /**
   * @param exposureTime exposureTime or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setExposureTime(java.lang.Float exposureTime) {
    this.exposureTime = exposureTime;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getFlashUsed() {
    return flashUsed;
  }

  /**
   * @param flashUsed flashUsed or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setFlashUsed(java.lang.Boolean flashUsed) {
    this.flashUsed = flashUsed;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getFocalLength() {
    return focalLength;
  }

  /**
   * @param focalLength focalLength or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setFocalLength(java.lang.Float focalLength) {
    this.focalLength = focalLength;
    return this;
  }

  /**
   * convert to match 35mm film camera
   * @return value or {@code null} for none
   */
  public java.lang.Float getFocalLength35mm() {
    return focalLength35mm;
  }

  /**
   * convert to match 35mm film camera
   * @param focalLength35mm focalLength35mm or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setFocalLength35mm(java.lang.Float focalLength35mm) {
    this.focalLength35mm = focalLength35mm;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getFocalPlaneResUnit() {
    return focalPlaneResUnit;
  }

  /**
   * @param focalPlaneResUnit focalPlaneResUnit or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setFocalPlaneResUnit(java.lang.Integer focalPlaneResUnit) {
    this.focalPlaneResUnit = focalPlaneResUnit;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getFocalPlaneXres() {
    return focalPlaneXres;
  }

  /**
   * @param focalPlaneXres focalPlaneXres or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setFocalPlaneXres(java.lang.Float focalPlaneXres) {
    this.focalPlaneXres = focalPlaneXres;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getFocusMode() {
    return focusMode;
  }

  /**
   * @param focusMode focusMode or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setFocusMode(java.lang.String focusMode) {
    this.focusMode = focusMode;
    return this;
  }

  /**
   * Dilution of precision. HDOP/PDOP depends on measure mode. Find out more at
   * http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
   * @return value or {@code null} for none
   */
  public java.lang.Double getGpsDop() {
    return gpsDop;
  }

  /**
   * Dilution of precision. HDOP/PDOP depends on measure mode. Find out more at
   * http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
   * @param gpsDop gpsDop or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setGpsDop(java.lang.Double gpsDop) {
    this.gpsDop = gpsDop;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getGpsMeasureMode() {
    return gpsMeasureMode;
  }

  /**
   * @param gpsMeasureMode gpsMeasureMode or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setGpsMeasureMode(java.lang.String gpsMeasureMode) {
    this.gpsMeasureMode = gpsMeasureMode;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getGpsStatus() {
    return gpsStatus;
  }

  /**
   * @param gpsStatus gpsStatus or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setGpsStatus(java.lang.String gpsStatus) {
    this.gpsStatus = gpsStatus;
    return this;
  }

  /**
   * in meters
   * @return value or {@code null} for none
   */
  public java.lang.Double getHPositioningError() {
    return hPositioningError;
  }

  /**
   * in meters
   * @param hPositioningError hPositioningError or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setHPositioningError(java.lang.Double hPositioningError) {
    this.hPositioningError = hPositioningError;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getImageHeight() {
    return imageHeight;
  }

  /**
   * @param imageHeight imageHeight or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setImageHeight(java.lang.Integer imageHeight) {
    this.imageHeight = imageHeight;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getImageWidth() {
    return imageWidth;
  }

  /**
   * @param imageWidth imageWidth or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setImageWidth(java.lang.Integer imageWidth) {
    this.imageWidth = imageWidth;
    return this;
  }

  /**
   * GPS Heading 0.00 to 359.99 degrees
   * @return value or {@code null} for none
   */
  public java.lang.Double getImgDirection() {
    return imgDirection;
  }

  /**
   * GPS Heading 0.00 to 359.99 degrees
   * @param imgDirection imgDirection or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setImgDirection(java.lang.Double imgDirection) {
    this.imgDirection = imgDirection;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getImgDirectionRef() {
    return imgDirectionRef;
  }

  /**
   * @param imgDirectionRef imgDirectionRef or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setImgDirectionRef(java.lang.String imgDirectionRef) {
    this.imgDirectionRef = imgDirectionRef;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public ImageExifIPTCMetadata getIptc() {
    return iptc;
  }

  /**
   * @param iptc iptc or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setIptc(ImageExifIPTCMetadata iptc) {
    this.iptc = iptc;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getIso() {
    return iso;
  }

  /**
   * @param iso iso or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setIso(java.lang.Integer iso) {
    this.iso = iso;
    return this;
  }

  /**
   * EXIF_TAG_XP_KEYWORDS
   * @return value or {@code null} for none
   */
  public java.lang.String getKeywords() {
    return keywords;
  }

  /**
   * EXIF_TAG_XP_KEYWORDS
   * @param keywords keywords or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setKeywords(java.lang.String keywords) {
    this.keywords = keywords;
    return this;
  }

  /**
   * GPS location +/- 90 inclusive
   * @return value or {@code null} for none
   */
  public java.lang.Double getLatitude() {
    return latitude;
  }

  /**
   * GPS location +/- 90 inclusive
   * @param latitude latitude or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setLatitude(java.lang.Double latitude) {
    this.latitude = latitude;
    return this;
  }

  /**
   * Device - Lens We use this extended id to identify a lens uniquely. Canon: "%d %d %d"=.. Nikon:
   * "%.2X %.2X %.2X %.2X %.2X %.2X %.2X %.2X" Don't change the format of the internal lens id
   * because we use them to look up the lens names.
   * @return value or {@code null} for none
   */
  public java.lang.String getLensId() {
    return lensId;
  }

  /**
   * Device - Lens We use this extended id to identify a lens uniquely. Canon: "%d %d %d"=.. Nikon:
   * "%.2X %.2X %.2X %.2X %.2X %.2X %.2X %.2X" Don't change the format of the internal lens id
   * because we use them to look up the lens names.
   * @param lensId lensId or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setLensId(java.lang.String lensId) {
    this.lensId = lensId;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getLensMaker() {
    return lensMaker;
  }

  /**
   * @param lensMaker lensMaker or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setLensMaker(java.lang.String lensMaker) {
    this.lensMaker = lensMaker;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getLightSource() {
    return lightSource;
  }

  /**
   * @param lightSource lightSource or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setLightSource(java.lang.Integer lightSource) {
    this.lightSource = lightSource;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getLongFocal() {
    return longFocal;
  }

  /**
   * @param longFocal longFocal or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setLongFocal(java.lang.Integer longFocal) {
    this.longFocal = longFocal;
    return this;
  }

  /**
   * +/- 180 inclusive
   * @return value or {@code null} for none
   */
  public java.lang.Double getLongitude() {
    return longitude;
  }

  /**
   * +/- 180 inclusive
   * @param longitude longitude or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setLongitude(java.lang.Double longitude) {
    this.longitude = longitude;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getMaxApertureAtLongFocal() {
    return maxApertureAtLongFocal;
  }

  /**
   * @param maxApertureAtLongFocal maxApertureAtLongFocal or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setMaxApertureAtLongFocal(java.lang.Float maxApertureAtLongFocal) {
    this.maxApertureAtLongFocal = maxApertureAtLongFocal;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getMaxApertureAtShortFocal() {
    return maxApertureAtShortFocal;
  }

  /**
   * @param maxApertureAtShortFocal maxApertureAtShortFocal or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setMaxApertureAtShortFocal(java.lang.Float maxApertureAtShortFocal) {
    this.maxApertureAtShortFocal = maxApertureAtShortFocal;
    return this;
  }

  /**
   * 1-6, see EXIF definition
   * @return value or {@code null} for none
   */
  public java.lang.Integer getMeteringMode() {
    return meteringMode;
  }

  /**
   * 1-6, see EXIF definition
   * @param meteringMode meteringMode or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setMeteringMode(java.lang.Integer meteringMode) {
    this.meteringMode = meteringMode;
    return this;
  }

  /**
   * in time_t
   * @return value or {@code null} for none
   */
  public java.lang.Long getModificationTime() {
    return modificationTime;
  }

  /**
   * in time_t
   * @param modificationTime modificationTime or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setModificationTime(java.lang.Long modificationTime) {
    this.modificationTime = modificationTime;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getOrientation() {
    return orientation;
  }

  /**
   * @param orientation orientation or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setOrientation(java.lang.String orientation) {
    this.orientation = orientation;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getShortFocal() {
    return shortFocal;
  }

  /**
   * @param shortFocal shortFocal or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setShortFocal(java.lang.Integer shortFocal) {
    this.shortFocal = shortFocal;
    return this;
  }

  /**
   * EXIF_TAG_SOFTWARE
   * @return value or {@code null} for none
   */
  public java.lang.String getSoftware() {
    return software;
  }

  /**
   * EXIF_TAG_SOFTWARE
   * @param software software or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setSoftware(java.lang.String software) {
    this.software = software;
    return this;
  }

  /**
   * EXIF_TAG_XP_SUBJECT
   * @return value or {@code null} for none
   */
  public java.lang.String getSubject() {
    return subject;
  }

  /**
   * EXIF_TAG_XP_SUBJECT
   * @param subject subject or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setSubject(java.lang.String subject) {
    this.subject = subject;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Float getSubjectDistance() {
    return subjectDistance;
  }

  /**
   * @param subjectDistance subjectDistance or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setSubjectDistance(java.lang.Float subjectDistance) {
    this.subjectDistance = subjectDistance;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getSubjectLocationX() {
    return subjectLocationX;
  }

  /**
   * @param subjectLocationX subjectLocationX or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setSubjectLocationX(java.lang.Integer subjectLocationX) {
    this.subjectLocationX = subjectLocationX;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.Integer getSubjectLocationY() {
    return subjectLocationY;
  }

  /**
   * @param subjectLocationY subjectLocationY or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setSubjectLocationY(java.lang.Integer subjectLocationY) {
    this.subjectLocationY = subjectLocationY;
    return this;
  }

  /**
   * EXIF_TAG_XP_TITLE
   * @return value or {@code null} for none
   */
  public java.lang.String getTitle() {
    return title;
  }

  /**
   * EXIF_TAG_XP_TITLE
   * @param title title or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setTitle(java.lang.String title) {
    this.title = title;
    return this;
  }

  /**
   * pixels per inch
   * @return value or {@code null} for none
   */
  public java.lang.Float getXResolution() {
    return xResolution;
  }

  /**
   * pixels per inch
   * @param xResolution xResolution or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setXResolution(java.lang.Float xResolution) {
    this.xResolution = xResolution;
    return this;
  }

  /**
   * pixels per inch
   * @return value or {@code null} for none
   */
  public java.lang.Float getYResolution() {
    return yResolution;
  }

  /**
   * pixels per inch
   * @param yResolution yResolution or {@code null} for none
   */
  public ImageExifImageEmbeddedMetadata setYResolution(java.lang.Float yResolution) {
    this.yResolution = yResolution;
    return this;
  }

  @Override
  public ImageExifImageEmbeddedMetadata set(String fieldName, Object value) {
    return (ImageExifImageEmbeddedMetadata) super.set(fieldName, value);
  }

  @Override
  public ImageExifImageEmbeddedMetadata clone() {
    return (ImageExifImageEmbeddedMetadata) super.clone();
  }

}
