ComponentListener.java

package sk.iway.iwcm.editor.rest;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.springframework.ui.ModelMap;

import sk.iway.iwcm.JsonTools;
import sk.iway.iwcm.Logger;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.admin.ThymeleafEvent;
import sk.iway.iwcm.system.annotations.WebjetAppStore;
import sk.iway.iwcm.system.spring.events.WebjetEvent;

/**
 * Add data for component.pug to extend it with custom HTML code
 */
@Component
public class ComponentListener {

    @EventListener(condition = "#event.clazz eq 'sk.iway.iwcm.admin.ThymeleafEvent' && event.source.page=='webpages' && event.source.subpage=='component'")
    protected void setInitalData(final WebjetEvent<ThymeleafEvent> event) {
        ModelMap model = event.getSource().getModel();
        String includePath = null;
        try {

            HttpServletRequest request = event.getSource().getRequest();

            String className = request.getParameter("name");
            if (Tools.isNotEmpty(className)) {
                Class<?> cl = Class.forName(className);
                if (cl.isAnnotationPresent(WebjetAppStore.class)) {
                    WebjetAppStore appStore = cl.getAnnotation(WebjetAppStore.class);
                    includePath = appStore.customHtml();
                }
            }

        } catch (Exception e) {
            Logger.error(ComponentListener.class, e);
        }

        if (Tools.isEmpty(includePath)) {
            includePath = "/apps/admin/editor-component.html";
        }
        model.addAttribute("appIncludePath", includePath);

        //inject component response JSON
        String className = event.getSource().getRequest().getParameter("className");
        String componentJson = "null";
        String requestJson = "null";
        String requestJsonTest = "null";
        if (Tools.isNotEmpty(className)) {
            try {
                ComponentRequest componentRequest = new ComponentRequest();
                componentRequest.setClassName(className);
                componentRequest.setParameters(event.getSource().getRequest().getParameter("parameters"));
                componentRequest.setDocId(Integer.parseInt(event.getSource().getRequest().getParameter("docId")));
                componentRequest.setGroupId(Integer.parseInt(event.getSource().getRequest().getParameter("groupId")));
                componentRequest.setPageTitle(event.getSource().getRequest().getParameter("title"));
                componentRequest.setOriginalComponentName(event.getSource().getRequest().getParameter("originalComponentName"));
                componentRequest.setOriginalJspFileName(event.getSource().getRequest().getParameter("originalJspFileName"));

                Map<String, Object> response = ComponentsService.getComponentResponse(componentRequest, event.getSource().getRequest()   );
                componentJson = JsonTools.objectToJSON(response);
                requestJson = JsonTools.objectToJSON(componentRequest);
            } catch (Exception e) {
                Logger.error(ComponentListener.class, e);
            }
        }
        model.addAttribute("componentJson", componentJson);
        model.addAttribute("requestJson", requestJson);
        model.addAttribute("requestJsonTest", requestJsonTest);
    }
}