ScriptAttributeTagProcessor.java

package sk.iway.iwcm.system.spring.webjet_component.dialect;

import org.thymeleaf.context.ITemplateContext;
import org.thymeleaf.model.IAttribute;
import org.thymeleaf.model.IProcessableElementTag;
import org.thymeleaf.processor.element.IElementTagStructureHandler;
import sk.iway.iwcm.Logger;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.components.insertScript.InsertScriptBean;
import sk.iway.iwcm.components.insertScript.InsertScriptDB;
import sk.iway.iwcm.doc.DocDB;
import sk.iway.iwcm.doc.DocDetails;

import javax.servlet.http.HttpServletRequest;

import java.util.Date;
import java.util.List;

/**
 * Trieda CombineAttributeTagProcessor pre iwcm tag s nazvom script
 * Tag <div data-iwcm-script=""/> sluzi na vlozenie skriptov
 */
public class ScriptAttributeTagProcessor extends AbstractIwcmAttributeTagProcessor {
    private static final String ATTR_NAME = "script";
    private static final int PRECEDENCE = 10002;

    public ScriptAttributeTagProcessor(final String dialectPrefix) {
        super(dialectPrefix, ATTR_NAME, PRECEDENCE);
    }

    /**
     * Metoda pre nahradenie tagu obsahom
     */
    @Override
    protected void processTag(ITemplateContext context, IProcessableElementTag tag, String attributeValue, IElementTagStructureHandler structureHandler, HttpServletRequest request) {
        StringBuilder outPut = new StringBuilder();

        int docId = Tools.getDocId(request);
        DocDetails docDetails = DocDB.getInstance().getBasicDocDetails(docId, false);
        int groupId = docDetails != null ? docDetails.getGroupId() : -1;
        if(Tools.isEmpty(attributeValue) || groupId < 0) {
            Logger.debug(ScriptAttributeTagProcessor.class, "Attribute {} value is null or cannot find group for page id {}", attributeValue, docId);
            structureHandler.removeElement();
            return;
        }

        Date now = new Date(Tools.getNow());
        List<InsertScriptBean> listInsertScript = InsertScriptDB.getInstance().filter(null, "^"+attributeValue+"$", null, docId, groupId, now, now);

        if (Tools.isEmpty(listInsertScript)) {
            Logger.debug(ScriptAttributeTagProcessor.class, "listInsertScript for postition {} is empty of parent groups list for group id {} is empty", attributeValue, groupId);
            structureHandler.removeElement();
            return;
        }

        for (InsertScriptBean isb : listInsertScript) {
            Logger.debug(ScriptAttributeTagProcessor.class,"listInsertScript.size(): {}", listInsertScript.size());
            if (!Tools.canSetCookie(isb.getCookieClass(), request.getCookies())) {
                //Logger.debug(this,"continue: "+listInsertScript.get(i).getCookieClass());
                continue;
            }
            if (outPut.length()>0) outPut.append("\n");
            outPut.append(isb.getScriptBody());
        }

        //ak ma tag atribut data-iwcm-remove="tag" tak robime replace celeho tagu, inak robime len setBody
        IAttribute removeAttr = tag.getAttribute("data-iwcm-remove");
        boolean replace = true;
        if (removeAttr != null) {
            if ("false".equals(removeAttr.getValue())) replace=false;
            else if ("true".equals(removeAttr.getValue())) {
                //uz je defaultne nastavene
                //replace=true;
            }
            else if ("tag".equals(removeAttr.getValue())==false) replace=false;
        } else {
            //pre doc_ atributy remove defaultne nerobime
            if (attributeValue.startsWith("doc_")) replace = false;
        }

        structureHandler.removeAttribute("data-iwcm-remove");

        if (replace) {
            structureHandler.replaceWith(outPut.toString(), false);
        } else {
            structureHandler.setBody(outPut.toString(), false);
        }
    }
}