Show TOC Start of Content Area

Background documentation Detailed Navigation iView  Locate the document in its SAP Library structure

The following creates a detailed navigation iView. The page does the following:

     Determines the start level for the detailed navigation.

     Starts an iteration through the children nodes of the selected node on the level above the start level.

     For each node, starts a recursive iteration through all its children nodes.

     For each node in the recursive iteration, displays the appropriate HTML.

<%@ page import = "java.util.*" %>

<%@ page import = "com.sapportals.portal.navigation.*" %>

<%@ page import = "com.sapportals.portal.prt.resource.IResource" %>

<%@ page import = "com.sapportals.portal.prt.runtime.PortalRuntime" %>

<%@ page import = "com.sapportals.portal.navigation.INavigationGenerator"%>

<%@ page import = "com.sapportals.portal.prt.component.IPortalComponentRequest" %>

 

<%@ taglib uri="NavigationTagLibrary" prefix="nav" %>

 

<%

NavigationEventsHelperService helperService =
    (NavigationEventsHelperService)PortalRuntime.getRuntimeResources()
        .getService(NavigationEventsHelperService.KEY);

 

INavigationGenerator service =        
    (INavigationGenerator)PortalRuntime.getRuntimeResources()
        .getService(INavigationService.KEY);

 

IPortalComponentRequest currentRequest =
    (IPortalComponentRequest) pageContext.getAttribute(
        javax.servlet.jsp.PageContext.REQUEST );

 

IPortalComponentResponse currentResponse =
    (IPortalComponentResponse)pageContext.getAttribute(
        javax.servlet.jsp.PageContext.RESPONSE);

 

IPortalComponentContext componentContext =
    currentRequest.getComponentContext();

 

IPortalComponentProfile profile = componentContext.getProfile();

 

IPortalComponentURI componentURI =
    currentRequest.createPortalComponentURI ();

 

TreeSet openNodes = (TreeSet)currentRequest
    .getComponentSession().getValue("LightDTNOpenNodes");

 

if(openNodes==null) {

   openNodes = new TreeSet();

   session.putValue("LightDTNOpenNodes",openNodes);

}

 

String oldIndices = (String) currentRequest
    .getComponentSession().getValue("LightDTNRootIndicies");

 

NavigationNodes path = (NavigationNodes)helperService
    .getNavNodesListForPath(
        currentRequest,INavigationConstants.NAVIGATION_CONTEXT_ATTR);

 

boolean nodeIsOpen           = false;

boolean nodeIsPressed        = false;

boolean nodeInSelectedPath   = false;

int     nodeID               = 0;

Integer nodeIDInteger        = null;

int     pressedKnobID        = 0;

Integer pressedKnobIDInteger = null;

String  pressedKnobIDString  = (String)currentRequest.
    getParameter("LightDTNKnobID");

String  urlParameters        = "";

 

boolean previewMode = false;

String mode = (String)componentRequest.getNode().getValue("mode");

 

if(mode!=null && mode.equals("preview")) {

   previewMode = true;

}

 

componentURI.setContextName(currentRequest.getComponentContext()
    .getContextName());

 

componentURI.setTargetNode(currentRequest.getNode());

 

if(pressedKnobIDString!=null && !pressedKnobIDString.equals("")) {

   pressedKnobID        = Integer.parseInt(pressedKnobIDString);

   pressedKnobIDInteger = new Integer(pressedKnobID);

}

 

// Find start level

String strStartLevel = profile.getProperty(
    "com.sap.portal.navigation.lightdetailednavigationtree.startLevel");

int startLevel = 3;

try {

   startLevel = Integer.parseInt(strStartLevel);

} catch(NumberFormatException e) {

   strStartLevel = "3";

}

if(startLevel<1 || previewMode) {

   startLevel = 1;

   strStartLevel = "1";

}

 

String    indices     = "";

ArrayList indicesList = helperService.getNavNodesPathIndexesList(currentRequest);

try {

   for(int i=0; i<startLevel-1; i++) {

      indices += indicesList.get(i) + ".";

   }

} catch(IndexOutOfBoundsException e) {

}

if(oldIndices==null || !indices.equals(oldIndices)) {

   openNodes.clear();

}

if(!indices.equals("")) {

    currentRequest.getComponentSession().putValue(
        "LightDTNRootIndicies",indices);

}

 

%>

 

<TABLE Width='100%' Class="lightDTNTable">

 

 

  <!--Iterate through children of selected node in TLN -->

  <nav:iterateSelectedNavNodesLevel level="<%=strStartLevel%>">

 

    <!--For each node, start rescursive iteration -->

    <nav:recurseNavNodeChildren currentDepth="currentDepth"
     currentNavNode="currentNavNode">

      <% nodeInSelectedPath = false; %>

      <nav:ifNavNodeInSelectedPath>

        <% nodeInSelectedPath = true; %>

      </nav:ifNavNodeInSelectedPath>

      <% nodeID        = currentNavNode.getName().hashCode();

         nodeIDInteger = new Integer(nodeID);

         nodeIsOpen    = openNodes.contains(nodeIDInteger);

         nodeIsPressed = (pressedKnobIDInteger!=null &&
                                pressedKnobID==nodeID);

         urlParameters = "LightDTNKnobID=" + nodeID;

         if(nodeIsOpen) {

            if(nodeIsPressed) {

               openNodes.remove(nodeIDInteger);

               nodeIsOpen = false;

           }

         } else {

            if(nodeIsPressed) {

               openNodes.add(nodeIDInteger);

               nodeIsOpen = true;

            }

         }

         if(nodeInSelectedPath && pressedKnobIDInteger==null) {

         openNodes.add(nodeIDInteger);

            nodeIsOpen = true;

         } %>

 

      <!--Display HTML for each node -->

      <TR Style="{display:block;position:relative;left:
                <%=((currentDepth.byteValue()-1) * 16)+10%>px}">

      <TD Class="lightDTNCell">

        <nav:ifNavNodeIsFolder>

          <nav:ifNavNodeHasChildren>

            <% if(previewMode) { %>

              <A class="lightDTNKnob<%
                      if(nodeIsOpen) { %>Open<% } else { %>Closed<% }
                      %>" style="display:block;float:left"/>

            <% } else { %>

              <A href="<%=componentURI%>?<%=urlParameters%>"
                 class="lightDTNKnob<%
                      if(nodeIsOpen) { %>Open<% } else { %>Closed<% }
                      %>" style="display:block;float:left"/>

            <% }

               if(!nodeIsOpen) { %>

              <nav:doNotRecurseNavNodeChildren/>

            <% } %>

          </nav:ifNavNodeHasChildren>

          <nav:ifNotNavNodeHasChildren>

            <A class="lightDTNKnobNone" style="display:block;float:left"/>

          </nav:ifNotNavNodeHasChildren>

          <% if(previewMode) { %>

            <A class="lightDTN<%
               if(nodeIsOpen) { %>Open<% } else { %>Closed<% }
               %>Folder" style="display:block;float:left"/>

          <% } else { %>

            <A href="<%=componentURI%>?<%=urlParameters%>"
               class="lightDTN<%
               if(nodeIsOpen) { %>Open<% } else { %>Closed<% }
               %>Folder" style="display:block;float:left"/>

          <% } %>

        </nav:ifNavNodeIsFolder>

        <nav:ifNotNavNodeIsFolder>

          <nav:doNotRecurseNavNodeChildren/>

          <A class="lightDTNKnobNone" style="display:block;float:left"/>

          <A class="lightDTNLeaf"     style="display:block;float:left"/>

        </nav:ifNotNavNodeIsFolder>

        <nav:ifNavNodeEqualsLaunchedNavNode>

          <% if(previewMode) { %>

            <A class="lightDTNTextSelected"
               style="float:left"><nav:navNodeTitle/></A>

          <% } else { %>

            <nav:navNodeAnchor navigationMethod="byURL"
                urlParameters="<%=urlParameters%>"         
                anchorAttributes="class='lightDTNTextSelected'     
                style='float:left'"/>

          <% } %>

        </nav:ifNavNodeEqualsLaunchedNavNode>

        <nav:ifNotNavNodeEqualsLaunchedNavNode>

          <nav:ifNavNodeIsFolder>

            <% if(nodeIsOpen) { %>

              <A href="<%=componentURI%>?<%=urlParameters%>"

                 class="lightDTNText"
                 style='float:left'><nav:navNodeTitle/></A>

            <% } else {

                  if(previewMode) { %>

                     <A class="lightDTNText"><nav:navNodeTitle/></A>

               <% } else { %>

                     <nav:navNodeAnchor navigationMethod="byURL"
                      urlParameters="<%=urlParameters%>"
                      anchorAttributes="class='lightDTNText'
                      style='float:left'"/>

               <% }

               } %>

          </nav:ifNavNodeIsFolder>

          <nav:ifNotNavNodeIsFolder>

            <% if(previewMode) { %>

              <A class="lightDTNText"
                 style='float:left'><nav:navNodeTitle/></A>

            <% } else { %>

              <nav:navNodeAnchor navigationMethod="byURL"
               anchorAttributes="class='lightDTNText' style='float:left'"/>

            <% } %>

          </nav:ifNotNavNodeIsFolder>

        </nav:ifNotNavNodeEqualsLaunchedNavNode>

      </TD>

      <TR/>

    </nav:recurseNavNodeChildren>

  </nav:iterateSelectedNavNodesLevel>

</TABLE>

 

 

 

End of Content Area