/** * 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.ArrayList; 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<ClusterVersionEntity> clusterVersionEntities; @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; @OneToOne(cascade = CascadeType.REMOVE) @JoinColumn( name = "upgrade_id", referencedColumnName = "upgrade_id", nullable = true, insertable = false, updatable = true) /** * {@code null} when there is no upgrade/downgrade in progress. */ 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; } public Collection<ClusterVersionEntity> getClusterVersionEntities() { return clusterVersionEntities; } public void setClusterVersionEntities(Collection<ClusterVersionEntity> clusterVersionEntities) { this.clusterVersionEntities = clusterVersionEntities; } public void addClusterVersionEntity(ClusterVersionEntity clusterVersionEntity) { if (clusterVersionEntities == null) { clusterVersionEntities = new ArrayList<>(); } clusterVersionEntities.add(clusterVersionEntity); } /** * 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; } }