blob: ffb3b827e39db396b51467c88169543484058f07 [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 java.util.Objects;
import javax.persistence.CascadeType;
import javax.persistence.Column;
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.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import org.apache.ambari.server.state.RepositoryVersionState;
/**
* The {@link ServiceComponentVersionEntity} class is used to represent the
* association of a component and repository version.
*/
@Entity
@Table(name = "servicecomponent_version")
@TableGenerator(
name = "servicecomponent_version_id_generator",
table = "ambari_sequences",
pkColumnName = "sequence_name",
valueColumnName = "sequence_value",
pkColumnValue = "servicecomponent_version_id_seq",
initialValue = 0)
@NamedQueries({
@NamedQuery(
name = "ServiceComponentVersionEntity.findByComponent",
query = "SELECT version FROM ServiceComponentVersionEntity version WHERE " +
"version.m_serviceComponentDesiredStateEntity.clusterId = :clusterId AND " +
"version.m_serviceComponentDesiredStateEntity.serviceName = :serviceName AND " +
"version.m_serviceComponentDesiredStateEntity.componentName = :componentName"),
@NamedQuery(
name = "ServiceComponentVersionEntity.findByComponentAndVersion",
query = "SELECT version FROM ServiceComponentVersionEntity version WHERE " +
"version.m_serviceComponentDesiredStateEntity.clusterId = :clusterId AND " +
"version.m_serviceComponentDesiredStateEntity.serviceName = :serviceName AND " +
"version.m_serviceComponentDesiredStateEntity.componentName = :componentName AND " +
"version.m_repositoryVersion.version = :repoVersion")
})
public class ServiceComponentVersionEntity {
@Id
@GeneratedValue(
strategy = GenerationType.TABLE,
generator = "servicecomponent_version_id_generator")
@Column(name = "id", nullable = false, updatable = false)
private long m_id;
@ManyToOne(optional = false, cascade = { CascadeType.MERGE })
@JoinColumn(name = "component_id", referencedColumnName = "id", nullable = false)
private ServiceComponentDesiredStateEntity m_serviceComponentDesiredStateEntity;
@ManyToOne
@JoinColumn(name = "repo_version_id", referencedColumnName = "repo_version_id", nullable = false)
private RepositoryVersionEntity m_repositoryVersion;
@Column(name = "state", nullable = false, insertable = true, updatable = true)
@Enumerated(value = EnumType.STRING)
private RepositoryVersionState m_state = RepositoryVersionState.CURRENT;
@Column(name = "user_name", nullable = false, insertable=true, updatable=true)
private String userName;
/**
* @return the associated component
*/
public ServiceComponentDesiredStateEntity getServiceComponentDesiredState() {
return m_serviceComponentDesiredStateEntity;
}
/**
* @param serviceComponentDesiredStateEntity the associated component (not {@code null})
*/
public void setServiceComponentDesiredState(ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity) {
m_serviceComponentDesiredStateEntity = serviceComponentDesiredStateEntity;
}
/**
* @param repositoryVersion the repository
*/
public void setRepositoryVersion(RepositoryVersionEntity repositoryVersion) {
m_repositoryVersion = repositoryVersion;
}
/**
* @return the repository
*/
public RepositoryVersionEntity getRepositoryVersion() {
return m_repositoryVersion;
}
/**
* @return the id
*/
public long getId() {
return m_id;
}
/**
* @return the state of the repository
*/
public RepositoryVersionState getState() {
return m_state;
}
/**
* @param state the state of the repository
*/
public void setState(RepositoryVersionState state) {
m_state = state;
}
/**
* @return the user name
*/
public String getUserName() {
return userName;
}
/**
* @param name the user name
*/
public void setUserName(String name) {
userName = name;
}
@Override
public int hashCode() {
return Objects.hash(m_id, m_repositoryVersion, m_serviceComponentDesiredStateEntity, m_state);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
final ServiceComponentVersionEntity other = (ServiceComponentVersionEntity) obj;
return Objects.equals(m_id, other.m_id)
&& Objects.equals(m_repositoryVersion, other.m_repositoryVersion)
&& Objects.equals(m_serviceComponentDesiredStateEntity, other.m_serviceComponentDesiredStateEntity)
&& Objects.equals(m_state, other.m_state);
}
}