/*
 * Copyright 2014 Red Hat, Inc.
 *
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License v1.0
 *  and Apache License v2.0 which accompanies this distribution.
 *
 *  The Eclipse Public License is available at
 *  http://www.eclipse.org/legal/epl-v10.html
 *
 *  The Apache License v2.0 is available at
 *  http://www.opensource.org/licenses/apache2.0.php
 *
 *  You may elect to redistribute this code under either of these licenses.
 */

package io.vertx.serviceproxy.testmodel;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.vertx.codegen.annotations.DataObject;
import io.vertx.core.json.JsonObject;

/**
 *
 * The Json properties are used to reproduce https://github.com/vert-x3/vertx-service-proxy/issues/56
 *
 * @author <a href="mailto:nscavell@redhat.com">Nick Scavelli</a>
 */
@DataObject
public class TestDataObject {

  @JsonProperty("number")
  private int number;

  @JsonProperty("string")
  private String string;
  private boolean bool;

  public TestDataObject() {
  }


  public TestDataObject(JsonObject json) {
    this.number = json.getInteger("number");
    this.string = json.getString("string");
    this.bool = json.getBoolean("bool");
  }

  public JsonObject toJson() {
    return new JsonObject()
      .put("number", number)
      .put("string", string)
      .put("bool", bool);
  }

  public int getNumber() {
    return number;
  }

  public TestDataObject setNumber(int number) {
    this.number = number;
    return this;
  }

  public String getString() {
    return string;
  }

  public TestDataObject setString(String string) {
    this.string = string;
    return this;
  }

  public boolean isBool() {
    return bool;
  }

  public TestDataObject setBool(boolean bool) {
    this.bool = bool;
    return this;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    TestDataObject that = (TestDataObject) o;

    if (bool != that.bool) return false;
    if (number != that.number) return false;
    if (!string.equals(that.string)) return false;

    return true;
  }

  @Override
  public int hashCode() {
    int result = number;
    result = 31 * result + string.hashCode();
    result = 31 * result + (bool ? 1 : 0);
    return result;
  }
}
