/* Verzeichnis.java */

import javax.persistence.*;
import java.util.List;
import java.util.LinkedList;

/**
 * Diese Klasse repräsentiert die Tabelle 'dir' der 'DirDB'
 * Jede Instanz der Klasse repräsentiert wiederum einen
 * Datensatz
 */
@Entity
@Table( name = "dir" )
@NamedQuery(name = "DIRECTORY_BY_NAME",          
            query = "select d from Verzeichnis d where d.name = :name")
public class Verzeichnis 
{
  @Id
  @GeneratedValue
  @Column(name = "did")
  private Integer id;

  @Column(name = "dname")
  private String name;

  @OneToMany(cascade = CascadeType.ALL, mappedBy = "directory")
  @OrderBy(value = "name")
  private List<Datei> files;

  /**
   * Geschützter Minimalkonstruktor zur Verwendung von Hibernate
   */
  protected Verzeichnis() {
  }

  /**
   * Öffentlicher Konstruktor zur Verwendung durch den Entwickler.
   * Dieser Konstruktor definiert alle Pflichtfelder der JavaBean.
   * @param name - Name des Verzeichniseintrags
     */
  public Verzeichnis(String name)
  {
    this.name = name;
    this.files = new LinkedList<Datei>();
  }

  public Integer getId()
  {
    return id;
  }

  protected void setId(Integer id)
  {
    this.id = id;
  }

  public String getName()
  {
    return name;
  }

  public void setName(String name)
  {
    this.name = name;
  }

  public List<Datei> getFiles()
  {
    return files;
  }

  public void setFiles(List<Datei> files)
  {
    this.files = files;
  }

  public boolean equals(Object o)
  {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    Verzeichnis dir = (Verzeichnis) o;
    return !(id != null ? !id.equals(dir.id) : dir.id != null);
  }

  public int hashCode()
  {
    return id != null ? id.hashCode() : 0;
  }

  public String toString()
  {
    return "Directory[id:"+ id + ", name:" + name +  "]";
  }
}