package de.twenty11.skysail.server.ext.notes.repos;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NonUniqueResultException;
import javax.persistence.TypedQuery;
import de.twenty11.skysail.server.ext.notes.NotesApplication;
import de.twenty11.skysail.server.ext.notes.domain.Folder;
public class FolderRepository implements ComponentRepository<Folder> {
private final EntityManager entitiyManager;
private NotesApplication application;
public FolderRepository(EntityManagerFactory emf, NotesApplication application) {
this.application = application;
this.entitiyManager = emf.createEntityManager();
}
/*
* (non-Javadoc)
*
* @see de.twenty11.skysail.server.ext.notes.repos.ComponentRepository#getById(java.lang.Long)
*/
@Override
public Folder getById(Long id) {
TypedQuery<Folder> query = entitiyManager.createQuery(
"SELECT c FROM Folder c WHERE c.pid = :pid AND c.owner = :owner", Folder.class);
query.setParameter("pid", id);
query.setParameter("owner", application.getCurrentUser());
List<Folder> results = query.getResultList();
if (results.isEmpty()) {
throw new IllegalArgumentException("Missing entity or authorization error");
}
if (results.size() == 1) {
return results.get(0);
}
throw new NonUniqueResultException();
}
/*
* (non-Javadoc)
*
* @see
* de.twenty11.skysail.server.ext.notes.repos.ComponentRepository#add(de.twenty11.skysail.server.ext.notes.domain
* .Folder)
*/
@Override
public void add(Folder entity) {
entitiyManager.getTransaction().begin();
entitiyManager.persist(entity);
entitiyManager.getTransaction().commit();
}
@Override
public void update(Folder entity) {
entitiyManager.getTransaction().begin();
entitiyManager.merge(entity);
entitiyManager.getTransaction().commit();
}
@Override
public List<Folder> getComponents() {
TypedQuery<Folder> query = entitiyManager.createQuery("SELECT c FROM Folder c WHERE c.owner = :owner",
Folder.class);
query.setParameter("owner", application.getCurrentUser());
return query.getResultList();
}
@Override
public void delete(Long folderId) {
entitiyManager.getTransaction().begin();
entitiyManager.remove(getById(folderId));
entitiyManager.getTransaction().commit();
}
}