package com.l7tech.objectmodel.polback;

import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.imp.NamedEntityImp;
import com.l7tech.search.Dependency;
import com.l7tech.util.DeserializeSafe;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Inheritance;
import jakarta.persistence.InheritanceType;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Proxy;
import org.hibernate.annotations.Type;

@Entity
@Proxy(lazy = false)
@Table(name = "policy_backed_service_operation")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@XmlRootElement(name = "PolicyBackedServiceOperation")
@DeserializeSafe
public class PolicyBackedServiceOperation extends NamedEntityImp {
   private PolicyBackedService policyBackedService;
   private Goid policyGoid;
   static final long serialVersionUID = -1348450110347138162L;

   @ManyToOne(optional = false)
   @JoinColumn(name = "policy_backed_service_goid", nullable = false)
   public PolicyBackedService getPolicyBackedService() {
      return this.policyBackedService;
   }

   public void setPolicyBackedService(PolicyBackedService var1) {
      this.checkLocked();
      this.policyBackedService = var1;
   }

   @Column(name = "policy_goid")
   @Type(type = "com.l7tech.server.util.GoidType")
   @Dependency(type = Dependency.DependencyType.POLICY, methodReturnType = Dependency.MethodReturnType.GOID)
   public Goid getPolicyGoid() {
      return this.policyGoid;
   }

   public void setPolicyGoid(Goid var1) {
      this.policyGoid = var1;
   }

   public PolicyBackedServiceOperation getCopy(PolicyBackedService var1, boolean var2) {
      PolicyBackedServiceOperation var3 = new PolicyBackedServiceOperation();
      var3.setPolicyBackedService(var1);
      var3.setPolicyGoid(this.getPolicyGoid());
      if (var2) {
         var3.lock();
      }

      return var3;
   }

   @Override
   public boolean equals(Object var1) {
      if (this == var1) {
         return true;
      }

      if (!(var1 instanceof PolicyBackedServiceOperation)) {
         return false;
      }

      if (!super.equals(var1)) {
         return false;
      }

      PolicyBackedServiceOperation var2 = (PolicyBackedServiceOperation)var1;
      return (this.policyBackedService != null ? this.policyBackedService.equals(var2.policyBackedService) : var2.policyBackedService == null)
         ? Goid.equals(this.policyGoid, var2.policyGoid)
         : false;
   }

   @Override
   public int hashCode() {
      int var1 = super.hashCode();
      var1 = 31 * var1 + (this.policyBackedService != null ? this.policyBackedService.hashCode() : 0);
      return 31 * var1 + (this.policyGoid != null ? this.policyGoid.hashCode() : 0);
   }
}
