/*
* 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 java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
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 skraffmiller
*/
@Stateless
@Named
public class FeaturedDataverseServiceBean {
@PersistenceContext(unitName = "VDCNet-ejbPU")
private EntityManager em;
@EJB
DataverseServiceBean dataverseService;
private static final Logger logger = Logger.getLogger(FeaturedDataverseServiceBean.class.getCanonicalName());
public List<DataverseFeaturedDataverse> findByDataverseId(Long dataverseId) {
Query query = em.createQuery("select object(o) from DataverseFeaturedDataverse as o where o.dataverse.id = :dataverseId order by o.displayOrder");
query.setParameter("dataverseId", dataverseId);
return query.getResultList();
}
public List<Dataverse> findByDataverseIdQuick(Long dataverseId) {
List<Object[]> searchResults = null;
try {
//searchResults = em.createNativeQuery("SELECT id, alias, name FROM dataverse WHERE id IN (select featureddataverse_id from DataverseFeaturedDataverse where dataverse_id = "+dataverseId+" order by displayOrder)").getResultList();
searchResults = em.createNativeQuery("SELECT d.id, d.alias, d.name FROM dataverse d, DataverseFeaturedDataverse f WHERE f.featureddataverse_id = d.id AND f.dataverse_id = "+dataverseId+" order by f.displayOrder").getResultList();
} catch (Exception ex) {
return null;
}
List<Dataverse> ret = new ArrayList<>();
for (Object[] result : searchResults) {
Long id = (Long)result[0];
if (id == null) {
continue;
}
Dataverse dataverse = new Dataverse();
dataverse.setId(id);
if (result[1] != null) {
dataverse.setAlias((String)result[1]);
}
if (result[2] != null) {
dataverse.setName((String)result[2]);
}
dataverse.setDataverseTheme(dataverseService.findDataverseThemeByIdQuick(id));
if (dataverse.getDataverseTheme()!=null){
logger.fine("THEME: "+dataverse.getDataverseTheme().getLogo()+", "+dataverse.getDataverseTheme().getLogoFormat());
}
ret.add(dataverse);
}
return ret;
}
public List<DataverseFeaturedDataverse> findByRootDataverse() {
return em.createQuery("select object(o) from DataverseFeaturedDataverse as o where o.dataverse.id = 1 order by o.displayOrder").getResultList();
}
public void delete(DataverseFeaturedDataverse dataverseFeaturedDataverse) {
em.remove(em.merge(dataverseFeaturedDataverse));
}
public void deleteFeaturedDataversesFor( Dataverse d ) {
em.createNamedQuery("DataverseFeaturedDataverse.removeByOwnerId")
.setParameter("ownerId", d.getId())
.executeUpdate();
}
public void create(int diplayOrder, Long featuredDataverseId, Long dataverseId) {
DataverseFeaturedDataverse dataverseFeaturedDataverse = new DataverseFeaturedDataverse();
dataverseFeaturedDataverse.setDisplayOrder(diplayOrder);
Dataverse dataverse = (Dataverse)em.find(Dataverse.class,dataverseId);
dataverseFeaturedDataverse.setDataverse(dataverse);
Dataverse featuredDataverse = (Dataverse)em.find(Dataverse.class,featuredDataverseId);
dataverseFeaturedDataverse.setFeaturedDataverse(featuredDataverse);
em.persist(dataverseFeaturedDataverse);
}
}