/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.content.dao.impl;
import org.dspace.content.BitstreamFormat;
import org.dspace.content.dao.BitstreamFormatDAO;
import org.dspace.core.Context;
import org.dspace.core.AbstractHibernateDAO;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import java.sql.SQLException;
import java.util.List;
/**
* Hibernate implementation of the Database Access Object interface class for the BitstreamFormat object.
* This class is responsible for all database calls for the BitstreamFormat object and is autowired by spring
* This class should never be accessed directly.
*
* @author kevinvandevelde at atmire.com
*/
public class BitstreamFormatDAOImpl extends AbstractHibernateDAO<BitstreamFormat> implements BitstreamFormatDAO
{
protected BitstreamFormatDAOImpl()
{
super();
}
/**
* Find a bitstream format by its (unique) MIME type.
* If more than one bitstream format has the same MIME type, the
* one returned is unpredictable.
*
* @param context
* DSpace context object
* @param mimeType
* MIME type value
* @param includeInternal whether to include internal mimetypes
*
* @return the corresponding bitstream format, or <code>null</code> if
* there's no bitstream format with the given MIMEtype.
* @throws SQLException if database error
*/
@Override
public BitstreamFormat findByMIMEType(Context context, String mimeType, boolean includeInternal) throws SQLException
{
// NOTE: Avoid internal formats since e.g. "License" also has
// a MIMEtype of text/plain.
Criteria criteria = createCriteria(context, BitstreamFormat.class);
criteria.add(Restrictions.and(
Restrictions.eq("internal", includeInternal),
Restrictions.like("mimetype", mimeType)
));
return singleResult(criteria);
}
/**
* Find a bitstream format by its (unique) short description
*
* @param context
* DSpace context object
* @param desc
* the short description
*
* @return the corresponding bitstream format, or <code>null</code> if
* 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);
}
@Override
public int updateRemovedBitstreamFormat(Context context, BitstreamFormat deletedBitstreamFormat, BitstreamFormat newBitstreamFormat) throws SQLException {
// Set bitstreams with this format to "unknown"
Query query = createQuery(context, "update Bitstream set bitstreamFormat = :unknown_format where bitstreamFormat = :deleted_format");
query.setParameter("unknown_format", newBitstreamFormat);
query.setParameter("deleted_format", deletedBitstreamFormat);
return query.executeUpdate();
}
@Override
public List<BitstreamFormat> 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);
}
@Override
public List<BitstreamFormat> findByFileExtension(Context context, String extension) throws SQLException {
Query query = createQuery(context, "from BitstreamFormat bf where :extension in elements(bf.fileExtensions)");
query.setParameter("extension", extension);
// Criteria criteria = createCriteria(context, BitstreamFormat.class, "bitstreamFormat");
// criteria.createAlias("bitstreamFormat.fileExtensions", "extension");
// criteria.add(Restrictions.eq("extension",extension ));
return list(query);
}
@Override
public List<BitstreamFormat> findAll(Context context, Class clazz) throws SQLException {
Criteria criteria = createCriteria(context, BitstreamFormat.class);
criteria.addOrder(Order.asc("id"));
return list(criteria);
}
}