/*
 * FactSet Prices API
 * Gain access to comprehensive global coverage for Equities & Fixed Income. Perform quick analytics by controlling the date ranges, currencies, and rolling periods, or simply request Open, High, Low, and Close prices. Easily connect pricing data with other core company data or alternative content sets using FactSet's hub and spoke symbology. <p>Equity and Fund Security types include Common Stock, ADR, GDR, Preferred, Closed-ended Fund, Exchange Traded Fund, Unit, Open-ended Fund, Exchange Traded Fund UVI, Exchange Traded Fund NAV, Preferred Equity, Non-Voting Depositary Receipt/Certificate, Alien/Foreign, Structured Product, and Temporary Instruments. Reference over 180,000+ active and inactive securities.</p><p>Fixed Income Security Types include Corporate Bonds, Treasury and Agency bonds, Government Bonds, and Municipals.</p> 
 *
 * The version of the OpenAPI document: 1.2.1
 * Contact: <EMAIL>
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


package com.factset.sdk.FactSetPrices.models;

import java.util.Objects;
import java.util.Arrays;
import java.util.Map;
import java.util.HashMap;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.factset.sdk.FactSetPrices.JSON;


/**
 * Rollover
 */
@JsonPropertyOrder({
  Rollover.JSON_PROPERTY_AMERICAS_ROLL_TIME,
  Rollover.JSON_PROPERTY_AMERICAS_ZERO_DATE,
  Rollover.JSON_PROPERTY_ASIAPACIFIC_ROLL_TIME,
  Rollover.JSON_PROPERTY_ASIAPACIFIC_ZERO_DATE,
  Rollover.JSON_PROPERTY_EUROPE_ROLL_TIME,
  Rollover.JSON_PROPERTY_EUROPE_ZERO_DATE
})
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen")
public class Rollover implements Serializable {
  private static final long serialVersionUID = 1L;

  public static final String JSON_PROPERTY_AMERICAS_ROLL_TIME = "americasRollTime";
  private OffsetDateTime americasRollTime;

  public static final String JSON_PROPERTY_AMERICAS_ZERO_DATE = "americasZeroDate";
  private LocalDate americasZeroDate;

  public static final String JSON_PROPERTY_ASIAPACIFIC_ROLL_TIME = "asiapacificRollTime";
  private OffsetDateTime asiapacificRollTime;

  public static final String JSON_PROPERTY_ASIAPACIFIC_ZERO_DATE = "asiapacificZeroDate";
  private LocalDate asiapacificZeroDate;

  public static final String JSON_PROPERTY_EUROPE_ROLL_TIME = "europeRollTime";
  private OffsetDateTime europeRollTime;

  public static final String JSON_PROPERTY_EUROPE_ZERO_DATE = "europeZeroDate";
  private LocalDate europeZeroDate;

  public Rollover() { 
  }

  public Rollover americasRollTime(OffsetDateTime americasRollTime) {
    this.americasRollTime = americasRollTime;
    return this;
  }

   /**
   * Time of last zero date rollover for the Americas. This is in Eastern Time Zone. The date-time format is expressed as [YYYY-MM-DD]T[HH:MM:SSS], following ISO 8601.
   * @return americasRollTime
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Time of last zero date rollover for the Americas. This is in Eastern Time Zone. The date-time format is expressed as [YYYY-MM-DD]T[HH:MM:SSS], following ISO 8601.")
  @JsonProperty(JSON_PROPERTY_AMERICAS_ROLL_TIME)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public OffsetDateTime getAmericasRollTime() {
    return americasRollTime;
  }


  @JsonProperty(JSON_PROPERTY_AMERICAS_ROLL_TIME)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setAmericasRollTime(OffsetDateTime americasRollTime) {
    this.americasRollTime = americasRollTime;
  }


  public Rollover americasZeroDate(LocalDate americasZeroDate) {
    this.americasZeroDate = americasZeroDate;
    return this;
  }

   /**
   * Current relative zero date for the Americas. Date is expressed in Eastern Time and expressed as YYYY-MM-DD.
   * @return americasZeroDate
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(example = "Wed Jun 17 00:00:00 UTC 2020", value = "Current relative zero date for the Americas. Date is expressed in Eastern Time and expressed as YYYY-MM-DD.")
  @JsonProperty(JSON_PROPERTY_AMERICAS_ZERO_DATE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public LocalDate getAmericasZeroDate() {
    return americasZeroDate;
  }


  @JsonProperty(JSON_PROPERTY_AMERICAS_ZERO_DATE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setAmericasZeroDate(LocalDate americasZeroDate) {
    this.americasZeroDate = americasZeroDate;
  }


  public Rollover asiapacificRollTime(OffsetDateTime asiapacificRollTime) {
    this.asiapacificRollTime = asiapacificRollTime;
    return this;
  }

   /**
   * Time of last zero date rollover for Asia/Pacific. This is in Eastern Time Zone. The date-time format is expressed as [YYYY-MM-DD]T[HH:MM:SSS], following ISO 8601.
   * @return asiapacificRollTime
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Time of last zero date rollover for Asia/Pacific. This is in Eastern Time Zone. The date-time format is expressed as [YYYY-MM-DD]T[HH:MM:SSS], following ISO 8601.")
  @JsonProperty(JSON_PROPERTY_ASIAPACIFIC_ROLL_TIME)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public OffsetDateTime getAsiapacificRollTime() {
    return asiapacificRollTime;
  }


  @JsonProperty(JSON_PROPERTY_ASIAPACIFIC_ROLL_TIME)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setAsiapacificRollTime(OffsetDateTime asiapacificRollTime) {
    this.asiapacificRollTime = asiapacificRollTime;
  }


  public Rollover asiapacificZeroDate(LocalDate asiapacificZeroDate) {
    this.asiapacificZeroDate = asiapacificZeroDate;
    return this;
  }

   /**
   * Current relative zero date for Asia/Pacific. This is in Eastern Time Zone
   * @return asiapacificZeroDate
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(example = "Thu Jun 18 00:00:00 UTC 2020", value = "Current relative zero date for Asia/Pacific. This is in Eastern Time Zone")
  @JsonProperty(JSON_PROPERTY_ASIAPACIFIC_ZERO_DATE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public LocalDate getAsiapacificZeroDate() {
    return asiapacificZeroDate;
  }


  @JsonProperty(JSON_PROPERTY_ASIAPACIFIC_ZERO_DATE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setAsiapacificZeroDate(LocalDate asiapacificZeroDate) {
    this.asiapacificZeroDate = asiapacificZeroDate;
  }


  public Rollover europeRollTime(OffsetDateTime europeRollTime) {
    this.europeRollTime = europeRollTime;
    return this;
  }

   /**
   * Time of last zero date rollover for Europe. This is in Eastern Time Zone. The date-time format is expressed as [YYYY-MM-DD]T[HH:MM:SSS], following ISO 8601.
   * @return europeRollTime
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Time of last zero date rollover for Europe. This is in Eastern Time Zone. The date-time format is expressed as [YYYY-MM-DD]T[HH:MM:SSS], following ISO 8601.")
  @JsonProperty(JSON_PROPERTY_EUROPE_ROLL_TIME)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public OffsetDateTime getEuropeRollTime() {
    return europeRollTime;
  }


  @JsonProperty(JSON_PROPERTY_EUROPE_ROLL_TIME)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setEuropeRollTime(OffsetDateTime europeRollTime) {
    this.europeRollTime = europeRollTime;
  }


  public Rollover europeZeroDate(LocalDate europeZeroDate) {
    this.europeZeroDate = europeZeroDate;
    return this;
  }

   /**
   * Current relative zero date for Europe. This is in Eastern Time Zone
   * @return europeZeroDate
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(example = "Wed Jun 17 00:00:00 UTC 2020", value = "Current relative zero date for Europe. This is in Eastern Time Zone")
  @JsonProperty(JSON_PROPERTY_EUROPE_ZERO_DATE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)

  public LocalDate getEuropeZeroDate() {
    return europeZeroDate;
  }


  @JsonProperty(JSON_PROPERTY_EUROPE_ZERO_DATE)
  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
  public void setEuropeZeroDate(LocalDate europeZeroDate) {
    this.europeZeroDate = europeZeroDate;
  }


  /**
   * Return true if this rollover object is equal to o.
   */
  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    Rollover rollover = (Rollover) o;
    return Objects.equals(this.americasRollTime, rollover.americasRollTime) &&
        Objects.equals(this.americasZeroDate, rollover.americasZeroDate) &&
        Objects.equals(this.asiapacificRollTime, rollover.asiapacificRollTime) &&
        Objects.equals(this.asiapacificZeroDate, rollover.asiapacificZeroDate) &&
        Objects.equals(this.europeRollTime, rollover.europeRollTime) &&
        Objects.equals(this.europeZeroDate, rollover.europeZeroDate);
  }

  @Override
  public int hashCode() {
    return Objects.hash(americasRollTime, americasZeroDate, asiapacificRollTime, asiapacificZeroDate, europeRollTime, europeZeroDate);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class Rollover {\n");
    sb.append("    americasRollTime: ").append(toIndentedString(americasRollTime)).append("\n");
    sb.append("    americasZeroDate: ").append(toIndentedString(americasZeroDate)).append("\n");
    sb.append("    asiapacificRollTime: ").append(toIndentedString(asiapacificRollTime)).append("\n");
    sb.append("    asiapacificZeroDate: ").append(toIndentedString(asiapacificZeroDate)).append("\n");
    sb.append("    europeRollTime: ").append(toIndentedString(europeRollTime)).append("\n");
    sb.append("    europeZeroDate: ").append(toIndentedString(europeZeroDate)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}

