use of com.enonic.xp.page.PageTemplate in project xp by enonic.
the class PageResolver method resolve.
public PageResolverResult resolve(final RenderMode mode, final Content content, final Site site) {
final Page page = content.getPage();
final PageTemplate pageTemplate;
final DescriptorKey controller;
final Page effectivePage;
if (content instanceof PageTemplate) {
pageTemplate = (PageTemplate) content;
controller = getControllerFromTemplate(pageTemplate, mode);
effectivePage = pageTemplate.getPage();
} else if (page != null) {
if (page.getFragment() != null) {
controller = null;
effectivePage = page;
} else if (page.getDescriptor() != null) {
controller = page.getDescriptor();
effectivePage = page;
} else if (page.getTemplate() != null) {
pageTemplate = getPageTemplateOrFindDefault(page.getTemplate(), content.getType(), site.getPath());
if (pageTemplate != null) {
controller = getControllerFromTemplate(pageTemplate, mode);
effectivePage = mergePageFromPageTemplate(pageTemplate, page);
} else {
controller = errorOrNull(null, mode, String.format("Template [%s] is missing and no default template found for content", page.getTemplate()));
effectivePage = page;
}
} else {
controller = errorOrNull(null, mode, "Content page has neither template nor descriptor");
effectivePage = page;
}
} else {
pageTemplate = this.pageTemplateService.getDefault(GetDefaultPageTemplateParams.create().sitePath(site.getPath()).contentType(content.getType()).build());
if (pageTemplate != null) {
controller = getControllerFromTemplate(pageTemplate, mode);
effectivePage = mergePageFromPageTemplate(pageTemplate, null);
} else {
controller = errorOrNull(null, mode, "No default template found for content");
effectivePage = null;
}
}
return new PageResolverResult(effectivePage, controller);
}
use of com.enonic.xp.page.PageTemplate in project xp by enonic.
the class RenderBaseHandlerTest method createPageTemplate.
private PageTemplate createPageTemplate() {
final PropertyTree pageTemplateConfig = new PropertyTree();
pageTemplateConfig.addLong("pause", 10000L);
PageRegions pageRegions = PageRegions.create().add(Region.create().name("main-region").add(PartComponent.create().descriptor("myapp:mypart").build()).build()).build();
final PageTemplate.Builder builder = PageTemplate.newPageTemplate().key(PageTemplateKey.from("abc")).canRender(ContentTypeNames.from("myapplication:article", "myapplication:banner", "myapplication:ctype")).regions(pageRegions).config(pageTemplateConfig);
builder.controller(DescriptorKey.from("mainapplication:landing-page"));
builder.displayName("Main page template");
builder.name("main-page-template");
builder.parentPath(ContentPath.ROOT);
return builder.build();
}
use of com.enonic.xp.page.PageTemplate in project xp by enonic.
the class PageResolverTest method given_Content_with_Page_without_regions_then_effective_Page_gets_regions_from_Template.
@Test
public void given_Content_with_Page_without_regions_then_effective_Page_gets_regions_from_Template() {
// setup
Site site = Site.create().id(ContentId.from("site-id")).path(ContentPath.from("/site")).displayName("My Site").type(ContentTypeName.from("portal:site")).build();
PageTemplate template = PageTemplate.newPageTemplate().key(PageTemplateKey.from("t-1")).parentPath(site.getPath()).name("my-template").page(Page.create().descriptor(DescriptorKey.from("myapp:my-descriptor")).config(configA).regions(regionsA).build()).canRender(ContentTypeNames.from(ContentTypeName.templateFolder())).build();
Content content = Content.create().parentPath(site.getPath()).name("my-content").type(ContentTypeName.templateFolder()).page(Page.create().template(template.getKey()).config(configB).build()).build();
when(pageTemplateService.getByKey(template.getKey())).thenReturn(template);
// exercise
PageResolverResult result = pageResolver.resolve(RenderMode.LIVE, content, site);
final Page effectivePage = result.getEffectivePage();
// verify
assertEquals(regionsA, effectivePage.getRegions());
assertEquals(configB, effectivePage.getConfig());
assertEquals(template.getKey(), effectivePage.getTemplate());
assertNull(effectivePage.getDescriptor());
assertEquals(DescriptorKey.from("myapp:my-descriptor"), result.getController());
}
use of com.enonic.xp.page.PageTemplate in project xp by enonic.
the class CreatePageTemplateCommand method execute.
public PageTemplate execute() {
final PropertyTree data = new PropertyTree();
new PageTemplateFormDataBuilder().supports(supports).appendData(data.getRoot());
final Content content = contentService.create(CreateContentParams.create().name(name).displayName(displayName).owner(PrincipalKey.ofAnonymous()).contentData(data).type(ContentTypeName.pageTemplate()).inheritPermissions(true).parent(ContentPath.from(site, ContentServiceImpl.TEMPLATES_FOLDER_NAME)).build());
return (PageTemplate) pageService.create(new CreatePageParams().content(content.getId()).controller(controller).config(pageConfig).regions(pageRegions));
}
use of com.enonic.xp.page.PageTemplate in project xp by enonic.
the class ComponentInstructionTest method testInstructionRenderFragment.
@Test
public void testInstructionRenderFragment() throws Exception {
RendererDelegate rendererDelegate = newRendererFactory("<b>part content</b>");
ComponentService componentService = Mockito.mock(ComponentService.class);
Component component = createPartComponent();
doReturn(component).when(componentService).getByKey(isA(DescriptorKey.class));
ComponentInstruction instruction = new ComponentInstruction();
instruction.setRendererDelegate(rendererDelegate);
instruction.setComponentService(componentService);
PortalRequest portalRequest = new PortalRequest();
Content content = createFragmentPage("content-id", "content-name");
portalRequest.setContent(content);
Site site = createSite("site-id", "site-name", "myapplication:content-type");
portalRequest.setSite(site);
PageTemplate pageTemplate = createPageTemplate();
portalRequest.setPageTemplate(pageTemplate);
String outputHtml = instruction.evaluate(portalRequest, "COMPONENT fragment").getAsString();
assertEquals("<b>part content</b>", outputHtml);
}
Aggregations