/*
 * InfluxDB OSS API Service
 * The InfluxDB v2 API provides a programmatic interface for all interactions with InfluxDB. Access the InfluxDB API using the `/api/v2/` endpoint. 
 *
 * OpenAPI spec version: 2.0.0
 * 
 *
 * 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.influxdb.client.domain;

import java.util.Objects;
import java.util.Arrays;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import com.influxdb.client.domain.DashboardQuery;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * MosaicViewProperties
 */

public class MosaicViewProperties extends ViewProperties {
  public static final String SERIALIZED_NAME_TIME_FORMAT = "timeFormat";
  @SerializedName(SERIALIZED_NAME_TIME_FORMAT)
  private String timeFormat;

  /**
   * Gets or Sets type
   */
  @JsonAdapter(TypeEnum.Adapter.class)
  public enum TypeEnum {
    MOSAIC("mosaic");

    private String value;

    TypeEnum(String value) {
      this.value = value;
    }

    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    public static TypeEnum fromValue(String text) {
      for (TypeEnum b : TypeEnum.values()) {
        if (String.valueOf(b.value).equals(text)) {
          return b;
        }
      }
      return null;
    }

    public static class Adapter extends TypeAdapter<TypeEnum> {
      @Override
      public void write(final JsonWriter jsonWriter, final TypeEnum enumeration) throws IOException {
        jsonWriter.value(enumeration.getValue());
      }

      @Override
      public TypeEnum read(final JsonReader jsonReader) throws IOException {
        String value = jsonReader.nextString();
        return TypeEnum.fromValue(String.valueOf(value));
      }
    }
  }

  public static final String SERIALIZED_NAME_TYPE = "type";
  @SerializedName(SERIALIZED_NAME_TYPE)
  private TypeEnum type = TypeEnum.MOSAIC;

  public static final String SERIALIZED_NAME_QUERIES = "queries";
  @SerializedName(SERIALIZED_NAME_QUERIES)
  private List<DashboardQuery> queries = new ArrayList<>();

  public static final String SERIALIZED_NAME_COLORS = "colors";
  @SerializedName(SERIALIZED_NAME_COLORS)
  private List<String> colors = new ArrayList<>();

  /**
   * Gets or Sets shape
   */
  @JsonAdapter(ShapeEnum.Adapter.class)
  public enum ShapeEnum {
    CHRONOGRAF_V2("chronograf-v2");

    private String value;

    ShapeEnum(String value) {
      this.value = value;
    }

    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    public static ShapeEnum fromValue(String text) {
      for (ShapeEnum b : ShapeEnum.values()) {
        if (String.valueOf(b.value).equals(text)) {
          return b;
        }
      }
      return null;
    }

    public static class Adapter extends TypeAdapter<ShapeEnum> {
      @Override
      public void write(final JsonWriter jsonWriter, final ShapeEnum enumeration) throws IOException {
        jsonWriter.value(enumeration.getValue());
      }

      @Override
      public ShapeEnum read(final JsonReader jsonReader) throws IOException {
        String value = jsonReader.nextString();
        return ShapeEnum.fromValue(String.valueOf(value));
      }
    }
  }

  public static final String SERIALIZED_NAME_SHAPE = "shape";
  @SerializedName(SERIALIZED_NAME_SHAPE)
  private ShapeEnum shape = ShapeEnum.CHRONOGRAF_V2;

  public static final String SERIALIZED_NAME_NOTE = "note";
  @SerializedName(SERIALIZED_NAME_NOTE)
  private String note;

  public static final String SERIALIZED_NAME_SHOW_NOTE_WHEN_EMPTY = "showNoteWhenEmpty";
  @SerializedName(SERIALIZED_NAME_SHOW_NOTE_WHEN_EMPTY)
  private Boolean showNoteWhenEmpty;

  public static final String SERIALIZED_NAME_X_COLUMN = "xColumn";
  @SerializedName(SERIALIZED_NAME_X_COLUMN)
  private String xColumn;

  public static final String SERIALIZED_NAME_GENERATE_X_AXIS_TICKS = "generateXAxisTicks";
  @SerializedName(SERIALIZED_NAME_GENERATE_X_AXIS_TICKS)
  private List<String> generateXAxisTicks = new ArrayList<>();

  public static final String SERIALIZED_NAME_X_TOTAL_TICKS = "xTotalTicks";
  @SerializedName(SERIALIZED_NAME_X_TOTAL_TICKS)
  private Integer xTotalTicks;

  public static final String SERIALIZED_NAME_X_TICK_START = "xTickStart";
  @SerializedName(SERIALIZED_NAME_X_TICK_START)
  private Float xTickStart;

  public static final String SERIALIZED_NAME_X_TICK_STEP = "xTickStep";
  @SerializedName(SERIALIZED_NAME_X_TICK_STEP)
  private Float xTickStep;

  public static final String SERIALIZED_NAME_Y_LABEL_COLUMN_SEPARATOR = "yLabelColumnSeparator";
  @SerializedName(SERIALIZED_NAME_Y_LABEL_COLUMN_SEPARATOR)
  private String yLabelColumnSeparator;

  public static final String SERIALIZED_NAME_Y_LABEL_COLUMNS = "yLabelColumns";
  @SerializedName(SERIALIZED_NAME_Y_LABEL_COLUMNS)
  private List<String> yLabelColumns = new ArrayList<>();

  public static final String SERIALIZED_NAME_Y_SERIES_COLUMNS = "ySeriesColumns";
  @SerializedName(SERIALIZED_NAME_Y_SERIES_COLUMNS)
  private List<String> ySeriesColumns = new ArrayList<>();

  public static final String SERIALIZED_NAME_FILL_COLUMNS = "fillColumns";
  @SerializedName(SERIALIZED_NAME_FILL_COLUMNS)
  private List<String> fillColumns = new ArrayList<>();

  public static final String SERIALIZED_NAME_X_DOMAIN = "xDomain";
  @SerializedName(SERIALIZED_NAME_X_DOMAIN)
  private List<BigDecimal> xDomain = new ArrayList<>();

  public static final String SERIALIZED_NAME_Y_DOMAIN = "yDomain";
  @SerializedName(SERIALIZED_NAME_Y_DOMAIN)
  private List<BigDecimal> yDomain = new ArrayList<>();

  public static final String SERIALIZED_NAME_X_AXIS_LABEL = "xAxisLabel";
  @SerializedName(SERIALIZED_NAME_X_AXIS_LABEL)
  private String xAxisLabel;

  public static final String SERIALIZED_NAME_Y_AXIS_LABEL = "yAxisLabel";
  @SerializedName(SERIALIZED_NAME_Y_AXIS_LABEL)
  private String yAxisLabel;

  public static final String SERIALIZED_NAME_X_PREFIX = "xPrefix";
  @SerializedName(SERIALIZED_NAME_X_PREFIX)
  private String xPrefix;

  public static final String SERIALIZED_NAME_X_SUFFIX = "xSuffix";
  @SerializedName(SERIALIZED_NAME_X_SUFFIX)
  private String xSuffix;

  public static final String SERIALIZED_NAME_Y_PREFIX = "yPrefix";
  @SerializedName(SERIALIZED_NAME_Y_PREFIX)
  private String yPrefix;

  public static final String SERIALIZED_NAME_Y_SUFFIX = "ySuffix";
  @SerializedName(SERIALIZED_NAME_Y_SUFFIX)
  private String ySuffix;

  /**
   * Gets or Sets hoverDimension
   */
  @JsonAdapter(HoverDimensionEnum.Adapter.class)
  public enum HoverDimensionEnum {
    AUTO("auto"),
    
    X("x"),
    
    Y("y"),
    
    XY("xy");

    private String value;

    HoverDimensionEnum(String value) {
      this.value = value;
    }

    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    public static HoverDimensionEnum fromValue(String text) {
      for (HoverDimensionEnum b : HoverDimensionEnum.values()) {
        if (String.valueOf(b.value).equals(text)) {
          return b;
        }
      }
      return null;
    }

    public static class Adapter extends TypeAdapter<HoverDimensionEnum> {
      @Override
      public void write(final JsonWriter jsonWriter, final HoverDimensionEnum enumeration) throws IOException {
        jsonWriter.value(enumeration.getValue());
      }

      @Override
      public HoverDimensionEnum read(final JsonReader jsonReader) throws IOException {
        String value = jsonReader.nextString();
        return HoverDimensionEnum.fromValue(String.valueOf(value));
      }
    }
  }

  public static final String SERIALIZED_NAME_HOVER_DIMENSION = "hoverDimension";
  @SerializedName(SERIALIZED_NAME_HOVER_DIMENSION)
  private HoverDimensionEnum hoverDimension;

  public static final String SERIALIZED_NAME_LEGEND_COLORIZE_ROWS = "legendColorizeRows";
  @SerializedName(SERIALIZED_NAME_LEGEND_COLORIZE_ROWS)
  private Boolean legendColorizeRows;

  public static final String SERIALIZED_NAME_LEGEND_HIDE = "legendHide";
  @SerializedName(SERIALIZED_NAME_LEGEND_HIDE)
  private Boolean legendHide;

  public static final String SERIALIZED_NAME_LEGEND_OPACITY = "legendOpacity";
  @SerializedName(SERIALIZED_NAME_LEGEND_OPACITY)
  private Float legendOpacity;

  public static final String SERIALIZED_NAME_LEGEND_ORIENTATION_THRESHOLD = "legendOrientationThreshold";
  @SerializedName(SERIALIZED_NAME_LEGEND_ORIENTATION_THRESHOLD)
  private Integer legendOrientationThreshold;

  public MosaicViewProperties timeFormat(String timeFormat) {
    this.timeFormat = timeFormat;
    return this;
  }

   /**
   * Get timeFormat
   * @return timeFormat
  **/
  public String getTimeFormat() {
    return timeFormat;
  }

  public void setTimeFormat(String timeFormat) {
    this.timeFormat = timeFormat;
  }

   /**
   * Get type
   * @return type
  **/
  public TypeEnum getType() {
    return type;
  }

  public MosaicViewProperties queries(List<DashboardQuery> queries) {
    this.queries = queries;
    return this;
  }

  public MosaicViewProperties addQueriesItem(DashboardQuery queriesItem) {
    this.queries.add(queriesItem);
    return this;
  }

   /**
   * Get queries
   * @return queries
  **/
  public List<DashboardQuery> getQueries() {
    return queries;
  }

  public void setQueries(List<DashboardQuery> queries) {
    this.queries = queries;
  }

  public MosaicViewProperties colors(List<String> colors) {
    this.colors = colors;
    return this;
  }

  public MosaicViewProperties addColorsItem(String colorsItem) {
    this.colors.add(colorsItem);
    return this;
  }

   /**
   * Colors define color encoding of data into a visualization
   * @return colors
  **/
  public List<String> getColors() {
    return colors;
  }

  public void setColors(List<String> colors) {
    this.colors = colors;
  }

   /**
   * Get shape
   * @return shape
  **/
  public ShapeEnum getShape() {
    return shape;
  }

  public MosaicViewProperties note(String note) {
    this.note = note;
    return this;
  }

   /**
   * Get note
   * @return note
  **/
  public String getNote() {
    return note;
  }

  public void setNote(String note) {
    this.note = note;
  }

  public MosaicViewProperties showNoteWhenEmpty(Boolean showNoteWhenEmpty) {
    this.showNoteWhenEmpty = showNoteWhenEmpty;
    return this;
  }

   /**
   * If true, will display note when empty
   * @return showNoteWhenEmpty
  **/
  public Boolean getShowNoteWhenEmpty() {
    return showNoteWhenEmpty;
  }

  public void setShowNoteWhenEmpty(Boolean showNoteWhenEmpty) {
    this.showNoteWhenEmpty = showNoteWhenEmpty;
  }

  public MosaicViewProperties xColumn(String xColumn) {
    this.xColumn = xColumn;
    return this;
  }

   /**
   * Get xColumn
   * @return xColumn
  **/
  public String getXColumn() {
    return xColumn;
  }

  public void setXColumn(String xColumn) {
    this.xColumn = xColumn;
  }

  public MosaicViewProperties generateXAxisTicks(List<String> generateXAxisTicks) {
    this.generateXAxisTicks = generateXAxisTicks;
    return this;
  }

  public MosaicViewProperties addGenerateXAxisTicksItem(String generateXAxisTicksItem) {
    if (this.generateXAxisTicks == null) {
      this.generateXAxisTicks = new ArrayList<>();
    }
    this.generateXAxisTicks.add(generateXAxisTicksItem);
    return this;
  }

   /**
   * Get generateXAxisTicks
   * @return generateXAxisTicks
  **/
  public List<String> getGenerateXAxisTicks() {
    return generateXAxisTicks;
  }

  public void setGenerateXAxisTicks(List<String> generateXAxisTicks) {
    this.generateXAxisTicks = generateXAxisTicks;
  }

  public MosaicViewProperties xTotalTicks(Integer xTotalTicks) {
    this.xTotalTicks = xTotalTicks;
    return this;
  }

   /**
   * Get xTotalTicks
   * @return xTotalTicks
  **/
  public Integer getXTotalTicks() {
    return xTotalTicks;
  }

  public void setXTotalTicks(Integer xTotalTicks) {
    this.xTotalTicks = xTotalTicks;
  }

  public MosaicViewProperties xTickStart(Float xTickStart) {
    this.xTickStart = xTickStart;
    return this;
  }

   /**
   * Get xTickStart
   * @return xTickStart
  **/
  public Float getXTickStart() {
    return xTickStart;
  }

  public void setXTickStart(Float xTickStart) {
    this.xTickStart = xTickStart;
  }

  public MosaicViewProperties xTickStep(Float xTickStep) {
    this.xTickStep = xTickStep;
    return this;
  }

   /**
   * Get xTickStep
   * @return xTickStep
  **/
  public Float getXTickStep() {
    return xTickStep;
  }

  public void setXTickStep(Float xTickStep) {
    this.xTickStep = xTickStep;
  }

  public MosaicViewProperties yLabelColumnSeparator(String yLabelColumnSeparator) {
    this.yLabelColumnSeparator = yLabelColumnSeparator;
    return this;
  }

   /**
   * Get yLabelColumnSeparator
   * @return yLabelColumnSeparator
  **/
  public String getYLabelColumnSeparator() {
    return yLabelColumnSeparator;
  }

  public void setYLabelColumnSeparator(String yLabelColumnSeparator) {
    this.yLabelColumnSeparator = yLabelColumnSeparator;
  }

  public MosaicViewProperties yLabelColumns(List<String> yLabelColumns) {
    this.yLabelColumns = yLabelColumns;
    return this;
  }

  public MosaicViewProperties addYLabelColumnsItem(String yLabelColumnsItem) {
    if (this.yLabelColumns == null) {
      this.yLabelColumns = new ArrayList<>();
    }
    this.yLabelColumns.add(yLabelColumnsItem);
    return this;
  }

   /**
   * Get yLabelColumns
   * @return yLabelColumns
  **/
  public List<String> getYLabelColumns() {
    return yLabelColumns;
  }

  public void setYLabelColumns(List<String> yLabelColumns) {
    this.yLabelColumns = yLabelColumns;
  }

  public MosaicViewProperties ySeriesColumns(List<String> ySeriesColumns) {
    this.ySeriesColumns = ySeriesColumns;
    return this;
  }

  public MosaicViewProperties addYSeriesColumnsItem(String ySeriesColumnsItem) {
    this.ySeriesColumns.add(ySeriesColumnsItem);
    return this;
  }

   /**
   * Get ySeriesColumns
   * @return ySeriesColumns
  **/
  public List<String> getYSeriesColumns() {
    return ySeriesColumns;
  }

  public void setYSeriesColumns(List<String> ySeriesColumns) {
    this.ySeriesColumns = ySeriesColumns;
  }

  public MosaicViewProperties fillColumns(List<String> fillColumns) {
    this.fillColumns = fillColumns;
    return this;
  }

  public MosaicViewProperties addFillColumnsItem(String fillColumnsItem) {
    this.fillColumns.add(fillColumnsItem);
    return this;
  }

   /**
   * Get fillColumns
   * @return fillColumns
  **/
  public List<String> getFillColumns() {
    return fillColumns;
  }

  public void setFillColumns(List<String> fillColumns) {
    this.fillColumns = fillColumns;
  }

  public MosaicViewProperties xDomain(List<BigDecimal> xDomain) {
    this.xDomain = xDomain;
    return this;
  }

  public MosaicViewProperties addXDomainItem(BigDecimal xDomainItem) {
    this.xDomain.add(xDomainItem);
    return this;
  }

   /**
   * Get xDomain
   * @return xDomain
  **/
  public List<BigDecimal> getXDomain() {
    return xDomain;
  }

  public void setXDomain(List<BigDecimal> xDomain) {
    this.xDomain = xDomain;
  }

  public MosaicViewProperties yDomain(List<BigDecimal> yDomain) {
    this.yDomain = yDomain;
    return this;
  }

  public MosaicViewProperties addYDomainItem(BigDecimal yDomainItem) {
    this.yDomain.add(yDomainItem);
    return this;
  }

   /**
   * Get yDomain
   * @return yDomain
  **/
  public List<BigDecimal> getYDomain() {
    return yDomain;
  }

  public void setYDomain(List<BigDecimal> yDomain) {
    this.yDomain = yDomain;
  }

  public MosaicViewProperties xAxisLabel(String xAxisLabel) {
    this.xAxisLabel = xAxisLabel;
    return this;
  }

   /**
   * Get xAxisLabel
   * @return xAxisLabel
  **/
  public String getXAxisLabel() {
    return xAxisLabel;
  }

  public void setXAxisLabel(String xAxisLabel) {
    this.xAxisLabel = xAxisLabel;
  }

  public MosaicViewProperties yAxisLabel(String yAxisLabel) {
    this.yAxisLabel = yAxisLabel;
    return this;
  }

   /**
   * Get yAxisLabel
   * @return yAxisLabel
  **/
  public String getYAxisLabel() {
    return yAxisLabel;
  }

  public void setYAxisLabel(String yAxisLabel) {
    this.yAxisLabel = yAxisLabel;
  }

  public MosaicViewProperties xPrefix(String xPrefix) {
    this.xPrefix = xPrefix;
    return this;
  }

   /**
   * Get xPrefix
   * @return xPrefix
  **/
  public String getXPrefix() {
    return xPrefix;
  }

  public void setXPrefix(String xPrefix) {
    this.xPrefix = xPrefix;
  }

  public MosaicViewProperties xSuffix(String xSuffix) {
    this.xSuffix = xSuffix;
    return this;
  }

   /**
   * Get xSuffix
   * @return xSuffix
  **/
  public String getXSuffix() {
    return xSuffix;
  }

  public void setXSuffix(String xSuffix) {
    this.xSuffix = xSuffix;
  }

  public MosaicViewProperties yPrefix(String yPrefix) {
    this.yPrefix = yPrefix;
    return this;
  }

   /**
   * Get yPrefix
   * @return yPrefix
  **/
  public String getYPrefix() {
    return yPrefix;
  }

  public void setYPrefix(String yPrefix) {
    this.yPrefix = yPrefix;
  }

  public MosaicViewProperties ySuffix(String ySuffix) {
    this.ySuffix = ySuffix;
    return this;
  }

   /**
   * Get ySuffix
   * @return ySuffix
  **/
  public String getYSuffix() {
    return ySuffix;
  }

  public void setYSuffix(String ySuffix) {
    this.ySuffix = ySuffix;
  }

  public MosaicViewProperties hoverDimension(HoverDimensionEnum hoverDimension) {
    this.hoverDimension = hoverDimension;
    return this;
  }

   /**
   * Get hoverDimension
   * @return hoverDimension
  **/
  public HoverDimensionEnum getHoverDimension() {
    return hoverDimension;
  }

  public void setHoverDimension(HoverDimensionEnum hoverDimension) {
    this.hoverDimension = hoverDimension;
  }

  public MosaicViewProperties legendColorizeRows(Boolean legendColorizeRows) {
    this.legendColorizeRows = legendColorizeRows;
    return this;
  }

   /**
   * Get legendColorizeRows
   * @return legendColorizeRows
  **/
  public Boolean getLegendColorizeRows() {
    return legendColorizeRows;
  }

  public void setLegendColorizeRows(Boolean legendColorizeRows) {
    this.legendColorizeRows = legendColorizeRows;
  }

  public MosaicViewProperties legendHide(Boolean legendHide) {
    this.legendHide = legendHide;
    return this;
  }

   /**
   * Get legendHide
   * @return legendHide
  **/
  public Boolean getLegendHide() {
    return legendHide;
  }

  public void setLegendHide(Boolean legendHide) {
    this.legendHide = legendHide;
  }

  public MosaicViewProperties legendOpacity(Float legendOpacity) {
    this.legendOpacity = legendOpacity;
    return this;
  }

   /**
   * Get legendOpacity
   * @return legendOpacity
  **/
  public Float getLegendOpacity() {
    return legendOpacity;
  }

  public void setLegendOpacity(Float legendOpacity) {
    this.legendOpacity = legendOpacity;
  }

  public MosaicViewProperties legendOrientationThreshold(Integer legendOrientationThreshold) {
    this.legendOrientationThreshold = legendOrientationThreshold;
    return this;
  }

   /**
   * Get legendOrientationThreshold
   * @return legendOrientationThreshold
  **/
  public Integer getLegendOrientationThreshold() {
    return legendOrientationThreshold;
  }

  public void setLegendOrientationThreshold(Integer legendOrientationThreshold) {
    this.legendOrientationThreshold = legendOrientationThreshold;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    MosaicViewProperties mosaicViewProperties = (MosaicViewProperties) o;
    return Objects.equals(this.timeFormat, mosaicViewProperties.timeFormat) &&
        Objects.equals(this.type, mosaicViewProperties.type) &&
        Objects.equals(this.queries, mosaicViewProperties.queries) &&
        Objects.equals(this.colors, mosaicViewProperties.colors) &&
        Objects.equals(this.shape, mosaicViewProperties.shape) &&
        Objects.equals(this.note, mosaicViewProperties.note) &&
        Objects.equals(this.showNoteWhenEmpty, mosaicViewProperties.showNoteWhenEmpty) &&
        Objects.equals(this.xColumn, mosaicViewProperties.xColumn) &&
        Objects.equals(this.generateXAxisTicks, mosaicViewProperties.generateXAxisTicks) &&
        Objects.equals(this.xTotalTicks, mosaicViewProperties.xTotalTicks) &&
        Objects.equals(this.xTickStart, mosaicViewProperties.xTickStart) &&
        Objects.equals(this.xTickStep, mosaicViewProperties.xTickStep) &&
        Objects.equals(this.yLabelColumnSeparator, mosaicViewProperties.yLabelColumnSeparator) &&
        Objects.equals(this.yLabelColumns, mosaicViewProperties.yLabelColumns) &&
        Objects.equals(this.ySeriesColumns, mosaicViewProperties.ySeriesColumns) &&
        Objects.equals(this.fillColumns, mosaicViewProperties.fillColumns) &&
        Objects.equals(this.xDomain, mosaicViewProperties.xDomain) &&
        Objects.equals(this.yDomain, mosaicViewProperties.yDomain) &&
        Objects.equals(this.xAxisLabel, mosaicViewProperties.xAxisLabel) &&
        Objects.equals(this.yAxisLabel, mosaicViewProperties.yAxisLabel) &&
        Objects.equals(this.xPrefix, mosaicViewProperties.xPrefix) &&
        Objects.equals(this.xSuffix, mosaicViewProperties.xSuffix) &&
        Objects.equals(this.yPrefix, mosaicViewProperties.yPrefix) &&
        Objects.equals(this.ySuffix, mosaicViewProperties.ySuffix) &&
        Objects.equals(this.hoverDimension, mosaicViewProperties.hoverDimension) &&
        Objects.equals(this.legendColorizeRows, mosaicViewProperties.legendColorizeRows) &&
        Objects.equals(this.legendHide, mosaicViewProperties.legendHide) &&
        Objects.equals(this.legendOpacity, mosaicViewProperties.legendOpacity) &&
        Objects.equals(this.legendOrientationThreshold, mosaicViewProperties.legendOrientationThreshold) &&
        super.equals(o);
  }

  @Override
  public int hashCode() {
    return Objects.hash(timeFormat, type, queries, colors, shape, note, showNoteWhenEmpty, xColumn, generateXAxisTicks, xTotalTicks, xTickStart, xTickStep, yLabelColumnSeparator, yLabelColumns, ySeriesColumns, fillColumns, xDomain, yDomain, xAxisLabel, yAxisLabel, xPrefix, xSuffix, yPrefix, ySuffix, hoverDimension, legendColorizeRows, legendHide, legendOpacity, legendOrientationThreshold, super.hashCode());
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class MosaicViewProperties {\n");
    sb.append("    ").append(toIndentedString(super.toString())).append("\n");
    sb.append("    timeFormat: ").append(toIndentedString(timeFormat)).append("\n");
    sb.append("    type: ").append(toIndentedString(type)).append("\n");
    sb.append("    queries: ").append(toIndentedString(queries)).append("\n");
    sb.append("    colors: ").append(toIndentedString(colors)).append("\n");
    sb.append("    shape: ").append(toIndentedString(shape)).append("\n");
    sb.append("    note: ").append(toIndentedString(note)).append("\n");
    sb.append("    showNoteWhenEmpty: ").append(toIndentedString(showNoteWhenEmpty)).append("\n");
    sb.append("    xColumn: ").append(toIndentedString(xColumn)).append("\n");
    sb.append("    generateXAxisTicks: ").append(toIndentedString(generateXAxisTicks)).append("\n");
    sb.append("    xTotalTicks: ").append(toIndentedString(xTotalTicks)).append("\n");
    sb.append("    xTickStart: ").append(toIndentedString(xTickStart)).append("\n");
    sb.append("    xTickStep: ").append(toIndentedString(xTickStep)).append("\n");
    sb.append("    yLabelColumnSeparator: ").append(toIndentedString(yLabelColumnSeparator)).append("\n");
    sb.append("    yLabelColumns: ").append(toIndentedString(yLabelColumns)).append("\n");
    sb.append("    ySeriesColumns: ").append(toIndentedString(ySeriesColumns)).append("\n");
    sb.append("    fillColumns: ").append(toIndentedString(fillColumns)).append("\n");
    sb.append("    xDomain: ").append(toIndentedString(xDomain)).append("\n");
    sb.append("    yDomain: ").append(toIndentedString(yDomain)).append("\n");
    sb.append("    xAxisLabel: ").append(toIndentedString(xAxisLabel)).append("\n");
    sb.append("    yAxisLabel: ").append(toIndentedString(yAxisLabel)).append("\n");
    sb.append("    xPrefix: ").append(toIndentedString(xPrefix)).append("\n");
    sb.append("    xSuffix: ").append(toIndentedString(xSuffix)).append("\n");
    sb.append("    yPrefix: ").append(toIndentedString(yPrefix)).append("\n");
    sb.append("    ySuffix: ").append(toIndentedString(ySuffix)).append("\n");
    sb.append("    hoverDimension: ").append(toIndentedString(hoverDimension)).append("\n");
    sb.append("    legendColorizeRows: ").append(toIndentedString(legendColorizeRows)).append("\n");
    sb.append("    legendHide: ").append(toIndentedString(legendHide)).append("\n");
    sb.append("    legendOpacity: ").append(toIndentedString(legendOpacity)).append("\n");
    sb.append("    legendOrientationThreshold: ").append(toIndentedString(legendOrientationThreshold)).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(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}

