package com.l7tech.objectmodel;

import com.l7tech.objectmodel.folder.Folder;
import com.l7tech.objectmodel.imp.ZoneableEntityImp;
import com.l7tech.objectmodel.migration.Migration;
import com.l7tech.objectmodel.migration.MigrationMappingSelection;
import com.l7tech.search.Dependency;
import com.l7tech.util.DeserializeSafe;
import jakarta.persistence.Column;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.MappedSuperclass;
import jakarta.persistence.Transient;
import jakarta.persistence.Version;
import jakarta.xml.bind.annotation.XmlRootElement;
import org.jetbrains.annotations.Nullable;

@XmlRootElement
@MappedSuperclass
@DeserializeSafe
public abstract class Alias<ET extends PersistentEntity> extends ZoneableEntityImp implements EntityAlias {
   protected Goid entityGoid;
   private Folder folder;
   static final long serialVersionUID = -7607346041763153729L;

   @Deprecated
   protected Alias() {
   }

   protected Alias(Goid var1, Folder var2, @Nullable SecurityZone var3) {
      this.entityGoid = var1;
      this.folder = var2;
      this.securityZone = var3;
   }

   protected Alias(ET var1, Folder var2, @Nullable SecurityZone var3) {
      this(var1.getGoid(), var2, var3);
   }

   @Transient
   @Override
   public abstract Goid getEntityGoid();

   @Deprecated
   protected void setEntityGoid(Goid var1) {
      this.entityGoid = var1;
   }

   @Migration(mapName = MigrationMappingSelection.NONE, mapValue = MigrationMappingSelection.NONE)
   @Dependency(isDependency = false)
   @ManyToOne
   @JoinColumn(name = "folder_goid")
   @Override
   public Folder getFolder() {
      return this.folder;
   }

   @Override
   public void setFolder(Folder var1) {
      this.folder = var1;
   }

   @Version
   @Column(name = "version")
   @Override
   public int getVersion() {
      return super.getVersion();
   }
}
