/** * 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 javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; 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.commons.lang.builder.HashCodeBuilder; import com.google.common.base.Objects; /** * The {@link ServiceComponentHistoryEntity} class is used to represent an * upgrade or downgrade which was performed on an individual service component. */ @Entity @Table(name = "servicecomponent_history") @TableGenerator( name = "servicecomponent_history_id_generator", table = "ambari_sequences", pkColumnName = "sequence_name", valueColumnName = "sequence_value", pkColumnValue = "servicecomponent_history_id_seq", initialValue = 0) @NamedQueries({ @NamedQuery( name = "ServiceComponentHistoryEntity.findByComponent", query = "SELECT history FROM ServiceComponentHistoryEntity history WHERE history.m_serviceComponentDesiredStateEntity.clusterId = :clusterId AND history.m_serviceComponentDesiredStateEntity.serviceName = :serviceName AND history.m_serviceComponentDesiredStateEntity.componentName = :componentName") }) public class ServiceComponentHistoryEntity { @Id @GeneratedValue( strategy = GenerationType.TABLE, generator = "servicecomponent_history_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(optional = false) @JoinColumn(name = "from_stack_id", referencedColumnName = "stack_id", nullable = false) private StackEntity m_fromStack; @ManyToOne(optional = false) @JoinColumn(name = "to_stack_id", referencedColumnName = "stack_id", nullable = false) private StackEntity m_toStack; @ManyToOne(optional = false) @JoinColumn(name = "upgrade_id", referencedColumnName = "upgrade_id", nullable = false) private UpgradeEntity m_upgradeEntity; public ServiceComponentDesiredStateEntity getServiceComponentDesiredState() { return m_serviceComponentDesiredStateEntity; } /** * Sets the component associated with this historical entry. * * @param serviceComponentDesiredStateEntity * the component to associate with this historical entry (not * {@code null}). */ public void setServiceComponentDesiredState(ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity) { m_serviceComponentDesiredStateEntity = serviceComponentDesiredStateEntity; } /** * @return the id */ public long getId() { return m_id; } /** * @return the fromStack */ public StackEntity getFromStack() { return m_fromStack; } /** * @param fromStack * the fromStack to set */ public void setFromStack(StackEntity fromStack) { m_fromStack = fromStack; } /** * @return the toStack */ public StackEntity getToStack() { return m_toStack; } /** * @param toStack * the toStack to set */ public void setToStack(StackEntity toStack) { m_toStack = toStack; } /** * @return the upgradeEntity */ public UpgradeEntity getUpgrade() { return m_upgradeEntity; } /** * @param upgradeEntity * the upgradeEntity to set */ public void setUpgrade(UpgradeEntity upgradeEntity) { m_upgradeEntity = upgradeEntity; } /** * {@inheritDoc} */ @Override public int hashCode() { HashCodeBuilder hashCodeBuilder = new HashCodeBuilder(); hashCodeBuilder.append(m_fromStack); hashCodeBuilder.append(m_toStack); hashCodeBuilder.append(m_upgradeEntity); hashCodeBuilder.append(m_serviceComponentDesiredStateEntity); return hashCodeBuilder.toHashCode(); } /** * {@inheritDoc} */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final ServiceComponentHistoryEntity other = (ServiceComponentHistoryEntity) obj; return Objects.equal(m_fromStack, other.m_fromStack) && Objects.equal(m_toStack, other.m_toStack) && Objects.equal(m_upgradeEntity, other.m_upgradeEntity) && Objects.equal(m_serviceComponentDesiredStateEntity, other.m_serviceComponentDesiredStateEntity); } }