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

📄 portletframe.java

📁 GridSphere 门户 提供一个基于 portlet 的高级开放源代码门户。GridSphere 是在欧盟提供基金的 GridLab 项目下开发的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                DefaultPortletAction action = event.getAction();                renderParams.clear();                onlyRender = false;                String pid = (String) request.getAttribute(SportletProperties.PORTLETID);                try {                    portletInvoker.actionPerformed(pid, action, event.getHttpServletRequest(), event.getHttpServletResponse());                    Throwable e = (Throwable) request.getAttribute(SportletProperties.PORTLETERROR + pid);                    if (e != null) {                        setError(event.getActionRequest(), e);                    }                } catch (Exception e) {                    log.error("An error occured performing action on: " + pid, e.getCause());                    this.setError(event.getActionRequest(), e.getCause());                    // catch it and keep processing                }                // see if mode has been set                PortletMode mymode = (PortletMode) request.getAttribute(SportletProperties.PORTLET_MODE);                //PortletMode mymode = new PortletMode(mymodeStr);                if (mymode != null) {                    //System.err.println("setting title mode to " + mymode);                    titleBar.setPortletMode(mymode);                }                // see if state has been set                PortletFrameEventImpl frameEvent = null;                WindowState mystate = (WindowState) request.getAttribute(SportletProperties.PORTLET_WINDOW);                if (mystate != null) {                    //System.err.println("setting title state to " + mystate);                    titleBar.setWindowState(mystate);                    if (mystate.equals(WindowState.MINIMIZED)) {                        renderPortlet = false;                    } else if (mystate.equals(WindowState.NORMAL)) {                        renderPortlet = true;                        frameEvent = new PortletFrameEventImpl(this, PortletFrameEvent.FrameAction.FRAME_RESTORED, COMPONENT_ID);                        frameEvent.setOriginalWidth(originalWidth);                    } else if (mystate.equals(WindowState.MAXIMIZED)) {                        renderPortlet = true;                        frameEvent = new PortletFrameEventImpl(this, PortletFrameEvent.FrameAction.FRAME_MAXIMIZED, COMPONENT_ID);                    }                    for (PortletComponent comp : listeners) {                        event.addNewRenderEvent(frameEvent);                        comp.actionPerformed(event);                    }                }            }            // see if render params are set from actionResponse            Map tmpParams = (Map) request.getAttribute(SportletProperties.RENDER_PARAM_PREFIX + portletClass + "_" + componentIDStr);            if (tmpParams != null) renderParams = tmpParams;            addRenderParams(event.getHttpServletRequest());            for (PortletComponent comp : listeners) {                event.addNewRenderEvent(titleBarEvent);                comp.actionPerformed(event);            }        }    }    private void addRenderParams(HttpServletRequest req) {        // first get rid of existing render params        Iterator it;        if (onlyRender) {            it = renderParams.keySet().iterator();            while (it.hasNext()) {                String key = (String) it.next();                if (key.startsWith(SportletProperties.RENDER_PARAM_PREFIX)) {                    if (req.getParameter(key) == null) {                        //System.err.println("removing existing render param " + key);                        it.remove();                    }                }            }        }        Map tmpParams = req.getParameterMap();        if (tmpParams != null) {            it = tmpParams.keySet().iterator();            while (it.hasNext()) {                String key = (String) it.next();                ///String[] paramValues = req.getParameterValues( key );                if (key.startsWith(SportletProperties.RENDER_PARAM_PREFIX)) {                    //System.err.println("replacing render param " + key);                    renderParams.put(key, tmpParams.get(key));                }            }        }    }    /**     * Renders the portlet frame component     *     * @param event a gridsphere event     */    public void doRender(GridSphereEvent event) {        super.doRender(event);        RenderRequest req = event.getRenderRequest();        RenderResponse res = event.getRenderResponse();        req.setAttribute(SportletProperties.PORTLET_WINDOW_ID, windowId);        if (req.getAttribute(SportletProperties.LAYOUT_EDIT_MODE) != null) {            StringBuffer content = new StringBuffer();            PortletURLImpl portletURI = (PortletURLImpl) res.createActionURL();            String editLink = portletURI.toString();            portletURI.setAction(DELETE_PORTLET);                                                                                                                                                                                     /*getLocalizedText(req, "DELETE")*/            String deleteLink = portletURI.toString();                                                                                               /*getLocalizedText(req, "EDIT")*/            content.append("<br/><fieldset>");            content.append(portletName);            content.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"");            content.append(editLink);            content.append("\">");            content.append("<img src=\"");            content.append(req.getContextPath());            content.append("/images/edit.gif\" alt=\"").append(getLocalizedText(req, "EDIT")).append("\"/>");            content.append("</a>&nbsp;&nbsp;&nbsp;<a href=\"");            content.append(deleteLink);            content.append("\">");            content.append("<img src=\"");            content.append(req.getContextPath());            content.append("/images/delete.gif\" alt=\"").append(getLocalizedText(req, "DELETE")).append("\"/>");            content.append("</a></fieldset>");            setBufferedOutput(req, content);            return;        }        // check permissions        if (!requiredRoleName.equals("") && (!req.isUserInRole(requiredRoleName))) return;        // check for render params        if (onlyRender) {            if ((event.getComponentID().equals(componentIDStr))) {                addRenderParams(event.getHttpServletRequest());            }        }        onlyRender = true;        String id = req.getPortletSession(true).getId();        StringBuffer frame = (StringBuffer) cacheService.getCached(this.getComponentID() + portletClass + id);        String nocache = (String) req.getAttribute(CacheService.NO_CACHE);        if ((frame != null) && (nocache == null)) {            setBufferedOutput(req, frame);            return;        }        frame = new StringBuffer();        req.setAttribute(SportletProperties.PORTLETID, portletClass);        StringBuffer preframe = frameView.doStart(event, this);        StringBuffer postframe = new StringBuffer();        // Render title bar        if (!transparent) {            titleBar.doRender(event);        } else {            req.setAttribute(SportletProperties.PORTLET_MODE, titleBar.getPortletMode());            req.setAttribute(SportletProperties.PREVIOUS_MODE, titleBar.getPreviousMode());            req.setAttribute(SportletProperties.PORTLET_WINDOW, titleBar.getWindowState());        }        super.doRender(event);        if (req.getAttribute(SportletProperties.RESPONSE_COMMITTED) != null) {            renderPortlet = false;        }        String appID = portletRegistryService.getApplicationPortletID(portletClass);        ApplicationPortlet appPortlet = portletRegistryService.getApplicationPortlet(appID);        if (appPortlet != null) {            Set<String> supportedModes = appPortlet.getSupportedModes(event.getClient().getMimeType());            SortedSet<String> mimeTypes = appPortlet.getSupportedMimeTypes(req.getPortletMode());            req.setAttribute(SportletProperties.ALLOWED_MODES, supportedModes);            req.setAttribute(SportletProperties.MIME_TYPES, mimeTypes);        }        req.setAttribute(SportletProperties.PORTLET_WINDOW_ID, windowId);        StringWriter storedWriter = new StringWriter();        PrintWriter writer = new PrintWriter(storedWriter);        if (renderPortlet) {            if (!transparent) {                postframe.append(titleBar.getBufferedOutput(req));            }            postframe.append(frameView.doStartBorder(event, this));            RenderResponse wrappedResponse = new StoredPortletResponseImpl(event.getHttpServletRequest(), event.getHttpServletResponse(), writer);            if (isClosing) {                postframe.append(frameView.doRenderCloseFrame(event, this));            } else {                //System.err.println("in portlet frame render: class= " + portletClass + " setting prev mode= " + req.getPreviousMode() + " cur mode= " + req.getMode());                Throwable ex = getError(req);                if (ex != null) {                    doRenderError(req, wrappedResponse, ex);                    postframe.append(storedWriter.toString());                } else if ((titleBar != null) && (titleBar.hasRenderError())) {                    postframe.append(titleBar.getErrorMessage());                } else {                    try {                        if (!renderParams.isEmpty()) {                            //System.err.println("PortletFrame: in " + portletClass + " sending render params");                            //System.err.println("in render " + portletClass + " there are render params in the frame setting in request! key= " + SportletProperties.RENDER_PARAM_PREFIX + portletClass + "_" + componentIDStr);                            req.setAttribute(SportletProperties.RENDER_PARAM_PREFIX + portletClass + "_" + componentIDStr, renderParams);                        }                        DefaultPortletRender render = event.getRender();                        portletInvoker.service((String) req.getAttribute(SportletProperties.PORTLETID), render, (HttpServletRequest) req, (HttpServletResponse) wrappedResponse);                        lastFrame = storedWriter.toString();                        postframe.append(lastFrame);                    } catch (Exception e) {                        doRenderError(req, wrappedResponse, e);                        postframe.append(storedWriter.toString());                    }                }            }            postframe.append(frameView.doEndBorder(event, this));        } else {            postframe.append(frameView.doRenderMinimizeFrame(event, this));        }        postframe.append(frameView.doEnd(event, this));        if (req.getAttribute(SportletProperties.RESPONSE_COMMITTED) != null) {            renderPortlet = true;        }        // piece together portlet frame + title depending on whether title was set during doXXX method        // or not        frame.append(preframe);        if (!transparent) {            String titleStr = (String) req.getAttribute(SportletProperties.PORTLET_TITLE);            if (titleStr == null) {                titleStr = titleBar.getTitle();            }            frame.append(titleBar.getPreBufferedTitle(req));            frame.append(titleStr);            frame.append(titleBar.getPostBufferedTitle(req));        }        req.removeAttribute(SportletProperties.PORTLET_TITLE);        frame.append(postframe);        setBufferedOutput(req, frame);        // check if expiration was set in render response        Map props = (Map) req.getAttribute(SportletProperties.PORTAL_PROPERTIES);        if (props != null) {            List vals = (List) props.get(RenderResponse.EXPIRATION_CACHE);            if (vals != null) {                String cacheExpiryStr = (String) vals.get(0);                if (cacheExpiryStr != null) {                    try {                        cacheExpiration = Integer.valueOf(cacheExpiryStr).intValue();                    } catch (IllegalArgumentException e) {                        // do nothing                    }                }            }        }        if (nocache == null) {            if ((cacheExpiration > 0) || (cacheExpiration == -1)) {                cacheService.cache(this.getComponentID() + portletClass + id, frame, cacheExpiration);            }        }    }    public void setError(PortletRequest req, Throwable ex) {        req.getPortletSession(true).setAttribute(SportletProperties.PORTLETERROR + portletClass, ex, PortletSession.APPLICATION_SCOPE);    }    public Throwable getError(PortletRequest req) {        Throwable ex = (Throwable) req.getPortletSession(true).getAttribute(SportletProperties.PORTLETERROR + portletClass, PortletSession.APPLICATION_SCOPE);        removeError(req);        return ex;    }    public void removeError(PortletRequest req) {        req.getPortletSession(true).removeAttribute(SportletProperties.PORTLETERROR + portletClass, PortletSession.APPLICATION_SCOPE);    }    public void doRenderError(RenderRequest req, RenderResponse res, Throwable ex) {        Throwable cause = ex.getCause();        if (cause == null) {            cause = ex;        }        try {            MailService mailService = (MailService) PortletServiceFactory.createPortletService(MailService.class, true);            Boolean sendMail = Boolean.valueOf(portalConfigService.getProperty(PortalConfigService.ENABLE_ERROR_HANDLING));            if (sendMail.booleanValue()) {                MailMessage mailToUser = new MailMessage();                String noreply = portalConfigService.getProperty(PortalConfigService.MAIL_FROM);                mailToUser.setSender(noreply);                String portalAdmin = portalConfigService.getProperty(PortalConfigService.PORTAL_ADMIN_EMAIL);                mailToUser.setEmailAddress(portalAdmin);                mailToUser.setSubject(getLocalizedText(req, "PORTAL_ERROR_SUBJECT"));                StringBuffer body = new StringBuffer();                body.append(getLocalizedText(req, "PORTAL_ERROR_BODY"));                body.append("\n\n");                body.append("portlet title: ");                body.append(titleBar.getTitle());                body.append("\n\n");                User user = (User) req.getAttribute(SportletProperties.PORTLET_USER);                body.append(DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime()));                body.append("\n\n");                if (user != null) {                    body.append(user);                    body.append("\n\n");                }                StringWriter sw = new StringWriter();                PrintWriter pout = new PrintWriter(sw);                cause.printStackTrace(pout);                body.append(sw.getBuffer());                mailToUser.setBody(body.toString());                try {                    mailService.sendMail(mailToUser);                    req.setAttribute("lastFrame", lastFrame);                    PortletRequestDispatcher dispatcher = req.getPortletSession().getPortletContext().getRequestDispatcher("/jsp/errors/custom_error.jsp");                    dispatcher.include(req, res);                    return;                } catch (Exception e) {                    log.error("Unable to send mail message!", e);                }            }        } catch (PortletServiceException e) {            log.error("Unable to get instance of needed portlet services", e);        }        try {            req.setAttribute("error", cause);            PortletRequestDispatcher dispatcher = req.getPortletSession().getPortletContext().getRequestDispatcher("/jsp/errors/custom_error.jsp");            dispatcher.include(req, res);        } catch (Exception e) {            System.err.println("Unable to include custom error page!!");            e.printStackTrace();        }    }    public Object clone() throws CloneNotSupportedException {        PortletFrame f = (PortletFrame) super.clone();        f.titleBar = (this.titleBar == null) ? null : (PortletTitleBar) this.titleBar.clone();        f.outerPadding = this.outerPadding;        f.transparent = this.transparent;        f.innerPadding = this.innerPadding;        f.portletClass = this.portletClass;        f.renderPortlet = this.renderPortlet;        return f;    }    public String toString() {        StringBuffer sb = new StringBuffer();        sb.append(super.toString());        sb.append("\nportlet class=").append(portletClass);        return sb.toString();    }}

⌨️ 快捷键说明

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