blob: c22449c1af2b381803ae3d2532dcb15202c7eecf [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ambari.server.orm.entities;
import static org.apache.commons.lang.StringUtils.defaultString;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import org.apache.ambari.server.state.SecurityType;
import org.apache.ambari.server.state.State;
@Table(name = "clusters")
@NamedQueries({
@NamedQuery(name = "clusterByName", query =
"SELECT cluster " +
"FROM ClusterEntity cluster " +
"WHERE cluster.clusterName=:clusterName"),
@NamedQuery(name = "allClusters", query =
"SELECT clusters " +
"FROM ClusterEntity clusters"),
@NamedQuery(name = "clusterByResourceId", query =
"SELECT cluster " +
"FROM ClusterEntity cluster " +
"WHERE cluster.resource.id=:resourceId")
})
@Entity
@TableGenerator(name = "cluster_id_generator",
table = "ambari_sequences", pkColumnName = "sequence_name", valueColumnName = "sequence_value"
, pkColumnValue = "cluster_id_seq"
, initialValue = 1
)
public class ClusterEntity {
@Id
@Column(name = "cluster_id", nullable = false, insertable = true, updatable = true)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "cluster_id_generator")
private Long clusterId;
@Basic
@Column(name = "cluster_name", nullable = false, insertable = true,
updatable = true, unique = true, length = 100)
private String clusterName;
@Basic
@Enumerated(value = EnumType.STRING)
@Column(name = "provisioning_state", insertable = true, updatable = true)
private State provisioningState = State.INIT;
@Basic
@Enumerated(value = EnumType.STRING)
@Column(name = "security_type", nullable = false, insertable = true, updatable = true)
private SecurityType securityType = SecurityType.NONE;
@Basic
@Column(name = "desired_cluster_state", insertable = true, updatable = true)
private String desiredClusterState = "";
@Basic
@Column(name = "cluster_info", insertable = true, updatable = true)
private String clusterInfo = "";
/**
* Unidirectional one-to-one association to {@link StackEntity}
*/
@OneToOne
@JoinColumn(name = "desired_stack_id", unique = false, nullable = false, insertable = true, updatable = true)
private StackEntity desiredStack;
@OneToMany(mappedBy = "clusterEntity")
private Collection<ClusterServiceEntity> clusterServiceEntities;
@OneToOne(mappedBy = "clusterEntity", cascade = CascadeType.REMOVE)
private ClusterStateEntity clusterStateEntity;
@ManyToMany(mappedBy = "clusterEntities")
private Collection<HostEntity> hostEntities;
@OneToMany(mappedBy = "clusterEntity", cascade = CascadeType.ALL)
private Collection<ClusterConfigEntity> configEntities;
@OneToMany(mappedBy = "clusterEntity", cascade = CascadeType.ALL)
private Collection<ConfigGroupEntity> configGroupEntities;
@OneToMany(mappedBy = "clusterEntity", cascade = CascadeType.ALL)
private Collection<RequestScheduleEntity> requestScheduleEntities;
@OneToMany(mappedBy = "clusterEntity", cascade = CascadeType.REMOVE)
private Collection<ServiceConfigEntity> serviceConfigEntities;
@OneToMany(mappedBy = "clusterEntity", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
private Collection<AlertDefinitionEntity> alertDefinitionEntities;
@OneToMany(mappedBy = "clusterEntity", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
private Collection<WidgetEntity> widgetEntities;
@OneToMany(mappedBy = "clusterEntity", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
private Collection<WidgetLayoutEntity> widgetLayoutEntities;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "resource_id", referencedColumnName = "resource_id", nullable = false)
})
private ResourceEntity resource;
@Basic
@Column(name = "upgrade_id", nullable = true, insertable = false, updatable = false)
private Long upgradeId;
/**
* {@code null} when there is no upgrade/downgrade in progress.
*/
@OneToOne(cascade = CascadeType.REMOVE)
@JoinColumn(
name = "upgrade_id",
referencedColumnName = "upgrade_id",
nullable = true,
insertable = false,
updatable = true)
private UpgradeEntity upgradeEntity = null;
public Long getClusterId() {
return clusterId;
}
public void setClusterId(Long clusterId) {
this.clusterId = clusterId;
}
public String getClusterName() {
return clusterName;
}
public void setClusterName(String clusterName) {
this.clusterName = clusterName;
}
public String getDesiredClusterState() {
return defaultString(desiredClusterState);
}
public void setDesiredClusterState(String desiredClusterState) {
this.desiredClusterState = desiredClusterState;
}
public String getClusterInfo() {
return defaultString(clusterInfo);
}
public void setClusterInfo(String clusterInfo) {
this.clusterInfo = clusterInfo;
}
public StackEntity getDesiredStack() {
return desiredStack;
}
public void setDesiredStack(StackEntity desiredStack) {
this.desiredStack = desiredStack;
}
/**
* Gets whether the cluster is still initializing or has finished with its
* deployment requests.
*
* @return either {@link State#INIT} or {@link State#INSTALLED},
* never {@code null}.
*/
public State getProvisioningState(){
return provisioningState;
}
/**
* Sets whether the cluster is still initializing or has finished with its
* deployment requests.
*
* @param provisioningState either {@link State#INIT} or
* {@link State#INSTALLED}, never {@code null}.
*/
public void setProvisioningState(State provisioningState){
this.provisioningState = provisioningState;
}
/**
* Gets this ClusterEntity's security type.
*
* @return the current SecurityType
*/
public SecurityType getSecurityType() {
return securityType;
}
/**
* Set's this ClusterEntity's security type
*
* @param securityType the new SecurityType
*/
public void setSecurityType(SecurityType securityType) {
this.securityType = securityType;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ClusterEntity that = (ClusterEntity) o;
if (!clusterId.equals(that.clusterId)) {
return false;
}
if (!clusterName.equals(that.clusterName)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = null == clusterId ? 0 : clusterId.hashCode();
result = 31 * result + clusterName.hashCode();
return result;
}
public Collection<ClusterServiceEntity> getClusterServiceEntities() {
return clusterServiceEntities;
}
public void setClusterServiceEntities(Collection<ClusterServiceEntity> clusterServiceEntities) {
this.clusterServiceEntities = clusterServiceEntities;
}
public ClusterStateEntity getClusterStateEntity() {
return clusterStateEntity;
}
public void setClusterStateEntity(ClusterStateEntity clusterStateEntity) {
this.clusterStateEntity = clusterStateEntity;
}
public Collection<HostEntity> getHostEntities() {
return hostEntities;
}
public void setHostEntities(Collection<HostEntity> hostEntities) {
this.hostEntities = hostEntities;
}
public Collection<ClusterConfigEntity> getClusterConfigEntities() {
return configEntities;
}
public void setClusterConfigEntities(Collection<ClusterConfigEntity> entities) {
configEntities = entities;
}
public Collection<ConfigGroupEntity> getConfigGroupEntities() {
return configGroupEntities;
}
public void setConfigGroupEntities(Collection<ConfigGroupEntity> configGroupEntities) {
this.configGroupEntities = configGroupEntities;
}
public Collection<RequestScheduleEntity> getRequestScheduleEntities() {
return requestScheduleEntities;
}
public void setRequestScheduleEntities(Collection<RequestScheduleEntity> requestScheduleEntities) {
this.requestScheduleEntities = requestScheduleEntities;
}
public Collection<ServiceConfigEntity> getServiceConfigEntities() {
return serviceConfigEntities;
}
public void setServiceConfigEntities(Collection<ServiceConfigEntity> serviceConfigEntities) {
this.serviceConfigEntities = serviceConfigEntities;
}
public Collection<AlertDefinitionEntity> getAlertDefinitionEntities() {
return alertDefinitionEntities;
}
/**
* Get the admin resource entity.
*
* @return the resource entity
*/
public ResourceEntity getResource() {
return resource;
}
/**
* Set the admin resource entity.
*
* @param resource the resource entity
*/
public void setResource(ResourceEntity resource) {
this.resource = resource;
}
public UpgradeEntity getUpgradeEntity() {
return upgradeEntity;
}
public void setUpgradeEntity(UpgradeEntity upgradeEntity) {
this.upgradeEntity = upgradeEntity;
}
}