use of org.summerb.microservices.articles.api.dto.Attachment in project summerb by skarpushin.
the class ArticleController method getAttachment.
@RequestMapping(method = RequestMethod.GET, value = "/articles-attachments/{id}/{proposedName}")
public ResponseEntity<InputStreamResource> getAttachment(Model model, @PathVariable("id") long id, HttpServletResponse response) throws AttachmentNotFoundException {
try {
Attachment attachment = attachmentService.findById(id);
if (attachment == null) {
throw new AttachmentNotFoundException(id);
}
long now = new Date().getTime();
HttpHeaders headers = new HttpHeaders();
headers.setCacheControl("private");
headers.setExpires(now + DAY);
headers.setContentType(MediaType.parseMediaType(mimeTypeResolver.resolveContentTypeByFileName(attachment.getName())));
headers.setContentLength((int) attachment.getSize());
response.setHeader("Content-Disposition", "attachment; filename=\"" + attachment.getName() + "\"");
// NOTE: Looks like there is a bug in the spring - it will add
// Last-Modified twice to the response
// responseHeaders.setLastModified(maxLastModified);
response.setDateHeader("Last-Modified", now);
InputStreamResource ret = new InputStreamResource(articleService.getAttachmnetContent(id));
return new ResponseEntity<InputStreamResource>(ret, headers, HttpStatus.OK);
} catch (AttachmentNotFoundException t) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.setHeader("Error", "File not found");
return null;
} catch (Throwable t) {
log.warn("Failed to get article attachment", t);
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
String msg = exceptionTranslator.buildUserMessage(t, CurrentRequestUtils.getLocale());
response.setHeader("Error", "Failed to get article attachment -> " + msg);
return null;
}
}
use of org.summerb.microservices.articles.api.dto.Attachment in project summerb by skarpushin.
the class ArticlesAuthoringController method createAttachment.
// NOTE: File upload example:
// http://www.ioncannon.net/programming/975/spring-3-file-upload-example/
@RequestMapping(method = RequestMethod.POST, value = "/{articleId}/addAttachment")
public String createAttachment(@ModelAttribute(ATTR_ARTICLE_ATTACHMENT) ArticleAttachmentVm articleAttachmentVm, Model model, @PathVariable("articleId") long articleId) throws Exception {
try {
Preconditions.checkArgument(articleAttachmentVm.getFile() != null && articleAttachmentVm.getFile().getFileItem() != null, "File required");
Article article = articleService.findById(articleId);
Preconditions.checkArgument(article != null, "Article not found");
Attachment att = articleAttachmentVm.getAttachment();
att.setArticleId(articleId);
FileItem fileItem = articleAttachmentVm.getFile().getFileItem();
att.setSize(fileItem.getSize());
String fileName = fileItem.getName();
att.setName(fileName);
att.setContents(articleAttachmentVm.getFile().getInputStream());
articleService.addArticleAttachment(att);
return Views.redirect(String.format("article-authoring/%s", article.getArticleKey()));
} catch (Throwable t) {
log.error("Failed to create attachment", t);
String msg = exceptionTranslator.buildUserMessage(t, CurrentRequestUtils.getLocale());
addPageMessage(model.asMap(), new PageMessage(msg, MessageSeverity.Danger));
// TODO: Navigate to article authoring instead!
return viewNameArticleAuthoring;
}
}
use of org.summerb.microservices.articles.api.dto.Attachment in project summerb by skarpushin.
the class ArticlesAuthoringController method getArticle.
@RequestMapping(method = RequestMethod.GET, value = "/{articleKey}")
public String getArticle(Model model, @PathVariable("articleKey") String articleKey, Locale locale) throws NotAuthorizedException {
model.addAttribute(ATTR_ARTICLE_KEY, articleKey);
Map<Locale, Article> options = articleService.findArticleLocalizations(articleKey);
if (options.size() == 0) {
throw new RuntimeException("Article not found: " + articleKey);
}
List<ArticleVm> contents = new LinkedList<ArticleVm>();
for (Entry<Locale, Article> entry : options.entrySet()) {
ArticleVm contentPm = new ArticleVm();
contentPm.setDto(entry.getValue());
contentPm.setAttachments(new ListPm<Attachment>(Arrays.asList(articleService.findArticleAttachments(entry.getValue().getId()))));
contents.add(contentPm);
}
ArticlesVm articlesVm = new ArticlesVm(contents);
model.addAttribute(ATTR_ARTICLES, articlesVm.getMap());
model.addAttribute(ATTR_ARTICLE, contents.get(0));
return viewNameArticleAuthoring;
}
use of org.summerb.microservices.articles.api.dto.Attachment in project summerb by skarpushin.
the class AttachmentDaoExtFilesImpl method deleteByQuery.
@Override
public int deleteByQuery(Query query) {
PaginatedList<Attachment> aa = query(PagerParams.ALL, query);
int ret = 0;
for (Attachment a : aa.getItems()) {
ret += delete(a.getId());
}
return ret;
}
use of org.summerb.microservices.articles.api.dto.Attachment in project summerb by skarpushin.
the class AttachmentServiceImplTest method testAttachment_expectCanRetrieveInputStream.
@Test
public void testAttachment_expectCanRetrieveInputStream() throws Exception {
Attachment a = new Attachment();
a.setArticleId(createTestArticle());
a.setName("test attachment");
a.setSize(123);
a.setContents(createValidContentsReader());
Attachment result = attachmentService.create(a);
InputStream b = attachmentService.getContentInputStream(result.getId());
assertStreamsEquals(createValidContentsReader(), b);
}
Aggregations