package com.sequenceiq.cloudbreak.domain; import java.util.Set; 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.ManyToMany; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.SequenceGenerator; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import org.hibernate.annotations.Type; import com.sequenceiq.cloudbreak.api.model.RDSDatabase; import com.sequenceiq.cloudbreak.common.type.RdsType; import com.sequenceiq.cloudbreak.common.type.ResourceStatus; import com.sequenceiq.cloudbreak.domain.json.Json; import com.sequenceiq.cloudbreak.domain.json.JsonToString; @Entity @Table(name = "RDSConfig", uniqueConstraints = { @UniqueConstraint(columnNames = { "account", "name" }) }) @NamedQueries({ @NamedQuery( name = "RDSConfig.findForUser", query = "SELECT r FROM RDSConfig r " + "LEFT JOIN FETCH r.clusters " + "WHERE r.owner= :user "), @NamedQuery( name = "RDSConfig.findPublicInAccountForUser", query = "SELECT r FROM RDSConfig r " + "LEFT JOIN FETCH r.clusters " + "WHERE ((r.account= :account AND r.publicInAccount= true) " + "OR r.owner= :user) " + "AND r.status <> 'DEFAULT_DELETED' "), @NamedQuery( name = "RDSConfig.findAllInAccount", query = "SELECT r FROM RDSConfig r " + "LEFT JOIN FETCH r.clusters " + "WHERE r.account= :account " + "AND r.status <> 'DEFAULT_DELETED' "), @NamedQuery( name = "RDSConfig.findByNameInUser", query = "SELECT r FROM RDSConfig r " + "LEFT JOIN FETCH r.clusters " + "WHERE r.owner= :owner and r.name= :name " + "AND r.status <> 'DEFAULT_DELETED' "), @NamedQuery( name = "RDSConfig.findOneByName", query = "SELECT r FROM RDSConfig r " + "LEFT JOIN FETCH r.clusters " + "WHERE r.name= :name and r.account= :account " + "AND r.status <> 'DEFAULT_DELETED' "), @NamedQuery( name = "RDSConfig.findByClusterId", query = "SELECT r FROM RDSConfig r " + "INNER JOIN r.clusters cluster " + "WHERE cluster.id= :clusterId AND " + "((r.account= :account AND r.publicInAccount= true) OR r.owner= :user)"), @NamedQuery( name = "RDSConfig.findByIdInAccount", query = "SELECT r FROM RDSConfig r " + "LEFT JOIN FETCH r.clusters " + "WHERE r.id= :id and r.account= :account " + "AND r.status <> 'DEFAULT_DELETED' "), @NamedQuery( name = "RDSConfig.findById", query = "SELECT r FROM RDSConfig r " + "LEFT JOIN FETCH r.clusters " + "WHERE r.id= :id " + "AND r.status <> 'DEFAULT_DELETED' "), @NamedQuery( name = "RDSConfig.findByNameInAccount", query = "SELECT r FROM RDSConfig r " + "LEFT JOIN FETCH r.clusters " + "WHERE r.name= :name and ((r.publicInAccount=true and r.account= :account) or r.owner= :owner) " + "AND r.status <> 'DEFAULT_DELETED' "), }) public class RDSConfig { @Id @GeneratedValue(strategy = GenerationType.AUTO, generator = "rdsconfig_generator") @SequenceGenerator(name = "rdsconfig_generator", sequenceName = "rdsconfig_id_seq", allocationSize = 1) private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private String connectionURL; @Column(nullable = false) @Enumerated(EnumType.STRING) private RDSDatabase databaseType; @Type(type = "encrypted_string") @Column(nullable = false) private String connectionUserName; @Type(type = "encrypted_string") @Column(nullable = false) private String connectionPassword; private Long creationDate; @Column(nullable = false) private String hdpVersion; @Column(nullable = false) private String owner; @Column(nullable = false) private String account; @Column(nullable = false) private boolean publicInAccount; @Column(nullable = false) @Enumerated(EnumType.STRING) private ResourceStatus status; @ManyToMany(mappedBy = "rdsConfigs") private Set<Cluster> clusters; @Enumerated(EnumType.STRING) private RdsType type = RdsType.HIVE; @Convert(converter = JsonToString.class) @Column(columnDefinition = "TEXT") private Json attributes; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getConnectionURL() { return connectionURL; } public void setConnectionURL(String connectionURL) { this.connectionURL = connectionURL; } public RDSDatabase getDatabaseType() { return databaseType; } public void setDatabaseType(RDSDatabase databaseType) { this.databaseType = databaseType; } public String getConnectionUserName() { return connectionUserName; } public void setConnectionUserName(String connectionUserName) { this.connectionUserName = connectionUserName; } public String getConnectionPassword() { return connectionPassword; } public void setConnectionPassword(String connectionPassword) { this.connectionPassword = connectionPassword; } public Long getCreationDate() { return creationDate; } public void setCreationDate(Long creationDate) { this.creationDate = creationDate; } public String getHdpVersion() { return hdpVersion; } public void setHdpVersion(String hdpVersion) { this.hdpVersion = hdpVersion; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } public void setPublicInAccount(boolean publicInAccount) { this.publicInAccount = publicInAccount; } public boolean isPublicInAccount() { return publicInAccount; } public ResourceStatus getStatus() { return status; } public void setStatus(ResourceStatus status) { this.status = status; } public Set<Cluster> getClusters() { return clusters; } public void setClusters(Set<Cluster> clusters) { this.clusters = clusters; } public RdsType getType() { return type; } public void setType(RdsType type) { this.type = type; } public Json getAttributes() { return attributes; } public void setAttributes(Json attributes) { this.attributes = attributes; } }