/** * Copyright (C) Intersect 2012. * * This module contains Proprietary Information of Intersect, * and should be treated as Confidential. */ package au.org.intersect.exsite9.service; import java.io.File; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import org.eclipse.jface.operation.IRunnableWithProgress; import au.org.intersect.exsite9.dao.GroupDAO; import au.org.intersect.exsite9.dao.ProjectDAO; import au.org.intersect.exsite9.dao.SubmissionPackageDAO; import au.org.intersect.exsite9.dao.factory.ProjectDAOFactory; import au.org.intersect.exsite9.dao.factory.SubmissionPackageDAOFactory; import au.org.intersect.exsite9.domain.Group; import au.org.intersect.exsite9.domain.Project; import au.org.intersect.exsite9.domain.ResearchFile; import au.org.intersect.exsite9.domain.SubmissionPackage; import au.org.intersect.exsite9.xml.SIPXMLBuilder; import au.org.intersect.exsite9.zip.SIPZIPBuilderRunnable; /** * A service for manipulating {@link SubmissionPackage}s */ public final class SubmissionPackageService implements ISubmissionPackageService { private final EntityManagerFactory entityManagerFactory; private final SubmissionPackageDAOFactory submissionPackageDAOFactory; private final ProjectDAOFactory projectDAOFactory; public SubmissionPackageService(final EntityManagerFactory entityManagerFactory, final SubmissionPackageDAOFactory submissionPackageDAOFactory, final ProjectDAOFactory projectDAOFactory) { this.entityManagerFactory = entityManagerFactory; this.submissionPackageDAOFactory = submissionPackageDAOFactory; this.projectDAOFactory = projectDAOFactory; } /** * @{inheritDoc} */ @Override public SubmissionPackage createSubmissionPackage(final Project project, final String name, final String description, final List<ResearchFile> researchFiles) { final SubmissionPackage submissionPackage = new SubmissionPackage(); submissionPackage.setName(name); submissionPackage.setDescription(description); submissionPackage.getResearchFiles().addAll(researchFiles); final EntityManager em = this.entityManagerFactory.createEntityManager(); try { final SubmissionPackageDAO submissionPackageDAO = this.submissionPackageDAOFactory.createInstance(em); submissionPackageDAO.createSubmissionPackage(submissionPackage); project.getSubmissionPackages().add(submissionPackage); final ProjectDAO projectDAO = this.projectDAOFactory.createInstance(em); projectDAO.updateProject(project); return submissionPackage; } finally { em.close(); } } /** * @{inheritDoc} */ @Override public SubmissionPackage updateSubmissionPackage(final SubmissionPackage submissionPackage, final String name, final String description, final List<ResearchFile> researchFiles) { submissionPackage.setName(name); submissionPackage.setDescription(description); submissionPackage.getResearchFiles().clear(); submissionPackage.getResearchFiles().addAll(researchFiles); final EntityManager em = this.entityManagerFactory.createEntityManager(); try { final SubmissionPackageDAO submissionPackageDAO = this.submissionPackageDAOFactory.createInstance(em); submissionPackageDAO.updateSubmissionPackage(submissionPackage); return submissionPackage; } finally { em.close(); } } /** * @{inheritDoc} */ @Override public SubmissionPackage updateSubmissionPackage(final SubmissionPackage submissionPackage, final List<ResearchFile> researchFiles) { return updateSubmissionPackage(submissionPackage, submissionPackage.getName(), submissionPackage.getDescription(), researchFiles); } /** * @{inheritDoc} */ @Override public SubmissionPackage findSubmissionPackageById(final Long id) { final EntityManager em = this.entityManagerFactory.createEntityManager(); try { final SubmissionPackageDAO submissionPackageDAO = this.submissionPackageDAOFactory.createInstance(em); return submissionPackageDAO.findSubmissionPackageById(id); } finally { em.close(); } } /** * @{inheritDoc} */ @Override public void deleteSubmissionPackage(final SubmissionPackage submissionPackage) { final EntityManager em = this.entityManagerFactory.createEntityManager(); try { final ProjectDAO projectDAO = this.projectDAOFactory.createInstance(em); final Project project = projectDAO.findProjectWithSubmissionPackage(submissionPackage); project.getSubmissionPackages().remove(submissionPackage); projectDAO.updateProject(project); final SubmissionPackageDAO submissionPackageDAO = this.submissionPackageDAOFactory.createInstance(em); submissionPackageDAO.deleteSubmissionPackage(submissionPackage); } finally { em.close(); } } /** * @{inheritDoc} */ @Override public String buildXMLForSubmissionPackage(Project project, SubmissionPackage submissionPackage) { final EntityManager em = this.entityManagerFactory.createEntityManager(); try { return SIPXMLBuilder.buildXML(project, GroupDAO.getGroupsContainingSelectedFiles(submissionPackage.getResearchFiles()), submissionPackage, false); } finally { em.close(); } } /** * @{inheritDoc} */ @Override public IRunnableWithProgress buildZIPForSubmissionPackage(final Project project, final SubmissionPackage submissionPackage, final File fileToWrite) { final EntityManager em = this.entityManagerFactory.createEntityManager(); try { final List<Group> selectedGroups = GroupDAO.getGroupsContainingSelectedFiles(submissionPackage.getResearchFiles()); return new SIPZIPBuilderRunnable(project, selectedGroups, submissionPackage, fileToWrite); } finally { em.close(); } } /** * @{inheritDoc} */ @Override public List<SubmissionPackage> findSubmissionPackagesWithResearchFile(final ResearchFile researchFile) { final EntityManager em = this.entityManagerFactory.createEntityManager(); try { final SubmissionPackageDAO submissionPackageDAO = submissionPackageDAOFactory.createInstance(em); return submissionPackageDAO.findSubmissionPackagesWithResearchFile(researchFile); } finally { em.close(); } } }