String queryString = "delete from ResourcePolicy where dSpaceObject.id = :dsoId AND rptype = :rptype";
Query query = createQuery(context, queryString);
query.setParameter("dsoId", dso.getID());
- query.setString("rptype", type);
+ query.setParameter("rptype", type);
query.executeUpdate();
}
diff --git a/dspace-api/src/main/java/org/dspace/checker/dao/impl/ChecksumHistoryDAOImpl.java b/dspace-api/src/main/java/org/dspace/checker/dao/impl/ChecksumHistoryDAOImpl.java
index 753bb6267d..328d4a717e 100644
--- a/dspace-api/src/main/java/org/dspace/checker/dao/impl/ChecksumHistoryDAOImpl.java
+++ b/dspace-api/src/main/java/org/dspace/checker/dao/impl/ChecksumHistoryDAOImpl.java
@@ -9,6 +9,8 @@ package org.dspace.checker.dao.impl;
import java.sql.SQLException;
import java.util.Date;
+import javax.persistence.Query;
+import javax.persistence.TemporalType;
import org.dspace.checker.ChecksumHistory;
import org.dspace.checker.ChecksumResultCode;
@@ -16,7 +18,6 @@ import org.dspace.checker.dao.ChecksumHistoryDAO;
import org.dspace.content.Bitstream;
import org.dspace.core.AbstractHibernateDAO;
import org.dspace.core.Context;
-import org.hibernate.Query;
/**
*
@@ -29,6 +30,8 @@ import org.hibernate.Query;
* @author Grace Carpenter
* @author Nathan Sarr
* @author kevinvandevelde at atmire.com
+ *
+ *
*/
public class ChecksumHistoryDAOImpl extends AbstractHibernateDAO implements ChecksumHistoryDAO {
@@ -42,7 +45,7 @@ public class ChecksumHistoryDAOImpl extends AbstractHibernateDAO
@Override
public ChecksumResult findByCode(Context context, ChecksumResultCode code) throws SQLException {
- Criteria criteria = createCriteria(context, ChecksumResult.class);
- criteria.add(Restrictions.eq("resultCode", code));
- return uniqueResult(criteria);
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, ChecksumResult.class);
+ Root checksumResultRoot = criteriaQuery.from(ChecksumResult.class);
+ criteriaQuery.select(checksumResultRoot);
+ criteriaQuery.where(criteriaBuilder.equal(checksumResultRoot.get(ChecksumResult_.resultCode), code));
+ return uniqueResult(context, criteriaQuery, false, ChecksumResult.class, -1, -1);
}
}
diff --git a/dspace-api/src/main/java/org/dspace/checker/dao/impl/MostRecentChecksumDAOImpl.java b/dspace-api/src/main/java/org/dspace/checker/dao/impl/MostRecentChecksumDAOImpl.java
index 9ed89c40e9..66ce666b9d 100644
--- a/dspace-api/src/main/java/org/dspace/checker/dao/impl/MostRecentChecksumDAOImpl.java
+++ b/dspace-api/src/main/java/org/dspace/checker/dao/impl/MostRecentChecksumDAOImpl.java
@@ -9,22 +9,27 @@ package org.dspace.checker.dao.impl;
import java.sql.SQLException;
import java.util.Date;
+import java.util.LinkedList;
import java.util.List;
+import javax.persistence.Query;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Join;
+import javax.persistence.criteria.Order;
+import javax.persistence.criteria.Root;
+import javax.persistence.criteria.Subquery;
import org.dspace.checker.ChecksumHistory;
+import org.dspace.checker.ChecksumHistory_;
+import org.dspace.checker.ChecksumResult;
import org.dspace.checker.ChecksumResultCode;
+import org.dspace.checker.ChecksumResult_;
import org.dspace.checker.MostRecentChecksum;
+import org.dspace.checker.MostRecentChecksum_;
import org.dspace.checker.dao.MostRecentChecksumDAO;
import org.dspace.content.Bitstream;
import org.dspace.core.AbstractHibernateDAO;
import org.dspace.core.Context;
-import org.hibernate.Criteria;
-import org.hibernate.Query;
-import org.hibernate.criterion.DetachedCriteria;
-import org.hibernate.criterion.Order;
-import org.hibernate.criterion.Projections;
-import org.hibernate.criterion.Property;
-import org.hibernate.criterion.Restrictions;
/**
* Hibernate implementation of the Database Access Object interface class for the MostRecentChecksum object.
@@ -43,58 +48,58 @@ public class MostRecentChecksumDAOImpl extends AbstractHibernateDAO findByNotProcessedInDateRange(Context context, Date startDate, Date endDate)
throws SQLException {
-// + "most_recent_checksum.last_process_start_date, most_recent_checksum.last_process_end_date, "
-// + "most_recent_checksum.expected_checksum, most_recent_checksum.current_checksum, "
-// + "result_description "
-// + "from checksum_results, most_recent_checksum "
-// + "where most_recent_checksum.to_be_processed = false "
-// + "and most_recent_checksum.result = checksum_results.result_code "
-// + "and most_recent_checksum.last_process_start_date >= ? "
-// + "and most_recent_checksum.last_process_start_date < ? "
-// + "order by most_recent_checksum.bitstream_id
- Criteria criteria = createCriteria(context, MostRecentChecksum.class);
- criteria.add(
- Restrictions.and(
- Restrictions.eq("toBeProcessed", false),
- Restrictions.le("processStartDate", startDate),
- Restrictions.gt("processStartDate", endDate)
- )
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, MostRecentChecksum.class);
+ Root mostRecentChecksumRoot = criteriaQuery.from(MostRecentChecksum.class);
+ criteriaQuery.select(mostRecentChecksumRoot);
+ criteriaQuery.where(criteriaBuilder.and(
+ criteriaBuilder.equal(mostRecentChecksumRoot.get(MostRecentChecksum_.toBeProcessed), false),
+ criteriaBuilder
+ .lessThanOrEqualTo(mostRecentChecksumRoot.get(MostRecentChecksum_.processStartDate), startDate),
+ criteriaBuilder.greaterThan(mostRecentChecksumRoot.get(MostRecentChecksum_.processStartDate), endDate)
+ )
);
- criteria.addOrder(Order.asc("bitstream.id"));
- return list(criteria);
+ List orderList = new LinkedList<>();
+ orderList.add(criteriaBuilder.asc(mostRecentChecksumRoot.get(MostRecentChecksum_.bitstream)));
+ criteriaQuery.orderBy(orderList);
+ return list(context, criteriaQuery, false, MostRecentChecksum.class, -1, -1);
}
@Override
public MostRecentChecksum findByBitstream(Context context, Bitstream bitstream) throws SQLException {
- Criteria criteria = createCriteria(context, MostRecentChecksum.class);
- criteria.add(Restrictions.eq("bitstream", bitstream));
- return singleResult(criteria);
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, MostRecentChecksum.class);
+ Root mostRecentChecksumRoot = criteriaQuery.from(MostRecentChecksum.class);
+ criteriaQuery.select(mostRecentChecksumRoot);
+ criteriaQuery
+ .where(criteriaBuilder.equal(mostRecentChecksumRoot.get(MostRecentChecksum_.bitstream), bitstream));
+ return singleResult(context, criteriaQuery);
}
@Override
public List findByResultTypeInDateRange(Context context, Date startDate, Date endDate,
ChecksumResultCode resultCode) throws SQLException {
-// "select bitstream_id, last_process_start_date, last_process_end_date, "
-// + "expected_checksum, current_checksum, result_description "
-// + "from most_recent_checksum, checksum_results "
-// + "where most_recent_checksum.result = checksum_results.result_code "
-// + "and most_recent_checksum.result= ? "
-// + "and most_recent_checksum.last_process_start_date >= ? "
-// + "and most_recent_checksum.last_process_start_date < ? "
-// + "order by bitstream_id";
- Criteria criteria = createCriteria(context, MostRecentChecksum.class);
- criteria.add(
- Restrictions.and(
- Restrictions.eq("checksumResult.resultCode", resultCode),
- Restrictions.le("processStartDate", startDate),
- Restrictions.gt("processStartDate", endDate)
- )
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, MostRecentChecksum.class);
+ Root mostRecentChecksumRoot = criteriaQuery.from(MostRecentChecksum.class);
+ Join mostRecentResult =
+ mostRecentChecksumRoot.join(MostRecentChecksum_.checksumResult);
+
+ criteriaQuery.select(mostRecentChecksumRoot);
+ criteriaQuery.where(criteriaBuilder.and(
+ criteriaBuilder.equal(mostRecentResult.get(ChecksumResult_.resultCode), resultCode),
+ criteriaBuilder.lessThanOrEqualTo(
+ mostRecentChecksumRoot.get(MostRecentChecksum_.processStartDate), startDate),
+ criteriaBuilder.greaterThan(mostRecentChecksumRoot.get(MostRecentChecksum_.processStartDate), endDate)
+ )
);
- criteria.addOrder(Order.asc("bitstream.id"));
- return list(criteria);
+ List orderList = new LinkedList<>();
+ orderList.add(criteriaBuilder.asc(mostRecentChecksumRoot.get(MostRecentChecksum_.bitstream)));
+ criteriaQuery.orderBy(orderList);
+ return list(context, criteriaQuery, false, MostRecentChecksum.class, -1, -1);
}
@@ -108,42 +113,52 @@ public class MostRecentChecksumDAOImpl extends AbstractHibernateDAO criteriaQuery = getCriteriaQuery(criteriaBuilder, MostRecentChecksum.class);
+ Root mostRecentChecksumRoot = criteriaQuery.from(MostRecentChecksum.class);
+ criteriaQuery.select(mostRecentChecksumRoot);
+ criteriaQuery.where(criteriaBuilder.equal(mostRecentChecksumRoot.get(MostRecentChecksum_.toBeProcessed), true));
+ List orderList = new LinkedList<>();
+ orderList.add(criteriaBuilder.asc(mostRecentChecksumRoot.get(MostRecentChecksum_.processEndDate)));
+ orderList.add(criteriaBuilder.asc(mostRecentChecksumRoot.get(MostRecentChecksum_.bitstream)));
+ criteriaQuery.orderBy(orderList);
+ return singleResult(context, criteriaQuery);
}
@Override
public MostRecentChecksum getOldestRecord(Context context, Date lessThanDate) throws SQLException {
-// "select bitstream_id "
-// + "from most_recent_checksum "
-// + "where to_be_processed = true "
-// + "and last_process_start_date < ? "
-// + "order by date_trunc('milliseconds', last_process_end_date), "
-// + "bitstream_id " + "ASC LIMIT 1";
- Criteria criteria = createCriteria(context, MostRecentChecksum.class);
- criteria.add(
- Restrictions.and(
- Restrictions.eq("toBeProcessed", true),
- Restrictions.lt("processStartDate", lessThanDate)
- ));
- criteria.addOrder(Order.asc("processEndDate")).addOrder(Order.asc("bitstream.id"));
- criteria.setMaxResults(1);
- return singleResult(criteria);
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, MostRecentChecksum.class);
+ Root mostRecentChecksumRoot = criteriaQuery.from(MostRecentChecksum.class);
+ criteriaQuery.select(mostRecentChecksumRoot);
+ criteriaQuery.where(criteriaBuilder.and(
+ criteriaBuilder.equal(mostRecentChecksumRoot.get(MostRecentChecksum_.toBeProcessed), true),
+ criteriaBuilder.lessThan(mostRecentChecksumRoot.get(MostRecentChecksum_.processStartDate), lessThanDate)
+ )
+ );
+
+ List orderList = new LinkedList<>();
+ orderList.add(criteriaBuilder.asc(mostRecentChecksumRoot.get(MostRecentChecksum_.processEndDate)));
+ orderList.add(criteriaBuilder.asc(mostRecentChecksumRoot.get(MostRecentChecksum_.bitstream)));
+ criteriaQuery.orderBy(orderList);
+
+ return singleResult(context, criteriaQuery);
}
@Override
public List findNotInHistory(Context context) throws SQLException {
- Criteria criteria = createCriteria(context, MostRecentChecksum.class);
- DetachedCriteria subCriteria = DetachedCriteria.forClass(ChecksumHistory.class);
- subCriteria.setProjection(Projections.property("bitstream.id"));
- criteria.add(Property.forName("bitstreamId").notIn(subCriteria));
- return list(criteria);
+
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, MostRecentChecksum.class);
+ Root checksumRoot = criteriaQuery.from(MostRecentChecksum.class);
+
+ Subquery subQuery = criteriaQuery.subquery(Bitstream.class);
+ Root historyRoot = subQuery.from(ChecksumHistory.class);
+ subQuery.select(historyRoot.get(ChecksumHistory_.bitstream));
+
+ criteriaQuery.where(
+ criteriaBuilder.not(checksumRoot.get(MostRecentChecksum_.bitstream).in(subQuery)));
+
+ return list(context, criteriaQuery, false, MostRecentChecksum.class, -1, -1);
}
}
diff --git a/dspace-api/src/main/java/org/dspace/content/dao/impl/BitstreamDAOImpl.java b/dspace-api/src/main/java/org/dspace/content/dao/impl/BitstreamDAOImpl.java
index fff7c42206..02e3509c31 100644
--- a/dspace-api/src/main/java/org/dspace/content/dao/impl/BitstreamDAOImpl.java
+++ b/dspace-api/src/main/java/org/dspace/content/dao/impl/BitstreamDAOImpl.java
@@ -8,10 +8,17 @@
package org.dspace.content.dao.impl;
import java.sql.SQLException;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+import javax.persistence.Query;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
import org.dspace.content.Bitstream;
+import org.dspace.content.Bitstream_;
import org.dspace.content.Collection;
import org.dspace.content.Community;
import org.dspace.content.Item;
@@ -19,9 +26,6 @@ import org.dspace.content.dao.BitstreamDAO;
import org.dspace.core.AbstractHibernateDSODAO;
import org.dspace.core.Constants;
import org.dspace.core.Context;
-import org.hibernate.Criteria;
-import org.hibernate.Query;
-import org.hibernate.criterion.Restrictions;
/**
* Hibernate implementation of the Database Access Object interface class for the Bitstream object.
@@ -38,40 +42,35 @@ public class BitstreamDAOImpl extends AbstractHibernateDSODAO impleme
@Override
public List findDeletedBitstreams(Context context) throws SQLException {
- Criteria criteria = createCriteria(context, Bitstream.class);
- criteria.add(Restrictions.eq("deleted", true));
-
- return list(criteria);
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, Bitstream.class);
+ Root bitstreamRoot = criteriaQuery.from(Bitstream.class);
+ criteriaQuery.select(bitstreamRoot);
+ criteriaQuery.where(criteriaBuilder.equal(bitstreamRoot.get(Bitstream_.deleted), true));
+ return list(context, criteriaQuery, false, Bitstream.class, -1, -1);
}
@Override
public List findDuplicateInternalIdentifier(Context context, Bitstream bitstream) throws SQLException {
- Criteria criteria = createCriteria(context, Bitstream.class);
- criteria.add(Restrictions.and(
- Restrictions.eq("internalId", bitstream.getInternalId()),
- Restrictions.not(Restrictions.eq("id", bitstream.getID()))
- ));
-
- return list(criteria);
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, Bitstream.class);
+ Root bitstreamRoot = criteriaQuery.from(Bitstream.class);
+ criteriaQuery.select(bitstreamRoot);
+ criteriaQuery.where(criteriaBuilder.and(
+ criteriaBuilder.equal(bitstreamRoot.get(Bitstream_.internalId), bitstream.getInternalId()),
+ criteriaBuilder.notEqual(bitstreamRoot.get(Bitstream_.id), bitstream.getID())
+ )
+ );
+ return list(context, criteriaQuery, false, Bitstream.class, -1, -1);
}
@Override
public List findBitstreamsWithNoRecentChecksum(Context context) throws SQLException {
-// "select bitstream.deleted, bitstream.store_number, bitstream.size_bytes, "
-// + "bitstreamformatregistry.short_description, bitstream.bitstream_id, "
-// + "bitstream.user_format_description, bitstream.internal_id, "
-// + "bitstream.source, bitstream.checksum_algorithm, bitstream.checksum, "
-// + "bitstream.name, bitstream.description "
-// + "from bitstream left outer join bitstreamformatregistry on "
-// + "bitstream.bitstream_format_id = bitstreamformatregistry.bitstream_format_id "
-// + "where not exists( select 'x' from most_recent_checksum "
-// + "where most_recent_checksum.bitstream_id = bitstream.bitstream_id )"
-
Query query = createQuery(context,
"select b from Bitstream b where b not in (select c.bitstream from " +
"MostRecentChecksum c)");
- return query.list();
+ return query.getResultList();
}
@Override
@@ -122,9 +121,14 @@ public class BitstreamDAOImpl extends AbstractHibernateDSODAO impleme
@Override
public Long countByStoreNumber(Context context, Integer storeNumber) throws SQLException {
- Criteria criteria = createCriteria(context, Bitstream.class);
- criteria.add(Restrictions.eq("storeNumber", storeNumber));
- return countLong(criteria);
+
+
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Long.class);
+
+ Root bitstreamRoot = criteriaQuery.from(Bitstream.class);
+ criteriaQuery.where(criteriaBuilder.equal(bitstreamRoot.get(Bitstream_.storeNumber), storeNumber));
+ return countLong(context, criteriaQuery, criteriaBuilder, bitstreamRoot);
}
@Override
@@ -158,9 +162,8 @@ public class BitstreamDAOImpl extends AbstractHibernateDSODAO impleme
@Override
public Iterator findAll(Context context, int limit, int offset) throws SQLException {
- Query query = createQuery(context, "select b FROM Bitstream b");
- query.setFirstResult(offset);
- query.setMaxResults(limit);
- return iterate(query);
+ Map map = new HashMap<>();
+ return findByX(context, Bitstream.class, map, true, limit, offset).iterator();
+
}
}
diff --git a/dspace-api/src/main/java/org/dspace/content/dao/impl/BitstreamFormatDAOImpl.java b/dspace-api/src/main/java/org/dspace/content/dao/impl/BitstreamFormatDAOImpl.java
index 51b0af51de..0824c5c343 100644
--- a/dspace-api/src/main/java/org/dspace/content/dao/impl/BitstreamFormatDAOImpl.java
+++ b/dspace-api/src/main/java/org/dspace/content/dao/impl/BitstreamFormatDAOImpl.java
@@ -8,16 +8,18 @@
package org.dspace.content.dao.impl;
import java.sql.SQLException;
+import java.util.LinkedList;
import java.util.List;
+import javax.persistence.Query;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
import org.dspace.content.BitstreamFormat;
+import org.dspace.content.BitstreamFormat_;
import org.dspace.content.dao.BitstreamFormatDAO;
import org.dspace.core.AbstractHibernateDAO;
import org.dspace.core.Context;
-import org.hibernate.Criteria;
-import org.hibernate.Query;
-import org.hibernate.criterion.Order;
-import org.hibernate.criterion.Restrictions;
/**
* Hibernate implementation of the Database Access Object interface class for the BitstreamFormat object.
@@ -37,11 +39,14 @@ public class BitstreamFormatDAOImpl extends AbstractHibernateDAOnull if
- * there's no bitstream format with the given MIMEtype.
+ * there's no bitstream format with the given MIMEtype.
* @throws SQLException if database error
*/
@Override
@@ -49,33 +54,39 @@ public class BitstreamFormatDAOImpl extends AbstractHibernateDAO bitstreamFormatRoot = criteriaQuery.from(BitstreamFormat.class);
+ criteriaQuery.select(bitstreamFormatRoot);
+ criteriaQuery.where(criteriaBuilder.and(
+ criteriaBuilder.equal(bitstreamFormatRoot.get(BitstreamFormat_.internal), includeInternal),
+ criteriaBuilder.like(bitstreamFormatRoot.get(BitstreamFormat_.mimetype), mimeType)
+ )
+ );
+ return singleResult(context, criteriaQuery);
}
/**
* Find a bitstream format by its (unique) short description
*
- * @param context DSpace context object
- * @param desc the short description
+ * @param context
+ * DSpace context object
+ * @param desc
+ * the short description
+ *
* @return the corresponding bitstream format, or null
if
- * there's no bitstream format with the given short description
+ * there's no bitstream format with the given short description
* @throws SQLException if database error
*/
@Override
public BitstreamFormat findByShortDescription(Context context,
String desc) throws SQLException {
- Criteria criteria = createCriteria(context, BitstreamFormat.class);
- criteria.add(Restrictions.and(
- Restrictions.eq("shortDescription", desc)
- ));
-
- return uniqueResult(criteria);
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, BitstreamFormat.class);
+ Root bitstreamFormatRoot = criteriaQuery.from(BitstreamFormat.class);
+ criteriaQuery.select(bitstreamFormatRoot);
+ criteriaQuery.where(criteriaBuilder.equal(bitstreamFormatRoot.get(BitstreamFormat_.shortDescription), desc));
+ return uniqueResult(context, criteriaQuery, false, BitstreamFormat.class, -1, -1);
}
@Override
@@ -93,14 +104,28 @@ public class BitstreamFormatDAOImpl extends AbstractHibernateDAO findNonInternal(Context context) throws SQLException {
- Criteria criteria = createCriteria(context, BitstreamFormat.class);
- criteria.add(Restrictions.and(
- Restrictions.eq("internal", false),
- Restrictions.not(Restrictions.like("shortDescription", "Unknown"))
- ));
- criteria.addOrder(Order.desc("supportLevel")).addOrder(Order.asc("shortDescription"));
- return list(criteria);
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, BitstreamFormat.class);
+ Root bitstreamFormatRoot = criteriaQuery.from(BitstreamFormat.class);
+ criteriaQuery.select(bitstreamFormatRoot);
+ criteriaQuery
+ .where(criteriaBuilder.and(criteriaBuilder.equal(bitstreamFormatRoot.get(BitstreamFormat_.internal), false),
+ criteriaBuilder.not(
+ criteriaBuilder
+ .like(bitstreamFormatRoot.get(BitstreamFormat_.shortDescription),
+ "Unknown"))
+ )
+ );
+
+
+ List orderList = new LinkedList<>();
+ orderList.add(criteriaBuilder.desc(bitstreamFormatRoot.get(BitstreamFormat_.supportLevel)));
+ orderList.add(criteriaBuilder.asc(bitstreamFormatRoot.get(BitstreamFormat_.shortDescription)));
+ criteriaQuery.orderBy(orderList);
+
+
+ return list(context, criteriaQuery, false, BitstreamFormat.class, -1, -1);
}
@@ -110,17 +135,22 @@ public class BitstreamFormatDAOImpl extends AbstractHibernateDAO findAll(Context context, Class clazz) throws SQLException {
- Criteria criteria = createCriteria(context, BitstreamFormat.class);
- criteria.addOrder(Order.asc("id"));
- return list(criteria);
+
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, BitstreamFormat.class);
+ Root bitstreamFormatRoot = criteriaQuery.from(BitstreamFormat.class);
+ criteriaQuery.select(bitstreamFormatRoot);
+
+ List orderList = new LinkedList<>();
+ orderList.add(criteriaBuilder.asc(bitstreamFormatRoot.get(BitstreamFormat_.id)));
+ criteriaQuery.orderBy(orderList);
+
+ return list(context, criteriaQuery, false, BitstreamFormat.class, -1, -1);
}
}
diff --git a/dspace-api/src/main/java/org/dspace/content/dao/impl/CollectionDAOImpl.java b/dspace-api/src/main/java/org/dspace/content/dao/impl/CollectionDAOImpl.java
index 14b1587315..9180fb3c09 100644
--- a/dspace-api/src/main/java/org/dspace/content/dao/impl/CollectionDAOImpl.java
+++ b/dspace-api/src/main/java/org/dspace/content/dao/impl/CollectionDAOImpl.java
@@ -8,11 +8,22 @@
package org.dspace.content.dao.impl;
import java.sql.SQLException;
+import java.util.AbstractMap;
import java.util.Arrays;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import javax.persistence.Query;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Join;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import org.dspace.authorize.ResourcePolicy;
+import org.dspace.authorize.ResourcePolicy_;
import org.dspace.content.Collection;
+import org.dspace.content.Collection_;
import org.dspace.content.Item;
import org.dspace.content.MetadataField;
import org.dspace.content.dao.CollectionDAO;
@@ -21,11 +32,6 @@ import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.eperson.EPerson;
import org.dspace.eperson.Group;
-import org.hibernate.Criteria;
-import org.hibernate.Query;
-import org.hibernate.criterion.Disjunction;
-import org.hibernate.criterion.Restrictions;
-import org.hibernate.transform.BasicTransformerAdapter;
/**
* Hibernate implementation of the Database Access Object interface class for the Collection object.
@@ -43,8 +49,9 @@ public class CollectionDAOImpl extends AbstractHibernateDSODAO imple
* Get all collections in the system. These are alphabetically sorted by
* collection name.
*
- * @param context DSpace context object
- * @param order order by MetadataField
+ * @param context
+ * DSpace context object
+ * @param order order by MetadataField
* @return the collections in the system
* @throws SQLException if database error
*/
@@ -75,77 +82,54 @@ public class CollectionDAOImpl extends AbstractHibernateDSODAO imple
@Override
public Collection findByTemplateItem(Context context, Item item) throws SQLException {
- Criteria criteria = createCriteria(context, Collection.class);
- criteria.add(Restrictions.eq("template_item", item));
- return uniqueResult(criteria);
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, Collection.class);
+ Root collectionRoot = criteriaQuery.from(Collection.class);
+ criteriaQuery.select(collectionRoot);
+ criteriaQuery.where(criteriaBuilder.equal(collectionRoot.get(Collection_.template), item));
+ return uniqueResult(context, criteriaQuery, false, Collection.class, -1, -1);
}
@Override
public Collection findByGroup(Context context, Group group) throws SQLException {
- Criteria criteria = createCriteria(context, Collection.class);
- criteria.add(
- Restrictions.or(
- Restrictions.eq("workflowStep1", group),
- Restrictions.eq("workflowStep2", group),
- Restrictions.eq("workflowStep3", group),
- Restrictions.eq("submitters", group),
- Restrictions.eq("admins", group)
- )
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, Collection.class);
+ Root collectionRoot = criteriaQuery.from(Collection.class);
+ criteriaQuery.select(collectionRoot);
+ criteriaQuery
+ .where(criteriaBuilder.or(criteriaBuilder.equal(collectionRoot.get(Collection_.workflowStep1), group),
+ criteriaBuilder.equal(collectionRoot.get(Collection_.workflowStep2), group),
+ criteriaBuilder.equal(collectionRoot.get(Collection_.workflowStep3), group),
+ criteriaBuilder.equal(collectionRoot.get(Collection_.submitters), group),
+ criteriaBuilder.equal(collectionRoot.get(Collection_.admins), group)
+ )
);
- return singleResult(criteria);
+ return singleResult(context, criteriaQuery);
}
@Override
public List findAuthorized(Context context, EPerson ePerson, List actions)
throws SQLException {
- // TableRowIterator tri = DatabaseManager.query(context,
-// "SELECT * FROM collection, resourcepolicy, eperson " +
-// "WHERE resourcepolicy.resource_id = collection.collection_id AND " +
-// "eperson.eperson_id = resourcepolicy.eperson_id AND "+
-// "resourcepolicy.resource_type_id = 3 AND "+
-// "( resourcepolicy.action_id = 3 OR resourcepolicy.action_id = 11 ) AND "+
-// "eperson.eperson_id = ?", context.getCurrentUser().getID());
-
- Criteria criteria = createCriteria(context, Collection.class);
- criteria.createAlias("resourcePolicies", "resourcePolicy");
-
- Disjunction actionQuery = Restrictions.or();
+ CriteriaBuilder criteriaBuilder = getCriteriaBuilder(context);
+ CriteriaQuery criteriaQuery = getCriteriaQuery(criteriaBuilder, Collection.class);
+ Root collectionRoot = criteriaQuery.from(Collection.class);
+ Join join = collectionRoot.join("resourcePolicies");
+ List orPredicates = new LinkedList();
for (Integer action : actions) {
- actionQuery.add(Restrictions.eq("resourcePolicy.actionId", action));
+ orPredicates.add(criteriaBuilder.equal(join.get(ResourcePolicy_.actionId), action));
}
- criteria.add(Restrictions.and(
- Restrictions.eq("resourcePolicy.resourceTypeId", Constants.COLLECTION),
- Restrictions.eq("resourcePolicy.eperson", ePerson),
- actionQuery
- ));
- criteria.setCacheable(true);
-
- return list(criteria);
+ Predicate orPredicate = criteriaBuilder.or(orPredicates.toArray(new Predicate[] {}));
+ criteriaQuery.select(collectionRoot);
+ criteriaQuery.where(
+ criteriaBuilder.and(criteriaBuilder.equal(join.get(ResourcePolicy_.resourceTypeId), Constants.COLLECTION),
+ criteriaBuilder.equal(join.get(ResourcePolicy_.eperson), ePerson),
+ orPredicate));
+ return list(context, criteriaQuery, true, Collection.class, -1, -1);
}
@Override
public List findAuthorizedByGroup(Context context, EPerson ePerson, List actions)
throws SQLException {
- // TableRowIterator tri = DatabaseManager.query(context,
- // "SELECT \n" +
- // " * \n" +
- // "FROM \n" +
- // " public.eperson, \n" +
- // " public.epersongroup2eperson, \n" +
- // " public.epersongroup, \n" +
- // " public.group2group, \n" +
- // " public.resourcepolicy rp_parent, \n" +
- // " public.collection\n" +
- // "WHERE \n" +
- // " epersongroup2eperson.eperson_id = eperson.eperson_id AND\n" +
- // " epersongroup.eperson_group_id = epersongroup2eperson.eperson_group_id AND\n" +
- // " group2group.child_id = epersongroup.eperson_group_id AND\n" +
- // " rp_parent.epersongroup_id = group2group.parent_id AND\n" +
- // " collection.collection_id = rp_parent.resource_id AND\n" +
- // " eperson.eperson_id = ? AND \n" +
- // " (rp_parent.action_id = 3 OR \n" +
- // " rp_parent.action_id = 11 \n" +
- // " ) AND rp_parent.resource_type_id = 3;", context.getCurrentUser().getID());
StringBuilder query = new StringBuilder();
query.append("select c from Collection c join c.resourcePolicies rp join rp.epersonGroup rpGroup WHERE ");
for (int i = 0; i < actions.size(); i++) {
@@ -159,11 +143,11 @@ public class CollectionDAOImpl extends AbstractHibernateDSODAO imple
query.append(
" AND rp.epersonGroup.id IN (select g.id from Group g where (from EPerson e where e.id = :eperson_id) in " +
"elements(epeople))");
- Query hibernateQuery = createQuery(context, query.toString());
- hibernateQuery.setParameter("eperson_id", ePerson.getID());
- hibernateQuery.setCacheable(true);
+ Query persistenceQuery = createQuery(context, query.toString());
+ persistenceQuery.setParameter("eperson_id", ePerson.getID());
+ persistenceQuery.setHint("org.hibernate.cacheable", Boolean.TRUE);
- return list(hibernateQuery);
+ return list(persistenceQuery);
}
@@ -185,12 +169,12 @@ public class CollectionDAOImpl extends AbstractHibernateDSODAO imple
String q = "select col as collection, sum(bit.sizeBytes) as totalBytes from Item i join i.collections col " +
"join i.bundles bun join bun.bitstreams bit group by col";
Query query = createQuery(context, q);
- query.setResultTransformer(new BasicTransformerAdapter() {
- @Override
- public Object transformTuple(Object[] tuple, String[] aliases) {
- return new java.util.AbstractMap.SimpleImmutableEntry<>((Collection) tuple[0], (Long) tuple[1]);
- }
- });
- return ((List>) query.list());
+
+ List