/** * 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 org.dspace.content.Item; import org.dspace.core.Context; /** * Define the set of use cases for filtering items of interest through the REST API. * @author Terry Brady, Georgetown University * */ public class ItemFilterDefs implements ItemFilterList { public static final String CAT_ITEM = "Item Property Filters"; public static final String CAT_BASIC = "Basic Bitstream Filters"; public static final String CAT_MIME = "Bitstream Filters by MIME Type"; public static final String[] MIMES_PDF = {"application/pdf"}; public static final String[] MIMES_JPG = {"image/jpeg"}; private enum EnumItemFilterDefs implements ItemFilterTest { is_item("Is Item - always true", null, CAT_ITEM) { public boolean testItem(Context context, Item item) { return true; } }, is_withdrawn("Withdrawn Items", null, CAT_ITEM) { public boolean testItem(Context context, Item item) { return item.isWithdrawn(); } }, is_not_withdrawn("Available Items - Not Withdrawn", null, CAT_ITEM) { public boolean testItem(Context context, Item item) { return !item.isWithdrawn(); } }, is_discoverable("Discoverable Items - Not Private", null, CAT_ITEM) { public boolean testItem(Context context, Item item) { return item.isDiscoverable(); } }, is_not_discoverable("Not Discoverable - Private Item", null, CAT_ITEM) { public boolean testItem(Context context, Item item) { return !item.isDiscoverable(); } }, has_multiple_originals("Item has Multiple Original Bitstreams", null, CAT_BASIC) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.countOriginalBitstream(item) > 1; } }, has_no_originals("Item has No Original Bitstreams", null, CAT_BASIC) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.countOriginalBitstream(item) == 0; } }, has_one_original("Item has One Original Bitstream", null, CAT_BASIC) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.countOriginalBitstream(item) == 1; } }, has_doc_original("Item has a Doc Original Bitstream (PDF, Office, Text, HTML, XML, etc)", null, CAT_MIME) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.countOriginalBitstreamMime(context, item, ItemFilterUtil.getDocumentMimeTypes()) > 0; } }, has_image_original("Item has an Image Original Bitstream", null, CAT_MIME) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.countOriginalBitstreamMimeStartsWith(context, item, "image") > 0; } }, has_unsupp_type("Has Other Bitstream Types (not Doc or Image)", null, ItemFilterDefs.CAT_MIME) { public boolean testItem(Context context, Item item) { int bitCount = ItemFilterUtil.countOriginalBitstream(item); if (bitCount == 0) { return false; } int docCount = ItemFilterUtil.countOriginalBitstreamMime(context, item, ItemFilterUtil.getDocumentMimeTypes()); int imgCount = ItemFilterUtil.countOriginalBitstreamMimeStartsWith(context, item, "image"); return (bitCount - docCount - imgCount) > 0; } }, has_mixed_original("Item has multiple types of Original Bitstreams (Doc, Image, Other)", null, CAT_MIME) { public boolean testItem(Context context, Item item) { int countBit = ItemFilterUtil.countOriginalBitstream(item); if (countBit <= 1) return false; int countDoc = ItemFilterUtil.countOriginalBitstreamMime(context, item, ItemFilterUtil.getDocumentMimeTypes()); if (countDoc > 0) { return countDoc != countBit; } int countImg = ItemFilterUtil.countOriginalBitstreamMimeStartsWith(context, item, "image"); if (countImg > 0) { return countImg != countBit; } return false; } }, has_pdf_original("Item has a PDF Original Bitstream", null, CAT_MIME) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.countOriginalBitstreamMime(context, item, MIMES_PDF) > 0; } }, has_jpg_original("Item has JPG Original Bitstream", null, CAT_MIME) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.countOriginalBitstreamMime(context, item, MIMES_JPG) > 0; } }, ; 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 ItemFilterDefs() { } public ItemFilterTest[] getFilters() { return EnumItemFilterDefs.values(); } }