You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by rw...@apache.org on 2005/07/10 01:20:53 UTC
svn commit: r209969 - in
/portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site:
portal-site-component-figure-1.jpeg portal-site-component.html
portal-site-component.sxw
Author: rwatler
Date: Sat Jul 9 16:20:51 2005
New Revision: 209969
URL: http://svn.apache.org/viewcvs?rev=209969&view=rev
Log:
commit HTML version of document
Added:
portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component-figure-1.jpeg (with props)
portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component.html (with props)
Modified:
portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component.sxw
Added: portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component-figure-1.jpeg
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component-figure-1.jpeg?rev=209969&view=auto
==============================================================================
Binary file - no diff available.
Propchange: portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component-figure-1.jpeg
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component.html
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component.html?rev=209969&view=auto
==============================================================================
--- portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component.html (added)
+++ portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component.html Sat Jul 9 16:20:51 2005
@@ -0,0 +1,795 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE></TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 1.0.2 (Linux)">
+ <META NAME="CREATED" CONTENT="20050502;21193200">
+ <META NAME="CHANGED" CONTENT="20050709;16421400">
+ <STYLE>
+ <!--
+ @page { size: 21.59cm 27.94cm; margin-left: 3.18cm; margin-right: 3.18cm; margin-top: 2.54cm; margin-bottom: 2.54cm }
+ P { margin-bottom: 0.21cm }
+ P.text-body-indent { margin-left: 0.5cm }
+ H1 { margin-bottom: 0.21cm }
+ H1.western { font-family: "Luxi Sans", sans-serif; font-size: 16pt }
+ H1.cjk { font-size: 16pt }
+ H1.ctl { font-size: 16pt }
+ H4 { margin-bottom: 0.21cm }
+ H4.western { font-family: "Luxi Sans", sans-serif; font-size: 11pt; font-style: italic }
+ H4.cjk { font-size: 11pt; font-style: italic }
+ H4.ctl { font-size: 11pt; font-style: italic }
+ H6 { margin-bottom: 0.21cm }
+ H6.western { font-family: "Luxi Sans", sans-serif; font-size: 10pt }
+ H6.cjk { font-size: 10pt }
+ H6.ctl { font-size: 10pt }
+ TD P { margin-bottom: 0.21cm }
+ TH P { margin-bottom: 0.21cm; font-style: italic }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en-US">
+<H1 CLASS="western">J2 Portal Site Component Design</H1>
+<H4 CLASS="western">Overview</H4>
+<P>This document outlines a high to medium level design for the
+Portal Site component. This component is proposed as the resolution
+to JIRA issue: <I>JS2-69 Finalizing Portal Navigation using the
+Profiler</I>.</P>
+<P>Generally speaking, the Portal Site component is to use the
+underlying Page Manager component and Profile Locators generated by
+the Profiler to create various views of the portal site that can be
+rendered by the Layout Decorators. The views are composed of profiled
+reflections of the portal site model comprised of folders, pages,
+links and other documents, (PSML content). The Portal Site component
+is responsible for building and managing these views, (i.e. menu,
+nested menu, separator, and option elements), globally and per
+request as necessary.</P>
+<P>The Portal Site component is also to interpret request URLs
+processed by the J2 request pipeline and select PSML pages and
+folders for display in the portal. Generation of the menu based
+navigation URLs requires the inverse mapping functionality. The
+Portal Site component utilizes Profile Locators to perform the URL to
+PSML content mapping.</P>
+<P>Existing navigation and URL mapping capabilities currently
+implemented in the Page Manager components will be deprecated and
+replaced by the Portal Site component.</P>
+<H4 CLASS="western">High Level Requirements</H4>
+<P>The following requirements have been gathered from the JS2-69 JIRA
+issue and other email list sources.</P>
+<OL>
+ <LI><P CLASS="text-body-indent">The Portal Site component is
+ responsible for mapping request URLs to underlying PSML content and
+ constructing menu and option views that can be used to navigate to
+ all accessible content for the end user.
+ </P>
+ <LI><P CLASS="text-body-indent">In addition to existing page
+ relative menu and option creation, this component must support a
+ simple static menu definition capability that can scale effectively
+ for all portal sites.</P>
+ <LI><P CLASS="text-body-indent">Menu definitions should include
+ simple options lists, regular expression wild card options, and
+ depth controlled recursive menu/option PSML reflection.</P>
+ <LI><P CLASS="text-body-indent">Menu definitions should be inherited
+ along the profiled folder hierarchy to implement global defaulting
+ and folder specific override capabilities.</P>
+ <LI><P CLASS="text-body-indent">Menu definitions must support nested
+ menus and be capable of capturing sufficient information to drive
+ localized pull down menus, (i.e. DHTML javascript site navigation
+ menus).</P>
+ <LI><P CLASS="text-body-indent">Menu definitions and this component
+ must provide a method of specifying and generating "bread
+ crumb" navigational aids for menu options.</P>
+ <LI><P CLASS="text-body-indent">The Portal Site component must
+ return the current PSML content page and folder within in a logical
+ content hierarchy that can be navigated directly by the Layout
+ Decoration Templates and that reflects the default menu view of the
+ site.</P>
+ <LI><P CLASS="text-body-indent">The existing DocumentSet
+ functionality is to be subsumed and deprecated by the menu
+ definition capabilities.</P>
+ <LI><P CLASS="text-body-indent">Existing navigations styles must be
+ supported, specifically the page relative "back", "page
+ tabs", "folders", and "additional links"
+ elements.</P>
+ <LI><P CLASS="text-body-indent">Existing Portal Site component
+ functionality should be extracted out of Page Manager
+ implementations to promote component reuse and configuration.</P>
+ <LI><P CLASS="text-body-indent">The Portal Site component must
+ utilize the standard Page Manager interface to insulate it from
+ various PSML and access security implementations
+ </P>
+ <LI><P CLASS="text-body-indent">Folder default page logic and
+ associated history state should be implemented and maintained by the
+ Portal Site component and/or its J2 integration objects.</P>
+ <LI><P CLASS="text-body-indent">Global and request specific caching
+ must be implemented to significantly reduce runtime costs of
+ maintaining view elements and must be reset or adjust to changes in
+ the underlying PSML content.</P>
+ <LI><P CLASS="text-body-indent">The Portal Site component should
+ compute and cache various content hierarchies and menu views
+ latently; that is only when explicitly requested from the Layout
+ Decorator Templates.</P>
+ <LI><P CLASS="text-body-indent">The Portal Site component is
+ instantiated within the J2 Component Architecture, (Spring), and is
+ integrated into the J2 request pipeline and request contexts.</P>
+</OL>
+<H4 CLASS="western">Components and Integration Objects</H4>
+<P>While the bulk of the functionality of the Portal Site component
+is to be modularized within the pluggable component itself, two other
+integration objects are required. The existing Profiler Valve will be
+extended to attach the Portal Site component to the request pipeline;
+references within the valve to the Page Manager component will be
+deprecated by this implementation. The valve will also instantiate
+and/or update the Portal Site Request Context and Portal Site Session
+Context objects. These objects are intended to maintain request state
+for later use by the Layout Decorator Templates and session history
+for use by the Portal Site component. The request context replaces
+the existing Profiled Page Context object that is currently
+referenced within the Layout Decorator Templates using the $site
+variable.</P>
+<P>Figure 1 illustrates the basic relationship between the Portal
+Site component, its contexts, and other existing J2 components.</P>
+<P ALIGN=CENTER STYLE="margin-top: 0.21cm"><SPAN ID="Frame1" STYLE="float: left; width: 15.12cm; height: 12.5cm; border: none; padding: 0cm; background: #ffffff">
+ <P CLASS="frame-contents"><IMG SRC="portal-site-component-figure-1.jpeg" ALIGN=LEFT><BR><BR>
+ </P>
+</SPAN><BR CLEAR=LEFT><FONT SIZE=2><I>Figure 1, Components and
+Integration Objects</I></FONT>
+</P>
+<P><U>Profiler Valve</U>: instantiates the Portal Site request
+context with request specific information; retrieves current PSML
+page and folder selection from the Portal Site request context and
+injects results into the J2 request context.</P>
+<P><U>Portal Site Request Context</U>: encapsulates request specific
+state; forwards requests from the Profiler valve and Layout Decorator
+template to the Portal Site component with the relevant context
+information; caches request specific results for the Portal Site
+component.</P>
+<P><U>Portal Site Session Context</U>: maintains default page history
+for user session used by the Portal Site component to select default
+pages for folder requests.</P>
+<P><U>Layout Decorator Template</U>: accesses and renders PSML
+content and view menus/options retrieved from the Portal Site request
+context; the Portal Site component computes and caches information
+requested by the templates.</P>
+<P><U>Portal Site Component</U>: accesses the physical PSML content
+hierarchy using the Page Manager component; selects the current PSML
+page and folder content, maintaining a logical content hierarchy;
+generates profiled menu and option views of the PSML site content;
+caches computed menu views to maximize reuse between requests and
+sessions.</P>
+<P><U>Page Manager Component</U>: provides PSML access and security
+implementations; notifies Portal Site component of changes in the
+PSML content.</P>
+<P><U>Profiler Component</U>: existing component that generates
+Profile Locators for the current request using defined profiling
+rules for the user.</P>
+<H4 CLASS="western">General Operation</H4>
+<P>The high level interaction between these components and the host
+J2 architecture during a single portal request can be summarized as
+follows:</P>
+<OL>
+ <LI><P CLASS="text-body-indent">The J2 request pipeline invokes the
+ Profiler Valve.</P>
+ <LI><P CLASS="text-body-indent">The valve creates a set of Profile
+ Locators associated with the end user and the request being
+ processed using the Profiler component.</P>
+ <LI><P CLASS="text-body-indent">If necessary, the valve creates the
+ Portal Site Session Context object in the user's J2 portal session
+ context.</P>
+ <LI><P CLASS="text-body-indent">The valve instantiates the Portal
+ Site Request Context object in the J2 request context with the
+ current request, Profile Locators and session context.</P>
+ <LI><P CLASS="text-body-indent">The valve then queries the context
+ object for the PSML page and folder to insert into the J2 request
+ context.</P>
+ <LI><P CLASS="text-body-indent">To return the appropriate PSML page
+ and folder for the request, the context object queries the Portal
+ Site component with the request and Profile Locators.</P>
+ <LI><P CLASS="text-body-indent">The Portal Site component maps the
+ request, Profile Locators, and session default page history into a
+ page and folder from the an appropriate logical content hierarchy
+ derived from the PSML accessed via the Page Manager component.</P>
+ <LI><P CLASS="text-body-indent">The logical content hierarchy is
+ cached in the Portal Site component for use in computing menu views
+ or subsequent page and folder queries. Cached content hierarchies
+ are aged using a LRU algorithm or flushed by PSML change
+ notification events received from the Page Manager component.</P>
+ <LI><P CLASS="text-body-indent">Resulting logical content page and
+ folder mappings are used by the request context to update the
+ session context default page history while returning the mapping
+ results to the valve.</P>
+ <LI><P CLASS="text-body-indent">When the execution of the J2 request
+ pipeline reaches page rendering, the Layout Decorator template is
+ invoked with the context object retrieved from the J2 request
+ context.</P>
+ <LI><P CLASS="text-body-indent">The template then accesses the PSML
+ page and folder and/or the menu views via the context object and
+ again forwards these queries to the Portal Site component along with
+ the saved request and Profile Locators.</P>
+ <LI><P CLASS="text-body-indent">The Portal Site component selects
+ and computes the requested menu views using the the cached logical
+ content hierarchy and returns the results through the context object
+ to the templates.</P>
+ <LI><P CLASS="text-body-indent">Computed menu views are cached in
+ the Portal Site component for subsequent menu view queries. Cached
+ menu views are aged using a LRU algorithm or flushed by change
+ notifications.</P>
+</OL>
+<H4 CLASS="western">PSML Menu Definition Tag Reference</H4>
+<P>The following PSML Menu Definition is used to define the named
+menu views to be provided to the Layout Decoration Templates by the
+Portal Site component. Multiple menu views, (including all standard
+menu views made available via the existing Profiled Page Context
+object), are managed by this component. The Menu Definitions are
+specified in folder.metadata PSML documents. As with other PSML
+content, the definitions made available for a requested portal page
+are inherited and/or overridden by name from the current and parent
+folders. The request Profile Locators are used to aggregate Menu
+Definitions by name as would be done with the folders they appear in.</P>
+<H6 CLASS="western">Tag Reference</H6>
+<H6 CLASS="western"><menu></H6>
+<P CLASS="text-body-indent">Defines a menu or nested menu within a
+menu.</P>
+<P CLASS="text-body-indent">Attributes:</P>
+<P CLASS="text-body-indent"><B><SPAN STYLE="text-decoration: none">name</SPAN></B>
+- identifies menu name for retrieval from template code and/or menu
+reference; [required for top level nodes: ignored otherwise]</P>
+<P CLASS="text-body-indent"><B>options</B> - specifies document path
+for this menu and/or default content elements if not included as
+explicit children; multiple option paths can be specified as a comma
+separated list and/or regexp patterns; relative paths interpreted as
+relative to current folder; special patterns, '~' or '@', can be used
+to reference the current page; [default: none]</P>
+<P CLASS="text-body-indent"><B>depth</B> - specifies deep inclusion
+of documents from option roots, (<0 specifies infinite depth);
+[default: 0]</P>
+<P CLASS="text-body-indent"><B>paths</B> - boolean flag to indicate
+ordered path options to option value from root; [default: false]</P>
+<P CLASS="text-body-indent"><B>regexp</B> - specifies wild card
+processing be performed on option value; [default: false]</P>
+<P CLASS="text-body-indent"><B>profile</B> - specified name of
+Profile Locator to be used when evaluating option value or the
+default profile value for options and nested menus; specifying '*'
+forces the acceptance of all Profile Locator names if parent menus
+select a name; [default: none]</P>
+<P CLASS="text-body-indent"><B>order</B> â comma separated list of
+regexp patterns matched against list or regexp menu options path
+values to determine order of matched options; this attribute will be
+applied as a default options value for any options children, but is
+not used to reorder multiple options children matches; if not
+specified, multiple options are included in the order returned by the
+underlying Page Manager component implementation; option paths not
+matched by this attribute are appended after ordered matches;
+[default: none]</P>
+<P CLASS="text-body-indent"><B>skin</B> - optional template defined
+layout hint and the default skin value for options and nested menus;
+[default: none]</P>
+<P CLASS="text-body-indent">Children:</P>
+<P CLASS="text-body-indent"><B>title</B> - specifies default
+locale-independent title for the menu; [1, optional]</P>
+<P CLASS="text-body-indent"><B>short-title</B> - specifies default
+locale-independent short title for the menu; [1, optional]
+</P>
+<P CLASS="text-body-indent"><B>metadata</B> - additional meta data
+specified for the menu, normally used to specify locale-specific
+titles; [N, optional]</P>
+<P CLASS="text-body-indent"><B>options</B> - specifies content
+elements for this menu; [N, optional]</P>
+<P CLASS="text-body-indent"><B>menu</B> - nested menu contained in
+this menu; [N, optional]</P>
+<P CLASS="text-body-indent"><B>separator</B> - specifies text
+elements for this menu; [N, optional]</P>
+<P CLASS="text-body-indent"><B>include</B> - specifies a menu or menu
+options to be included in this menu; [N, optional]</P>
+<P CLASS="text-body-indent"><B>exclude</B> - specifies menu options
+to be excluded from this menu; [N, optional]</P>
+<H6 CLASS="western"><options></H6>
+<P CLASS="text-body-indent">Defines a single or multiple options
+within a menu.</P>
+<P CLASS="text-body-indent">Attributes:</P>
+<P CLASS="text-body-indent"><B>depth</B> - specifies deep inclusion
+of documents from option value roots, (<0 specifies infinite
+depth); [default: 0]</P>
+<P CLASS="text-body-indent"><B>paths</B> - boolean flag to indicate
+ordered path options to option value from root; [default: false]</P>
+<P CLASS="text-body-indent"><B>regexp</B> - specifies wild card
+processing be performed on option value; [default: false]</P>
+<P CLASS="text-body-indent"><B>profile</B> - specified name of
+Profile Locator to be used when evaluating option value; specifying
+'*' forces the acceptance of all Profile Locator names if parent
+menus select a name; [default: none]</P>
+<P CLASS="text-body-indent"><B>order</B> â comma separated list of
+regexp patterns matched against list or regexp options path values to
+determine order of matched options; if not specified, multiple
+options are included in the order returned by the underlying Page
+Manager component implementation; option paths not matched by this
+attribute are appended after ordered matches; [default: none]</P>
+<P CLASS="text-body-indent"><B>skin</B> - optional template defined
+layout hint; [default: none]</P>
+<P CLASS="text-body-indent">Children:</P>
+<P CLASS="text-body-indent"><B>[text]</B> - options value; multiple
+option paths can be specified as a comma separated list and/or regexp
+patterns; relative paths interpreted as relative to current folder;
+special patterns, '~' or '@', can be used to reference the current
+page; [required]</P>
+<H6 CLASS="western"><include></H6>
+<P CLASS="text-body-indent">Includes another menu's options or nests
+a menu within a menu.</P>
+<P CLASS="text-body-indent">Attributes:</P>
+<P CLASS="text-body-indent"><B>nest</B> â boolean flag that
+controls whether the specified menu is to be nested; [default: false]</P>
+<P CLASS="text-body-indent">Children:</P>
+<P CLASS="text-body-indent"><B>[text]</B> - identifies included menu
+name; circular inclusions are suppressed; [required]</P>
+<H6 CLASS="western"><exclude></H6>
+<P CLASS="text-body-indent">Excludes another menu's options or nested
+menus if they appear above within a menu.</P>
+<P CLASS="text-body-indent">Children:</P>
+<P CLASS="text-body-indent"><B>[text]</B> - identifies excluded menu
+name; circular exclusions are suppressed; [required]</P>
+<H6 CLASS="western"><separator></H6>
+<P CLASS="text-body-indent">Defines a separator to be included if
+options or nested menus appear below within a menu.</P>
+<P CLASS="text-body-indent">Attributes:</P>
+<P CLASS="text-body-indent"><B>skin</B> - optional template defined
+layout hint; [default: none]</P>
+<P CLASS="text-body-indent">Children:</P>
+<P CLASS="text-body-indent"><B>title</B> - specified default
+locale-independent title for the separator; [1, optional]</P>
+<P CLASS="text-body-indent"><B>metadata</B> - additional meta data
+specified for the separator text and title, normally used to specify
+locale-specific text; [N, optional]</P>
+<P CLASS="text-body-indent"><B>text</B> - specified default
+locale-independent separator text; [1, optional]</P>
+<P CLASS="text-body-indent"><B>[text]</B> - specified default
+locale-independent separator text; [1, optional]</P>
+<H6 CLASS="western">Examples</H6>
+<P>A simple menu definition:</P>
+<P><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">
+<PRE>
+<menu name="simple">
+ <options>/some-top-page.psml,/custom/some-other-page.psml</options>
+</menu>
+</PRE>
+</FONT></FONT></P>
+<P>A top level menu definition that contains all site content down 2
+levels deep with DHTML javascript pull down rendering preferred:</P>
+<P><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">
+<PRE>
+<menu name="top-2-levels" options="/" depth="2" skin="dhtml-pull-down"/>
+</PRE>
+</FONT></FONT></P>
+<P>A menu comprised of all top level pages profiled by user role:</P>
+<P><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">
+<PRE>
+<menu name="top-role-pages" regexp="true" options="/*" profile="roles"/>
+</PRE>
+</FONT></FONT></P>
+<P>A menu used to display navigational "bread crumbs"
+paths:</P>
+<P><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">
+<PRE>
+<menu name="bread-crumbs" options="./" paths="true"/>
+</PRE>
+</FONT></FONT></P>
+<P>A complex nested menu definition:</P>
+<P><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">
+<PRE>
+<menu name="top-custom">
+ <title>Top Menu</title>
+ <metadata name="title" xml:lang="fr">Haut</metadata>
+ <options regexp="true" profile="groups">/group-pages/*</options>
+ <menu options="/" profile="page">
+ <separator>
+ <text>-- Top Pages --</text>
+ <title>Top Pages</title>
+ </separator>
+ <options regexp="true">/*</options>
+ <separator>
+ <title>Custom Pages</title>
+ </separator>
+ <options depth="2">/custom-folder/</options>
+ </menu>
+ <exclude>top-role-pages</exclude>
+ <separator>More Top Pages</separator>
+ <include nest="true">top-role-pages</include>
+</menu>
+</PRE>
+</FONT></FONT></P>
+<H6 CLASS="western">Standard Menu Definitions</H6>
+<P>The following standard menu definitions are available for all
+pages and are intended to replace the existing Profiled Page Context
+page relative navigation elements. These definitions can be
+overridden by specifying custom versions of these menus in
+folder.metadata PSML documents with the same name. Standard and
+custom menu definitions and views are segregated to facilitate
+iteration over custom menu definitions.</P>
+<P><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">
+<PRE>
+<menu name="back" options="../"/>
+</PRE>
+</FONT></FONT></P>
+<P><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">
+<PRE>
+<menu name="pages" regexp="true" options="*.psml"/>
+</PRE>
+</FONT></FONT></P>
+<P><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">
+<PRE>
+<menu name="navigations">
+ <separator>Folders and Pages</separator>
+ <options regexp="true">./*/</options>
+ <include>page-navigations</include>
+ <separator>Additional Links</separator>
+ <options regexp="true">/*.link</options>
+</menu>
+</PRE>
+</FONT></FONT></P>
+<H4 CLASS="western">Document Set to Menu Definition Conversion</H4>
+<P>Document Set PSML support is to be removed as part of the Portal
+Site component implementation. Here is a PSML tag/attribute mapping
+that can be used to convert the *.ds documents into the Menu
+Definition tags in the folder.metadata files:</P>
+<TABLE WIDTH=100% BORDER=1 BORDERCOLOR="#000000" CELLPADDING=5 CELLSPACING=0>
+ <COL WIDTH=128*>
+ <COL WIDTH=128*>
+ <THEAD>
+ <TR VALIGN=TOP>
+ <TH WIDTH=50%>
+ <P>Document Set</P>
+ </TH>
+ <TH WIDTH=50%>
+ <P>Menu Definition</P>
+ </TH>
+ </TR>
+ </THEAD>
+ <TBODY>
+ <TR VALIGN=TOP>
+ <TD WIDTH=50%>
+ <P>/document-set</P>
+ </TD>
+ <TD WIDTH=50%>
+ <P>/menu</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=50%>
+ <P>/document-set/title</P>
+ </TD>
+ <TD WIDTH=50%>
+ <P>/menu/title</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=50%>
+ <P>/document-set/metadata</P>
+ </TD>
+ <TD WIDTH=50%>
+ <P>/menu/metadata</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=50%>
+ <P>/document-set/profile-locator</P>
+ </TD>
+ <TD WIDTH=50%>
+ <P>/menu/@profile, /menu//option/@profile</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=50%>
+ <P>/document-set/document-path</P>
+ </TD>
+ <TD WIDTH=50%>
+ <P>/menu/@option, /menu//option</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=50%>
+ <P>/document-set/document-path/regexp</P>
+ </TD>
+ <TD WIDTH=50%>
+ <P>/menu/@regexp, /menu//option/@regexp</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=50%>
+ <P>/document-set/security-constraints</P>
+ </TD>
+ <TD WIDTH=50%>
+ <P>N/A</P>
+ </TD>
+ </TR>
+ </TBODY>
+</TABLE>
+<P ALIGN=CENTER STYLE="margin-top: 0.21cm"><FONT SIZE=2><I>Table 1,
+Document Set to Menu Definition Conversion</I></FONT></P>
+<H4 CLASS="western">Component and Integration Interfaces:</H4>
+<P>The following public interfaces and methods will be developed,
+modified, or deprecated from component and other object instances as
+part of the Portal Site component implementation.</P>
+<H6 CLASS="western">PortalSite</H6>
+<P CLASS="text-body-indent"><FONT SIZE=2 STYLE="font-size: 9pt"><FONT FACE="Courier, monospace">PortalSiteSessionContext
+createSessionContext()</FONT></FONT><BR><FONT SIZE=2 STYLE="font-size: 9pt"><FONT FACE="Courier, monospace">PortalSiteRequestContext
+createRequestContext()</FONT></FONT></P>
+<H6 CLASS="western">PortalSiteRequestContext</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">void
+setProfileLocators(Map profileLocators)<BR>void
+setSessionContext(PortalSiteSessionContext context)<BR>Page
+getPage()<BR>Folder getFolder()<BR>Folder getRootFolder()<BR>Set
+getStandardMenuNames()<BR>Set getCustomMenuNames()<BR>Menu
+getMenu(String name)<BR><BR>Map getLocators()<BR>NodeSet
+getSiblingPages()<BR>Folder getParentFolder()<BR>NodeSet
+getSiblingFolders()<BR>NodeSet getRootLinks()</FONT></FONT></P>
+<H6 CLASS="western">PortalSiteSessionContext</H6>
+<H6 CLASS="western">DocumentImpl</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">Node
+getParent()</FONT></FONT></P>
+<H6 CLASS="western">FolderImpl</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">Node
+getParent()<BR>NodeSet getFolders()<BR>Folder getFolder(String
+name)<BR>NodeSet getPages()<BR>Page getPage(String name)<BR>NodeSet
+getLinks()<BR>Link getLink(String name)<BR>PageSecurity
+getPageSecurity()<BR>NodeSet getAll()</FONT></FONT></P>
+<H6 CLASS="western">MenuElement</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">String
+getElementType()<BR>Menu getParentMenu()<BR>String getTitle()<BR>String
+getTitle(Locale locale)<BR>String getShortTitle()<BR>String
+getShortTitle(Locale locale)<BR>GenericMetadata getMetadata()<BR>String
+getSkin()</FONT></FONT></P>
+<H6 CLASS="western">Menu</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">String
+getName()<BR>String getUrl()<BR>boolean isHidden()<BR>boolean
+isSelected(PortalSiteRequestContext context)<BR>List
+getElements()<BR>MenuElement
+getSelectedElement(PortalSiteRequestContext context)</FONT></FONT></P>
+<H6 CLASS="western">Option</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">String
+getType()<BR>String getUrl()<BR>boolean isHidden()<BR>boolean
+isSelected(PortalSiteRequestContext context)</FONT></FONT></P>
+<H6 CLASS="western">Separator</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">String
+getText()<BR>String getText(Locale locale)</FONT></FONT></P>
+<H6 CLASS="western">Profiler</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">public
+ProfiledPageContext createProfiledPageContext(Map locators) [delete]</FONT></FONT></P>
+<H6 CLASS="western">ProfilerValve</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">void
+invoke(RequestContext request, ValveContext context)</FONT></FONT></P>
+<H6 CLASS="western">PageManager</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">void
+addPageManagerEventListener(PageManagerEventListener listener)<BR>void
+removePageManagerEventListener(PageManagerEventListener
+listener)<BR>void computeProfiledPageContext(ProfiledPageContext
+pageContext) [delete]<BR>DocumentSet getDocumentSet(String name)
+[delete]</FONT></FONT></P>
+<H6 CLASS="western">PageManagerEventListener</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">void
+documentChanged(PageManagerEvent event)<BR>void
+folderChanged(PageManagerEvent event)</FONT></FONT></P>
+<H6 CLASS="western">PageManagerEvent</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">Document
+getDocument()<BR>Folder getFolder()</FONT></FONT></P>
+<H6 CLASS="western">Folder</H6>
+<P CLASS="text-body-indent"><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">NodeSet
+getDocumentSets() [delete]<BR>DocumentSet getDocumentSet(String
+name)[delete]</FONT></FONT></P>
+<H6 CLASS="western">Notes:</H6>
+<UL>
+ <LI><P CLASS="text-body-indent">The DocumentImpl and FolderImpl
+ classes are proxies for concrete Document and Folder PSML instances
+ returned by the Page Manager component. Simple delegation stubs are
+ not listed here. The methods listed are overridden simply to arrange
+ the underlying PSML in a profiled logical content hierarchy.</P>
+ <LI><P CLASS="text-body-indent">The MenuElements class is a base
+ class for Menu, Option, and Separator.</P>
+ <LI><P CLASS="text-body-indent">Because the ProfiledPageContext
+ implementation is to be subsumed by PortalSiteRequestContext, the
+ createProfiledPageContext() method in Profiler is obsolete and will
+ be removed along with the interface and implementation.</P>
+ <LI><P CLASS="text-body-indent">Document Sets are to be replaced in
+ this implementation with named menus, so access methods in
+ PageManager and Folder are to be removed.</P>
+ <LI><P CLASS="text-body-indent">The PageManagerEventListener
+ listener interface and the PageManagerEvent notification event class
+ are extensions to the Page Manager component to allow the Portal
+ Site and other components to subscribe to PSML change notification
+ events. Events required to expire and refresh the Portal Site
+ component menu views and logical content hierarchy caches will be
+ added for this implementation.</P>
+</UL>
+<H4 CLASS="western">Layout Decorator Template Usage</H4>
+<P STYLE="font-style: normal">Velocity templates are the preferred
+implementation used by the J2 decorators. The Portal Site Request
+Context object API is directly accessible using the $site Velocity
+context variable. The $site variable currently exports the Profiled
+Page Context implementation. Even though a compatibility API is being
+supported by the Portal Site request context, the following
+conversion for the commonly used Profiled Page Context methods could
+be applied to existing Layout Decorator templates. Both PSML
+folder/page and menu/option styles are supported for many of the
+existing navigation accessors.</P>
+<TABLE WIDTH=100% BORDER=1 BORDERCOLOR="#000000" CELLPADDING=5 CELLSPACING=0>
+ <COL WIDTH=113*>
+ <COL WIDTH=143*>
+ <THEAD>
+ <TR VALIGN=TOP>
+ <TH WIDTH=44%>
+ <P>ProfiledPageContext method</P>
+ </TH>
+ <TH WIDTH=56%>
+ <P>PortalSiteRequestContext method</P>
+ </TH>
+ </TR>
+ </THEAD>
+ <TBODY>
+ <TR VALIGN=TOP>
+ <TD WIDTH=44%>
+ <P>$site.page, $site.getPage()</P>
+ </TD>
+ <TD WIDTH=56%>
+ <P>(supported)</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=44%>
+ <P>$site.folder, $site.getFolder()</P>
+ </TD>
+ <TD WIDTH=56%>
+ <P>(supported)</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=44%>
+ <P>$site.siblingPages, $site.getSiblingPages()</P>
+ </TD>
+ <TD WIDTH=56%>
+ <P>$site.folder.pages, $site.getFolder().getPages(),
+ $site.getMenu("pages").getElements()</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=44%>
+ <P>$site.parentFolder, $site.getParentFolder()</P>
+ </TD>
+ <TD WIDTH=56%>
+ <P>$site.folder.parent, $site.getFolder().getParent(),
+ $site.getMenu("back").getElements().get(0)</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=44%>
+ <P>$site.siblingFolders, $site.getSiblingFolders()</P>
+ </TD>
+ <TD WIDTH=56%>
+ <P>$site.folder.folders, $site.getFolder().getFolders(),
+ $site.getMenu("navigations").getElements()</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=44%>
+ <P>$site.rootLinks, $site.getRootLinks()</P>
+ </TD>
+ <TD WIDTH=56%>
+ <P>$site.rootFolder.links, $site.getRootFolder().getLinks(),
+ $site.getMenu("navigations").getElements()</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=44%>
+ <P>$site.getDocumentSet($name)</P>
+ </TD>
+ <TD WIDTH=56%>
+ <P>$site.getMenu($name)</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=44%>
+ <P>$site.getDocumentSetNodes($name)</P>
+ </TD>
+ <TD WIDTH=56%>
+ <P>$site.getMenu($name).getElements()</P>
+ </TD>
+ </TR>
+ <TR VALIGN=TOP>
+ <TD WIDTH=44%>
+ <P>$site.documentSetNames, $site.getDocumentSetNames()</P>
+ </TD>
+ <TD WIDTH=56%>
+ <P>$site.customMenuNames, $site.getCustomMenuNames()</P>
+ </TD>
+ </TR>
+ </TBODY>
+</TABLE>
+<P ALIGN=CENTER STYLE="margin-top: 0.21cm"><FONT SIZE=2><I>Table 2,
+Profiled Page Context to Portal Site Request Context Conversion</I></FONT></P>
+<P STYLE="font-style: normal">Here is an example of how the Portal
+Site menu views could be used to generate a "bread crumbs"
+navigational aid within a Velocity Layout Decorator template.</P>
+<P STYLE="font-style: normal">This example assumes that the following
+menu definition appears in a folder.metadata within the PSML content:</P>
+<P><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">
+<PRE>
+<menu name="bread-crumbs" option="./" paths="true"/>
+</PRE>
+</FONT></FONT></P>
+<P STYLE="font-style: normal">The following Velocity fragment would
+generate a series of HTML anchor tags that would render the menu
+options into the familiar series of links within the portal layout:</P>
+<P><FONT FACE="Courier, monospace"><FONT SIZE=2 STYLE="font-size: 9pt">
+<PRE>
+<div class="BreadCrumbs">
+#foreach($option in $site.getMenu("bread-crumbs").getElements())
+ #if($option.getType() == "folder")
+ &nbsp;
+ <span>
+ <a href="$jetspeed.getAbsoluteUrl($option.url)"
+ title="$option.getTitle($preferredLocale)"
+ class="BreadCrumbsLink">
+ $option.getShortTitle($preferredLocale)
+ </a>
+ </span>
+ &nbsp;
+ #end
+#end
+</div>
+</PRE>
+</FONT></FONT></P>
+<H4 CLASS="western">Component and Integration Object State</H4>
+<P>In order for the Portal Site component to perform reasonably,
+aggressive caching must be implemented to maximize reuse within and
+across sessions. In addition, request information and intermediate
+results, (those, for example, related to profiling), are cached in
+the Portal Site request context object. A catalog of the high level
+state managed by the components and integration objects is outlined
+here.</P>
+<H6 CLASS="western">PortalSiteRequestContext</H6>
+<UL>
+ <LI><P CLASS="text-body-indent">portal request URL</P>
+ <LI><P CLASS="text-body-indent"><I>logical content search paths</I></P>
+ <LI><P CLASS="text-body-indent">Portal Site session context</P>
+</UL>
+<H6 CLASS="western">PortalSiteSessionContext</H6>
+<UL>
+ <LI><P CLASS="text-body-indent"><I>logical default page path</I>
+ cache by <I>logical folder path</I></P>
+</UL>
+<H6 CLASS="western">PortalSite</H6>
+<UL>
+ <LI><P CLASS="text-body-indent"><I>logical content hierarchies</I>
+ cache by <I>logical content search paths</I></P>
+ <LI><P CLASS="text-body-indent" STYLE="font-style: normal">custom
+ menu names cache by <I>logical content search paths</I> and <I>logical
+ folder path</I></P>
+ <LI><P CLASS="text-body-indent"><I>menu definitions</I> cache by
+ <I>logical content search paths</I>, menu name, and <I>logical
+ folder path</I></P>
+ <LI><P CLASS="text-body-indent"><I>menu views</I> cache by <I>logical
+ content search paths</I>, menu name, and <I>logical folder path</I></P>
+</UL>
+<H6 CLASS="western">State Definitions:</H6>
+<P CLASS="text-body-indent">The <I>logical content search paths</I>
+are constructed by the Profile Locators which are generated by the
+Profiler component based upon the end user's profiling rules.</P>
+<P CLASS="text-body-indent">The <I>logical content hierarchies </I><SPAN STYLE="font-style: normal">are
+made up of FolderImpl and DocumentImpl proxies constructed using
+specific </SPAN><I>logical content search paths.</I></P>
+<P CLASS="text-body-indent"><SPAN STYLE="font-style: normal">The
+</SPAN><I>logical folder path </I><SPAN STYLE="font-style: normal">is
+the effective request path to a folder in </SPAN><I>logical content
+hierarchies</I>.</P>
+<P CLASS="text-body-indent">The <I>logical default page path </I><SPAN STYLE="font-style: normal">is
+the effective request path to the historical default page in </SPAN><I>logical
+content hierarchies</I><SPAN STYLE="font-style: normal">.</SPAN></P>
+<P CLASS="text-body-indent"><SPAN STYLE="font-style: normal">The </SPAN><I>menu
+descriptions </I><SPAN STYLE="font-style: normal">are references to
+PSML objects defined in PSML folder content</SPAN> located via
+FolderImpl proxies in <I>logical content hierarchies</I><SPAN STYLE="font-style: normal">.</SPAN></P>
+<P CLASS="text-body-indent" STYLE="font-style: normal">The <I>menu
+views </I>are composed of Menu, Option, and Separator objects
+instantiated from menu definitions defined from folders in <I>logical
+content hierarchies</I>.</P>
+<H4 CLASS="western" STYLE="font-style: normal; font-weight: medium"><BR><BR>
+</H4>
+</BODY>
+</HTML>
Propchange: portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component.html
------------------------------------------------------------------------------
svn:eol-style = native
Modified: portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component.sxw
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/branches/MENUS_BRANCH/design-docs/src/portal-site/portal-site-component.sxw?rev=209969&r1=209968&r2=209969&view=diff
==============================================================================
Binary files - no diff available.
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org