package managers; import models.Folder; import models.Media; import play.db.jpa.JPA; import play.db.jpa.JPAApi; import javax.inject.Inject; import java.util.ArrayList; import java.util.List; /** * Created by Iven on 26.12.2015. */ public class FolderManager implements BaseManager { @Inject MediaManager mediaManager; @Inject JPAApi jpaApi; public Folder findById(long id) { return jpaApi.em().find(Folder.class, id); } @Override public void create(Object model) { jpaApi.em().persist(model); } @Override public void update(Object model) { jpaApi.em().merge(model); } @Override public void delete(Object model) { Folder folder = ((Folder) model); if (!folder.folders.isEmpty()) { for (Folder subFolder : folder.folders) { delete(subFolder); } } for (Media media : folder.files) { mediaManager.delete(media); } jpaApi.em().remove(folder); } public List<Media> getAllMedia(Folder folder) { List<Media> mediaList = new ArrayList<>(); mediaList = mediaManager.findByFolder(folder.id); if (!folder.folders.isEmpty()) { for (Folder subFolder : folder.folders) { mediaList.addAll(mediaManager.findByFolder(subFolder.id)); } } return mediaList; } public static Folder findRoot(Folder folder) { if(folder.parent == null) return folder; return findRoot(folder.parent); } /** * count all files within a given folder and his subfolders. * @param folder * @return */ public static int countAll(Folder folder) { int totalFiles = folder.files.size(); if (!folder.folders.isEmpty()) { for (Folder subFolder : folder.folders) { totalFiles += countAll(subFolder); } } return totalFiles; } }