/*
* 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 javax.ejb.Stateless;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
/**
*
* @author skraffmiller
*/
@Stateless
@Named
public class DatasetLinkingServiceBean implements java.io.Serializable {
@PersistenceContext(unitName = "VDCNet-ejbPU")
private EntityManager em;
/**
* @todo Should this method simply be deleted? It isn't used anywhere and is
* throwing exceptions: Syntax error parsing [select object(o.dataverse.id)
* from DatasetLinkingDataverse as o where o.linkingDataverse.id
* =:linkingDataverseId order by o.id]
*/
@Deprecated
public List<Dataset> findLinkedDataverses(Long linkingDataverseId) {
List<Dataset> retList = new ArrayList();
Query query = em.createQuery("select object(o.dataverse.id) from DatasetLinkingDataverse as o where o.linkingDataverse.id =:linkingDataverseId order by o.id");
query.setParameter("linkingDataverseId", linkingDataverseId);
for (Object o : query.getResultList()) {
DatasetLinkingDataverse convterted = (DatasetLinkingDataverse) o;
retList.add(convterted.getDataset());
}
return retList;
}
public List<Dataset> findDatasetsThisDataverseIdHasLinkedTo(Long dataverseId) {
List<Dataset> datasets = new ArrayList<>();
TypedQuery<DatasetLinkingDataverse> typedQuery = em.createQuery("SELECT OBJECT(o) FROM DatasetLinkingDataverse AS o WHERE o.linkingDataverse.id = :dataverseId", DatasetLinkingDataverse.class);
typedQuery.setParameter("dataverseId", dataverseId);
List<DatasetLinkingDataverse> datasetLinkingDataverses = typedQuery.getResultList();
for (DatasetLinkingDataverse datasetLinkingDataverse : datasetLinkingDataverses) {
datasets.add(datasetLinkingDataverse.getDataset());
}
return datasets;
}
public List<Dataverse> findLinkingDataverses(Long datasetId) {
List<Dataverse> retList = new ArrayList();
for (DatasetLinkingDataverse dld : findDatasetLinkingDataverses(datasetId)) {
retList.add(dld.getLinkingDataverse());
}
return retList;
}
public List<DatasetLinkingDataverse> findDatasetLinkingDataverses(Long datasetId) {
return em.createQuery("select object(o) from DatasetLinkingDataverse as o where o.dataset.id =:datasetId order by o.id")
.setParameter("datasetId", datasetId)
.getResultList();
}
public void save(DatasetLinkingDataverse datasetLinkingDataverse) {
if (datasetLinkingDataverse.getId() == null) {
em.persist(datasetLinkingDataverse);
} else {
em.merge(datasetLinkingDataverse);
}
}
public boolean alreadyLinked(Dataverse dataverse, Dataset dataset) {
TypedQuery<DatasetLinkingDataverse> typedQuery = em.createQuery("SELECT OBJECT(o) FROM DatasetLinkingDataverse AS o WHERE o.linkingDataverse.id = :dataverseId AND o.dataset.id = :datasetId", DatasetLinkingDataverse.class);
typedQuery.setParameter("dataverseId", dataverse.getId());
typedQuery.setParameter("datasetId", dataset.getId());
return !typedQuery.getResultList().isEmpty();
}
}