/** * 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.rest.filter; import java.util.regex.Pattern; import org.apache.log4j.Logger; import org.dspace.content.Item; import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.service.ItemService; import org.dspace.core.Context; import org.dspace.services.factory.DSpaceServicesFactory; /** * Define the set of use cases for filtering items of interest through the REST API. * @author Terry Brady, Georgetown University * */ public class ItemFilterDefsMeta implements ItemFilterList { protected static ItemService itemService = ContentServiceFactory.getInstance().getItemService(); static Logger log = Logger.getLogger(ItemFilterDefsMeta.class); public static final String CAT_META_GEN = "General Metadata Filters"; public static final String CAT_META_SPEC = "Specific Metadata Filters"; public static final String CAT_MOD = "Recently Modified"; private enum EnumItemFilterDefs implements ItemFilterTest { has_no_title("Has no dc.title", null, CAT_META_SPEC) { public boolean testItem(Context context, Item item) { return itemService.getMetadataByMetadataString(item, "dc.title").size() == 0; } }, has_no_uri("Has no dc.identifier.uri", null, CAT_META_SPEC) { public boolean testItem(Context context, Item item) { return itemService.getMetadataByMetadataString(item, "dc.identifier.uri").size() == 0; } }, has_mult_uri("Has multiple dc.identifier.uri", null, CAT_META_SPEC) { public boolean testItem(Context context, Item item) { return itemService.getMetadataByMetadataString(item, "dc.identifier.uri").size() > 1; } }, has_compound_subject("Has compound subject", null, CAT_META_SPEC) { public boolean testItem(Context context, Item item) { String regex = DSpaceServicesFactory.getInstance().getConfigurationService().getProperty("rest.report-regex-compound-subject"); return ItemFilterUtil.hasMetadataMatch(item, "dc.subject.*", Pattern.compile(regex)); } }, has_compound_author("Has compound author", null, CAT_META_SPEC) { public boolean testItem(Context context, Item item) { String regex = DSpaceServicesFactory.getInstance().getConfigurationService().getProperty("rest.report-regex-compound-author"); return ItemFilterUtil.hasMetadataMatch(item, "dc.creator,dc.contributor.author", Pattern.compile(regex)); } }, has_empty_metadata("Has empty metadata", null, CAT_META_GEN) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.hasMetadataMatch(item, "*", Pattern.compile("^\\s*$")); } }, has_unbreaking_metadata("Has unbreaking metadata", null, CAT_META_GEN) { public boolean testItem(Context context, Item item) { String regex = DSpaceServicesFactory.getInstance().getConfigurationService().getProperty("rest.report-regex-unbreaking"); return ItemFilterUtil.hasMetadataMatch(item, "*", Pattern.compile(regex)); } }, has_long_metadata("Has long metadata field", null, CAT_META_GEN) { public boolean testItem(Context context, Item item) { String regex = DSpaceServicesFactory.getInstance().getConfigurationService().getProperty("rest.report-regex-long"); return ItemFilterUtil.hasMetadataMatch(item, "*", Pattern.compile(regex)); } }, has_xml_entity("Has XML entity in metadata", null, CAT_META_GEN) { public boolean testItem(Context context, Item item) { String regex = DSpaceServicesFactory.getInstance().getConfigurationService().getProperty("rest.report-regex-xml-entity"); return ItemFilterUtil.hasMetadataMatch(item, "*", Pattern.compile(regex)); } }, has_non_ascii("Has non-ascii in metadata", null, CAT_META_GEN) { public boolean testItem(Context context, Item item) { String regex = DSpaceServicesFactory.getInstance().getConfigurationService().getProperty("rest.report-regex-non-ascii"); return ItemFilterUtil.hasMetadataMatch(item, "*", Pattern.compile(regex)); } }, has_desc_url("Has url in description", null, CAT_META_SPEC) { public boolean testItem(Context context, Item item) { String regex = DSpaceServicesFactory.getInstance().getConfigurationService().getProperty("rest.report-regex-url"); return ItemFilterUtil.hasMetadataMatch(item, "dc.description.*", Pattern.compile(regex)); } }, has_fulltext_provenance("Has fulltext in provenance", null, CAT_META_SPEC) { public boolean testItem(Context context, Item item) { String regex = DSpaceServicesFactory.getInstance().getConfigurationService().getProperty("rest.report-regex-fulltext"); return ItemFilterUtil.hasMetadataMatch(item, "dc.description.provenance", Pattern.compile(regex)); } }, no_fulltext_provenance("Doesn't have fulltext in provenance", null, CAT_META_SPEC) { public boolean testItem(Context context, Item item) { String regex = DSpaceServicesFactory.getInstance().getConfigurationService().getProperty("rest.report-regex-fulltext"); return !ItemFilterUtil.hasMetadataMatch(item, "dc.description.provenance", Pattern.compile(regex)); } }, mod_last_day("Modified in last 1 day", null, CAT_MOD) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.recentlyModified(item, 1); } }, mod_last_7_days("Modified in last 7 days", null, CAT_MOD) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.recentlyModified(item, 7); } }, mod_last_30_days("Modified in last 30 days", null, CAT_MOD) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.recentlyModified(item, 30); } }, mod_last_90_days("Modified in last 60 days", null, CAT_MOD) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.recentlyModified(item, 60); } }, ; private String title = null; private String description = null; private EnumItemFilterDefs(String title, String description, String category) { this.title = title; this.description = description; this.category = category; } private EnumItemFilterDefs() { this(null, null, null); } public String getName() { return name(); } public String getTitle() { return title; } public String getDescription() { return description; } private String category = null; public String getCategory() { return category; } } public ItemFilterDefsMeta() { } public ItemFilterTest[] getFilters() { return EnumItemFilterDefs.values(); } }