/FileExtraction/Java_unseen/Orange-OpenSource_fiware-cepheus/cepheus-cep/src/main/java/com/orange/cepheus/cep/model/Attribute.java
/*
 * Copyright (C) 2015 Orange
 *
 * This software is distributed under the terms and conditions of the 'GNU GENERAL PUBLIC LICENSE
 * Version 2' license which can be found in the file 'LICENSE.txt' in this package distribution or
 * at 'http://www.gnu.org/licenses/gpl-2.0-standalone.html'.
 */

package com.orange.cepheus.cep.model;

import org.hibernate.validator.constraints.NotEmpty;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

/**
 * Attribute definition for EventType
 */
public class Attribute {

    @NotEmpty(message = "All attributes must have a name")
    private String name;

    @NotEmpty(message = "All attributes must have a type")
    private String type;

    private Set<Metadata> metadata = Collections.emptySet();

    private String jsonpath;

    public Attribute() {
    }

    public Attribute(String name, String type) {
        this.name = name;
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Set<Metadata> getMetadata() {
        return metadata;
    }

    public void setMetadata(Set<Metadata> metadata) {
        if (metadata == null) {
            metadata = Collections.emptySet();
        }
        this.metadata = metadata;
    }

    public String getJsonpath() {
        return jsonpath;
    }

    public void setJsonpath(String jsonpath) {
        this.jsonpath = jsonpath;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (!(o instanceof Attribute))
            return false;

        Attribute attribute = (Attribute) o;

        if (name != null ? !name.equals(attribute.name) : attribute.name != null)
            return false;
        if (type != null ? !type.equals(attribute.type) : attribute.type != null)
            return false;
        if (metadata != null ? !metadata.equals(attribute.metadata) : attribute.metadata != null)
            return false;
        return !(jsonpath != null ? !jsonpath.equals(attribute.jsonpath) : attribute.jsonpath != null);

    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + (type != null ? type.hashCode() : 0);
        result = 31 * result + (metadata != null ? metadata.hashCode() : 0);
        result = 31 * result + (jsonpath != null ? jsonpath.hashCode() : 0);
        return result;
    }

    @Override
    public String toString() {
        return "Attribute{" +
                "name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", metadata=" + metadata +
                ", jsonpath='" + jsonpath + '\'' +
                '}';
    }
}
