use of org.summerb.microservices.articles.api.dto.Article in project summerb by skarpushin.
the class ArticleRendererImpl method renderArticle.
@Override
public RenderedArticle renderArticle(String key, Locale locale) {
Preconditions.checkArgument(StringUtils.hasText(key));
Preconditions.checkArgument(locale != null);
try {
Article article = articleService.findArticleByKeyAndLocale(key, locale);
if (article == null) {
throw new RuntimeException("Article not found: " + key + ", locale: " + locale);
}
RenderedArticle renderedArticle = buildRenderedArticleTemplate(article);
ArticleRenderingContext articleRenderingContext = new ArticleRenderingContext(locale, renderedArticle, articleService, articleAbsoluteUrlBuilder);
StringTemplate annotationTemplate = stringTemplateCompiler.compile(article.getAnnotation());
renderedArticle.setAnnotation(annotationTemplate.applyTo(articleRenderingContext));
StringTemplate contentTemplate = stringTemplateCompiler.compile(article.getContent());
renderedArticle.setContent(contentTemplate.applyTo(articleRenderingContext));
return renderedArticle;
} catch (Throwable t) {
throw new RuntimeException("Failed to render article", t);
}
}
use of org.summerb.microservices.articles.api.dto.Article in project summerb by skarpushin.
the class ArticleRenderingContext method getReferencedArticle.
protected Article getReferencedArticle(String articleKey) throws GenericEntityNotFoundException {
if (referencedArticles.containsKey(articleKey)) {
return referencedArticles.get(articleKey);
}
try {
Article ret = articleService.findArticleByKeyAndLocale(articleKey, locale);
if (ret == null) {
throw new GenericEntityNotFoundException("article", articleKey);
}
referencedArticles.put(articleKey, ret);
registerReferencedArticle(ret.getId());
return ret;
} catch (Throwable e) {
Throwables.throwIfInstanceOf(e, GenericEntityNotFoundException.class);
throw new RuntimeException("Failed to find effective referenced article permutation " + articleKey, e);
}
}
use of org.summerb.microservices.articles.api.dto.Article in project summerb by skarpushin.
the class ArticleServiceImpl method findArticleLocalizations.
@Override
public Map<Locale, Article> findArticleLocalizations(String articleKey) {
try {
PaginatedList<Article> articleOptions = query(PagerParams.ALL, Query.n().eq(Article.FN_KEY, articleKey));
Map<Locale, Article> ret = new HashMap<Locale, Article>(articleOptions.getItems().size());
for (Article a : articleOptions.getItems()) {
ret.put(new Locale(a.getLang()), a);
}
return ret;
} catch (Throwable t) {
throw new RuntimeException("Failed to find all article localizations", t);
}
}
use of org.summerb.microservices.articles.api.dto.Article in project summerb by skarpushin.
the class ArticleRenderingServiceImplTest method testRenderArticle_smokeTest.
@Test
public void testRenderArticle_smokeTest() throws Exception {
ArticleAbsoluteUrlBuilder articleAbsoluteUrlBuilder = new UrlBuilderTestImpl();
ArticleService articleService = Mockito.mock(ArticleService.class);
Article a1 = new Article();
a1.setId(1L);
a1.setArticleKey("a1");
a1.setAnnotation("Article annotation. Read other article first: ${article['a2']}");
a1.setContent("Article text. See: ${article['a2']}. And now - here is the screenshot: ${img['screenshot1.jpg']}");
when(articleService.findArticleByKeyAndLocale(eq("a1"), any(Locale.class))).thenReturn(a1);
Attachment att1 = new Attachment();
att1.setId(1L);
att1.setArticleId(1L);
att1.setName("screenshot1.jpg");
when(articleService.findArticleAttachments(1L)).thenReturn(new Attachment[] { att1 });
Article a2 = new Article();
a2.setId(1L);
a2.setArticleKey("a2");
a2.setTitle("Title of article 2");
a2.setAnnotation("Article annotation. Read other article first: ${article['a2']}");
a2.setContent("Article text. See: ${article['a2']}. And now - here is the screenshot: ${img['screenshot1.jpg']}");
when(articleService.findArticleByKeyAndLocale(eq("a2"), any(Locale.class))).thenReturn(a2);
ArticleRendererImpl fixture = new ArticleRendererImpl();
fixture.setArticleAbsoluteUrlBuilder(articleAbsoluteUrlBuilder);
fixture.setArticleService(articleService);
fixture.setStringTemplateCompiler(new StringTemplateCompilerlImpl());
RenderedArticle result = fixture.renderArticle("a1", Locale.ENGLISH);
assertNotNull(result);
String a2href = "<a href=\"url-article:a2\" title=\"Title of article 2\">Title of article 2</a>";
assertEquals("Article annotation. Read other article first: " + a2href, result.getAnnotation());
assertEquals("Article text. See: " + a2href + ". And now - here is the screenshot: <img class=\"article-image\" src=\"url-att:screenshot1.jpg\" alt=\"screenshot1.jpg\" />", result.getContent());
}
use of org.summerb.microservices.articles.api.dto.Article in project summerb by skarpushin.
the class ArticleServiceImplTest method testCreateArticle_expectOk.
@Test
public void testCreateArticle_expectOk() throws Exception {
Article a = buildTestDto();
Article result = articleService.create(a);
assertNotNull(result);
Article b = articleService.findById(result.getId());
assertNotNull(b);
assertEquals(a.getArticleKey(), b.getArticleKey());
assertEquals(a.getTitle(), b.getTitle());
assertEquals(a.getAnnotation(), b.getAnnotation());
assertEquals(a.getContent(), b.getContent());
assertEquals(a.getArticleGroup(), b.getArticleGroup());
}
Aggregations