package uk.ac.ebi.fg.myequivalents.provenance.db.managers;
import java.util.Date;
import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import uk.ac.ebi.fg.myequivalents.access_control.model.User;
import uk.ac.ebi.fg.myequivalents.managers.impl.db.DbMyEquivalentsManager;
import uk.ac.ebi.fg.myequivalents.provenance.db.dao.ProvenanceRegisterEntryDAO;
import uk.ac.ebi.fg.myequivalents.provenance.interfaces.ProvRegisterEntryList;
import uk.ac.ebi.fg.myequivalents.provenance.interfaces.ProvRegistryManager;
import uk.ac.ebi.fg.myequivalents.provenance.model.ProvenanceRegisterEntry;
import uk.ac.ebi.fg.myequivalents.provenance.model.ProvenanceRegisterParameter;
import uk.ac.ebi.fg.myequivalents.utils.ManagerUtils;
import uk.ac.ebi.fg.myequivalents.utils.jaxb.JAXBUtils;
/**
* A DB-based implementation of {@link ProvRegistryManager}. As usually, operations here are committed upon invocation.
*
* <dl><dt>date</dt><dd>1 Jul 2014</dd></dl>
* @author Marco Brandizi
*
*/
public class DbProvRegistryManager extends DbMyEquivalentsManager implements ProvRegistryManager
{
ProvenanceRegisterEntryDAO provDao;
public DbProvRegistryManager ( EntityManager entityManager, String email, String apiPassword )
{
super ( entityManager, email, apiPassword );
this.userDao.enforceRole ( User.Role.EDITOR );
provDao = new ProvenanceRegisterEntryDAO ( entityManager );
}
@Override
public List<ProvenanceRegisterEntry> find ( String userEmail, String operation, Date from, Date to, List<ProvenanceRegisterParameter> params )
{
List<ProvenanceRegisterEntry> result = provDao.find ( userEmail, operation, from, to, params );
return result;
}
@Override
public String findAs ( String outputFormat, String userEmail, String operation, Date from, Date to, List<ProvenanceRegisterParameter> params )
{
ManagerUtils.checkOutputFormat ( outputFormat );
return findAsXml ( userEmail, operation, from, to, params );
}
private String findAsXml ( String userEmail, String operation, Date from, Date to, List<ProvenanceRegisterParameter> params )
{
return JAXBUtils.marshal (
new ProvRegisterEntryList ( this.find ( userEmail, operation, from, to, params ) ),
ProvRegisterEntryList.class
);
}
@Override
public List<ProvenanceRegisterEntry> findEntityMappingProv ( String entityId, List<String> validUsers )
{
return provDao.findEntityMappingProv ( entityId, validUsers );
}
@Override
public String findEntityMappingProvAs ( String outputFormat, String entityId, List<String> validUsers )
{
ManagerUtils.checkOutputFormat ( outputFormat );
return findEntityMappingProvAsXml ( entityId, validUsers );
}
private String findEntityMappingProvAsXml ( String entityId, List<String> validUsers )
{
return JAXBUtils.marshal (
new ProvRegisterEntryList ( this.findEntityMappingProv ( entityId, validUsers ) ),
ProvRegisterEntryList.class
);
}
@Override
public Set<List<ProvenanceRegisterEntry>> findMappingProv ( String xEntityId, String yEntityId, List<String> validUsers )
{
return this.provDao.findMappingProv ( xEntityId, yEntityId, validUsers );
}
@Override
public String findMappingProvAs ( String outputFormat, String xEntityId, String yEntityId, List<String> validUsers )
{
ManagerUtils.checkOutputFormat ( outputFormat );
return findMappingProvAsXml ( xEntityId, yEntityId, validUsers );
}
private String findMappingProvAsXml ( String xEntityId, String yEntityId, List<String> validUsers )
{
return JAXBUtils.marshal (
new ProvRegisterEntryList.ProvRegisterEntryNestedList ( this.findMappingProv ( xEntityId, yEntityId, validUsers ) ),
ProvRegisterEntryList.ProvRegisterEntryNestedList.class
);
}
@Override
public int purge ( Date from, Date to )
{
this.userDao.enforceRole ( User.Role.ADMIN );
EntityTransaction ts = entityManager.getTransaction ();
ts.begin ();
int result = provDao.purge ( from, to );
ts.commit ();
return result;
}
}