org.dspace.content.LicenseUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dspace-api Show documentation
Show all versions of dspace-api Show documentation
DSpace core data model and service APIs.
/**
* 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.content;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Formatter;
import java.util.Locale;
import java.util.Map;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.license.FormattableArgument;
import org.dspace.content.service.BitstreamFormatService;
import org.dspace.content.service.BitstreamService;
import org.dspace.content.service.CollectionService;
import org.dspace.content.service.ItemService;
import org.dspace.core.Context;
import org.dspace.eperson.EPerson;
/**
* Utility class to manage generation and storing of the license text that the
* submitter has to grant/granted for archiving the item
*
* @author bollini
*/
public class LicenseUtils {
private static final BitstreamService bitstreamService = ContentServiceFactory.getInstance().getBitstreamService();
private static final BitstreamFormatService bitstreamFormat = ContentServiceFactory.getInstance()
.getBitstreamFormatService();
private static final CollectionService collectionService = ContentServiceFactory.getInstance()
.getCollectionService();
private static final ItemService itemService = ContentServiceFactory.getInstance().getItemService();
/**
* Default constructor
*/
private LicenseUtils() { }
/**
* Return the text of the license that the user has granted/must grant
* before for submit the item. The license text is build using the template
* defined for the collection if any or the wide site configuration. In the
* license text the following substitutions can be used.
* {0} the eperson firstname
* {1} the eperson lastname
* {2} the eperson email
* {3} the current date
* {4} the collection object that will be formatted using the appropriate
* LicenseArgumentFormatter plugin (if defined)
* {5} the item object that will be formatted using the appropriate
* LicenseArgumentFormatter plugin (if defined)
* {6} the eperson object that will be formatted using the appropriate
* LicenseArgumentFormatter plugin (if defined)
* {x} any addition argument supplied wrapped in the
* LicenseArgumentFormatter based on his type (map key)
*
* @param locale Formatter locale
* @param collection collection to get license from
* @param item the item object of the license
* @param eperson EPerson to get firstname, lastname and email from
* @param additionalInfo additional template arguments beyond 0-6
* @return the license text obtained substituting the provided argument in
* the license template
*/
public static String getLicenseText(Locale locale, Collection collection,
Item item, EPerson eperson, Map additionalInfo) {
Formatter formatter = new Formatter(locale);
// EPerson firstname, lastname, email and the current date
// will be available as separate arguments to make more simple produce
// "tradition" text license
// collection, item and eperson object will be also available
int numArgs = 7 + (additionalInfo != null ? additionalInfo.size() : 0);
Object[] args = new Object[numArgs];
args[0] = eperson.getFirstName();
args[1] = eperson.getLastName();
args[2] = eperson.getEmail();
args[3] = new java.util.Date();
args[4] = new FormattableArgument("collection", collection);
args[5] = new FormattableArgument("item", item);
args[6] = new FormattableArgument("eperson", eperson);
if (additionalInfo != null) {
int i = 7; // Start is next index after previous args
for (Map.Entry info : additionalInfo.entrySet()) {
args[i] = new FormattableArgument(info.getKey(), info.getValue());
i++;
}
}
String licenseTemplate = collectionService.getLicense(collection);
return formatter.format(licenseTemplate, args).toString();
}
/**
* Utility method if no additional arguments are to be supplied to the
* license template. (equivalent to calling the full getLicenseText
* supplying {@code null} for the additionalInfo argument)
*
* @param locale Formatter locale
* @param collection collection to get license from
* @param item the item object of the license
* @param eperson EPerson to get firstname, lastname and email from
* @return the license text, with no custom substitutions.
*/
public static String getLicenseText(Locale locale, Collection collection,
Item item, EPerson eperson) {
return getLicenseText(locale, collection, item, eperson, null);
}
/**
* Store a copy of the license a user granted in the item.
*
* @param context the dspace context
* @param item the item object of the license
* @param licenseText the license the user granted
* @param acceptanceDate TODO
* @throws SQLException if database error
* @throws IOException if IO error
* @throws AuthorizeException if authorization error
*/
public static void grantLicense(Context context, Item item,
String licenseText, String acceptanceDate) throws SQLException, IOException,
AuthorizeException {
// Put together text to store
// String licenseText = "License granted by " + eperson.getFullName()
// + " (" + eperson.getEmail() + ") on "
// + DCDate.getCurrent().toString() + " (GMT):\n\n" + license;
// Store text as a bitstream
byte[] licenseBytes = licenseText.getBytes("UTF-8");
ByteArrayInputStream bais = new ByteArrayInputStream(licenseBytes);
Bitstream b = itemService.createSingleBitstream(context, bais, item, "LICENSE");
// Now set the format and name of the bitstream
b.setName(context, "license.txt");
b.setSource(context, "Written by org.dspace.content.LicenseUtils");
DCDate acceptanceDCDate = DCDate.getCurrent();
if (acceptanceDate != null) {
acceptanceDCDate = new DCDate(acceptanceDate);
}
b.setAcceptanceDate(context, acceptanceDCDate);
// Find the License format
BitstreamFormat bf = bitstreamFormat.findByShortDescription(context,
"License");
b.setFormat(bf);
bitstreamService.update(context, b);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy