/**
* Sencha GXT 3.0.0b - Sencha for GWT
* Copyright(c) 2007-2012, Sencha, Inc.
* licensing@sencha.com
*
* 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.class, this.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;
}
}