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

📄 portletpagefactory.java

📁 GridSphere 门户 提供一个基于 portlet 的高级开放源代码门户。GridSphere 是在欧盟提供基金的 GridLab 项目下开发的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        }    }    /**     * This is the primary entrance to retrieving a PortletPage     *     * @param event the gridsphere event     * @return a portlet page     */    public PortletPage getPortletPage(GridSphereEvent event) {        // first check for layout id in request parameter        PortletRequest req = event.getRenderRequest();        String layoutId = (String) req.getAttribute(SportletProperties.LAYOUT_PAGE);        //System.err.println("layoutId==" + layoutId);        if (layoutId == null) {            if (req.getUserPrincipal() == null) {                // if no reference to a layout exists, return a guest layout                //System.err.println("guest page");                layoutId = GUEST_PAGE;            } else {                //System.err.println("user page");                layoutId = USER_PAGE;            }            if (event.getLayoutID() != null) {                layoutId = event.getLayoutID();                // make sure if user has logged in and URL specifies guest page, then user gets directed to user page                if (layoutId.equals(GUEST_PAGE) && (req.getUserPrincipal() != null)) layoutId = USER_PAGE;            }            req.setAttribute(SportletProperties.LAYOUT_PAGE, layoutId);        }        return getPortletPageFromHash(req, layoutId);    }    /**     * This returns the page from the hashtable or creates a new one if necessary     *     * @param req      the portlet request     * @param layoutId the layout id     * @return the page     */    protected PortletPage getPortletPageFromHash(PortletRequest req, String layoutId) {        PortletSession session = req.getPortletSession();        PortletPage page = null;        Map<String, PortletPage> usersLayouts = (Map<String, PortletPage>) layouts.get(session.getId());        if (usersLayouts == null) {            usersLayouts = new HashMap<String, PortletPage>();            layouts.put(session.getId(), usersLayouts);        }        // now check for existing layout in hash        page = (PortletPage) usersLayouts.get(layoutId);        // only if no page exists, create a new one and place in hash        if (page == null) {            page = createPortletPage(req, layoutId);            String role = page.getRequiredRole();            if (!role.equals("") && !req.isUserInRole(role)) {                // use existing page                log.debug("User does not have proper permissions for layout=" + layoutId + "!!");                if (req.getUserPrincipal() == null) {                    // if no reference to a layout exists, return a guest layout                    layoutId = GUEST_PAGE;                } else {                    layoutId = USER_PAGE;                }                page = (PortletPage) usersLayouts.get(layoutId);                if (page == null) page = createPortletPage(req, layoutId);                req.setAttribute(SportletProperties.LAYOUT_PAGE, layoutId);            }            usersLayouts.put(layoutId, page);            log.debug("Creating new page " + layoutId + " placing in session " + session.getId());            sessionManager.addSessionListener(session.getId(), this);        }        setPageTheme(page, req);        return page;    }    public PortletPage createPortletPage(PortletRequest req, String layoutId) {        // get the master copy of the page        PortletPage masterPage = (PortletPage) masterLayouts.get(layoutId);        PortletPage copy = null;        // there are two cases where a master may not be there, TCK case and logged in  user        if (masterPage == null) {            log.info("master page is null " + layoutId);            if (layoutId.equals(TCK_PAGE)) {                copy = createTCKPage(req);            } else {                if (req.getUserPrincipal() == null) {                    // if no reference to a layout exists, return a guest layout                    return getPortletPageFromHash(req, GUEST_PAGE);                } else {                    return getPortletPageFromHash(req, USER_PAGE);                }            }        } else {            try {                copy = (PortletPage) deepCopy(masterPage);                log.info("Creating deep copy of page " + layoutId);            } catch (Exception e) {                log.error("Failed to make a copy of the master page: " + layoutId, e);                return createErrorPage();            }        }        setPageTheme(copy, req);        copy.init(req, new ArrayList<ComponentIdentifier>());        return copy;    }    public void removePortletPage(PortletRequest req) {        PortletSession session = req.getPortletSession();        String id = session.getId();        if (layouts.containsKey(id)) {            layouts.remove(id);        }        //log.debug("removed user layout: " + userLayout);    }    /*    public synchronized PortletPage shallowCopy(PortletPage page) throws CloneNotSupportedException {        return (PortletPage) page.clone();    }    */    public synchronized PortletTabbedPane deepCopy(PortletTabbedPane pane) throws CloneNotSupportedException {        return (PortletTabbedPane) deepCopy(pane);    }    public synchronized Object deepCopy(Object oldObj) throws Exception {        ObjectOutputStream oos = null;        ObjectInputStream ois = null;        try {            ByteArrayOutputStream bos =                    new ByteArrayOutputStream(); // A            oos = new ObjectOutputStream(bos); // B            // serialize and pass the object            oos.writeObject(oldObj);   // C            oos.flush();               // D            ByteArrayInputStream bin =                    new ByteArrayInputStream(bos.toByteArray()); // E            ois = new ObjectInputStream(bin);                  // F            // return the new object            return ois.readObject(); // G        } catch (Exception e) {            throw e;        } finally {            if (oos != null) oos.close();            if (ois != null) ois.close();        }    }    public void logStatistics() {        /*        log.debug("\n\nnumber of guest layouts: " + guests.size());        Iterator it = guests.keySet().iterator();        while (it.hasNext()) {            String id = (String) it.next();            log.debug("guest has session: " + id);        }        log.debug("number of user layouts: " + userLayouts.size());        it = userLayouts.keySet().iterator();        while (it.hasNext()) {            String id = (String) it.next();            log.debug("user has session: " + id);        }        */    }    // TODO    public PortletPage createErrorPage() {        return createPortletPageCopy(ERROR_PAGE);    }    public PortletPage createTCKPage(PortletRequest req) {        String[] portletNames = req.getParameterValues("portletName");        PortletPage page = null;        // Sun TCK test uses Jakarta Commons-HttpClient/2.0beta1        // if (event.getClient().getUserAgent().indexOf("HttpClient") > 0) {        if (portletNames != null) {            log.info("Creating TCK LAYOUT!");            String pageName = req.getParameter("pageName");            page = new PortletPage();            PortletTableLayout tableLayout = new PortletTableLayout();            StringTokenizer tokenizer;            for (int i = 0; i < portletNames.length; i++) {                tokenizer = new StringTokenizer(portletNames[i], "/");                String appName = tokenizer.nextToken();                String portletName = tokenizer.nextToken();                //String portletClass = registry.getPortletClassName(appName, portletName);                //if (portletClass == null) {                //    log.error("Unable to find portlet class for " + portletName);                //}                if (pageName == null) {                    pageName = "TCK_testpage_" + portletName;                }                PortletFrame frame = new PortletFrame();                PortletTitleBar tb = new PortletTitleBar();                //tb.setPortletClass(portletClass);                tb.setPortletClass(appName + "#" + portletName);                frame.setPortletTitleBar(tb);                //frame.setPortletClass(portletClass);                frame.setPortletClass(appName + "#" + portletName);                tableLayout.addPortletComponent(frame);            }            PortletTab tab = new PortletTab();            tab.setTitle("en", pageName);            tab.setPortletComponent(tableLayout);            PortletTabbedPane pane = new PortletTabbedPane();            pane.addTab(tab);            page.setPortletComponent(pane);            page.setLayoutDescriptor("/tmp/test.xml");            try {                page.save(context);                this.setPageTheme(page, req);                page.init(req, new ArrayList<ComponentIdentifier>());            } catch (IOException e) {                log.error("Unable to save TCK page to /tmp/test.xml", e);            }        }        //  }        return page;    }    // TODO    public void renameRole(PortletRequest req, String oldRole, String newRole) {        List<PortletPage> pages = new ArrayList<PortletPage>();        pages.add(masterLayouts.get("GuestUserLayout"));        pages.add(masterLayouts.get("LoggedInUserLayout"));        try {            for (PortletPage p : pages) {                PortletPage page = (PortletPage) deepCopy(p);                page.init(req, new ArrayList<ComponentIdentifier>());                List<ComponentIdentifier> compList = page.getComponentIdentifierList();                boolean resetLayout = false;                for (ComponentIdentifier compId : compList) {                    PortletComponent comp = compId.getPortletComponent();                    String reqRole = comp.getRequiredRole();                    if (reqRole.equalsIgnoreCase(oldRole)) {                        resetLayout = true;                        comp.setRequiredRole(newRole);                    }                }                if (resetLayout) savePortletPageMaster(page);            }        } catch (Exception e) {            log.error("Unable to load/save descriptor", e);        }    }}

⌨️ 快捷键说明

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