/*
 * This file is generated by jOOQ.
 */
package cn.vertxup.atom.domain.tables.pojos;


import cn.vertxup.atom.domain.tables.interfaces.IMModel;
import io.github.jklingsporn.vertx.jooq.shared.internal.VertxPojo;

import java.time.LocalDateTime;
/**
 * This class is generated by jOOQ.
 */
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class MModel implements VertxPojo, IMModel {

    private static final long serialVersionUID = 1L;

    private String key;
    private String identifier;
    private String namespace;
    private String name;
    private String alias;
    private String type;
    private String comments;
    private String categoryTree;
    private String categoryId;
    private String ruleUnique;
    private Boolean isTrack;
    private String spider;
    private String spiderComponent;
    private String sigma;
    private String language;
    private Boolean active;
    private String metadata;
    private LocalDateTime createdAt;
    private String createdBy;
    private LocalDateTime updatedAt;
    private String updatedBy;

    public MModel() {}

    public MModel(IMModel value) {
        this.key = value.getKey();
        this.identifier = value.getIdentifier();
        this.namespace = value.getNamespace();
        this.name = value.getName();
        this.alias = value.getAlias();
        this.type = value.getType();
        this.comments = value.getComments();
        this.categoryTree = value.getCategoryTree();
        this.categoryId = value.getCategoryId();
        this.ruleUnique = value.getRuleUnique();
        this.isTrack = value.getIsTrack();
        this.spider = value.getSpider();
        this.spiderComponent = value.getSpiderComponent();
        this.sigma = value.getSigma();
        this.language = value.getLanguage();
        this.active = value.getActive();
        this.metadata = value.getMetadata();
        this.createdAt = value.getCreatedAt();
        this.createdBy = value.getCreatedBy();
        this.updatedAt = value.getUpdatedAt();
        this.updatedBy = value.getUpdatedBy();
    }

    public MModel(
        String key,
        String identifier,
        String namespace,
        String name,
        String alias,
        String type,
        String comments,
        String categoryTree,
        String categoryId,
        String ruleUnique,
        Boolean isTrack,
        String spider,
        String spiderComponent,
        String sigma,
        String language,
        Boolean active,
        String metadata,
        LocalDateTime createdAt,
        String createdBy,
        LocalDateTime updatedAt,
        String updatedBy
    ) {
        this.key = key;
        this.identifier = identifier;
        this.namespace = namespace;
        this.name = name;
        this.alias = alias;
        this.type = type;
        this.comments = comments;
        this.categoryTree = categoryTree;
        this.categoryId = categoryId;
        this.ruleUnique = ruleUnique;
        this.isTrack = isTrack;
        this.spider = spider;
        this.spiderComponent = spiderComponent;
        this.sigma = sigma;
        this.language = language;
        this.active = active;
        this.metadata = metadata;
        this.createdAt = createdAt;
        this.createdBy = createdBy;
        this.updatedAt = updatedAt;
        this.updatedBy = updatedBy;
    }

        public MModel(io.vertx.core.json.JsonObject json) {
                this();
                fromJson(json);
        }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.KEY</code>. 「key」- 模型ID
     */
    @Override
    public String getKey() {
        return this.key;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.KEY</code>. 「key」- 模型ID
     */
    @Override
    public MModel setKey(String key) {
        this.key = key;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.IDENTIFIER</code>. 「identifier」-
     * 当前模型全局唯一ID
     */
    @Override
    public String getIdentifier() {
        return this.identifier;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.IDENTIFIER</code>. 「identifier」-
     * 当前模型全局唯一ID
     */
    @Override
    public MModel setIdentifier(String identifier) {
        this.identifier = identifier;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.NAMESPACE</code>. 「namespace」-
     * 当前模型使用的名空间
     */
    @Override
    public String getNamespace() {
        return this.namespace;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.NAMESPACE</code>. 「namespace」-
     * 当前模型使用的名空间
     */
    @Override
    public MModel setNamespace(String namespace) {
        this.namespace = namespace;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.NAME</code>. 「name」- 当前模型的名称
     */
    @Override
    public String getName() {
        return this.name;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.NAME</code>. 「name」- 当前模型的名称
     */
    @Override
    public MModel setName(String name) {
        this.name = name;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.ALIAS</code>. 「alias」- 模型别名（业务名）
     */
    @Override
    public String getAlias() {
        return this.alias;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.ALIAS</code>. 「alias」- 模型别名（业务名）
     */
    @Override
    public MModel setAlias(String alias) {
        this.alias = alias;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.TYPE</code>. 「type」- 当前模型的类型信息
     */
    @Override
    public String getType() {
        return this.type;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.TYPE</code>. 「type」- 当前模型的类型信息
     */
    @Override
    public MModel setType(String type) {
        this.type = type;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.COMMENTS</code>. 「comments」-
     * 当前模型的描述信息
     */
    @Override
    public String getComments() {
        return this.comments;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.COMMENTS</code>. 「comments」-
     * 当前模型的描述信息
     */
    @Override
    public MModel setComments(String comments) {
        this.comments = comments;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.CATEGORY_TREE</code>. 「categoryTree」-
     * 当前模型所属的类型树
     */
    @Override
    public String getCategoryTree() {
        return this.categoryTree;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.CATEGORY_TREE</code>. 「categoryTree」-
     * 当前模型所属的类型树
     */
    @Override
    public MModel setCategoryTree(String categoryTree) {
        this.categoryTree = categoryTree;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.CATEGORY_ID</code>. 「categoryId」-
     * 关联的类型的ID
     */
    @Override
    public String getCategoryId() {
        return this.categoryId;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.CATEGORY_ID</code>. 「categoryId」-
     * 关联的类型的ID
     */
    @Override
    public MModel setCategoryId(String categoryId) {
        this.categoryId = categoryId;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.RULE_UNIQUE</code>. 「ruleUnique」-
     * 当前模型的标识规则
     */
    @Override
    public String getRuleUnique() {
        return this.ruleUnique;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.RULE_UNIQUE</code>. 「ruleUnique」-
     * 当前模型的标识规则
     */
    @Override
    public MModel setRuleUnique(String ruleUnique) {
        this.ruleUnique = ruleUnique;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.IS_TRACK</code>. 「isTrack」- 该组件为
     * track 表示执行 ACTIVITY 的变更监控功能（生成变更历史）
     */
    @Override
    public Boolean getIsTrack() {
        return this.isTrack;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.IS_TRACK</code>. 「isTrack」- 该组件为
     * track 表示执行 ACTIVITY 的变更监控功能（生成变更历史）
     */
    @Override
    public MModel setIsTrack(Boolean isTrack) {
        this.isTrack = isTrack;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.SPIDER</code>. 「spider」-
     * 主图格式，存储当前模型为起点的图层Json数据，每个模型只有一张
     */
    @Override
    public String getSpider() {
        return this.spider;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.SPIDER</code>. 「spider」-
     * 主图格式，存储当前模型为起点的图层Json数据，每个模型只有一张
     */
    @Override
    public MModel setSpider(String spider) {
        this.spider = spider;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.SPIDER_COMPONENT</code>.
     * 「spiderComponent」- 在主图格式上存在的插件信息，用于处理主图格式的内容
     */
    @Override
    public String getSpiderComponent() {
        return this.spiderComponent;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.SPIDER_COMPONENT</code>.
     * 「spiderComponent」- 在主图格式上存在的插件信息，用于处理主图格式的内容
     */
    @Override
    public MModel setSpiderComponent(String spiderComponent) {
        this.spiderComponent = spiderComponent;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.SIGMA</code>. 「sigma」- 统一标识
     */
    @Override
    public String getSigma() {
        return this.sigma;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.SIGMA</code>. 「sigma」- 统一标识
     */
    @Override
    public MModel setSigma(String sigma) {
        this.sigma = sigma;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.LANGUAGE</code>. 「language」- 使用的语言
     */
    @Override
    public String getLanguage() {
        return this.language;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.LANGUAGE</code>. 「language」- 使用的语言
     */
    @Override
    public MModel setLanguage(String language) {
        this.language = language;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.ACTIVE</code>. 「active」- 是否启用
     */
    @Override
    public Boolean getActive() {
        return this.active;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.ACTIVE</code>. 「active」- 是否启用
     */
    @Override
    public MModel setActive(Boolean active) {
        this.active = active;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.METADATA</code>. 「metadata」- 附加配置数据
     */
    @Override
    public String getMetadata() {
        return this.metadata;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.METADATA</code>. 「metadata」- 附加配置数据
     */
    @Override
    public MModel setMetadata(String metadata) {
        this.metadata = metadata;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.CREATED_AT</code>. 「createdAt」- 创建时间
     */
    @Override
    public LocalDateTime getCreatedAt() {
        return this.createdAt;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.CREATED_AT</code>. 「createdAt」- 创建时间
     */
    @Override
    public MModel setCreatedAt(LocalDateTime createdAt) {
        this.createdAt = createdAt;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.CREATED_BY</code>. 「createdBy」- 创建人
     */
    @Override
    public String getCreatedBy() {
        return this.createdBy;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.CREATED_BY</code>. 「createdBy」- 创建人
     */
    @Override
    public MModel setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.UPDATED_AT</code>. 「updatedAt」- 更新时间
     */
    @Override
    public LocalDateTime getUpdatedAt() {
        return this.updatedAt;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.UPDATED_AT</code>. 「updatedAt」- 更新时间
     */
    @Override
    public MModel setUpdatedAt(LocalDateTime updatedAt) {
        this.updatedAt = updatedAt;
        return this;
    }

    /**
     * Getter for <code>DB_ETERNAL.M_MODEL.UPDATED_BY</code>. 「updatedBy」- 更新人
     */
    @Override
    public String getUpdatedBy() {
        return this.updatedBy;
    }

    /**
     * Setter for <code>DB_ETERNAL.M_MODEL.UPDATED_BY</code>. 「updatedBy」- 更新人
     */
    @Override
    public MModel setUpdatedBy(String updatedBy) {
        this.updatedBy = updatedBy;
        return this;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        final MModel other = (MModel) obj;
        if (this.key == null) {
            if (other.key != null)
                return false;
        }
        else if (!this.key.equals(other.key))
            return false;
        if (this.identifier == null) {
            if (other.identifier != null)
                return false;
        }
        else if (!this.identifier.equals(other.identifier))
            return false;
        if (this.namespace == null) {
            if (other.namespace != null)
                return false;
        }
        else if (!this.namespace.equals(other.namespace))
            return false;
        if (this.name == null) {
            if (other.name != null)
                return false;
        }
        else if (!this.name.equals(other.name))
            return false;
        if (this.alias == null) {
            if (other.alias != null)
                return false;
        }
        else if (!this.alias.equals(other.alias))
            return false;
        if (this.type == null) {
            if (other.type != null)
                return false;
        }
        else if (!this.type.equals(other.type))
            return false;
        if (this.comments == null) {
            if (other.comments != null)
                return false;
        }
        else if (!this.comments.equals(other.comments))
            return false;
        if (this.categoryTree == null) {
            if (other.categoryTree != null)
                return false;
        }
        else if (!this.categoryTree.equals(other.categoryTree))
            return false;
        if (this.categoryId == null) {
            if (other.categoryId != null)
                return false;
        }
        else if (!this.categoryId.equals(other.categoryId))
            return false;
        if (this.ruleUnique == null) {
            if (other.ruleUnique != null)
                return false;
        }
        else if (!this.ruleUnique.equals(other.ruleUnique))
            return false;
        if (this.isTrack == null) {
            if (other.isTrack != null)
                return false;
        }
        else if (!this.isTrack.equals(other.isTrack))
            return false;
        if (this.spider == null) {
            if (other.spider != null)
                return false;
        }
        else if (!this.spider.equals(other.spider))
            return false;
        if (this.spiderComponent == null) {
            if (other.spiderComponent != null)
                return false;
        }
        else if (!this.spiderComponent.equals(other.spiderComponent))
            return false;
        if (this.sigma == null) {
            if (other.sigma != null)
                return false;
        }
        else if (!this.sigma.equals(other.sigma))
            return false;
        if (this.language == null) {
            if (other.language != null)
                return false;
        }
        else if (!this.language.equals(other.language))
            return false;
        if (this.active == null) {
            if (other.active != null)
                return false;
        }
        else if (!this.active.equals(other.active))
            return false;
        if (this.metadata == null) {
            if (other.metadata != null)
                return false;
        }
        else if (!this.metadata.equals(other.metadata))
            return false;
        if (this.createdAt == null) {
            if (other.createdAt != null)
                return false;
        }
        else if (!this.createdAt.equals(other.createdAt))
            return false;
        if (this.createdBy == null) {
            if (other.createdBy != null)
                return false;
        }
        else if (!this.createdBy.equals(other.createdBy))
            return false;
        if (this.updatedAt == null) {
            if (other.updatedAt != null)
                return false;
        }
        else if (!this.updatedAt.equals(other.updatedAt))
            return false;
        if (this.updatedBy == null) {
            if (other.updatedBy != null)
                return false;
        }
        else if (!this.updatedBy.equals(other.updatedBy))
            return false;
        return true;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((this.key == null) ? 0 : this.key.hashCode());
        result = prime * result + ((this.identifier == null) ? 0 : this.identifier.hashCode());
        result = prime * result + ((this.namespace == null) ? 0 : this.namespace.hashCode());
        result = prime * result + ((this.name == null) ? 0 : this.name.hashCode());
        result = prime * result + ((this.alias == null) ? 0 : this.alias.hashCode());
        result = prime * result + ((this.type == null) ? 0 : this.type.hashCode());
        result = prime * result + ((this.comments == null) ? 0 : this.comments.hashCode());
        result = prime * result + ((this.categoryTree == null) ? 0 : this.categoryTree.hashCode());
        result = prime * result + ((this.categoryId == null) ? 0 : this.categoryId.hashCode());
        result = prime * result + ((this.ruleUnique == null) ? 0 : this.ruleUnique.hashCode());
        result = prime * result + ((this.isTrack == null) ? 0 : this.isTrack.hashCode());
        result = prime * result + ((this.spider == null) ? 0 : this.spider.hashCode());
        result = prime * result + ((this.spiderComponent == null) ? 0 : this.spiderComponent.hashCode());
        result = prime * result + ((this.sigma == null) ? 0 : this.sigma.hashCode());
        result = prime * result + ((this.language == null) ? 0 : this.language.hashCode());
        result = prime * result + ((this.active == null) ? 0 : this.active.hashCode());
        result = prime * result + ((this.metadata == null) ? 0 : this.metadata.hashCode());
        result = prime * result + ((this.createdAt == null) ? 0 : this.createdAt.hashCode());
        result = prime * result + ((this.createdBy == null) ? 0 : this.createdBy.hashCode());
        result = prime * result + ((this.updatedAt == null) ? 0 : this.updatedAt.hashCode());
        result = prime * result + ((this.updatedBy == null) ? 0 : this.updatedBy.hashCode());
        return result;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("MModel (");

        sb.append(key);
        sb.append(", ").append(identifier);
        sb.append(", ").append(namespace);
        sb.append(", ").append(name);
        sb.append(", ").append(alias);
        sb.append(", ").append(type);
        sb.append(", ").append(comments);
        sb.append(", ").append(categoryTree);
        sb.append(", ").append(categoryId);
        sb.append(", ").append(ruleUnique);
        sb.append(", ").append(isTrack);
        sb.append(", ").append(spider);
        sb.append(", ").append(spiderComponent);
        sb.append(", ").append(sigma);
        sb.append(", ").append(language);
        sb.append(", ").append(active);
        sb.append(", ").append(metadata);
        sb.append(", ").append(createdAt);
        sb.append(", ").append(createdBy);
        sb.append(", ").append(updatedAt);
        sb.append(", ").append(updatedBy);

        sb.append(")");
        return sb.toString();
    }

    // -------------------------------------------------------------------------
    // FROM and INTO
    // -------------------------------------------------------------------------

    @Override
    public void from(IMModel from) {
        setKey(from.getKey());
        setIdentifier(from.getIdentifier());
        setNamespace(from.getNamespace());
        setName(from.getName());
        setAlias(from.getAlias());
        setType(from.getType());
        setComments(from.getComments());
        setCategoryTree(from.getCategoryTree());
        setCategoryId(from.getCategoryId());
        setRuleUnique(from.getRuleUnique());
        setIsTrack(from.getIsTrack());
        setSpider(from.getSpider());
        setSpiderComponent(from.getSpiderComponent());
        setSigma(from.getSigma());
        setLanguage(from.getLanguage());
        setActive(from.getActive());
        setMetadata(from.getMetadata());
        setCreatedAt(from.getCreatedAt());
        setCreatedBy(from.getCreatedBy());
        setUpdatedAt(from.getUpdatedAt());
        setUpdatedBy(from.getUpdatedBy());
    }

    @Override
    public <E extends IMModel> E into(E into) {
        into.from(this);
        return into;
    }
}
