/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package edu.harvard.iq.dataverse;
import edu.harvard.iq.dataverse.util.LruCache;
import java.util.List;
import java.util.Set;
import java.util.logging.Logger;
import javax.ejb.Stateless;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
/**
*
* @author skraffmiller
*/
@Stateless
@Named
public class DataverseFieldTypeInputLevelServiceBean {
// private static final Logger logger = Logger.getLogger(DataverseFieldTypeInputLevelServiceBean.class.getCanonicalName());
public static final LruCache<Long, List<DataverseFieldTypeInputLevel>> cache = new LruCache();
@PersistenceContext(unitName = "VDCNet-ejbPU")
private EntityManager em;
public List<DataverseFieldTypeInputLevel> findByDataverseId(Long dataverseId) {
List<DataverseFieldTypeInputLevel> res = cache.get(dataverseId);
if (res == null) {
Query query = em.createNamedQuery("DataverseFieldTypeInputLevel.findByDataverseId", DataverseFacet.class);
query.setParameter("dataverseId", dataverseId);
res = query.getResultList();
cache.put(dataverseId, res);
}
return res;
}
private void msg(String s){
//logger.fine(s);
}
/**
* Find a list of DataverseFieldTypeInputLevel objects
* Search criteria:
* - Dataverse Id,
* - list of DatasetField Ids
*
* @param dataverseId
* @param datasetFieldIdList
* @return List of DataverseFieldTypeInputLevel
*/
public List<DataverseFieldTypeInputLevel> findByDataverseIdAndDatasetFieldTypeIdList( Long dataverseId, List<Long> datasetFieldIdList){
msg("---- findByDataverseIdAndDatasetFieldTypeIdList ----");
if (datasetFieldIdList==null || datasetFieldIdList.size()==0){
return null;
}
if (dataverseId == null){
return null;
}
Query query = em.createNamedQuery("DataverseFieldTypeInputLevel.findByDataverseIdAndDatasetFieldTypeIdList", DataverseFieldTypeInputLevel.class);
query.setParameter("datasetFieldIdList", datasetFieldIdList);
query.setParameter("dataverseId", dataverseId);
try{
return query.getResultList();
/*List res = query.getResultList();
msg("Number of results: " + res.size());
return res;*/
} catch ( NoResultException nre ) {
return null;
}
}
//
// Query query = em.createQuery("select object(o) from MapLayerMetadata as o where o.dataset=:dataset");// order by o.name");
// query.setParameter("dataset", dataset);
public DataverseFieldTypeInputLevel findByDataverseIdDatasetFieldTypeId(Long dataverseId, Long datasetFieldTypeId) {
Query query = em.createNamedQuery("DataverseFieldTypeInputLevel.findByDataverseIdDatasetFieldTypeId", DataverseFieldTypeInputLevel.class);
query.setParameter("dataverseId", dataverseId);
query.setParameter("datasetFieldTypeId", datasetFieldTypeId);
try{
return (DataverseFieldTypeInputLevel) query.getSingleResult();
} catch ( NoResultException nre ) {
return null;
}
}
public void delete(DataverseFieldTypeInputLevel dataverseFieldTypeInputLevel) {
em.remove(em.merge(dataverseFieldTypeInputLevel));
cache.invalidate();
}
public void deleteFacetsFor(Dataverse d) {
em.createNamedQuery("DataverseFieldTypeInputLevel.removeByOwnerId")
.setParameter("ownerId", d.getId())
.executeUpdate();
cache.invalidate(d.getId());
}
public void create(DataverseFieldTypeInputLevel dataverseFieldTypeInputLevel) {
em.persist(dataverseFieldTypeInputLevel);
}
}