/**
* 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.disseminate.service;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.Bitstream;
import org.dspace.content.Item;
import org.dspace.core.Context;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
/**
* 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)
*/
public 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.
* @param bitstream DSpace bitstream
* @param context DSpace context
* @throws SQLException if error
* @return true or false
*/
public Boolean isCitationEnabledForBitstream(Bitstream bitstream, Context context) throws SQLException;
/**
*
* @param context DSpace Context
* @param bitstream DSpace Bitstream
* @return true or false
* @throws SQLException if error
*/
public boolean canGenerateCitationVersion(Context context, Bitstream bitstream) throws SQLException;
/**
* Creates a
* cited document from the given bitstream of the given item. This
* requires that bitstream is contained in item.
* <p>
* The Process for adding a cover page is as follows:
* <ol>
* <li> Load source file into PdfReader and create a
* Document to put our cover page into.</li>
* <li> Create cover page and add content to it.</li>
* <li> Concatenate the coverpage and the source
* document.</li>
* </ol>
*
* @param context DSpace context
* @param bitstream The source bitstream being cited. This must be a PDF.
* @return The temporary File that is the finished, cited document.
* @throws IOException if IO error
* @throws SQLException if database error
* @throws AuthorizeException if authorization error
*/
public File makeCitedDocument(Context context, Bitstream bitstream)
throws IOException, SQLException, AuthorizeException;
/**
*
* @param page page
* @param contentStream content stream
* @param text text to draw
* @param startX x-coordinate of word
* @param startY y-coordinate of word
* @param pdfFont font
* @param fontSize size of font
* @return integer
* @throws IOException if IO error
*/
public int drawStringWordWrap(PDPage page, PDPageContentStream contentStream, String text,
int startX, int startY, PDFont pdfFont, float fontSize) throws IOException;
/**
* Get name of owning community
* @param context DSpace context
* @param item DSpace Item
* @return name
*/
public String getOwningCommunity(Context context, Item item);
/**
* Get name of owning collection
* @param item DSpace Item
* @return owning collection name
*/
public String getOwningCollection(Item item);
/**
* Get metadata separated by value separator (semicolon)
* @param item DSpace Item
* @param metadataKey metadata string
* @see org.dspace.content.service.DSpaceObjectService#getMetadataByMetadataString(org.dspace.content.DSpaceObject, java.lang.String)
* @return string
*/
public String getAllMetadataSeparated(Item item, String metadataKey);
/**
* @param page page
* @param contentStream content stream
* @param y the y-coordinate of the first row
* @param margin the padding on left and right of table
* @param content a 2d array containing the table data
* @param font PDFont
* @param fontSize size of font (int)
* @param cellBorders whether to include cellBorders
* @throws IOException if error
*/
public void drawTable(PDPage page, PDPageContentStream contentStream,
float y, float margin,
String[][] content, PDFont font, int fontSize, boolean cellBorders) throws IOException;
}