📄 portletpagefactory.java
字号:
} } /** * 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 + -