package org.apache.struts2.sitemesh;

import com.opensymphony.module.sitemesh.Config;
import com.opensymphony.module.sitemesh.factory.DefaultFactory;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsStatics;


public class StrutsSiteMeshFactory extends DefaultFactory {

    public StrutsSiteMeshFactory(Config config) {
        super(config);
    }

    /**
     * Determine whether a Page of given content-type should be parsed or not, avoiding inner action parsing.
     */
    @Override
    public boolean shouldParsePage(String contentType) {
        return !isInsideActionTag() && super.shouldParsePage(contentType);
    }

    private boolean isInsideActionTag() {
        Object attribute = ServletActionContext.getRequest().getAttribute(StrutsStatics.STRUTS_ACTION_TAG_INVOCATION);
        return (Boolean) ObjectUtils.defaultIfNull(attribute, Boolean.FALSE);
    }
}
