Class CitationDocumentServiceImpl

  • All Implemented Interfaces:
    CitationDocumentService, org.springframework.beans.factory.InitializingBean

    public class CitationDocumentServiceImpl
    extends Object
    implements CitationDocumentService, org.springframework.beans.factory.InitializingBean
    The Citation Document produces a dissemination package (DIP) that is different that the archival package (AIP). In this case we append the descriptive metadata to the end (configurable) of the document. i.e. last page of PDF. So instead of getting the original PDF, you get a cPDF (with citation information added).
    Author:
    Peter Dietz (peter@longsight.com)
    • Field Detail

      • VALID_TYPES

        protected final Set<String> VALID_TYPES
        A set of MIME types that can have a citation page added to them. That is, MIME types in this set can be converted to a PDF which is then prepended with a citation page.
      • PDF_MIMES

        protected final Set<String> PDF_MIMES
        A set of MIME types that refer to a PDF
      • RASTER_MIMES

        protected final Set<String> RASTER_MIMES
        A set of MIME types that refer to a JPEG, PNG, or GIF
      • SVG_MIMES

        protected final Set<String> SVG_MIMES
        A set of MIME types that refer to a SVG
      • citationEnabledCollectionsList

        protected List<String> citationEnabledCollectionsList
        List of all enabled collections, inherited/determined for those under communities.
      • tempDir

        protected File tempDir
      • header1

        protected String[] header1
      • header2

        protected String[] header2
      • fields

        protected String[] fields
      • footer

        protected String footer
      • citationPageFormat

        protected org.apache.pdfbox.pdmodel.common.PDRectangle citationPageFormat
        Citation page format
      • authorizeService

        @Autowired(required=true)
        protected AuthorizeService authorizeService
      • bitstreamService

        @Autowired(required=true)
        protected BitstreamService bitstreamService
      • communityService

        @Autowired(required=true)
        protected CommunityService communityService
      • itemService

        @Autowired(required=true)
        protected ItemService itemService
      • configurationService

        @Autowired(required=true)
        protected ConfigurationService configurationService
      • handleService

        @Autowired(required=true)
        protected HandleService handleService
      • citationEnabledGlobally

        protected Boolean citationEnabledGlobally
        Boolean to determine is citation-functionality is enabled globally for entire site. config/module/citation-page: enable_globally, default false. true=on, false=off
      • citationAsFirstPage

        protected Boolean citationAsFirstPage
        Should the citation page be the first page of the document, or the last page? default = true. true = first page, false = last page citation_as_first_page=true
    • Constructor Detail

      • CitationDocumentServiceImpl

        protected CitationDocumentServiceImpl()
    • Method Detail

      • afterPropertiesSet

        public void afterPropertiesSet()
                                throws Exception
        Specified by:
        afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
        Throws:
        Exception
      • isCitationEnabledGlobally

        protected boolean isCitationEnabledGlobally()
      • isCitationEnabledForBitstream

        public Boolean isCitationEnabledForBitstream​(Bitstream bitstream,
                                                     Context context)
                                              throws SQLException
        Description copied from interface: CitationDocumentService
        Repository policy can specify to have a custom citation cover/tail page to the document, which embeds metadata. We need to determine if we will intercept this bitstream download, and give out a citation dissemination rendition. What will trigger a redirect/intercept? Citation enabled globally (all citable bitstreams will get "watermarked") modules/disseminate-citation: enable_globally OR The container is this object is whitelist enabled. - community: modules/disseminate-citation: enabled_communities - collection: modules/disseminate-citation: enabled_collections AND This User is not an admin. (Admins need to be able to view the "raw" original instead.) AND This object is citation-able (presently, just PDF) The module must be enabled, before the permission level checks happen.
        Specified by:
        isCitationEnabledForBitstream in interface CitationDocumentService
        Parameters:
        bitstream - DSpace bitstream
        context - DSpace context
        Returns:
        true or false
        Throws:
        SQLException - if error
      • isCitationFirstPage

        protected Boolean isCitationFirstPage()
      • makeCitedDocument

        public org.apache.commons.lang3.tuple.Pair<InputStream,​Long> makeCitedDocument​(Context context,
                                                                                             Bitstream bitstream)
                                                                                      throws IOException,
                                                                                             SQLException,
                                                                                             AuthorizeException
        Description copied from interface: CitationDocumentService
        Creates a cited document from the given bitstream of the given item. This requires that bitstream is contained in item.

        The Process for adding a cover page is as follows:

        1. Load source file into PdfReader and create a Document to put our cover page into.
        2. Create cover page and add content to it.
        3. Concatenate the coverpage and the source document.
        Specified by:
        makeCitedDocument in interface CitationDocumentService
        Parameters:
        context - DSpace context
        bitstream - The source bitstream being cited. This must be a PDF.
        Returns:
        The temporary File that is the finished, cited document.
        Throws:
        IOException - if IO error
        SQLException - if database error
        AuthorizeException - if authorization error
      • generateCoverPage

        protected void generateCoverPage​(Context context,
                                         org.apache.pdfbox.pdmodel.PDDocument document,
                                         org.apache.pdfbox.pdmodel.PDPage coverPage,
                                         Item item)
                                  throws IOException
        Throws:
        IOException
      • addCoverPageToDocument

        protected void addCoverPageToDocument​(org.apache.pdfbox.pdmodel.PDDocument document,
                                              org.apache.pdfbox.pdmodel.PDDocument sourceDocument,
                                              org.apache.pdfbox.pdmodel.PDPage coverPage)
      • drawStringWordWrap

        public int drawStringWordWrap​(org.apache.pdfbox.pdmodel.PDPage page,
                                      org.apache.pdfbox.pdmodel.PDPageContentStream contentStream,
                                      String text,
                                      int startX,
                                      int startY,
                                      org.apache.pdfbox.pdmodel.font.PDFont pdfFont,
                                      float fontSize)
                               throws IOException
        Specified by:
        drawStringWordWrap in interface CitationDocumentService
        Parameters:
        page - page
        contentStream - content stream
        text - text to draw
        startX - x-coordinate of word
        startY - y-coordinate of word
        pdfFont - font
        fontSize - size of font
        Returns:
        integer
        Throws:
        IOException - if IO error
      • drawTable

        public void drawTable​(org.apache.pdfbox.pdmodel.PDPage page,
                              org.apache.pdfbox.pdmodel.PDPageContentStream contentStream,
                              float y,
                              float margin,
                              String[][] content,
                              org.apache.pdfbox.pdmodel.font.PDFont font,
                              int fontSize,
                              boolean cellBorders)
                       throws IOException
        Specified by:
        drawTable in interface CitationDocumentService
        Parameters:
        page - page
        contentStream - content stream
        y - the y-coordinate of the first row
        margin - the padding on left and right of table
        content - a 2d array containing the table data
        font - PDFont
        fontSize - size of font (int)
        cellBorders - whether to include cellBorders
        Throws:
        IOException - if error