Moved iiif to separate module.

This commit is contained in:
Michael Spalti
2021-10-13 18:35:33 -07:00
parent 3870e362c3
commit 70de1bc61c
54 changed files with 411 additions and 156 deletions

121
dspace-iiif/pom.xml Normal file
View File

@@ -0,0 +1,121 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.dspace</groupId>
<artifactId>dspace-iiif</artifactId>
<packaging>jar</packaging>
<name>DSpace IIIF</name>
<description>
DSpace IIIF Extension
</description>
<!--
A Parent POM that Maven inherits DSpace Default
POM attributes from.
-->
<parent>
<groupId>org.dspace</groupId>
<artifactId>dspace-parent</artifactId>
<version>7.1-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<properties>
<!-- This is the path to the root [dspace-src] directory. -->
<root.basedir>${basedir}/..</root.basedir>
<!-- Default resource delimiter for Spring Boot, so it doesn't clash with Spring ${} placeholders-->
<resource.delimiter>@</resource.delimiter>
</properties>
<dependencies>
<!-- Needed to support Spring @Configuration classes (to register servlets/beans with Spring Boot webapp) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring-boot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-cache
Caching dependencies for iiif endpoint. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>1.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.ehcache/ehcache -->
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.4.0</version>
</dependency>
<!-- iiif models. -->
<dependency>
<groupId>de.digitalcollections.iiif</groupId>
<artifactId>iiif-apis</artifactId>
<version>0.3.9</version>
<exclusions>
<exclusion>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.dmfs</groupId>
<artifactId>iterators</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Internal -->
<dependency>
<groupId>org.dspace</groupId>
<artifactId>dspace-api</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -5,12 +5,11 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest; package org.dspace.app.iiif;
import java.util.UUID; import java.util.UUID;
import org.dspace.app.rest.iiif.IIIFServiceFacade; import org.dspace.app.iiif.dspace.ContextUtil;
import org.dspace.app.rest.utils.ContextUtil;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.services.RequestService; import org.dspace.services.RequestService;
import org.dspace.utils.DSpace; import org.dspace.utils.DSpace;

View File

@@ -5,16 +5,16 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif; package org.dspace.app.iiif;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.UUID; import java.util.UUID;
import org.dspace.app.rest.iiif.service.AnnotationListService; import org.dspace.app.iiif.service.AnnotationListService;
import org.dspace.app.rest.iiif.service.CanvasLookupService; import org.dspace.app.iiif.service.CanvasLookupService;
import org.dspace.app.rest.iiif.service.ManifestService; import org.dspace.app.iiif.service.ManifestService;
import org.dspace.app.rest.iiif.service.SearchService; import org.dspace.app.iiif.service.SearchService;
import org.dspace.app.rest.iiif.service.util.IIIFUtils; import org.dspace.app.iiif.service.utils.IIIFUtils;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.content.service.BitstreamService; import org.dspace.content.service.BitstreamService;
import org.dspace.content.service.ItemService; import org.dspace.content.service.ItemService;

View File

@@ -0,0 +1,158 @@
/**
* 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.app.iiif.dspace;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.dspace.core.Context;
import org.dspace.core.I18nUtil;
import org.dspace.services.RequestService;
import org.dspace.services.model.Request;
import org.dspace.utils.DSpace;
public class ContextUtil {
/**
* Where the context is stored on an HTTP Request object
*/
public static final String DSPACE_CONTEXT = "dspace.context";
/**
* Default constructor
*/
private ContextUtil() {
}
/**
* Shortcut for {@link #obtainContext(Request)} using the {@link RequestService}
* to retrieve the current thread request
*
* @return the DSpace Context associated with the current thread-bound request
*/
public static Context obtainCurrentRequestContext() {
Context context = null;
RequestService requestService = new DSpace().getRequestService();
Request currentRequest = requestService.getCurrentRequest();
if (currentRequest != null) {
context = ContextUtil.obtainContext(currentRequest.getHttpServletRequest());
}
return context;
}
/**
* Obtain a new context object. If a context object has already been created
* for this HTTP request, it is re-used, otherwise it is created.
*
* @param request the servlet request object
* @return a context object
*/
public static Context obtainContext(HttpServletRequest request) {
Context context = (Context) request.getAttribute(DSPACE_CONTEXT);
if (context == null) {
try {
context = ContextUtil.initializeContext();
} catch (SQLException e) {
//log.error("Unable to initialize context", e);
return null;
}
// Store the context in the request
request.setAttribute(DSPACE_CONTEXT, context);
}
// this need to be verified each time that the context is extracted from the request
// as some call happen before that the login process is completed and user settings can
// change the locale
Locale currentLocale = getLocale(context, request);
context.setCurrentLocale(currentLocale);
return context;
}
private static Locale getLocale(Context context, HttpServletRequest request) {
Locale userLocale = null;
Locale supportedLocale = null;
// Locales requested from client
String locale = request.getHeader("Accept-Language");
if (StringUtils.isNotBlank(locale)) {
Enumeration<Locale> locales = request.getLocales();
if (locales != null) {
while (locales.hasMoreElements()) {
Locale current = locales.nextElement();
if (I18nUtil.isSupportedLocale(current)) {
userLocale = current;
break;
}
}
}
}
if (userLocale == null && context.getCurrentUser() != null) {
String userLanguage = context.getCurrentUser().getLanguage();
if (userLanguage != null) {
userLocale = new Locale(userLanguage);
}
}
if (userLocale == null) {
return I18nUtil.getDefaultLocale();
}
supportedLocale = I18nUtil.getSupportedLocale(userLocale);
return supportedLocale;
}
/**
* Initialize a new Context object
*
* @return a DSpace Context Object
* @throws SQLException
*/
private static Context initializeContext() throws SQLException {
// Create a new Context
Context context = new Context();
// Set the session ID
/**context.setExtraLogInfo("session_id="
+ request.getSession().getId());
AuthenticationUtil.resumeLogin(context, request);
// Set any special groups - invoke the authentication mgr.
int[] groupIDs = AuthenticationManager.getSpecialGroups(context, request);
for (int i = 0; i < groupIDs.length; i++)
{
context.setSpecialGroup(groupIDs[i]);
log.debug("Adding Special Group id="+String.valueOf(groupIDs[i]));
}
// Set the session ID and IP address
String ip = request.getRemoteAddr();
if (useProxies == null) {
useProxies = ConfigurationManager.getBooleanProperty("useProxies", false);
}
if(useProxies && request.getHeader("X-Forwarded-For") != null)
{
// This header is a comma delimited list
for(String xfip : request.getHeader("X-Forwarded-For").split(","))
{
if(!request.getHeader("X-Forwarded-For").contains(ip))
{
ip = xfip.trim();
}
}
}
context.setExtraLogInfo("session_id=" + request.getSession().getId() + ":ip_addr=" + ip);
*/
return context;
}
}

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.exception; package org.dspace.app.iiif.exception;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.ResponseStatus;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model; package org.dspace.app.iiif.model;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.module.SimpleModule;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -27,7 +27,7 @@ import org.springframework.web.context.annotation.RequestScope;
*/ */
@RequestScope @RequestScope
@Component @Component
public class AnnotationListGenerator implements org.dspace.app.rest.iiif.model.generator.IIIFResource { public class AnnotationListGenerator implements IIIFResource {
private String identifier; private String identifier;
private List<Annotation> annotations = new ArrayList<>(); private List<Annotation> annotations = new ArrayList<>();

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import de.digitalcollections.iiif.model.enums.ViewingHint; import de.digitalcollections.iiif.model.enums.ViewingHint;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -49,7 +49,7 @@ public class CanvasItemsGenerator implements IIIFResource {
* for display or download by a human user. This is typically going to be a PDF file. * for display or download by a human user. This is typically going to be a PDF file.
* @param otherContent generator for the resource * @param otherContent generator for the resource
*/ */
public void addRendering(org.dspace.app.rest.iiif.model.generator.ExternalLinksGenerator otherContent) { public void addRendering(ExternalLinksGenerator otherContent) {
this.renderings.add((OtherContent) otherContent.generateResource()); this.renderings.add((OtherContent) otherContent.generateResource());
} }
@@ -57,7 +57,7 @@ public class CanvasItemsGenerator implements IIIFResource {
* Adds a single {@code Canvas} to the sequence. * Adds a single {@code Canvas} to the sequence.
* @param canvas generator for canvas * @param canvas generator for canvas
*/ */
public String addCanvas(org.dspace.app.rest.iiif.model.generator.CanvasGenerator canvas) { public String addCanvas(CanvasGenerator canvas) {
Canvas resource = (Canvas) canvas.generateResource(); Canvas resource = (Canvas) canvas.generateResource();
this.canvas.add(resource); this.canvas.add(resource);
return resource.getIdentifier().toString(); return resource.getIdentifier().toString();

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import de.digitalcollections.iiif.model.openannotation.ContentAsText; import de.digitalcollections.iiif.model.openannotation.ContentAsText;
import de.digitalcollections.iiif.model.sharedcanvas.Resource; import de.digitalcollections.iiif.model.sharedcanvas.Resource;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import de.digitalcollections.iiif.model.sharedcanvas.Resource; import de.digitalcollections.iiif.model.sharedcanvas.Resource;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import de.digitalcollections.iiif.model.Service; import de.digitalcollections.iiif.model.Service;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
/** /**
* Interface for iiif value generators. * Interface for iiif value generators.

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import de.digitalcollections.iiif.model.Service; import de.digitalcollections.iiif.model.Service;
import de.digitalcollections.iiif.model.image.ImageService; import de.digitalcollections.iiif.model.image.ImageService;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import java.net.URI; import java.net.URI;
import java.util.ArrayList; import java.util.ArrayList;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import de.digitalcollections.iiif.model.MetadataEntry; import de.digitalcollections.iiif.model.MetadataEntry;
import de.digitalcollections.iiif.model.PropertyValue; import de.digitalcollections.iiif.model.PropertyValue;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import de.digitalcollections.iiif.model.PropertyValue; import de.digitalcollections.iiif.model.PropertyValue;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -14,7 +14,7 @@ import javax.validation.constraints.NotNull;
import de.digitalcollections.iiif.model.sharedcanvas.Canvas; import de.digitalcollections.iiif.model.sharedcanvas.Canvas;
import de.digitalcollections.iiif.model.sharedcanvas.Range; import de.digitalcollections.iiif.model.sharedcanvas.Range;
import de.digitalcollections.iiif.model.sharedcanvas.Resource; import de.digitalcollections.iiif.model.sharedcanvas.Resource;
import org.dspace.app.rest.iiif.service.RangeService; import org.dspace.app.iiif.service.RangeService;
/** /**
* This generator wraps the domain model for IIIF {@code ranges}. * This generator wraps the domain model for IIIF {@code ranges}.
@@ -25,7 +25,7 @@ import org.dspace.app.rest.iiif.service.RangeService;
* This is used to populate the "structures" element of the Manifest. The structure is derived from the iiif.toc * This is used to populate the "structures" element of the Manifest. The structure is derived from the iiif.toc
* metadata and the ordered sequence of bitstreams (canvases) * metadata and the ordered sequence of bitstreams (canvases)
*/ */
public class RangeGenerator implements org.dspace.app.rest.iiif.model.generator.IIIFResource { public class RangeGenerator implements IIIFResource {
private String identifier; private String identifier;
private String label; private String label;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.model.generator; package org.dspace.app.iiif.model.generator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@@ -5,13 +5,13 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import java.util.UUID; import java.util.UUID;
import org.dspace.app.rest.iiif.service.util.IIIFUtils; import org.dspace.app.iiif.service.utils.IIIFUtils;
import org.dspace.app.rest.iiif.service.util.ImageProfileUtil; import org.dspace.app.iiif.service.utils.ImageProfileUtil;
import org.dspace.app.rest.iiif.service.util.ThumbProfileUtil; import org.dspace.app.iiif.service.utils.ThumbProfileUtil;
import org.dspace.services.ConfigurationService; import org.dspace.services.ConfigurationService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -5,16 +5,16 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import org.dspace.app.rest.iiif.model.generator.AnnotationGenerator; import org.dspace.app.iiif.model.generator.AnnotationGenerator;
import org.dspace.app.rest.iiif.model.generator.AnnotationListGenerator; import org.dspace.app.iiif.model.generator.AnnotationListGenerator;
import org.dspace.app.rest.iiif.model.generator.ExternalLinksGenerator; import org.dspace.app.iiif.model.generator.ExternalLinksGenerator;
import org.dspace.app.rest.iiif.service.util.IIIFUtils; import org.dspace.app.iiif.service.utils.IIIFUtils;
import org.dspace.content.Bitstream; import org.dspace.content.Bitstream;
import org.dspace.content.BitstreamFormat; import org.dspace.content.BitstreamFormat;
import org.dspace.content.Item; import org.dspace.content.Item;

View File

@@ -5,12 +5,12 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import java.sql.SQLException; import java.sql.SQLException;
import org.dspace.app.rest.iiif.model.generator.CanvasGenerator; import org.dspace.app.iiif.model.generator.CanvasGenerator;
import org.dspace.app.rest.iiif.service.util.IIIFUtils; import org.dspace.app.iiif.service.utils.IIIFUtils;
import org.dspace.content.Bitstream; import org.dspace.content.Bitstream;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.core.Context; import org.dspace.core.Context;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -13,10 +13,10 @@ import java.util.UUID;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.dspace.app.rest.iiif.model.generator.CanvasGenerator; import org.dspace.app.iiif.model.generator.CanvasGenerator;
import org.dspace.app.rest.iiif.model.generator.ImageContentGenerator; import org.dspace.app.iiif.model.generator.ImageContentGenerator;
import org.dspace.app.rest.iiif.service.util.BitstreamIIIFVirtualMetadata; import org.dspace.app.iiif.service.utils.BitstreamIIIFVirtualMetadata;
import org.dspace.app.rest.iiif.service.util.IIIFUtils; import org.dspace.app.iiif.service.utils.IIIFUtils;
import org.dspace.content.Bitstream; import org.dspace.content.Bitstream;
import org.dspace.content.Bundle; import org.dspace.content.Bundle;
import org.dspace.content.Item; import org.dspace.content.Item;

View File

@@ -5,13 +5,13 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import java.util.UUID; import java.util.UUID;
import org.dspace.app.rest.iiif.model.generator.ImageContentGenerator; import org.dspace.app.iiif.model.generator.ImageContentGenerator;
import org.dspace.app.rest.iiif.model.generator.ImageServiceGenerator; import org.dspace.app.iiif.model.generator.ImageServiceGenerator;
import org.dspace.app.rest.iiif.model.generator.ProfileGenerator; import org.dspace.app.iiif.model.generator.ProfileGenerator;
import org.dspace.services.ConfigurationService; import org.dspace.services.ConfigurationService;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope; import org.springframework.web.context.annotation.RequestScope;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -15,12 +15,12 @@ import java.util.Map;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.dspace.app.rest.iiif.model.generator.CanvasGenerator; import org.dspace.app.iiif.model.generator.CanvasGenerator;
import org.dspace.app.rest.iiif.model.generator.ContentSearchGenerator; import org.dspace.app.iiif.model.generator.ContentSearchGenerator;
import org.dspace.app.rest.iiif.model.generator.ImageContentGenerator; import org.dspace.app.iiif.model.generator.ImageContentGenerator;
import org.dspace.app.rest.iiif.model.generator.ManifestGenerator; import org.dspace.app.iiif.model.generator.ManifestGenerator;
import org.dspace.app.rest.iiif.model.generator.RangeGenerator; import org.dspace.app.iiif.model.generator.RangeGenerator;
import org.dspace.app.rest.iiif.service.util.IIIFUtils; import org.dspace.app.iiif.service.utils.IIIFUtils;
import org.dspace.app.util.service.MetadataExposureService; import org.dspace.app.util.service.MetadataExposureService;
import org.dspace.content.Bitstream; import org.dspace.content.Bitstream;
import org.dspace.content.Bundle; import org.dspace.content.Bundle;

View File

@@ -5,9 +5,9 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import org.dspace.app.rest.iiif.model.generator.RangeGenerator; import org.dspace.app.iiif.model.generator.RangeGenerator;
import org.dspace.services.ConfigurationService; import org.dspace.services.ConfigurationService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View File

@@ -5,9 +5,9 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import org.dspace.app.rest.iiif.model.generator.ExternalLinksGenerator; import org.dspace.app.iiif.model.generator.ExternalLinksGenerator;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.services.ConfigurationService; import org.dspace.services.ConfigurationService;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import java.util.UUID; import java.util.UUID;

View File

@@ -5,13 +5,13 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.dspace.app.rest.iiif.exception.NotImplementedException; import org.dspace.app.iiif.exception.NotImplementedException;
import org.dspace.services.ConfigurationService; import org.dspace.services.ConfigurationService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View File

@@ -5,10 +5,10 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import org.dspace.app.rest.iiif.model.generator.AnnotationGenerator; import org.dspace.app.iiif.model.generator.AnnotationGenerator;
import org.dspace.app.rest.iiif.model.generator.ExternalLinksGenerator; import org.dspace.app.iiif.model.generator.ExternalLinksGenerator;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.services.ConfigurationService; import org.dspace.services.ConfigurationService;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View File

@@ -5,15 +5,15 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.dspace.app.rest.iiif.model.generator.CanvasGenerator; import org.dspace.app.iiif.model.generator.CanvasGenerator;
import org.dspace.app.rest.iiif.model.generator.CanvasItemsGenerator; import org.dspace.app.iiif.model.generator.CanvasItemsGenerator;
import org.dspace.app.rest.iiif.model.generator.ExternalLinksGenerator; import org.dspace.app.iiif.model.generator.ExternalLinksGenerator;
import org.dspace.content.Bitstream; import org.dspace.content.Bitstream;
import org.dspace.content.Bundle; import org.dspace.content.Bundle;
import org.dspace.content.Item; import org.dspace.content.Item;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service; package org.dspace.app.iiif.service;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
@@ -29,12 +29,12 @@ import org.apache.solr.client.solrj.impl.NoOpResponseParser;
import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.common.params.CommonParams; import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.NamedList; import org.apache.solr.common.util.NamedList;
import org.dspace.app.rest.iiif.model.generator.AnnotationGenerator; import org.dspace.app.iiif.model.generator.AnnotationGenerator;
import org.dspace.app.rest.iiif.model.generator.CanvasGenerator; import org.dspace.app.iiif.model.generator.CanvasGenerator;
import org.dspace.app.rest.iiif.model.generator.ContentAsTextGenerator; import org.dspace.app.iiif.model.generator.ContentAsTextGenerator;
import org.dspace.app.rest.iiif.model.generator.ManifestGenerator; import org.dspace.app.iiif.model.generator.ManifestGenerator;
import org.dspace.app.rest.iiif.model.generator.SearchResultGenerator; import org.dspace.app.iiif.model.generator.SearchResultGenerator;
import org.dspace.app.rest.iiif.service.util.IIIFUtils; import org.dspace.app.iiif.service.utils.IIIFUtils;
import org.dspace.discovery.SolrSearchCore; import org.dspace.discovery.SolrSearchCore;
import org.dspace.services.ConfigurationService; import org.dspace.services.ConfigurationService;
import org.dspace.services.factory.DSpaceServicesFactory; import org.dspace.services.factory.DSpaceServicesFactory;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service.util; package org.dspace.app.iiif.service.utils;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service.util; package org.dspace.app.iiif.service.utils;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service.util; package org.dspace.app.iiif.service.utils;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Collections; import java.util.Collections;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service.util; package org.dspace.app.iiif.service.utils;
import java.util.List; import java.util.List;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service.util; package org.dspace.app.iiif.service.utils;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Collections; import java.util.Collections;

View File

@@ -5,7 +5,7 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service.util; package org.dspace.app.iiif.service.utils;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -19,7 +19,7 @@ import com.fasterxml.jackson.databind.module.SimpleModule;
import de.digitalcollections.iiif.model.sharedcanvas.Resource; import de.digitalcollections.iiif.model.sharedcanvas.Resource;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.dspace.app.rest.iiif.model.ObjectMapperFactory; import org.dspace.app.iiif.model.ObjectMapperFactory;
import org.dspace.content.Bitstream; import org.dspace.content.Bitstream;
import org.dspace.content.BitstreamFormat; import org.dspace.content.BitstreamFormat;
import org.dspace.content.Bundle; import org.dspace.content.Bundle;

View File

@@ -5,9 +5,9 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service.util; package org.dspace.app.iiif.service.utils;
import org.dspace.app.rest.iiif.model.generator.ProfileGenerator; import org.dspace.app.iiif.model.generator.ProfileGenerator;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View File

@@ -5,9 +5,9 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.service.util; package org.dspace.app.iiif.service.utils;
import org.dspace.app.rest.iiif.model.generator.ProfileGenerator; import org.dspace.app.iiif.model.generator.ProfileGenerator;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View File

@@ -364,6 +364,11 @@
<artifactId>dspace-services</artifactId> <artifactId>dspace-services</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.dspace</groupId>
<artifactId>dspace-iiif</artifactId>
</dependency>
<!-- DSpace modules to deploy (this modules are all optional, but add features/endpoints to webapp) --> <!-- DSpace modules to deploy (this modules are all optional, but add features/endpoints to webapp) -->
<!-- You may choose to comment out any of these modules if you do not want/need its features --> <!-- You may choose to comment out any of these modules if you do not want/need its features -->
<dependency> <dependency>
@@ -493,38 +498,6 @@
<artifactId>ehcache</artifactId> <artifactId>ehcache</artifactId>
<version>3.4.0</version> <version>3.4.0</version>
</dependency> </dependency>
<!-- iiif models. -->
<dependency>
<groupId>de.digitalcollections.iiif</groupId>
<artifactId>iiif-apis</artifactId>
<version>0.3.9</version>
<exclusions>
<exclusion>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.dmfs</groupId>
<artifactId>iterators</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
</exclusion>
<exclusion>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency> <dependency>
<groupId>org.apache.solr</groupId> <groupId>org.apache.solr</groupId>
<artifactId>solr-cell</artifactId> <artifactId>solr-cell</artifactId>

View File

@@ -28,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.hateoas.server.LinkRelationProvider; import org.springframework.hateoas.server.LinkRelationProvider;
@@ -56,6 +57,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
*/ */
@SpringBootApplication @SpringBootApplication
@EnableScheduling @EnableScheduling
@EnableCaching
public class Application extends SpringBootServletInitializer { public class Application extends SpringBootServletInitializer {
private static final Logger log = LoggerFactory.getLogger(Application.class); private static final Logger log = LoggerFactory.getLogger(Application.class);

View File

@@ -5,7 +5,8 @@
* *
* http://www.dspace.org/license/ * http://www.dspace.org/license/
*/ */
package org.dspace.app.rest.iiif.cache;
package org.dspace.app.rest.cache;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;

View File

@@ -1,24 +0,0 @@
/**
* 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.app.rest.iiif.cache;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;
/**
* Enables Spring cache support. The configuration file is defined in
* application properties.
* <p>spring.cache.jcache.config=classpath:iiif/cache/ehcache.xml</p>
* TODO: Before the cache is used in production there must be a way to
* evict from the cache whenever a dspace item, bundle or bitstream is changed.
*/
@Configuration
@EnableCaching
public class CacheConfig {
// Spring boot cache configuration.
}

View File

@@ -25,7 +25,7 @@ import org.springframework.data.web.config.EnableSpringDataWebSupport;
@Configuration @Configuration
@EnableSpringDataWebSupport @EnableSpringDataWebSupport
@ComponentScan( {"org.dspace.app.rest.converter", "org.dspace.app.rest.repository", "org.dspace.app.rest.utils", @ComponentScan( {"org.dspace.app.rest.converter", "org.dspace.app.rest.repository", "org.dspace.app.rest.utils",
"org.dspace.app.configuration", "org.dspace.iiif"}) "org.dspace.app.configuration", "org.dspace.iiif", "org.dspace.app.iiif"})
public class ApplicationConfig { public class ApplicationConfig {
// Allowed CORS origins ("Access-Control-Allow-Origin" header) // Allowed CORS origins ("Access-Control-Allow-Origin" header)
// Can be overridden in DSpace configuration // Can be overridden in DSpace configuration

View File

@@ -16,7 +16,7 @@
<cache-template name="iiif-default"> <cache-template name="iiif-default">
<listeners> <listeners>
<listener> <listener>
<class>org.dspace.app.rest.iiif.cache.CacheLogger</class> <class>org.dspace.app.rest.cache.CacheLogger</class>
<event-firing-mode>ASYNCHRONOUS</event-firing-mode> <event-firing-mode>ASYNCHRONOUS</event-firing-mode>
<event-ordering-mode>UNORDERED</event-ordering-mode> <event-ordering-mode>UNORDERED</event-ordering-mode>
<events-to-fire-on>CREATED</events-to-fire-on> <events-to-fire-on>CREATED</events-to-fire-on>

View File

@@ -204,6 +204,11 @@
<artifactId>dspace-rdf</artifactId> <artifactId>dspace-rdf</artifactId>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>org.dspace</groupId>
<artifactId>dspace-iiif</artifactId>
<scope>compile</scope>
</dependency>
<dependency> <dependency>
<groupId>org.dspace</groupId> <groupId>org.dspace</groupId>
<artifactId>dspace-services</artifactId> <artifactId>dspace-services</artifactId>

20
pom.xml
View File

@@ -823,6 +823,21 @@
</modules> </modules>
</profile> </profile>
<!--
Builds IIIF extension for DSpace
-->
<profile>
<id>dspace-iiif</id>
<activation>
<file>
<exists>dspace-iiif/pom.xml</exists>
</file>
</activation>
<modules>
<module>dspace-iiif</module>
</modules>
</profile>
<!-- REST Jersey (Deprecated REST API from DSpace 6.x or below) --> <!-- REST Jersey (Deprecated REST API from DSpace 6.x or below) -->
<!-- As this module is deprecated, it only builds if you activate it via -Pdspace-rest --> <!-- As this module is deprecated, it only builds if you activate it via -Pdspace-rest -->
<profile> <profile>
@@ -1043,6 +1058,11 @@
<artifactId>dspace-rdf</artifactId> <artifactId>dspace-rdf</artifactId>
<version>7.1-SNAPSHOT</version> <version>7.1-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>org.dspace</groupId>
<artifactId>dspace-iiif</artifactId>
<version>7.1-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.dspace</groupId> <groupId>org.dspace</groupId>
<artifactId>dspace-server-webapp</artifactId> <artifactId>dspace-server-webapp</artifactId>