use of org.eclipse.sw360.datahandler.thrift.attachments.AttachmentContent in project sw360portal by sw360.
the class Sw360AttachmentService method downloadAttachmentWithContext.
public void downloadAttachmentWithContext(Object context, String attachmentId, HttpServletResponse response, OAuth2Authentication oAuth2Authentication) {
User sw360User = restControllerHelper.getSw360UserFromAuthentication(oAuth2Authentication);
AttachmentContent attachmentContent = getAttachmentContent(attachmentId);
String filename = attachmentContent.getFilename();
String contentType = attachmentContent.getContentType();
try (InputStream attachmentStream = getStreamToAttachments(Collections.singleton(attachmentContent), sw360User, context)) {
response.setContentType(contentType);
response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", filename));
FileCopyUtils.copy(attachmentStream, response.getOutputStream());
} catch (TException | IOException e) {
log.error(e.getMessage());
}
}
use of org.eclipse.sw360.datahandler.thrift.attachments.AttachmentContent in project sw360portal by sw360.
the class Sw360AttachmentService method uploadAttachment.
public Attachment uploadAttachment(MultipartFile file, Attachment newAttachment, User sw360User) throws IOException, TException {
// TODO: shouldn't the fileName be taken from newAttachment?
String fileName = file.getOriginalFilename();
String contentType = file.getContentType();
final AttachmentContent attachmentContent = makeAttachmentContent(fileName, contentType);
final AttachmentConnector attachmentConnector = getConnector();
Attachment attachment = new AttachmentFrontendUtils().uploadAttachmentContent(attachmentContent, file.getInputStream(), sw360User);
attachment.setSha1(attachmentConnector.getSha1FromAttachmentContentId(attachmentContent.getId()));
AttachmentType attachmentType = newAttachment.getAttachmentType();
if (attachmentType != null) {
attachment.setAttachmentType(attachmentType);
}
CheckStatus checkStatus = newAttachment.getCheckStatus();
if (checkStatus != null) {
attachment.setCheckStatus(checkStatus);
}
return attachment;
}
use of org.eclipse.sw360.datahandler.thrift.attachments.AttachmentContent in project sw360portal by sw360.
the class AttachmentStreamConnectorTest method testGetConcatenatedStream.
@Test
public void testGetConcatenatedStream() throws Exception {
AttachmentContent attachment = mock(AttachmentContent.class);
when(attachment.isOnlyRemote()).thenReturn(false);
when(attachment.isSetPartsCount()).thenReturn(true);
when(attachment.getPartsCount()).thenReturn("2");
when(attachment.getFilename()).thenReturn("fil");
String attachmentId = "id";
when(attachment.getId()).thenReturn(attachmentId);
AttachmentInputStream part1 = mock(AttachmentInputStream.class);
when(connector.getAttachment(attachmentId, "fil_part1")).thenReturn(part1);
AttachmentInputStream part2 = mock(AttachmentInputStream.class);
when(connector.getAttachment(attachmentId, "fil_part2")).thenReturn(part2);
when(part1.read()).thenReturn(1, -1);
when(part2.read()).thenReturn(2, -1);
InputStream attachmentStream = attachmentStreamConnector.getAttachmentStream(attachment, dummyUser, new Project().setVisbility(Visibility.ME_AND_MODERATORS).setCreatedBy(dummyUser.getEmail()).setAttachments(Collections.singleton(new Attachment().setAttachmentContentId(attachmentId))));
verifyZeroInteractions(part2);
assertThat(attachmentStream.read(), is(1));
assertThat(attachmentStream.read(), is(2));
verify(part1).close();
assertThat(attachmentStream.read(), is(-1));
verify(part2).close();
}
use of org.eclipse.sw360.datahandler.thrift.attachments.AttachmentContent in project sw360portal by sw360.
the class AttachmentStreamConnectorTest method testTryingToDownloadIfNotAvailable.
@Test
public void testTryingToDownloadIfNotAvailable() throws Exception {
String id = "11";
String filename = "filename";
AttachmentContent attachment = mock(AttachmentContent.class);
when(attachment.isOnlyRemote()).thenReturn(true);
when(attachment.getId()).thenReturn(id);
when(attachment.getFilename()).thenReturn(filename);
InputStream downloadUrlStream = mock(InputStream.class);
InputStream returnedStream = mock(InputStream.class);
AttachmentContent rereadAttachment = mock(AttachmentContent.class);
when(rereadAttachment.getId()).thenReturn(id);
when(rereadAttachment.getFilename()).thenReturn(filename);
attachmentStreamConnector = spy(attachmentStreamConnector);
doReturn(returnedStream).when(attachmentStreamConnector).readAttachmentStream(rereadAttachment);
doNothing().when(attachmentStreamConnector).uploadAttachmentPart(attachment, 1, downloadUrlStream);
when(attachmentContentDownloader.download(eq(attachment), Matchers.any(Duration.class))).thenReturn(downloadUrlStream);
when(connector.get(AttachmentContent.class, id)).thenReturn(rereadAttachment);
doReturn(rereadAttachment).when(rereadAttachment).setOnlyRemote(anyBoolean());
assertThat(attachmentStreamConnector.getAttachmentStream(attachment, dummyUser, new Project().setVisbility(Visibility.ME_AND_MODERATORS).setCreatedBy(dummyUser.getEmail()).setAttachments(Collections.singleton(new Attachment().setAttachmentContentId(id)))), sameInstance(returnedStream));
verify(attachmentContentDownloader).download(eq(attachment), Matchers.any(Duration.class));
verify(attachmentStreamConnector).uploadAttachment(attachment, downloadUrlStream);
verify(attachmentStreamConnector).readAttachmentStream(rereadAttachment);
verify(rereadAttachment).setOnlyRemote(false);
verify(connector).update(rereadAttachment);
}
use of org.eclipse.sw360.datahandler.thrift.attachments.AttachmentContent in project sw360portal by sw360.
the class AttachmentStreamConnectorTest method testGetConcatenatedStreamReadThrowsOnNonExistent.
@Test
public void testGetConcatenatedStreamReadThrowsOnNonExistent() throws Exception {
AttachmentContent attachment = mock(AttachmentContent.class);
when(attachment.isOnlyRemote()).thenReturn(false);
when(attachment.isSetPartsCount()).thenReturn(true);
when(attachment.getPartsCount()).thenReturn("2");
when(attachment.getFilename()).thenReturn("fil");
String attachmentId = "id";
when(attachment.getId()).thenReturn(attachmentId);
AttachmentInputStream part1 = mock(AttachmentInputStream.class);
when(connector.getAttachment(attachmentId, "fil_part1")).thenReturn(part1);
when(connector.getAttachment(attachmentId, "fil_part2")).thenThrow(new DocumentNotFoundException(""));
when(part1.read()).thenReturn(1, -1);
InputStream attachmentStream = attachmentStreamConnector.getAttachmentStream(attachment, dummyUser, new Project().setVisbility(Visibility.ME_AND_MODERATORS).setCreatedBy(dummyUser.getEmail()).setAttachments(Collections.singleton(new Attachment().setAttachmentContentId(attachmentId))));
assertThat(attachmentStream.read(), is(1));
try {
assertThat(attachmentStream.read(), is(2));
fail("expected Exception not thrown");
} catch (IOException ignored) {
}
verify(part1).close();
}
Aggregations