All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.semanticwb.portal.TemplateImp Maven / Gradle / Ivy

The newest version!
/*
 * SemanticWebBuilder es una plataforma para el desarrollo de portales y aplicaciones de integración,
 * colaboración y conocimiento, que gracias al uso de tecnología semántica puede generar contextos de
 * información alrededor de algún tema de interés o bien integrar información y aplicaciones de diferentes
 * fuentes, donde a la información se le asigna un significado, de forma que pueda ser interpretada y
 * procesada por personas y/o sistemas, es una creación original del Fondo de Información y Documentación
 * para la Industria INFOTEC, cuyo registro se encuentra actualmente en trámite.
 *
 * INFOTEC pone a su disposición la herramienta SemanticWebBuilder a través de su licenciamiento abierto al público (‘open source’),
 * en virtud del cual, usted podrá usarlo en las mismas condiciones con que INFOTEC lo ha diseñado y puesto a su disposición;
 * aprender de él; distribuirlo a terceros; acceder a su código fuente y modificarlo, y combinarlo o enlazarlo con otro software,
 * todo ello de conformidad con los términos y condiciones de la LICENCIA ABIERTA AL PÚBLICO que otorga INFOTEC para la utilización
 * del SemanticWebBuilder 4.0.
 *
 * INFOTEC no otorga garantía sobre SemanticWebBuilder, de ninguna especie y naturaleza, ni implícita ni explícita,
 * siendo usted completamente responsable de la utilización que le dé y asumiendo la totalidad de los riesgos que puedan derivar
 * de la misma.
 *
 * Si usted tiene cualquier duda o comentario sobre SemanticWebBuilder, INFOTEC pone a su disposición la siguiente
 * dirección electrónica:
 *  http://www.semanticwebbuilder.org.mx
 */
package org.semanticwb.portal;

import com.arthurdo.parser.HtmlException;
import com.arthurdo.parser.HtmlStreamTokenizer;
import com.arthurdo.parser.HtmlTag;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.semanticwb.Logger;
import org.semanticwb.SWBException;
import org.semanticwb.SWBPlatform;
import org.semanticwb.SWBPortal;
import org.semanticwb.SWBUtils;
import org.semanticwb.model.ResourceSubType;
import org.semanticwb.model.ResourceType;
import org.semanticwb.model.Template;
import org.semanticwb.model.User;
import org.semanticwb.model.VersionInfo;
import org.semanticwb.model.WebPage;
import org.semanticwb.portal.api.SWBParamRequestImp;
import org.semanticwb.portal.api.SWBResource;
import org.semanticwb.portal.api.SWBResourceModes;
import org.semanticwb.portal.util.SWBIFMethod;
import org.semanticwb.portal.util.SWBMethod;
import org.semanticwb.servlet.SWBHttpServletRequestWrapper;
import org.semanticwb.servlet.SWBHttpServletResponseWrapper;
import org.semanticwb.servlet.internal.DistributorParams;

// TODO: Auto-generated Javadoc
/**
 * The Class TemplateImp.
 */
public class TemplateImp extends Template
{
    
    /** The log. */
    private static Logger log = SWBUtils.getLogger(TemplateImp.class);
    
    /** The parts. */
    private ArrayList parts;
    
    /** The objects. */
    private HashMap objects = new HashMap();

    /** The web path. */
    private String webPath;
    
    /** The work path. */
    private String workPath;
    
    /** The act path. */
    private String actPath;
    
    /** The act work path. */
    private String actWorkPath;
    
    /** The act rel work path. */
    private String actRelWorkPath;

    /** The content type. */
    private String contentType=null;
    
    private boolean showtime=true;
    
    /**
     * Instantiates a new template imp.
     * 
     * @param base the base
     */
    public TemplateImp(Template base)
    {
        super(base.getSemanticObject());
        
        webPath = SWBPortal.getWebWorkPath()+super.getWorkPath();
        actPath = webPath+ "/" + getActualVersion().getVersionNumber() + "/";
        workPath = SWBPortal.getWorkPath()+super.getWorkPath();
        actWorkPath=workPath + "/" + getActualVersion().getVersionNumber();
        actRelWorkPath=super.getWorkPath()+ "/" + getActualVersion().getVersionNumber();

        objects.put("template", this);
        objects.put("user", new User(null));
        objects.put("topic", new WebPage(null));
        objects.put("webpage", new WebPage(null));
        objects.put("util", new SWBUtilTag());
        objects.put("request", HttpServletRequest.class);
        objects.put("response", HttpServletResponse.class);
        objects.put("webpath", SWBPlatform.getContextPath());
        objects.put("distpath", SWBPortal.getDistributorPath());
        objects.put("templatepath", actPath);
        objects.put("if:user", SWBIFMethod.class);
        objects.put("if:topic", SWBIFMethod.class);
        objects.put("if:webpage", SWBIFMethod.class);
        objects.put("if:website", SWBIFMethod.class);
        objects.put("if:template", SWBIFMethod.class);
        

        if (isActive() && !isDeleted())
        {
            parts = parse(getFileName(getActualVersion()));
        } else
        {
            parts = new ArrayList();
        }
    }

    /**
     * Identify object.
     * 
     * @param val the val
     * @param objects the objects
     * @return the object
     */
    public Object identifyObject(String val, HashMap objects)
    {
        try
        {
            if (val.startsWith("{") && val.endsWith("}"))
            {
                int sar = val.indexOf('@');
                if (sar == -1)
                {
                    String sobj = val.substring(1, val.length() - 1).toLowerCase();
                    return objects.get(sobj);
                } else
                {
                    String sobj = val.substring(1, sar).toLowerCase();
                    if(objects.get(sobj)==null)return null;
                    String smto = val.substring(sar + 1, val.length() - 1);
                    Method mto = objects.get(sobj).getClass().getMethod(smto, (Class[])null);
                    return new SWBMethod(mto, objects.get(sobj), null, this);
                }
            }
        } catch (Exception e)
        {
            log.error(e);
        }
        return val;
    }

    /**
     * Replace objects values.
     * 
     * @param value the value
     * @param auxparts the auxparts
     * @param parts the parts
     * @param objects the objects
     * @return the string buffer
     */
    public StringBuffer replaceObjectsValues(String value, StringBuffer auxparts, ArrayList parts, HashMap objects)
    {

        ArrayList p = SWBUtils.TEXT.regExpSplit(value, "\\{([^\\{]+?)\\}");
        Iterator it = p.iterator();
        while (it.hasNext())
        {
            String sp = (String) it.next();
            Object obj = identifyObject(sp, objects);
            if(obj==null)
            {
                if(sp.startsWith("/work/"))
                {
                    auxparts.append(SWBPortal.getWebWorkPath());
                    auxparts.append(sp.substring(5));
                }else
                {
                    auxparts.append(sp);
                }
            }else
            {
                if (obj instanceof String)
                {
                    String str=(String)obj;
                    if(str.startsWith("/work/"))
                    {
                        auxparts.append(SWBPortal.getWebWorkPath());
                        auxparts.append(str.substring(5));
                    }else
                    {
                        auxparts.append(str);
                    }
                } else
                {
                    if (auxparts.length() > 0)
                    {
                        parts.add(auxparts.toString());
                        parts.add(obj);
                        auxparts = new StringBuffer();
                    }
                }
            }
        }
        return auxparts;
    }
    
    /**
     * Gets the resource type.
     * 
     * @param type the type
     * @return the resource type
     */
    private ResourceType getResourceType(String type)
    {
        ResourceType rt=null;
        if(type!=null)
        {
            //busca el tipo de recurso en el topicmap del template
            rt=getWebSite().getResourceType(type);
        }
        return rt;
    }
    
    /*
     * Regresa ID (numero) del subtipo de recurso como string y concatena 
     * subtypemap en el caso de no coincidir con el topicmap de la plantilla
     */    
    /**
     * Gets the sub type.
     * 
     * @param type the type
     * @param stype the stype
     * @return the sub type
     */
    public ResourceSubType getSubType(String type, String stype)
    {
        //busca el tipo de recurso en el topicmap del template
        ResourceSubType rt=getWebSite().getResourceSubType(stype);
        if(rt==null)
        {
            ResourceType t=getWebSite().getResourceType(type);
            if(t!=null)
            {
                Iterator it=t.listSubTypes();
                while (it.hasNext())
                {
                    ResourceSubType resourceSubType = it.next();
                    if(resourceSubType.getTitle().equalsIgnoreCase(stype))
                    {
                        rt=resourceSubType;
                        break;
                    }
                }
            }
        }
        return rt;
    }
    

    /**
     * Parses the.
     * 
     * @param filename the filename
     * @return the array list
     * @return
     */
    public ArrayList parse(String filename)
    {
        ArrayList parts = new ArrayList();
        LinkedList ifs = new LinkedList();
        try
        {
            HtmlStreamTokenizer tok = null;
            if (filename.startsWith("/"))
                tok = new HtmlStreamTokenizer(SWBPortal.getFileFromWorkPath(filename));
            else
                tok = new HtmlStreamTokenizer(SWBPortal.getFileFromWorkPath(actRelWorkPath + "/" + filename));
            StringBuffer auxpart = new StringBuffer();

            boolean textpart = false;
            boolean objectpart = false;
            boolean resourcepart = false;
            boolean contentpart = false;
            boolean scriptpart = false;
            while (tok.nextToken() != HtmlStreamTokenizer.TT_EOF)
            {
                int ttype = tok.getTokenType();
                if (ttype == HtmlStreamTokenizer.TT_TAG)
                {
                    HtmlTag tag = new HtmlTag();
                    tok.parseTag(tok.getStringValue(), tag);
                    if (tag.getTagString().toLowerCase().equals("resource"))
                    {
                        if (textpart)
                        {
                            if (!resourcepart)
                                parts.add(auxpart.toString());
                            auxpart = new StringBuffer();
                            textpart = false;
                        }
                        SWBResourceMgr obj = SWBPortal.getResourceMgr();
                        try
                        {
                            if (!tag.isEndTag())
                            {
                                if (!tag.isEmpty()) resourcepart = true;

                                HashMap params = new HashMap();
                                Enumeration en = tag.getParamNames();
                                while (en.hasMoreElements())
                                {
                                    String name = (String) en.nextElement();
                                    params.put(name.toLowerCase(), tag.getParam(name));
                                }
                                ResourceType type=getResourceType(tag.getParam("type"));
                                ResourceSubType stype=getSubType(tag.getParam("type"),tag.getParam("stype"));
                                Object args[] = {type, params, stype};
                                parts.add(new SWBMethod(null, obj, args, this));
                            } else
                            {
                                resourcepart = false;
                            }
                        } catch (Exception e)
                        {
                            log.error("Error to parse Template:" + tag.getParam("type") + " ->Template:" + getTitle(),e);
                        }
                    } else if (tag.getTagString().toLowerCase().equals("wbobject"))
                    {
                        if (textpart)
                        {
                            if(!tag.isEndTag())parts.add(auxpart.toString());
                            auxpart = new StringBuffer();
                            textpart = false;
                        }
                        try
                        {
                            if (!tag.isEndTag())
                            {
                                ResourceType rec=getResourceType(tag.getParam("name"));
                                String objclass = rec.getResourceClassName();
                                Class cls = Class.forName(objclass);
                                objects.put(tag.getParam("name").toLowerCase(), cls.newInstance());
                            }
                        } catch (Exception e)
                        {
                            log.error("Error in Template, resource not found" + getTitle());
                        }
                    } else if (objects.containsKey(tag.getTagString().toLowerCase()))
                    {
                        Object obj = objects.get(tag.getTagString().toLowerCase());
                        if(obj instanceof String)
                        {
                            if (!textpart) textpart = true;
                            auxpart.append(obj.toString());
                        }else if(obj==SWBIFMethod.class)
                        {
                            if (!tag.isEndTag())
                            {
                                if (!textpart) textpart = true;
                                parts.add(auxpart.toString());
                                auxpart = new StringBuffer();
                                //Guardar partes y crear temporal
                                SWBIFMethod ifp=new SWBIFMethod(tag, parts, this);
                                parts.add(ifp);
                                ifs.add(ifp);
                                parts=ifp.getParts();
                            }else
                            {
                                parts.add(auxpart.toString());
                                auxpart = new StringBuffer();
                                SWBIFMethod ifp=ifs.removeLast();
                                parts=ifp.getBaseParts();
                            }
                        }else
                        {
                            if (textpart)
                            {
                                if (!objectpart)
                                    parts.add(auxpart.toString());
                                auxpart = new StringBuffer();
                                textpart = false;
                            }
                            try
                            {
                                if (!tag.isEndTag())
                                {
                                    if (!tag.isEmpty()) objectpart = true;
                                    Class cls = null;
                                    if (obj instanceof Class)
                                        cls = (Class) obj;
                                    else
                                        cls = obj.getClass();

                                    HashMap params = new HashMap();
                                    Enumeration en = tag.getParamNames();
                                    boolean objArgs = false;
                                    while (en.hasMoreElements())
                                    {
                                        String name = (String) en.nextElement();
                                        String val = tag.getParam(name);
                                        if (val.startsWith("{") && val.endsWith("}"))
                                        {
                                            objArgs = true;
                                            int sar = val.indexOf('@');
                                            if (sar == -1)
                                            {
                                                String sobj = val.substring(1, val.length() - 1).toLowerCase();
                                                params.put(name.toLowerCase(), objects.get(sobj));
                                            } else
                                            {
                                                String sobj = val.substring(1, sar).toLowerCase();
                                                String smto = val.substring(sar + 1, val.length() - 1);
                                                Method mto = objects.get(sobj).getClass().getMethod(smto, (Class[])null);
                                                params.put(name.toLowerCase(), new SWBMethod(mto, objects.get(sobj), null, this));
                                            }
                                        } else
                                            params.put(name.toLowerCase(), val);
                                    }
                                    if (params.size() > 1)
                                    {
                                        Object arg[] = {params};
                                        Class argumentTypes[] = {new HashMap().getClass()};
                                        Method mto = cls.getMethod(tag.getParam("method"), argumentTypes);
                                        SWBMethod wbmto = new SWBMethod(mto, obj, arg, this);
                                        wbmto.setObjArgs(objArgs);
                                        parts.add(wbmto);
                                    } else
                                    {
                                        Method mto = cls.getMethod(tag.getParam("method"), (Class[])null);
                                        parts.add(new SWBMethod(mto, obj, null, this));
                                    }
                                } else
                                {
                                    objectpart = false;
                                }
                            } catch (Exception e)
                            {
                                log.error("Error Method not found: " + tag.getParam("method") + " ->Template:" + getTitle());
                            }
                        }
                    } else if (tag.getTagString().toLowerCase().equals("content"))
                    {
                        if (textpart)
                        {
                            if (!contentpart)
                                parts.add(auxpart.toString());
                            auxpart = new StringBuffer();
                            textpart = false;
                        }
                        SWBResourceMgr obj = SWBPortal.getResourceMgr();
                        try
                        {
                            if (!tag.isEndTag())
                            {
                                if (!tag.isEmpty()) contentpart = true;
                                HashMap params = new HashMap();
                                Enumeration en = tag.getParamNames();
                                while (en.hasMoreElements())
                                {
                                    String name = (String) en.nextElement();
                                    params.put(name.toLowerCase(), tag.getParam(name));
                                }
                                ResourceType type=getResourceType(tag.getParam("type"));
                                Object args[] = {"content", params, type};
                                parts.add(new SWBMethod(null, obj, args, this));
                            } else
                            {
                                contentpart = false;
                            }
                        } catch (Exception e)
                        {
                            log.error("Component not found: "+ tag.getParam("class") + " ->Template:" + getTitle());
                        }
                    } else if (tag.getTagString().toLowerCase().equals("include"))
                    {
                        if (textpart)
                        {
                            if(!tag.isEndTag())parts.add(auxpart.toString());
                            auxpart = new StringBuffer();
                            textpart = false;
                        }
                        try
                        {
                            if (!tag.isEndTag())
                            {
                                String src=tag.getParam("src");
                                if(tag!=null)
                                {
                                    if(!(src.endsWith(".jsp")||src.contains(".jsp?")||src.endsWith(".php")||src.contains(".php?")||src.endsWith(".py")||src.contains(".py?")||src.endsWith(".groovy")||src.contains(".groovy?")))
                                    {
                                        ArrayList arr = parse(tag.getParam("src"));
                                        parts.addAll(arr);
                                    }else
                                    {
                                        HashMap params = new HashMap();
                                        Enumeration en = tag.getParamNames();
                                        while (en.hasMoreElements())
                                        {
                                            String name = (String) en.nextElement();
                                            params.put(name.toLowerCase(), tag.getParam(name));
                                        }
                                        Object args[] = {src, params};
                                        parts.add(new SWBMethod(null, "include", args, this));
                                    }
                                }
                            }
                        } catch (Exception e)
                        {
                            log.error("Component not found: ->Template:" + getTitle());
                        }
                    } else if (!resourcepart && !contentpart && !objectpart &&
                            (tag.getTagString().toLowerCase().equals("img")
                            || tag.getTagString().toLowerCase().equals("script")
                            || tag.getTagString().toLowerCase().equals("applet")
                            || tag.getTagString().toLowerCase().equals("tr")
                            || tag.getTagString().toLowerCase().equals("td")
                            || tag.getTagString().toLowerCase().equals("table")
                            || tag.getTagString().toLowerCase().equals("body")
                            || tag.getTagString().toLowerCase().equals("input")
                            || tag.getTagString().toLowerCase().equals("a")
                            || tag.getTagString().toLowerCase().equals("link")
                            || tag.getTagString().toLowerCase().equals("form")
                            || tag.getTagString().toLowerCase().equals("area")
                            || tag.getTagString().toLowerCase().equals("meta")
                            || tag.getTagString().toLowerCase().equals("bca")
                            || tag.getTagString().toLowerCase().equals("embed")
                            )
                    )
                    {
                        if (tag.getTagString().toLowerCase().equals("script"))
                        {
                            if (!tag.isEndTag())
                            {
                                if (!tag.isEmpty()) scriptpart = true;
                            } else
                            {
                                scriptpart = false;
                            }
                        }
                        if (!textpart) textpart = true;
                        if (!tag.isEndTag())
                        {
                            auxpart.append("<");
                            auxpart.append(tag.getTagString());
                            auxpart.append(" ");
                            Enumeration en = tag.getParamNames();
                            while (en.hasMoreElements())
                            {
                                String name = (String) en.nextElement();
                                String value = tag.getParam(name);
                                
                                auxpart.append(name);
                                auxpart.append("=\"");
                                if ((name.toLowerCase().equals("src")
                                        || name.toLowerCase().equals("background")
                                        || name.toLowerCase().equals("href"))
                                        && !value.startsWith("/")
                                        && !value.startsWith("{")
                                        && !value.startsWith("http://")
                                        && !value.startsWith("https://")
                                        && !value.startsWith("mailto:")
                                        && !value.startsWith("ftp://")
                                        && !value.startsWith("telnet://")
                                        && !value.startsWith("javascript")
                                        && !value.startsWith("#")
                                )
                                {
                                    auxpart.append(actPath);
                                }
                                if (name.toLowerCase().equals("onmouseover") || name.toLowerCase().equals("onload") || name.toLowerCase().equals("onmouseout") || name.toLowerCase().equals("onclick"))
                                {
                                    String out = findImagesInScript(value, ".gif'");
                                    out = findImagesInScript(out, ".jpg'");
                                    auxpart = replaceObjectsValues(out, auxpart, parts, objects);
                                } else
                                {
                                    auxpart = replaceObjectsValues(value, auxpart, parts, objects);
                                }
                                auxpart.append("\" ");
                            }
                            if(tag.isEmpty())auxpart.append("/");
                            auxpart.append(">");
                        } else
                            auxpart.append(tok.getRawString());
                    } else if (!resourcepart && !contentpart && !objectpart &&
                            tag.getTagString().toLowerCase().equals("param"))
                    {
                        if (!textpart) textpart = true;
                        if (!tag.isEndTag())
                        {
                            if (tok.getRawString().toLowerCase().indexOf("movie") > 0)
                            {
                                auxpart.append("<");
                                auxpart.append(tag.getTagString());
                                auxpart.append(" ");
                                Enumeration en = tag.getParamNames();
                                while (en.hasMoreElements())
                                {
                                    String name = (String) en.nextElement();
                                    String value = tag.getParam(name);
                                    auxpart.append(name);
                                    auxpart.append("=\"");
                                    if (name.toLowerCase().equals("value")
                                            && !value.startsWith("/")
                                            && !value.startsWith("{")
                                            && !value.startsWith("http://")
                                            && !value.startsWith("https://")
                                            && !value.startsWith("mailto:")
                                            && !value.startsWith("ftp://")
                                            && !value.startsWith("telnet://")
                                            && !value.startsWith("javascript")
                                            && !value.startsWith("#")
                                    )
                                    {
                                        auxpart.append(actPath);
                                    }
                                    if (name.toLowerCase().equals("onmouseover") || name.toLowerCase().equals("onload") || name.toLowerCase().equals("onmouseout") || name.toLowerCase().equals("onclick"))
                                    {
                                        String out = findImagesInScript(value, ".gif'");
                                        out = findImagesInScript(out, ".jpg'");
                                        auxpart = replaceObjectsValues(out, auxpart, parts, objects);
                                    } else
                                    {
                                        auxpart = replaceObjectsValues(value, auxpart, parts, objects);
                                    }
                                    auxpart.append("\" ");
                                }
                                if(tag.isEmpty())auxpart.append("/");
                                auxpart.append(">");

                            } else
                                auxpart.append(tok.getRawString());
                        } else
                            auxpart.append(tok.getRawString());
                    } else if (!resourcepart && !contentpart && !objectpart)
                    {
                        if (!textpart) textpart = true;
                        auxpart = replaceObjectsValues(tok.getRawString(), auxpart, parts, objects);
                    }
                } else if (!resourcepart && !contentpart && !objectpart && ttype == HtmlStreamTokenizer.TT_TEXT)
                {
                    if (!textpart) textpart = true;
                    auxpart.append(tok.getRawString());
                } else if (ttype == HtmlStreamTokenizer.TT_COMMENT)
                {
                    if (scriptpart) auxpart.append(tok.getRawString());
                } else
                {
                    if (!textpart) textpart = true;
                    auxpart.append(tok.getRawString());
                }
            }
            if (textpart)
            {
                parts.add(auxpart.toString());
                textpart = false;
            }
        } catch (SWBException e)
        {
            log.error("Template:parse",e);
        } catch (IOException e)
        {
            log.error("Template:parse",e);
        } catch (HtmlException e)
        {
            log.error("Template:parse",e);
        }

        return parts;
    }

    /**
     * Find images in script.
     * 
     * @param value the value
     * @param ext the ext
     * @return the string
     */
    private String findImagesInScript(String value, String ext)
    {
        StringBuffer aux = new StringBuffer(value.length());
        int off = 0;
        int f = 0;
        int i = 0;
        do
        {
            f = value.indexOf(ext, off);
            i = value.lastIndexOf("'", f);
            if (f > 0 && i >= 0)
            {
                i++;
                if (value.startsWith("/", i) || value.startsWith("http://", i))
                {
                    if(value.startsWith("/work/"))
                    {
                        aux.append(SWBPortal.getWebWorkPath());
                        aux.append(value.substring(off+5, f + ext.length()));
                    }else
                    {
                        aux.append(value.substring(off, f + ext.length()));
                    }
                } else
                {
                    aux.append(value.substring(off, i) + actPath + value.substring(i, f + ext.length()));
                }
                off = f + ext.length();
            }
        } while (f > 0 && i > 0);
        aux.append(value.substring(off));
        return aux.toString();
    }

    /**
     * Find image in script.
     * 
     * @param value the value
     * @param ext the ext
     * @return the string
     */
    private String findImageInScript(String value, String ext)
    {
        int f = value.indexOf(ext);
        int i = value.lastIndexOf("'", f);
        if (f > 0 && i >= 0)
        {
            i++;
            if (value.startsWith("/", i) || value.startsWith("http://", i))
            {
                if(value.startsWith("/work/"))
                {
                    return SWBPortal.getWebWorkPath()+value.substring(5);
                }else               
                {
                    return value;
                }
            } else
            {
                return value.substring(0, i) + actPath + value.substring(i, value.length());
            }
        }
        return value;
    }
    
    /**
     * Include.
     * 
     * @param src the src
     * @param request the request
     * @param response the response
     * @param user the user
     * @param topic the topic
     * @param params the params
     * @return the string
     */
    public String include(String src, HttpServletRequest request, HttpServletResponse response, User user, WebPage topic, HashMap params)
    {
        String ret="";
        try
        {
            if(!(src.startsWith("/") || src.startsWith("http://")))
            {
                src=getActualPath()+src;
            }
            SWBHttpServletResponseWrapper res=new SWBHttpServletResponseWrapper(response);
            request.setAttribute("topic", topic);
            request.setAttribute("webpage", topic);
            request.setAttribute("user", user);
            request.setAttribute("params", params);
            request.setAttribute("template", this);
            RequestDispatcher dispatcher = request.getRequestDispatcher(src);
            dispatcher.include(request, res);
            ret=res.toString();
        }catch(Exception e)
        {
            log.error(e);
        }finally
        {
            if(request!=null)
            {
                request.removeAttribute("topic");
                request.removeAttribute("webpage");
                request.removeAttribute("user");
                request.removeAttribute("params");            
                request.removeAttribute("template"); 
            }
        }
        return ret;
    }

    /**
     * Builds the.
     * 
     * @param request the request
     * @param response the response
     * @param user the user
     * @param topic the topic
     */
    public void build(HttpServletRequest request, HttpServletResponse response, User user, WebPage topic) 
    {
        build(request, response, user, topic, false);
    }

    /**
     * Builds the.
     * 
     * @param request the request
     * @param response the response
     * @param user the user
     * @param topic the topic
     * @param savelog the savelog
     */
    public void build(HttpServletRequest request, HttpServletResponse response, User user, WebPage topic, boolean savelog)
    {
        try
        {
            PrintWriter out = response.getWriter();
            build(request, response, out, user, topic, savelog,null,null);
            out.flush();
            out.close();
        } catch (Exception e)
        {
            log.error("Error Template Build...",e);
        }
    }

    /**
     * Builds the.
     * 
     * @param request the request
     * @param response the response
     * @param out the out
     * @param user the user
     * @param topic the topic
     * @param savelog the savelog
     */
    public void build(HttpServletRequest request, HttpServletResponse response, PrintWriter out, User user, WebPage topic, boolean savelog) 
    {
        build(request, response, out, user, topic, savelog, null,null);
    }

    /**
     * Builds the.
     * 
     * @param request the request
     * @param response the response
     * @param out the out
     * @param user the user
     * @param topic the topic
     * @param savelog the savelog
     * @param content the content
     */
    public void build(HttpServletRequest request, HttpServletResponse response, PrintWriter out, User user, WebPage topic, boolean savelog, String content) 
    {
        build(request, response, out, user, topic, savelog, content,null);
    }

    /**
     * Builds the.
     * 
     * @param request the request
     * @param response the response
     * @param out the out
     * @param user the user
     * @param topic the topic
     * @param savelog the savelog
     * @param content the content
     * @param distparams the distparams
     */
    public void build(HttpServletRequest request, HttpServletResponse response, PrintWriter out, User user, WebPage topic, boolean savelog, String content, DistributorParams distparams) 
    {
        StringBuffer logbuf = null;
        StringBuffer resbuf = null;
        long tini = 0;
        if (savelog)
        {
            tini = System.currentTimeMillis();
            resbuf = new StringBuffer(300);
            logbuf = new StringBuffer(300);
            logbuf.append("log|");
            logbuf.append(request.getRemoteAddr());
            logbuf.append("|");
            logbuf.append(SWBPortal.getMessageCenter().getAddress());
            logbuf.append("|");
            String sess=request.getSession().getId();
            if(sess!=null)
            {
                sess=""+sess.hashCode();
            }else sess="_";
            logbuf.append(sess);
            logbuf.append("|");
            logbuf.append(topic.getWebSiteId());
            logbuf.append("|");
            logbuf.append(topic.getId());
            logbuf.append("|");
            logbuf.append(user.getUserRepository().getId());
            logbuf.append("|");
            if (user.getLogin() != null)
                logbuf.append(user.getLogin());
            else
                logbuf.append("_");
            logbuf.append("|");
            logbuf.append(user.getSemanticObject().getSemanticClass().getClassId());
            logbuf.append("|");
            if(user.getDevice()!=null)
                logbuf.append(user.getDevice().getId());
            else
                logbuf.append("_");
            logbuf.append("|");
            if (user.getLanguage() != null && user.getLanguage().length() > 0)
                logbuf.append(user.getLanguage());
            else
                logbuf.append("_");
        }
        log.debug("");
        build(request, response, out, user, topic, savelog, content, distparams, parts, resbuf);
        if (savelog)
        {
            long tfin = System.currentTimeMillis() - tini;            
            SWBPortal.getMessageCenter().sendMessage(logbuf.toString()+"|"+tfin+resbuf.toString());
        }
        log.debug("");
    }



    /**
     * Builds the.
     * 
     * @param request the request
     * @param response the response
     * @param out the out
     * @param user the user
     * @param topic the topic
     * @param savelog the savelog
     * @param content the content
     * @param distparams the distparams
     * @param parts the parts
     * @param resbuf the resbuf
     */
    public void build(HttpServletRequest request, HttpServletResponse response, PrintWriter out, User user, WebPage topic, boolean savelog, String content, DistributorParams distparams, ArrayList parts, StringBuffer resbuf)
    {
        if(parts==null)return;
        HashMap antresrc = new HashMap(5);                    //recursos evaluados anteriormente
        try
        {
            Iterator en = parts.iterator();
            while (en.hasNext())
            {
                Object obj = en.next();
                if (obj instanceof String)
                    out.print(obj);
                else if (obj instanceof SWBMethod)
                {
                    SWBMethod wbm = (SWBMethod) obj;
                    if (wbm.getObj() instanceof User)
                        out.print(wbm.invoke(user, topic, user, request,response));
                    else if (wbm.getObj() instanceof WebPage)
                        out.print(wbm.invoke(topic, topic, user, request,response));
                    else if (wbm.getObj() == HttpServletRequest.class)
                        out.print(wbm.invoke(request, topic, user, request,response));
                    else if (wbm.getObj() == HttpServletResponse.class)
                        out.print(wbm.invoke(response, topic, user, request,response));
                    else if (wbm.getObj() instanceof SWBResourceMgr)
                    {
                        HashMap args = (HashMap) wbm.getArguments(1);
                        if ("content".equals(wbm.getArguments(0)))   //es contenido
                        {
                            if (content != null)
                            {
                                out.println(content);
                                if (savelog && distparams!=null)
                                {
                                    resbuf.append("|");
                                    if(!topic.getWebSiteId().equals(distparams.getAccResourceTMID()))
                                        resbuf.append("0");
                                    resbuf.append(distparams.getAccResourceID());
                                }
                            } else
                            {
                                boolean first = true;

                                //cambio de topico en el contenido
                                String resTopic=(String)args.get("topic");
                                WebPage auxTopic=null;
                                if(resTopic!=null)
                                {
                                    auxTopic=topic.getWebSite().getWebPage(resTopic);
                                }

                                Iterator it;
                                if(auxTopic!=null)
                                    it = (Iterator) wbm.invoke((SWBResourceMgr) wbm.getObj(), user, auxTopic);
                                else
                                    it = (Iterator) wbm.invoke((SWBResourceMgr) wbm.getObj(), user, topic);
                                int con=-1;
                                while (it.hasNext())
                                {
                                    con++;
                                    SWBResource wbres = (SWBResource) it.next();

                                    String resTitle=(String)args.get("gettitle");
                                    if(resTitle!=null)
                                    {
                                        int rt=-1;
                                        try
                                        {
                                            rt=Integer.parseInt(resTitle);
                                        }catch(Exception e){log.error(e);}
                                        if(rt==con)out.print(wbres.getResourceBase().getTitle());
                                        continue;
                                    }

                                    String resDesc=(String)args.get("getdescription");
                                    if(resDesc!=null)
                                    {
                                        int rt=-1;
                                        try
                                        {
                                            rt=Integer.parseInt(resDesc);
                                        }catch(Exception e){log.error(e);}
                                        if(rt==con)out.print(wbres.getResourceBase().getDescription());
                                        continue;
                                    }

                                    if(wbres.getResourceBase().getIndex()>0 || (first && wbres.getResourceBase().getIndex()==0 && !it.hasNext()))
                                    {
                                        String resCont=(String)args.get("getcontent");
                                        if(resCont!=null)
                                        {
                                            int rt=-1;
                                            try
                                            {
                                                rt=Integer.parseInt(resCont);
                                            }catch(Exception e){log.error(e);}
                                            if(rt!=con)continue;
                                        }

                                        String rid=wbres.getResourceBase().getId();
                                        String mdo=null;
                                        String wst=null;
                                        String act=null;
                                        WebPage vtopic=null;
                                        String extParams=null;
                                        if(distparams!=null)
                                        {
                                            vtopic=distparams.getVirtWebPage();
                                            HashMap resp=distparams.getResourceURI(rid);
                                            if(resp!=null && distparams.getResourceTMID(rid).equals(wbres.getResourceBase().getWebSiteId()))
                                            {
                                                mdo=(String)resp.get(DistributorParams.URLP_MODE);
                                                wst=(String)resp.get(DistributorParams.URLP_WINSTATE);
                                                act=(String)resp.get(DistributorParams.URLP_ACTION);
                                            }
                                            extParams=distparams.getNotAccResourceURI(rid);
                                        }

                                        SWBHttpServletResponseWrapper res=new SWBHttpServletResponseWrapper(response);
                                        javax.servlet.http.HttpServletRequest req=null;
                                        if(distparams!=null)
                                        {
                                            req=distparams.getInternalRequest(request,rid);
                                        }else
                                        {
                                            req=new SWBHttpServletRequestWrapper(request);
                                        }

                                        SWBParamRequestImp resParams = new SWBParamRequestImp(req,wbres.getResourceBase(),topic,user);
                                        resParams.setArguments(args);
                                        resParams.setExtURIParams(extParams);
                                        resParams.setCallMethod(SWBResourceModes.Call_CONTENT);
                                        if(act!=null)resParams.setAction(act);
                                        if(mdo!=null)resParams.setMode(mdo);
                                        if(wst!=null)resParams.setWindowState(wst);
                                        if(vtopic!=null)
                                        {
                                            resParams.setVirtualTopic(vtopic);
                                        }

                                        SWBPortal.getResourceMgr().getResourceTraceMgr().renderTraced(wbres, req, res, resParams);
                                        out.print(res.toString());

//                                        byte arr[]=res.toByteArray();
//                                        String r=res.toString();
//                                        int ri=r.indexOf("Jei ");
//                                        String f=r.substring(ri,ri+10);
//                                        System.out.println("res:"+f);
//                                        for(int x=0;x");
                                        }
                                        if(savelog)
                                        {
                                            resbuf.append("|");
                                            if(!wbres.getResourceBase().getWebSiteId().equals(topic.getWebSiteId()))
                                                resbuf.append("0");
                                            resbuf.append(wbres.getResourceBase().getId());
                                        }
                                        first = false;
                                    }
                                }
                            }
                        } else                                        //es estrategia
                        {
                            String id = "" + args.get("type") + args.get("stype");       //id para guardar recurso en anteriores
                            if (antresrc.get(id) == null)
                            {
                                Iterator it = (Iterator) wbm.invoke((SWBResourceMgr) wbm.getObj(), user, topic);
                                if (it.hasNext())
                                {
                                    SWBResource wbres = (SWBResource) it.next();
                                    String rid=wbres.getResourceBase().getId();
                                    String mdo=null;
                                    String wst=null;
                                    String act=null;
                                    WebPage vtopic=null;
                                    String extParams=null;
                                    if(distparams!=null)
                                    {
                                        vtopic=distparams.getVirtWebPage();
                                        HashMap resp=distparams.getResourceURI(rid);
                                        if(resp!=null && distparams.getResourceTMID(rid).equals(wbres.getResourceBase().getWebSiteId()))
                                        {
                                            mdo=(String)resp.get(DistributorParams.URLP_MODE);
                                            wst=(String)resp.get(DistributorParams.URLP_WINSTATE);
                                            act=(String)resp.get(DistributorParams.URLP_ACTION);
                                        }
                                        extParams=distparams.getNotAccResourceURI(rid);
                                    }

                                    SWBHttpServletResponseWrapper res=new SWBHttpServletResponseWrapper(response);
                                    javax.servlet.http.HttpServletRequest req=null;
                                    if(distparams!=null)
                                    {
                                        req=distparams.getInternalRequest(request,rid);
                                    }else
                                    {
                                        req=new SWBHttpServletRequestWrapper(request);
                                    }

                                    SWBParamRequestImp resParams = new SWBParamRequestImp(request,wbres.getResourceBase(),topic,user);
                                    resParams.setArguments(args);
                                    resParams.setExtURIParams(extParams);
                                    resParams.setCallMethod(SWBResourceModes.Call_STRATEGY);
                                    if(act!=null)resParams.setAction(act);
                                    if(mdo!=null)resParams.setMode(mdo);
                                    if(wst!=null)resParams.setWindowState(wst);
                                    if(vtopic!=null)
                                    {
                                        resParams.setVirtualTopic(vtopic);
                                    }

                                    SWBPortal.getResourceMgr().getResourceTraceMgr().renderTraced(wbres, req, res, resParams);
                                    out.print(res.toString());

                                    if (savelog)
                                    {
                                        resbuf.append("|");
                                        if(!wbres.getResourceBase().getWebSiteId().equals(topic.getWebSiteId()))
                                            resbuf.append("0");
                                        resbuf.append(wbres.getResourceBase().getId());
                                    }
                                }
                                if (it.hasNext()) antresrc.put(id, it);
                            } else
                            {
                                Iterator it = (Iterator) antresrc.get(id);
                                SWBResource wbres = (SWBResource) it.next();

                                String rid=wbres.getResourceBase().getId();
                                String mdo=null;
                                String wst=null;
                                String act=null;
                                WebPage vtopic=null;
                                String extParams=null;
                                if(distparams!=null)
                                {
                                    vtopic=distparams.getVirtWebPage();
                                    HashMap resp=distparams.getResourceURI(rid);
                                    if(resp!=null && distparams.getResourceTMID(rid).equals(wbres.getResourceBase().getWebSiteId()))
                                    {
                                        mdo=(String)resp.get("_mod");
                                        wst=(String)resp.get("_wst");
                                        act=(String)resp.get("_act");
                                    }
                                    extParams=distparams.getNotAccResourceURI(rid);
                                }

                                SWBHttpServletResponseWrapper res=new SWBHttpServletResponseWrapper(response);
                                javax.servlet.http.HttpServletRequest req=null;
                                if(distparams!=null)
                                {
                                    req=distparams.getInternalRequest(request,rid);
                                }else
                                {
                                    req=new SWBHttpServletRequestWrapper(request);
                                }

                                SWBParamRequestImp resParams = new SWBParamRequestImp(request,wbres.getResourceBase(),topic,user);
                                resParams.setArguments(args);
                                resParams.setExtURIParams(extParams);
                                resParams.setCallMethod(SWBResourceModes.Call_STRATEGY);

                                if(act!=null)resParams.setAction(act);
                                if(mdo!=null)resParams.setMode(mdo);
                                if(wst!=null)resParams.setWindowState(wst);
                                if(vtopic!=null)
                                {
                                    resParams.setVirtualTopic(vtopic);
                                }

                                SWBPortal.getResourceMgr().getResourceTraceMgr().renderTraced(wbres, req, res, resParams);
                                out.print(res.toString());

                                if (!it.hasNext()) antresrc.remove(id);
                                if (savelog)
                                {
                                    resbuf.append("|");
                                    if(!wbres.getResourceBase().getWebSiteId().equals(topic.getWebSiteId()))
                                        resbuf.append("0");
                                    resbuf.append(wbres.getResourceBase().getId());
                                }
                            }
                        }
                    }else if (wbm.getObj() instanceof String)
                    {
                        String aux=(String)wbm.getObj();
                        if(aux.equals("include"))
                        {
                            HashMap args = (HashMap) wbm.getArguments(1);
                            out.print(include((String)wbm.getArguments(0),request,response,user,topic,args));
                        }
                    } else
                    {
                        out.print(wbm.invoke(topic, user, request,response));
                    }
                }else if (obj instanceof SWBIFMethod)
                {
                    ArrayList subparts=((SWBIFMethod)obj).eval(user, topic, this);
                    build(request, response, out, user, topic, savelog, content, distparams, subparts, resbuf);
                }
            }
        } catch (Exception e)
        {
            log.error("Error Template Build...",e);
        }
    }

    
    /**
     * Builds the contents.
     * 
     * @param request the request
     * @param response the response
     * @param out the out
     * @param distparams the distparams
     * @param savelog the savelog
     * @param content the content
     */
    public static void buildContents(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, PrintWriter out, DistributorParams distparams, boolean savelog, String content) 
    {
        StringBuffer logbuf = null;
        StringBuffer resbuf = null;
        
        WebPage topic=distparams.getWebPage();
        User user=distparams.getUser();
        
        long tini = 0;
        if (savelog)
        {
            tini = System.currentTimeMillis();
            resbuf = new StringBuffer(300);
            logbuf = new StringBuffer(300);
            logbuf.append("log|");
            logbuf.append(request.getRemoteAddr());
            logbuf.append("|");
            logbuf.append(SWBPortal.getMessageCenter().getAddress());
            logbuf.append("|");
            String sess=request.getSession().getId();
            if(sess!=null)
            {
                int p=sess.length()-10;
                if(p>-1)sess=sess.substring(p);
            }else sess="_";
            logbuf.append(sess);
            logbuf.append("|");
            logbuf.append(topic.getWebSiteId());
            logbuf.append("|");
            logbuf.append(topic.getId());
            logbuf.append("|");
            logbuf.append(user.getUserRepository().getId());
            logbuf.append("|");
            if (user.getLogin() != null)
                logbuf.append(user.getLogin());
            else
                logbuf.append("_");
            logbuf.append("|");
            logbuf.append(user.getSemanticObject().getSemanticClass().getClassId());
            logbuf.append("|");
            logbuf.append(user.getDevice().getId());
            logbuf.append("|");
            if (user.getLanguage() != null && user.getLanguage().length() > 0)
                logbuf.append(user.getLanguage());
            else
                logbuf.append("_");
        }
        
        try
        {
            if (content != null)
            {
                out.println(content);
                if (savelog)
                {
                    resbuf.append("|");
                    if(!distparams.getAccResourceTMID().equals(topic.getWebSiteId()))
                        resbuf.append("0");
                    resbuf.append(distparams.getAccResourceID());
                }
            }else
            {
                boolean first = true;
                Iterator it = SWBPortal.getResourceMgr().getContents(distparams.getUser(), distparams.getWebPage(), null,null);
                while (it.hasNext())
                {
                    SWBResource wbres = (SWBResource) it.next();
                    if(wbres.getResourceBase().getIndex()>0 || (first && wbres.getResourceBase().getIndex()==0 && !it.hasNext()))
                    {
                        String rid=wbres.getResourceBase().getId();
                        String mdo=null;
                        String wst=null;
                        String act=null;
                        WebPage vtopic=null;
                        String extParams=null;
                        if(distparams!=null)
                        {
                            vtopic=distparams.getVirtWebPage();
                            HashMap resp=distparams.getResourceURI(rid);
                            if(resp!=null && distparams.getResourceTMID(rid).equals(wbres.getResourceBase().getWebSiteId()))
                            {
                                mdo=(String)resp.get(DistributorParams.URLP_MODE);
                                wst=(String)resp.get(DistributorParams.URLP_WINSTATE);
                                act=(String)resp.get(DistributorParams.URLP_ACTION);
                            }
                            extParams=distparams.getNotAccResourceURI(rid);
                        }

                        SWBHttpServletResponseWrapper res=new SWBHttpServletResponseWrapper(response);
                        javax.servlet.http.HttpServletRequest req=null;
                        if(distparams!=null)
                        {
                            req=distparams.getInternalRequest(request,rid);
                        }else
                        {
                            req=new SWBHttpServletRequestWrapper(request);
                        }
                        
                        SWBParamRequestImp resParams = new SWBParamRequestImp(req,wbres.getResourceBase(),distparams.getWebPage(),distparams.getUser());
                        resParams.setArguments(new HashMap());
                        resParams.setExtURIParams(extParams);
                        resParams.setCallMethod(SWBResourceModes.Call_CONTENT);
                        if(act!=null)resParams.setAction(act);
                        if(mdo!=null)resParams.setMode(mdo);
                        if(wst!=null)resParams.setWindowState(wst);                                        
                        if(vtopic!=null)
                        {
                            resParams.setVirtualTopic(vtopic);
                        }

                        SWBPortal.getResourceMgr().getResourceTraceMgr().renderTraced(wbres, req, res, resParams);
                        out.print(res.toString());

                        if(it.hasNext())
                        {
                            out.println("
"); } if (savelog) { resbuf.append("|"); if(!wbres.getResourceBase().getWebSiteId().equals(topic.getWebSiteId())) resbuf.append("0"); resbuf.append(wbres.getResourceBase().getId()); } first = false; } } } }catch (Exception e) { log.error("Error Template Build...",e); } if (savelog) { } } /** * Regresa ruta web de la version actual de la paltilla. * @return Value of property actPath. */ public java.lang.String getActualPath() { return actPath; } /** * Regresa ruta fisica de la version actual de la paltilla. * @return Value of property actPath. */ public java.lang.String getActualWorkPath() { return actWorkPath; } /** * Regresa ruta fisica de la de la paltilla. * @return Value of property actPath. */ @Override public java.lang.String getWorkPath() { return workPath; } /** * Gets the file name. * * @param version the version * @return the file name */ public String getFileName(VersionInfo version) { return version.getVersionFile(); } //UTILIDADES DE TEMPLATES /** * Sets the headers. * * @param map the map * @return the string */ public String setHeaders(HashMap map) { try { HttpServletResponse response=(HttpServletResponse)map.get("response"); if(response!=null && response instanceof HttpServletResponse) { Iterator it=map.keySet().iterator(); while(it.hasNext()) { String key=it.next(); Object val=map.get(key); if(val instanceof String && !key.equals("method")) { String value=(String)val; if(key.equalsIgnoreCase("content-Type")) { contentType=value; }else { try { response.setHeader(SWBUtils.TEXT.toUpperCaseFL(key),value); }catch(Exception e){log.error(e);} } } } } }catch(Exception e){log.error(e);} return ""; } /** * Gets the request parameter. * * @param map the map * @return the request parameter */ public String getRequestParameter(HashMap map) { try { HttpServletRequest request=(HttpServletRequest)map.get("request"); if(request!=null && request instanceof HttpServletRequest) { String name=(String)map.get("name"); String defvalue=(String)map.get("defaultvalue"); String val=request.getParameter(name); if(val==null)return defvalue; return val; } }catch(Exception e){log.error(e);} return ""; } /** * Write text. * * @param map the map * @return the string */ public String writeText(HashMap map) { try { String ret=(String)map.get("text"); if(ret==null)ret=""; return ret; }catch(Exception e){log.error(e);} return ""; } /** * Write gt. * * @return the string */ public String writeGT() { return "<"; } /* (non-Javadoc) * @see org.semanticwb.model.Template#reload() */ /** * Reload. */ @Override public void reload() { SWBPortal.getTemplateMgr().reloadTemplate(this); } /** * Gets the content type. * * @return the content type */ public String getContentType() { return contentType; } /** * Sets the content type. * * @param contentType the new content type */ public void setContentType(String contentType) { this.contentType = contentType; } public String getDate(HashMap map) { String ret=null; try { String lang=(String)map.get("language"); String format=(String)map.get("format"); if(format==null) { ret=SWBUtils.TEXT.getStrDate(new Date(), lang); }else { ret=SWBUtils.TEXT.getStrDate(new Date(), lang, format); } return ret; }catch(Exception e){log.error(e);} return ""; } /** * Desabilita la impresion del tiempo de procesamiento al final de la plantilla de SWB */ public void hideProcessedTime() { this.showtime=false; } /** * Regresa true si debe imprimir el tiempo de procesamiento el final de la plantilla de SWB, false en otro caso * @return boolean */ public boolean isShowProcessedTime() { return showtime; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy