Search in sources :

Example 1 with MacroProcessor

use of com.enonic.xp.portal.macro.MacroProcessor in project xp by enonic.

the class DisableMacroProcessorTest method testProcess.

@Test
public void testProcess() {
    final MacroProcessor processor = new DisableMacroProcessor();
    final MacroContext macroContext1 = MacroContext.create().name("name").body("here is macro: [macro]body[/macro]").build();
    assertEquals("here is macro: [macro]body[/macro]", processor.process(macroContext1).getBody());
    final MacroContext macroContext2 = MacroContext.create().name("name").body("<tagWithMacro>here is macro: [macro]body[/macro]</tagWithMacro>").build();
    assertEquals("<tagWithMacro>here is macro: [macro]body[/macro]</tagWithMacro>", processor.process(macroContext2).getBody());
}
Also used : MacroProcessor(com.enonic.xp.portal.macro.MacroProcessor) MacroContext(com.enonic.xp.portal.macro.MacroContext) Test(org.junit.jupiter.api.Test)

Example 2 with MacroProcessor

use of com.enonic.xp.portal.macro.MacroProcessor in project xp by enonic.

the class MacroInstruction method evaluate.

@Override
public PortalResponse evaluate(final PortalRequest portalRequest, final String instruction) {
    if (!Instruction.isInstruction(instruction, "MACRO")) {
        return null;
    }
    // parse instruction
    final Instruction macroInstruction;
    try {
        macroInstruction = new InstructionParser().parse(instruction);
    } catch (RenderException e) {
        return null;
    }
    final String macroName = macroInstruction.attribute(MACRO_NAME);
    if (macroName == null) {
        return null;
    }
    // resolve macro processor
    final Site site = portalRequest.getSite();
    if (site == null) {
        throw new RenderException("Macro controller script could not be resolved, context site could not be found.");
    }
    final MacroDescriptor macroDescriptor = resolveMacroDescriptor(site.getSiteConfigs(), macroName);
    if (macroDescriptor == null) {
        final String editModeMacro = toMacroInstruction(macroInstruction);
        return PortalResponse.create().body(editModeMacro).build();
    }
    final MacroProcessor macroProcessor = resolveMacroProcessor(macroDescriptor);
    if (macroProcessor == null) {
        throw new RenderException("Macro controller not found: " + macroName);
    }
    // execute macro
    final MacroContext context = createContext(macroInstruction, macroDescriptor, portalRequest);
    final ApplicationKey previousAppKey = portalRequest.getApplicationKey();
    try {
        portalRequest.setApplicationKey(macroDescriptor.getKey().getApplicationKey());
        return macroProcessor.process(context);
    } finally {
        portalRequest.setApplicationKey(previousAppKey);
    }
}
Also used : Site(com.enonic.xp.site.Site) ApplicationKey(com.enonic.xp.app.ApplicationKey) RenderException(com.enonic.xp.portal.impl.rendering.RenderException) MacroDescriptor(com.enonic.xp.macro.MacroDescriptor) MacroProcessor(com.enonic.xp.portal.macro.MacroProcessor) MacroContext(com.enonic.xp.portal.macro.MacroContext) PostProcessInstruction(com.enonic.xp.portal.postprocess.PostProcessInstruction)

Example 3 with MacroProcessor

use of com.enonic.xp.portal.macro.MacroProcessor in project xp by enonic.

the class MacroInstructionTest method testInstructionMacroMultiValue.

@Test
public void testInstructionMacroMultiValue() throws Exception {
    MacroKey key = MacroKey.from("myapp:mymacro");
    MacroDescriptor macroDescriptor = MacroDescriptor.create().key(key).build();
    when(macroDescriptorService.getByKey(key)).thenReturn(macroDescriptor);
    MacroProcessor macro = (ctx) -> PortalResponse.create().body(ctx.getName() + ": param1=" + ctx.getParameter("param1").get(0) + ", body=" + ctx.getBody()).build();
    when(macroProcessorFactory.fromScript(any())).thenReturn(macro);
    String outputHtml = macroInstruction.evaluate(portalRequest, "MACRO _name=\"mymacro\" param1=\"value1\" param1=\"value2\" param2=\"other\" _body=\"body\"").getAsString();
    assertEquals("mymacro: param1=value1, body=body", outputHtml);
}
Also used : Assertions.fail(org.junit.jupiter.api.Assertions.fail) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) BeforeEach(org.junit.jupiter.api.BeforeEach) MacroProcessorFactory(com.enonic.xp.portal.macro.MacroProcessorFactory) SiteConfigsDataSerializer(com.enonic.xp.site.SiteConfigsDataSerializer) Assertions.assertNull(org.junit.jupiter.api.Assertions.assertNull) MacroProcessor(com.enonic.xp.portal.macro.MacroProcessor) ContentTypeName(com.enonic.xp.schema.content.ContentTypeName) ContentId(com.enonic.xp.content.ContentId) PortalRequest(com.enonic.xp.portal.PortalRequest) PortalResponse(com.enonic.xp.portal.PortalResponse) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) PropertyTree(com.enonic.xp.data.PropertyTree) ContentPath(com.enonic.xp.content.ContentPath) SiteConfig(com.enonic.xp.site.SiteConfig) MacroDescriptor(com.enonic.xp.macro.MacroDescriptor) Mockito.when(org.mockito.Mockito.when) ApplicationKey(com.enonic.xp.app.ApplicationKey) RenderException(com.enonic.xp.portal.impl.rendering.RenderException) Test(org.junit.jupiter.api.Test) Form(com.enonic.xp.form.Form) MacroDescriptors(com.enonic.xp.macro.MacroDescriptors) Mockito(org.mockito.Mockito) MacroDescriptorService(com.enonic.xp.macro.MacroDescriptorService) InputTypeName(com.enonic.xp.inputtype.InputTypeName) Site(com.enonic.xp.site.Site) PrincipalKey(com.enonic.xp.security.PrincipalKey) SiteConfigs(com.enonic.xp.site.SiteConfigs) Input(com.enonic.xp.form.Input) MacroKey(com.enonic.xp.macro.MacroKey) MacroKey(com.enonic.xp.macro.MacroKey) MacroDescriptor(com.enonic.xp.macro.MacroDescriptor) MacroProcessor(com.enonic.xp.portal.macro.MacroProcessor) Test(org.junit.jupiter.api.Test)

Example 4 with MacroProcessor

use of com.enonic.xp.portal.macro.MacroProcessor in project xp by enonic.

the class MacroInstructionTest method testInstructionMacro.

@Test
public void testInstructionMacro() throws Exception {
    MacroKey key = MacroKey.from("myapp:mymacro");
    MacroDescriptor macroDescriptor = MacroDescriptor.create().key(key).build();
    when(macroDescriptorService.getByKey(key)).thenReturn(macroDescriptor);
    MacroProcessor macro = (ctx) -> PortalResponse.create().body(ctx.getName() + ": param1=" + ctx.getParameter("param1").get(0) + ", body=" + ctx.getBody()).build();
    when(macroProcessorFactory.fromScript(any())).thenReturn(macro);
    String outputHtml = macroInstruction.evaluate(portalRequest, "MACRO _name=\"mymacro\" param1=\"value1\" _body=\"body\"").getAsString();
    assertEquals("mymacro: param1=value1, body=body", outputHtml);
}
Also used : Assertions.fail(org.junit.jupiter.api.Assertions.fail) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) BeforeEach(org.junit.jupiter.api.BeforeEach) MacroProcessorFactory(com.enonic.xp.portal.macro.MacroProcessorFactory) SiteConfigsDataSerializer(com.enonic.xp.site.SiteConfigsDataSerializer) Assertions.assertNull(org.junit.jupiter.api.Assertions.assertNull) MacroProcessor(com.enonic.xp.portal.macro.MacroProcessor) ContentTypeName(com.enonic.xp.schema.content.ContentTypeName) ContentId(com.enonic.xp.content.ContentId) PortalRequest(com.enonic.xp.portal.PortalRequest) PortalResponse(com.enonic.xp.portal.PortalResponse) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) PropertyTree(com.enonic.xp.data.PropertyTree) ContentPath(com.enonic.xp.content.ContentPath) SiteConfig(com.enonic.xp.site.SiteConfig) MacroDescriptor(com.enonic.xp.macro.MacroDescriptor) Mockito.when(org.mockito.Mockito.when) ApplicationKey(com.enonic.xp.app.ApplicationKey) RenderException(com.enonic.xp.portal.impl.rendering.RenderException) Test(org.junit.jupiter.api.Test) Form(com.enonic.xp.form.Form) MacroDescriptors(com.enonic.xp.macro.MacroDescriptors) Mockito(org.mockito.Mockito) MacroDescriptorService(com.enonic.xp.macro.MacroDescriptorService) InputTypeName(com.enonic.xp.inputtype.InputTypeName) Site(com.enonic.xp.site.Site) PrincipalKey(com.enonic.xp.security.PrincipalKey) SiteConfigs(com.enonic.xp.site.SiteConfigs) Input(com.enonic.xp.form.Input) MacroKey(com.enonic.xp.macro.MacroKey) MacroKey(com.enonic.xp.macro.MacroKey) MacroDescriptor(com.enonic.xp.macro.MacroDescriptor) MacroProcessor(com.enonic.xp.portal.macro.MacroProcessor) Test(org.junit.jupiter.api.Test)

Example 5 with MacroProcessor

use of com.enonic.xp.portal.macro.MacroProcessor in project xp by enonic.

the class MacroInstructionTest method testInstructionSystemMacro.

@Test
public void testInstructionSystemMacro() throws Exception {
    MacroKey key = MacroKey.from(ApplicationKey.SYSTEM, "mymacro");
    MacroDescriptor macroDescriptor = MacroDescriptor.create().key(key).build();
    when(macroDescriptorService.getByKey(key)).thenReturn(macroDescriptor);
    when(macroDescriptorService.getByApplication(any())).thenReturn(MacroDescriptors.empty());
    MacroProcessor macro = (ctx) -> PortalResponse.create().body(ctx.getName() + ": param1=" + ctx.getParam("param1") + ", body=" + ctx.getBody()).build();
    when(macroProcessorFactory.fromScript(any())).thenReturn(macro);
    String outputHtml = macroInstruction.evaluate(portalRequest, "MACRO _name=\"mymacro\" param1=\"value1\" _body=\"body\"").getAsString();
    assertEquals("mymacro: param1=value1, body=body", outputHtml);
}
Also used : Assertions.fail(org.junit.jupiter.api.Assertions.fail) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) BeforeEach(org.junit.jupiter.api.BeforeEach) MacroProcessorFactory(com.enonic.xp.portal.macro.MacroProcessorFactory) SiteConfigsDataSerializer(com.enonic.xp.site.SiteConfigsDataSerializer) Assertions.assertNull(org.junit.jupiter.api.Assertions.assertNull) MacroProcessor(com.enonic.xp.portal.macro.MacroProcessor) ContentTypeName(com.enonic.xp.schema.content.ContentTypeName) ContentId(com.enonic.xp.content.ContentId) PortalRequest(com.enonic.xp.portal.PortalRequest) PortalResponse(com.enonic.xp.portal.PortalResponse) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) PropertyTree(com.enonic.xp.data.PropertyTree) ContentPath(com.enonic.xp.content.ContentPath) SiteConfig(com.enonic.xp.site.SiteConfig) MacroDescriptor(com.enonic.xp.macro.MacroDescriptor) Mockito.when(org.mockito.Mockito.when) ApplicationKey(com.enonic.xp.app.ApplicationKey) RenderException(com.enonic.xp.portal.impl.rendering.RenderException) Test(org.junit.jupiter.api.Test) Form(com.enonic.xp.form.Form) MacroDescriptors(com.enonic.xp.macro.MacroDescriptors) Mockito(org.mockito.Mockito) MacroDescriptorService(com.enonic.xp.macro.MacroDescriptorService) InputTypeName(com.enonic.xp.inputtype.InputTypeName) Site(com.enonic.xp.site.Site) PrincipalKey(com.enonic.xp.security.PrincipalKey) SiteConfigs(com.enonic.xp.site.SiteConfigs) Input(com.enonic.xp.form.Input) MacroKey(com.enonic.xp.macro.MacroKey) MacroKey(com.enonic.xp.macro.MacroKey) MacroDescriptor(com.enonic.xp.macro.MacroDescriptor) MacroProcessor(com.enonic.xp.portal.macro.MacroProcessor) Test(org.junit.jupiter.api.Test)

Aggregations

MacroProcessor (com.enonic.xp.portal.macro.MacroProcessor)6 ApplicationKey (com.enonic.xp.app.ApplicationKey)5 MacroDescriptor (com.enonic.xp.macro.MacroDescriptor)5 RenderException (com.enonic.xp.portal.impl.rendering.RenderException)5 Site (com.enonic.xp.site.Site)5 Test (org.junit.jupiter.api.Test)5 ContentId (com.enonic.xp.content.ContentId)4 ContentPath (com.enonic.xp.content.ContentPath)4 PropertyTree (com.enonic.xp.data.PropertyTree)4 Form (com.enonic.xp.form.Form)4 Input (com.enonic.xp.form.Input)4 InputTypeName (com.enonic.xp.inputtype.InputTypeName)4 MacroDescriptorService (com.enonic.xp.macro.MacroDescriptorService)4 MacroDescriptors (com.enonic.xp.macro.MacroDescriptors)4 MacroKey (com.enonic.xp.macro.MacroKey)4 PortalRequest (com.enonic.xp.portal.PortalRequest)4 PortalResponse (com.enonic.xp.portal.PortalResponse)4 MacroProcessorFactory (com.enonic.xp.portal.macro.MacroProcessorFactory)4 ContentTypeName (com.enonic.xp.schema.content.ContentTypeName)4 PrincipalKey (com.enonic.xp.security.PrincipalKey)4