package com.sequenceiq.cloudbreak.domain;
import javax.persistence.Column;
import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import com.sequenceiq.cloudbreak.common.type.ComponentType;
import com.sequenceiq.cloudbreak.domain.json.Json;
import com.sequenceiq.cloudbreak.domain.json.JsonToString;
@Entity
@NamedQueries({
@NamedQuery(
name = "Component.findComponentByStackIdComponentTypeName",
query = "SELECT cv FROM Component cv "
+ "WHERE cv.stack.id = :stackId AND cv.componentType = :componentType AND cv.name = :name"),
@NamedQuery(
name = "Component.findComponentByStackId",
query = "SELECT cv FROM Component cv WHERE cv.stack.id = :stackId"
)
})
public class Component {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "component_generator")
@SequenceGenerator(name = "component_generator", sequenceName = "component_id_seq", allocationSize = 1)
private Long id;
@Enumerated(EnumType.STRING)
private ComponentType componentType;
@Column(nullable = false)
private String name;
@Convert(converter = JsonToString.class)
@Column(columnDefinition = "TEXT")
private Json attributes;
@ManyToOne
private Stack stack;
public Component() {
}
public Component(ComponentType componentType, String name, Json attributes, Stack stack) {
this.componentType = componentType;
this.name = name;
this.attributes = attributes;
this.stack = stack;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public ComponentType getComponentType() {
return componentType;
}
public void setComponentType(ComponentType componentType) {
this.componentType = componentType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Json getAttributes() {
return attributes;
}
public void setAttributes(Json attributes) {
this.attributes = attributes;
}
public Stack getStack() {
return stack;
}
public void setStack(Stack stack) {
this.stack = stack;
}
@Override
public String toString() {
return "Component{"
+ "id=" + id
+ ", componentType=" + componentType
+ ", name='" + name + '\''
+ '}';
}
}