/** * 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.List; import org.dspace.content.Item; import org.dspace.core.Context; import org.dspace.rest.filter.ItemFilterUtil.BundleName; 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 ItemFilterDefsMisc implements ItemFilterList { public static final String CAT_MISC = "Bitstream Bundle Filters"; public static final String CAT_MIME_SUPP = "Supported MIME Type Filters"; private enum EnumItemFilterDefs implements ItemFilterTest { has_only_supp_image_type("Item Image Bitstreams are Supported", null, CAT_MIME_SUPP) { public boolean testItem(Context context, Item item) { int imageCount = ItemFilterUtil.countOriginalBitstreamMimeStartsWith(context, item, "image/"); if (imageCount == 0) { return false; } int suppImageCount = ItemFilterUtil.countOriginalBitstreamMime(context, item, ItemFilterUtil.getSupportedImageMimeTypes()); return (imageCount == suppImageCount); } }, has_unsupp_image_type("Item has Image Bitstream that is Unsupported", null, CAT_MIME_SUPP) { public boolean testItem(Context context, Item item) { int imageCount = ItemFilterUtil.countOriginalBitstreamMimeStartsWith(context, item, "image/"); if (imageCount == 0) { return false; } int suppImageCount = ItemFilterUtil.countOriginalBitstreamMime(context, item, ItemFilterUtil.getSupportedImageMimeTypes()); return (imageCount - suppImageCount) > 0; } }, has_only_supp_doc_type("Item Document Bitstreams are Supported", null, CAT_MIME_SUPP) { public boolean testItem(Context context, Item item) { int docCount = ItemFilterUtil.countOriginalBitstreamMime(context, item, ItemFilterUtil.getDocumentMimeTypes()); if (docCount == 0) { return false; } int suppDocCount = ItemFilterUtil.countOriginalBitstreamMime(context, item, ItemFilterUtil.getSupportedDocumentMimeTypes()); return docCount == suppDocCount; } }, has_unsupp_doc_type("Item has Document Bitstream that is Unsupported", null, CAT_MIME_SUPP) { public boolean testItem(Context context, Item item) { int docCount = ItemFilterUtil.countOriginalBitstreamMime(context, item, ItemFilterUtil.getDocumentMimeTypes()); if (docCount == 0) { return false; } int suppDocCount = ItemFilterUtil.countOriginalBitstreamMime(context, item, ItemFilterUtil.getSupportedDocumentMimeTypes()); return (docCount - suppDocCount) > 0; } }, has_small_pdf("Has unusually small PDF", null, ItemFilterDefs.CAT_MIME) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.countBitstreamSmallerThanMinSize(context, BundleName.ORIGINAL, item, ItemFilterDefs.MIMES_PDF, "rest.report-pdf-min-size") > 0; } }, has_large_pdf("Has unusually large PDF", null, ItemFilterDefs.CAT_MIME) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.countBitstreamLargerThanMaxSize(context, BundleName.ORIGINAL, item, ItemFilterDefs.MIMES_PDF, "rest.report-pdf-max-size") > 0; } }, has_unsupported_bundle("Has bitstream in an unsuppored bundle", null, CAT_MISC) { public boolean testItem(Context context, Item item) { String[] bundleList = DSpaceServicesFactory.getInstance().getConfigurationService().getArrayProperty("rest.report-supp-bundles"); return ItemFilterUtil.hasUnsupportedBundle(item, bundleList); } }, has_small_thumbnail("Has unusually small thumbnail", null, CAT_MISC) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.countBitstreamSmallerThanMinSize(context, BundleName.THUMBNAIL, item, ItemFilterDefs.MIMES_JPG, "rest.report-thumbnail-min-size") > 0; } }, has_doc_without_text("Has document bitstream without TEXT item", null, ItemFilterDefs.CAT_MIME) { public boolean testItem(Context context, Item item) { int countDoc = ItemFilterUtil.countOriginalBitstreamMime(context, item, ItemFilterUtil.getDocumentMimeTypes()); if (countDoc == 0) { return false; } int countText = ItemFilterUtil.countBitstream(BundleName.TEXT, item); return countDoc > countText; } }, has_original_without_thumbnail("Has original bitstream without thumbnail", null, CAT_MISC) { public boolean testItem(Context context, Item item) { int countBit = ItemFilterUtil.countOriginalBitstream(item); if (countBit == 0) { return false; } int countThumb = ItemFilterUtil.countBitstream(BundleName.THUMBNAIL, item); return countBit > countThumb; } }, has_invalid_thumbnail_name("Has invalid thumbnail name (assumes one thumbnail for each original)", null, CAT_MISC) { public boolean testItem(Context context, Item item) { List<String> originalNames = ItemFilterUtil.getBitstreamNames(BundleName.ORIGINAL, item); List<String> thumbNames = ItemFilterUtil.getBitstreamNames(BundleName.THUMBNAIL, item); if (thumbNames.size() != originalNames.size()) { return false; } for (String name: originalNames) { if (!thumbNames.contains(name+".jpg")) { return true; } } return false; } }, has_non_generated_thumb("Has non generated thumbnail", null, CAT_MISC) { public boolean testItem(Context context, Item item) { String[] generatedThumbDesc = DSpaceServicesFactory.getInstance().getConfigurationService().getArrayProperty("rest.report-gen-thumbnail-desc"); int countThumb = ItemFilterUtil.countBitstream(BundleName.THUMBNAIL, item); if (countThumb == 0) { return false; } int countGen = ItemFilterUtil.countBitstreamByDesc(BundleName.THUMBNAIL, item, generatedThumbDesc); return (countThumb > countGen); } }, no_license("Doesn't have a license", null, CAT_MISC) { public boolean testItem(Context context, Item item) { return ItemFilterUtil.countBitstream(BundleName.LICENSE, item) == 0; } }, has_license_documentation("Has documentation in the license bundle", null, CAT_MISC) { public boolean testItem(Context context, Item item) { List<String> names = ItemFilterUtil.getBitstreamNames(BundleName.LICENSE, item); for (String name: names) { if (!name.equals("license.txt")) { return true; } } return false; } }, ; 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 ItemFilterDefsMisc() { } public ItemFilterTest[] getFilters() { return EnumItemFilterDefs.values(); } }