package org.hibernate.envers.test.integration.inheritance.single.discriminatorformula;

import org.hibernate.envers.Audited;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

/**
 * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
 */
@Entity
@DiscriminatorValue(ClassTypeEntity.CHILD_TYPE)
@Audited
public class ChildEntity extends ParentEntity {
    private String specificData;

    public ChildEntity() {
    }

    public ChildEntity(Long typeId, String data, String specificData) {
        super(typeId, data);
        this.specificData = specificData;
    }

    public ChildEntity(Long id, Long typeId, String data, String specificData) {
        super(id, typeId, data);
        this.specificData = specificData;
    }

    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof ChildEntity)) return false;
        if (!super.equals(o)) return false;

        ChildEntity that = (ChildEntity) o;

        if (specificData != null ? !specificData.equals(that.specificData) : that.specificData != null) return false;

        return true;
    }

    public int hashCode() {
        int result = super.hashCode();
        result = 31 * result + (specificData != null ? specificData.hashCode() : 0);
        return result;
    }

    public String toString() {
        return "ChildEntity(id = " + id + ", typeId = " + typeId + ", data = " + data + ", specificData = " + specificData + ")";
    }

    public String getSpecificData() {
        return specificData;
    }

    public void setSpecificData(String specificData) {
        this.specificData = specificData;
    }
}
