package edu.harvard.iq.dataverse;
import edu.harvard.iq.dataverse.util.LruCache;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
/**
*
* @author xyang
* @author Michael Bar-Sinai
*/
@Stateless
@Named
public class DataverseFacetServiceBean implements java.io.Serializable {
public static final LruCache<Long,List<DataverseFacet>> cache = new LruCache();
@PersistenceContext(unitName = "VDCNet-ejbPU")
private EntityManager em;
@EJB
DataverseServiceBean dataverses;
public List<DataverseFacet> findByDataverseId(Long dataverseId) {
List<DataverseFacet> res = cache.get(dataverseId);
if ( res == null ) {
Query query = em.createNamedQuery("DataverseFacet.findByDataverseId", DataverseFacet.class);
query.setParameter("dataverseId", dataverseId);
res = query.getResultList();
cache.put(dataverseId, res);
}
return res;
}
public void delete(DataverseFacet dataverseFacet) {
em.remove(em.merge(dataverseFacet));
cache.invalidate();
}
public void deleteFacetsFor( Dataverse d ) {
em.createNamedQuery("DataverseFacet.removeByOwnerId")
.setParameter("ownerId", d.getId())
.executeUpdate();
cache.invalidate(d.getId());
}
public DataverseFacet create(int displayOrder, DatasetFieldType fieldType, Dataverse ownerDv) {
DataverseFacet dataverseFacet = new DataverseFacet();
dataverseFacet.setDisplayOrder(displayOrder);
dataverseFacet.setDatasetFieldType(fieldType);
dataverseFacet.setDataverse(ownerDv);
ownerDv.getDataverseFacets().add(dataverseFacet);
em.persist(dataverseFacet);
return dataverseFacet;
}
public DataverseFacet create(int displayOrder, Long datasetFieldTypeId, Long dataverseId) {
return create( displayOrder,
(DatasetFieldType)em.find(DatasetFieldType.class,datasetFieldTypeId),
dataverses.find(dataverseId) );
}
}