diff --git a/dspace-api/src/main/java/org/dspace/content/MetadataValueServiceImpl.java b/dspace-api/src/main/java/org/dspace/content/MetadataValueServiceImpl.java index e7b00ab85c..24c0652654 100644 --- a/dspace-api/src/main/java/org/dspace/content/MetadataValueServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/MetadataValueServiceImpl.java @@ -71,6 +71,12 @@ public class MetadataValueServiceImpl implements MetadataValueService { return metadataValueDAO.findByField(context, metadataField); } + @Override + public Iterator findByFieldAndValue(Context context, MetadataField metadataField, String value) + throws SQLException { + return metadataValueDAO.findByFieldAndValue(context, metadataField, value); + } + @Override public void update(Context context, MetadataValue metadataValue) throws SQLException { metadataValueDAO.save(context, metadataValue); diff --git a/dspace-api/src/main/java/org/dspace/content/dao/MetadataValueDAO.java b/dspace-api/src/main/java/org/dspace/content/dao/MetadataValueDAO.java index 393de4d96c..179621f402 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/MetadataValueDAO.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/MetadataValueDAO.java @@ -28,6 +28,9 @@ public interface MetadataValueDAO extends GenericDAO { public List findByField(Context context, MetadataField fieldId) throws SQLException; + public Iterator findByFieldAndValue(Context context, MetadataField metadataField, String value) + throws SQLException; + public Iterator findByValueLike(Context context, String value) throws SQLException; public void deleteByMetadataField(Context context, MetadataField metadataField) throws SQLException; diff --git a/dspace-api/src/main/java/org/dspace/content/dao/impl/MetadataValueDAOImpl.java b/dspace-api/src/main/java/org/dspace/content/dao/impl/MetadataValueDAOImpl.java index a4fdf57cba..e4713e5267 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/impl/MetadataValueDAOImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/impl/MetadataValueDAOImpl.java @@ -49,6 +49,17 @@ public class MetadataValueDAOImpl extends AbstractHibernateDAO im return list(context, criteriaQuery, false, MetadataValue.class, -1, -1); } + @Override + public Iterator findByFieldAndValue(Context context, MetadataField metadataField, String value) + throws SQLException { + String queryString = "SELECT m from MetadataValue m where metadata_field_id = :metadata_field_id " + + "and text_value = :text_value "; + Query query = createQuery(context, queryString); + query.setParameter("metadata_field_id", metadataField.getID()); + query.setParameter("text_value", value); + return iterate(query); + } + @Override public Iterator findByValueLike(Context context, String value) throws SQLException { String queryString = "SELECT m FROM MetadataValue m JOIN m.metadataField f " + diff --git a/dspace-api/src/main/java/org/dspace/content/service/MetadataValueService.java b/dspace-api/src/main/java/org/dspace/content/service/MetadataValueService.java index ce3c0094b3..1cf26e37f1 100644 --- a/dspace-api/src/main/java/org/dspace/content/service/MetadataValueService.java +++ b/dspace-api/src/main/java/org/dspace/content/service/MetadataValueService.java @@ -63,6 +63,18 @@ public interface MetadataValueService { public List findByField(Context context, MetadataField metadataField) throws IOException, SQLException; + /** + * Retrieves matching MetadataValues for a given field and value. + * + * @param context dspace context + * @param metadataField The field that must match + * @param value The value that must match + * @return the matching MetadataValues + * @throws SQLException if database error + */ + public Iterator findByFieldAndValue(Context context, MetadataField metadataField, String value) + throws SQLException; + /** * Update the metadata value in the database. *