Class CitationDocumentServiceImpl

java.lang.Object
org.dspace.disseminate.CitationDocumentServiceImpl
All Implemented Interfaces:
CitationDocumentService, InitializingBean

public class CitationDocumentServiceImpl extends Object implements CitationDocumentService, 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 Details

    • 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
    • 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 Details

    • CitationDocumentServiceImpl

      protected CitationDocumentServiceImpl()
  • Method Details

    • afterPropertiesSet

      public void afterPropertiesSet() throws Exception
      Specified by:
      afterPropertiesSet in interface InitializingBean
      Throws:
      Exception
    • isCitationEnabledGlobally

      protected boolean isCitationEnabledGlobally()
    • isCitationEnabledThroughCollection

      protected boolean isCitationEnabledThroughCollection(Context context, Bitstream bitstream) throws SQLException
      Throws:
      SQLException
    • 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 "allow list" 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()
    • canGenerateCitationVersion

      public boolean canGenerateCitationVersion(Context context, Bitstream bitstream) throws SQLException
      Specified by:
      canGenerateCitationVersion in interface CitationDocumentService
      Parameters:
      context - DSpace Context
      bitstream - DSpace Bitstream
      Returns:
      true or false
      Throws:
      SQLException - if error
    • makeCitedDocument

      public org.apache.commons.lang3.tuple.Pair<byte[],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
    • getOwningCommunity

      public String getOwningCommunity(Context context, Item item)
      Description copied from interface: CitationDocumentService
      Get name of owning community
      Specified by:
      getOwningCommunity in interface CitationDocumentService
      Parameters:
      context - DSpace context
      item - DSpace Item
      Returns:
      name
    • getOwningCollection

      public String getOwningCollection(Item item)
      Description copied from interface: CitationDocumentService
      Get name of owning collection
      Specified by:
      getOwningCollection in interface CitationDocumentService
      Parameters:
      item - DSpace Item
      Returns:
      owning collection name
    • getAllMetadataSeparated

      public String getAllMetadataSeparated(Item item, String metadataKey)
      Description copied from interface: CitationDocumentService
      Get metadata separated by value separator (semicolon)
      Specified by:
      getAllMetadataSeparated in interface CitationDocumentService
      Parameters:
      item - DSpace Item
      metadataKey - metadata string
      Returns:
      string
      See Also:
    • 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