-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* BXC-4064 starting thumbnail router and processor * BXC-4064 add request and helper classes * BXC-4064 add router test * BXC-4064 add processor test * BXC-4064 trying to work on tests * BXC-4064 use captor and new mock init syntax * BXC-4064 cleaning up * BXC-4064 cleanup per PR comments --------- Co-authored-by: Sharon Luong <[email protected]>
- Loading branch information
1 parent
d491002
commit 88a903f
Showing
13 changed files
with
418 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 32 additions & 0 deletions
32
operations-jms/src/main/java/edu/unc/lib/boxc/operations/jms/thumbnail/ThumbnailRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package edu.unc.lib.boxc.operations.jms.thumbnail; | ||
|
||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize; | ||
import edu.unc.lib.boxc.auth.api.models.AgentPrincipals; | ||
import edu.unc.lib.boxc.auth.fcrepo.models.AgentPrincipalsImpl; | ||
|
||
/** | ||
* Request object for setting a file as thumbnail for a work | ||
* | ||
* @author snluong | ||
*/ | ||
public class ThumbnailRequest { | ||
@JsonDeserialize(as = AgentPrincipalsImpl.class) | ||
private AgentPrincipals agent; | ||
private String filePidString; | ||
|
||
public AgentPrincipals getAgent() { | ||
return agent; | ||
} | ||
|
||
public void setAgent(AgentPrincipals agent) { | ||
this.agent = agent; | ||
} | ||
|
||
public String getFilePidString() { | ||
return filePidString; | ||
} | ||
|
||
public void setFilePidString(String filePidString) { | ||
this.filePidString = filePidString; | ||
} | ||
} |
45 changes: 45 additions & 0 deletions
45
...n/java/edu/unc/lib/boxc/operations/jms/thumbnail/ThumbnailRequestSerializationHelper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package edu.unc.lib.boxc.operations.jms.thumbnail; | ||
|
||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import com.fasterxml.jackson.databind.ObjectReader; | ||
import com.fasterxml.jackson.databind.ObjectWriter; | ||
|
||
import java.io.IOException; | ||
|
||
/** | ||
* Helper methods for serializing and deserializing thumbnail requests | ||
* | ||
* @author snluong | ||
*/ | ||
public class ThumbnailRequestSerializationHelper { | ||
private static final ObjectWriter REQUEST_WRITER; | ||
private static final ObjectReader REQUEST_READER; | ||
static { | ||
ObjectMapper mapper = new ObjectMapper(); | ||
REQUEST_WRITER = mapper.writerFor(ThumbnailRequest.class); | ||
REQUEST_READER = mapper.readerFor(ThumbnailRequest.class); | ||
} | ||
|
||
private ThumbnailRequestSerializationHelper() { | ||
} | ||
|
||
/** | ||
* Transform request into a JSON string | ||
* @param request | ||
* @return | ||
* @throws IOException | ||
*/ | ||
public static String toJson(ThumbnailRequest request) throws IOException { | ||
return REQUEST_WRITER.writeValueAsString(request); | ||
} | ||
|
||
/** | ||
* Transform JSON string to a ThumbnailRequest | ||
* @param json | ||
* @return | ||
* @throws IOException | ||
*/ | ||
public static ThumbnailRequest toRequest(String json) throws IOException { | ||
return REQUEST_READER.readValue(json); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
63 changes: 63 additions & 0 deletions
63
...p/src/main/java/edu/unc/lib/boxc/services/camel/thumbnails/ThumbnailRequestProcessor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
package edu.unc.lib.boxc.services.camel.thumbnails; | ||
|
||
import edu.unc.lib.boxc.auth.api.Permission; | ||
import edu.unc.lib.boxc.auth.api.services.AccessControlService; | ||
import edu.unc.lib.boxc.model.api.objects.RepositoryObjectLoader; | ||
import edu.unc.lib.boxc.model.api.rdf.Cdr; | ||
import edu.unc.lib.boxc.model.api.services.RepositoryObjectFactory; | ||
import edu.unc.lib.boxc.model.fcrepo.ids.PIDs; | ||
import edu.unc.lib.boxc.operations.jms.indexing.IndexingActionType; | ||
import edu.unc.lib.boxc.operations.jms.indexing.IndexingMessageSender; | ||
import edu.unc.lib.boxc.operations.jms.thumbnail.ThumbnailRequestSerializationHelper; | ||
import org.apache.camel.Exchange; | ||
import org.apache.camel.Processor; | ||
|
||
import java.io.IOException; | ||
|
||
/** | ||
* Processing requests to assign a thumbnail from a file to its parent work | ||
* | ||
* @author snluong | ||
*/ | ||
public class ThumbnailRequestProcessor implements Processor { | ||
private RepositoryObjectLoader repositoryObjectLoader; | ||
private RepositoryObjectFactory repositoryObjectFactory; | ||
private AccessControlService aclService; | ||
private IndexingMessageSender indexingMessageSender; | ||
|
||
@Override | ||
public void process(Exchange exchange) throws IOException { | ||
var in = exchange.getIn(); | ||
var request = ThumbnailRequestSerializationHelper.toRequest(in.getBody(String.class)); | ||
var agent = request.getAgent(); | ||
var pid = PIDs.get(request.getFilePidString()); | ||
|
||
aclService.assertHasAccess("User does not have permission to add/update work thumbnail", | ||
pid, agent.getPrincipals(), Permission.editDescription); | ||
|
||
var file = repositoryObjectLoader.getFileObject(pid); | ||
var work = file.getParent(); | ||
|
||
repositoryObjectFactory.createExclusiveRelationship(work, Cdr.useAsThumbnail, file.getResource()); | ||
|
||
// send message to update solr | ||
indexingMessageSender.sendIndexingOperation( | ||
agent.getUsername(), work.getPid(), IndexingActionType.UPDATE_DATASTREAMS); | ||
} | ||
|
||
public void setRepositoryObjectLoader(RepositoryObjectLoader repositoryObjectLoader) { | ||
this.repositoryObjectLoader = repositoryObjectLoader; | ||
} | ||
|
||
public void setRepositoryObjectFactory(RepositoryObjectFactory repositoryObjectFactory) { | ||
this.repositoryObjectFactory = repositoryObjectFactory; | ||
} | ||
|
||
public void setAclService(AccessControlService aclService) { | ||
this.aclService = aclService; | ||
} | ||
|
||
public void setIndexingMessageSender(IndexingMessageSender indexingMessageSender) { | ||
this.indexingMessageSender = indexingMessageSender; | ||
} | ||
} |
27 changes: 27 additions & 0 deletions
27
...s-camel-app/src/main/java/edu/unc/lib/boxc/services/camel/thumbnails/ThumbnailRouter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package edu.unc.lib.boxc.services.camel.thumbnails; | ||
|
||
import org.apache.camel.BeanInject; | ||
import org.apache.camel.builder.RouteBuilder; | ||
import org.slf4j.Logger; | ||
|
||
import static org.apache.camel.LoggingLevel.DEBUG; | ||
import static org.slf4j.LoggerFactory.getLogger; | ||
|
||
/** | ||
* Router for processing assigning thumbnails for works | ||
* | ||
* @author snluong | ||
*/ | ||
public class ThumbnailRouter extends RouteBuilder { | ||
private static final Logger log = getLogger(ThumbnailRouter.class); | ||
@BeanInject(value = "thumbnailRequestProcessor") | ||
private ThumbnailRequestProcessor thumbnailRequestProcessor; | ||
|
||
@Override | ||
public void configure() throws Exception { | ||
from("{{cdr.thumbnails.stream.camel}}") | ||
.routeId("DcrThumbnails") | ||
.log(DEBUG, log, "Received thumbnail request") | ||
.bean(thumbnailRequestProcessor); | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
services-camel-app/src/test/java/edu/unc/lib/boxc/services/camel/ProcessorTestHelper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package edu.unc.lib.boxc.services.camel; | ||
|
||
import edu.unc.lib.boxc.model.api.ids.PID; | ||
import edu.unc.lib.boxc.model.fcrepo.ids.PIDs; | ||
import org.apache.camel.Exchange; | ||
import org.apache.camel.Message; | ||
|
||
import java.util.UUID; | ||
|
||
import static org.mockito.Mockito.mock; | ||
import static org.mockito.Mockito.when; | ||
|
||
/** | ||
* Basic methods used in several Processor tests | ||
* | ||
* @author snluong | ||
*/ | ||
public class ProcessorTestHelper { | ||
public static PID makePid() { | ||
return PIDs.get(UUID.randomUUID().toString()); | ||
} | ||
|
||
public static Exchange mockExchange(String body) { | ||
var exchange = mock(Exchange.class); | ||
var message = mock(Message.class); | ||
when(exchange.getIn()).thenReturn(message); | ||
when(message.getBody(String.class)).thenReturn(body); | ||
return exchange; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.