Project: exo-training
/**
 * Sencha GXT 3.0.0b - Sencha for GWT 
 * Copyright(c) 2007-2012, Sencha, Inc. 
 * 
 * http://www.sencha.com/products/gxt/license/ 
 */
package com.sencha.gxt.examples.resources.server.data; 
 
import java.util.ArrayList; 
import java.util.List; 
 
import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.EntityManager; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToMany; 
import javax.persistence.TypedQuery; 
import javax.persistence.Version; 
import javax.validation.constraints.Size; 
 
import com.sencha.gxt.examples.resources.server.EntityManagerUtil; 
 
@Entity 
public class Folder { 
 
  public static final EntityManager entityManager() { 
    return EntityManagerUtil.getEntityManager(); 
  } 
 
  public static List<Folder> findAllFolders() { 
    EntityManager em = entityManager(); 
    List<Folder> list = em.createQuery("select f from Folder f", Folder.class).getResultList(); 
    return list; 
  } 
 
  public static Folder findFolder(Integer id) { 
    if (id == null) { 
      return null
    } 
    EntityManager em = entityManager(); 
    Folder session = em.find(Folder.class, id); 
    return session; 
  } 
 
  public static Folder getRootFolder() { 
    EntityManager em = entityManager(); 
    TypedQuery<Folder> q = em.createQuery("select f from Folder f where f.parentFolder is null", Folder.class); 
    return q.getSingleResult(); 
  } 
 
  @Id 
  @GeneratedValue(strategy = GenerationType.AUTO) 
  private Integer id; 
 
  @Version 
  private Integer version; 
 
  @Size(min = 1
  private String name; 
 
  @ManyToOne(optional = true, fetch = FetchType.LAZY, cascade = {}) 
  private Folder parentFolder; 
 
  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
  private List<Folder> subFolders = new ArrayList<Folder>(); 
 
  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
  private List<Music> children = new ArrayList<Music>(); 
 
  public void addMusic(Music music) { 
    children.add(music); 
  } 
 
  public void addSubFolder(Folder subFolder) { 
    subFolder.parentFolder = this
    subFolders.add(subFolder); 
  } 
 
  public List<Music> getChildren() { 
    return children; 
  } 
 
  public Integer getId() { 
    return id; 
  } 
 
  public String getName() { 
    return name; 
  } 
 
  public List<Folder> getSubFolders() { 
    return subFolders; 
  } 
 
  public Integer getVersion() { 
    return version; 
  } 
 
  public Folder persist() { 
    EntityManager em = entityManager(); 
    return em.merge(this); 
  } 
 
  public void remove() { 
    EntityManager em = entityManager(); 
    Folder attached = em.find(Folder.classthis.id); 
    em.remove(attached); 
  } 
 
  public void setChildren(List<Music> children) { 
    this.children = children; 
  } 
 
  public void setId(Integer id) { 
    this.id = id; 
  } 
 
  public void setName(String name) { 
    this.name = name; 
  } 
 
  public void setSubFolders(List<Folder> subFolders) { 
    this.subFolders = subFolders; 
  } 
 
  public Folder getParentFolder() { 
    return parentFolder; 
  } 
 
}