⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 portletlayoutengine.java

📁 GridSphere 门户 提供一个基于 portlet 的高级开放源代码门户。GridSphere 是在欧盟提供基金的 GridLab 项目下开发的
💻 JAVA
字号:
/** * @author <a href="mailto:novotny@gridsphere.org">Jason Novotny</a> * @version $Id: PortletLayoutEngine.java 5032 2006-08-17 18:15:06Z novotny $ */package org.gridsphere.layout;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.gridsphere.portlet.impl.SportletProperties;import org.gridsphere.portletcontainer.GridSphereEvent;import javax.portlet.PortletRequest;import javax.portlet.RenderResponse;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.security.Principal;import java.util.ArrayList;import java.util.zip.GZIPOutputStream;/** * The <code>PortletLayoutEngine</code> is a singleton that is responsible for managing * user's layouts. It also manages portlet web application default layout * configurations that can be potentially added to a user layout * via the PortletLayout Service. * <p/> * The portlet layout engine is a higher level manager of portlet containers * that represent a users customized layout. The portlet layout engine is used * by the {@link org.gridsphere.servlets.GridSphereServlet} * Expect the PortletLayoutEngine methods to change possibly.... */public class PortletLayoutEngine {    protected Log log = LogFactory.getLog(PortletLayoutEngine.class);    private static PortletLayoutEngine instance = new PortletLayoutEngine();    private PortletPageFactory pageFactory = PortletPageFactory.getInstance();    private PortletFrameRegistry registry = PortletFrameRegistry.getInstance();    private boolean inited = false;    public static final String DEFAULT_THEME = "default";    public static final String DEFAULT_RENDERKIT = "brush";    /**     * Constructs a concrete instance of the PortletLayoutEngine     */    private PortletLayoutEngine() {    }    public void init(ServletContext ctx) {        if (!inited) {            pageFactory.init(ctx);            inited = true;        }    }    /**     * Returns the single instance of the PortletLayoutEngine     *     * @return the PortletLayoutEngine instance     */    public static PortletLayoutEngine getInstance() {        return instance;    }    public PortletPage getPortletPage(GridSphereEvent event) {        PortletRequest req = event.getRenderRequest();        // Check for framework errors        Exception portletException = (Exception) req.getAttribute(SportletProperties.ERROR);        if (portletException != null) {            PortletPage errorPage = pageFactory.createErrorPage();            errorPage.init(req, new ArrayList<ComponentIdentifier>());            return errorPage;        }        return pageFactory.getPortletPage(event);    }    public void setHeaders(GridSphereEvent event) {        HttpServletRequest req = event.getHttpServletRequest();        HttpServletResponse res = event.getHttpServletResponse();        res.setContentType("text/html; charset=utf-8"); // Necessary to display UTF-8 encoded characters        res.setHeader("Cache-Control", "no-cache"); //Forces caches to obtain a new copy of the page from the origin server        res.setHeader("Cache-Control", "no-store"); //Directs caches not to store the page under any circumstance        res.setHeader("Expires", "0"); //Causes the proxy cache to see the page as "stale"        res.setHeader("Pragma", "no-cache"); //HTTP 1.0 backward compatibility        String ae = req.getHeader("accept-encoding");        if (ae != null && ae.indexOf("gzip") != -1) {            res.setHeader("Content-Encoding", "gzip");        }    }    /**     * Services a portlet container instance by rendering its presentation     *     * @param event the gridsphere event     */    public void service(GridSphereEvent event) {        HttpServletRequest req = event.getHttpServletRequest();        HttpServletResponse res = event.getHttpServletResponse();        // set content to UTF-8 for il8n and compression if supported        try {            req.setCharacterEncoding("utf-8");        } catch (UnsupportedEncodingException e) {            log.error("UTF-8 is unsupported?!?", e);        }        PortletPage page = getPortletPage(event);        setHeaders(event);        StringBuffer pageBuffer = new StringBuffer();        if (req.getParameter("ajax") != null) {            String portlet = req.getParameter("portlet");            System.err.println("it's ajax: " + portlet);            String cid = event.getComponentID();            if ((cid != null) && (cid.startsWith("portlet"))) {                portlet = cid.substring("portlet".length() + 1);            }            if (portlet != null) {                PortletFrameRegistry registry = PortletFrameRegistry.getInstance();                int idx = portlet.indexOf("#");                String portletName = portlet.substring(idx + 1, portlet.length());                PortletFrame frame = registry.getPortletFrame(portletName, portlet, event);                frame.setInnerPadding("");                frame.setOuterPadding("");                frame.setTransparent(false);                req.getSession().setAttribute(SportletProperties.LAYOUT_THEME, DEFAULT_THEME);                req.getSession().setAttribute(SportletProperties.LAYOUT_RENDERKIT, DEFAULT_RENDERKIT);                req.setAttribute(SportletProperties.USE_AJAX, "true");                req.setAttribute(SportletProperties.PORTLET_NAME, portlet);                String compName = req.getParameter("compname");                System.err.println("compname= " + compName);                req.setAttribute(SportletProperties.COMPONENT_NAME, compName);                if (event.hasAction()) {                    frame.actionPerformed(event);                }                frame.doRender(event);                pageBuffer = frame.getBufferedOutput(event.getRenderRequest());                res.setContentType("text/html");            } else {                PortletComponent comp = page.getActiveComponent(cid);                if (comp != null) {                    String reqRole = comp.getRequiredRole();                    Principal user = event.getRenderRequest().getUserPrincipal();                    if (user != null) {                        if (req.isUserInRole(reqRole)) comp.doRender(event);                    } else {                        if (reqRole.equals("")) comp.doRender(event);                    }                    pageBuffer = comp.getBufferedOutput(event.getRenderRequest());                    res.setContentType("text/html");                }            }        } else {            page.doRender(event);            pageBuffer = page.getBufferedOutput(event.getRenderRequest());        }        log.info("\twriting page to output");        try {            String ae = req.getHeader("accept-encoding");            if (ae != null && ae.indexOf("gzip") != -1) {                GZIPOutputStream gzos = new GZIPOutputStream(res.getOutputStream());                gzos.write(pageBuffer.toString().getBytes(req.getCharacterEncoding()));                gzos.close();            } else {                PrintWriter out = res.getWriter();                out.print(pageBuffer.toString());            }        } catch (IOException e) {            // means the writer has already been obtained            log.error("Error writing page!", e);        }    }    public void doAction(GridSphereEvent event) {        String cid = event.getComponentID();        if (!cid.equals("")) {            PortletFrame frame = registry.getPortletFrame(cid, null, event);            if (frame != null) {                try {                    frame.actionPerformed(event);                } catch (Exception e) {                    e.printStackTrace();                }            }        }    }    /**     * Performs an action on the portlet container referenced by the     * gridsphere event     *     * @param event a gridsphere event     */    public void actionPerformed(GridSphereEvent event) {        log.info("\tstart actionPerformed");        PortletPage page = getPortletPage(event);        if (!event.getComponentID().equals("")) {            page.actionPerformed(event);            // sometimes the page needs reinitializing            if (event.getActionRequest().getAttribute(SportletProperties.INIT_PAGE) != null) {                log.info("\n\n\n\n\nreiniting and saving page!!!!!\n\n\n\n\n\n");                page.init(event.getActionRequest(), new ArrayList<ComponentIdentifier>());                PortletTabbedPane pane = pageFactory.getUserTabbedPane(event.getActionRequest());                if (pane != null) {                    try {                        pane.save();                    } catch (IOException e) {                        log.error("Unable to save tab pane", e);                    }                }            }        }        log.info("\tend actionPerformed");    }    public void doRenderError(RenderResponse res, Throwable t) {        PrintWriter out = null;        try {            out = res.getWriter();        } catch (IOException e) {            log.error("in doRenderError: ", e);        }        out.println("<html><body>");        out.println("<b>An error occurred: " + t.getMessage() + "</b>");        t.printStackTrace(out);        out.println("</body></html>");    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -