revamped menu HTML generation by making it template-driven; excised the old
menu rendering code
This commit is contained in:
		
							parent
							
								
									ad3af636d7
								
							
						
					
					
						commit
						156511e747
					
				@ -455,6 +455,57 @@ Text of this agreement is TBD.
 | 
			
		||||
 | 
			
		||||
  </menu-definitions>
 | 
			
		||||
 | 
			
		||||
  <!-- Definitions for menu templates -->
 | 
			
		||||
  <menu-template-definitions>
 | 
			
		||||
 | 
			
		||||
    <!-- "Normal" menu rendering -->
 | 
			
		||||
    <menu-template id="normal">
 | 
			
		||||
      <title type="single"><![CDATA[
 | 
			
		||||
<font class="chead1" face="${font}" color="${color.content.header}" size="${size.header}"><b>${title}</b></font>
 | 
			
		||||
      ]]></title>
 | 
			
		||||
      <title type="double"><![CDATA[
 | 
			
		||||
<font class="chead1" face="${font}" color="${color.content.header}" size="${size.header}"><b>${title}</b></font>
 | 
			
		||||
  
 | 
			
		||||
<font class="chead2" face="${font}" color="${color.content.header}" size="${size.subhead}"><b>${subtitle}</b></font>
 | 
			
		||||
      ]]></title>
 | 
			
		||||
      <block id="title-post"><![CDATA[<hr align="left" size="2" width="90%" noshade="noshade" />]]></block>
 | 
			
		||||
      <block id="items-pre"><![CDATA[
 | 
			
		||||
<font class="content" face="${font}" color="${color.content.fg}" size="${size.content}">
 | 
			
		||||
      ]]></block>
 | 
			
		||||
      <block id="link-indent"><![CDATA[    ]]></block>
 | 
			
		||||
      <item type="*">${text}</item>
 | 
			
		||||
      <item type="header"><![CDATA[<font size="+1"><b>${text}</b></font><br />]]></item>
 | 
			
		||||
      <item type="separator"><![CDATA[${text}<br />]]></item>
 | 
			
		||||
      <block id="items-post"><![CDATA[</font>]]></block>
 | 
			
		||||
      <link type="*"><![CDATA[${stdbullet} <a href="${link}"${xattr}>${item}</a><br />]]></link>
 | 
			
		||||
      <link type="disabled"><![CDATA[${stdbullet} <font color="${color.disabled}">${item}</font><br />]]></link>
 | 
			
		||||
      <block id="pre-comm"><![CDATA[
 | 
			
		||||
<table border="0" cellpadding="2" cellspacing="0"><tr valign="bottom"><td align="left" width="110">
 | 
			
		||||
      ]]></block>
 | 
			
		||||
      <block id="title-pre-comm"><![CDATA[</td>\n<td align="left">]]></block>
 | 
			
		||||
      <block id="title-post-comm"><![CDATA[</td></tr></table><br />]]></block>
 | 
			
		||||
      <block id="unjoin-break"><![CDATA[<p />]]></block>
 | 
			
		||||
    </menu-template>
 | 
			
		||||
 | 
			
		||||
    <!-- Left menu bar menu rendering -->
 | 
			
		||||
    <menu-template id="left">
 | 
			
		||||
      <title type="single"><![CDATA[<b>${title}</b><br />]]></title>
 | 
			
		||||
      <title type="double"><![CDATA[<b>${title}</b><br />${subtitle}<br />]]></title>
 | 
			
		||||
      <block id="link-indent"><![CDATA[ ]]></block>
 | 
			
		||||
      <item type="*">${text}</item>
 | 
			
		||||
      <item type="header"><![CDATA[<b>${text}</b><br />]]></item>
 | 
			
		||||
      <item type="separator"><![CDATA[${text}<br />]]></item>
 | 
			
		||||
      <link type="*"><![CDATA[
 | 
			
		||||
<a href="${link}" class="lbar"${xattr}><font color="${color.left.link}">${item}</font></a><br />
 | 
			
		||||
      ]]></link>
 | 
			
		||||
      <link type="disabled"><![CDATA[<font color="${color.disabled}">${item}</font><br />]]></link>
 | 
			
		||||
      <block id="pre-comm"><![CDATA[<div align="left">]]></block>
 | 
			
		||||
      <block id="title-pre-comm"><![CDATA[</div>]]></block>
 | 
			
		||||
      <block id="unjoin-break"><![CDATA[<br />]]></block>
 | 
			
		||||
    </menu-template>
 | 
			
		||||
 | 
			
		||||
  </menu-template-definitions>
 | 
			
		||||
 | 
			
		||||
  <!-- Definitions for dialog boxes -->
 | 
			
		||||
  <dialog-definitions>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -9,9 +9,9 @@
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
@ -90,7 +90,7 @@ public final class DOMElementHelper
 | 
			
		||||
    if (b==null)
 | 
			
		||||
      return null;  // no TEXT nodes
 | 
			
		||||
    else
 | 
			
		||||
      return b.toString();  // return the concatenation
 | 
			
		||||
      return b.toString().trim();  // return the concatenation
 | 
			
		||||
    
 | 
			
		||||
  } // end getTextOfElement
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -30,6 +30,7 @@ import com.silverwrist.venice.ui.menus.CommunityMenu;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.CommunityMenuFactory;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.Menu;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.MenuComponent;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.MenuTemplate;
 | 
			
		||||
import com.silverwrist.venice.ui.rpc.XmlRpcMethod;
 | 
			
		||||
import com.silverwrist.venice.util.*;
 | 
			
		||||
 | 
			
		||||
@ -46,7 +47,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
  private static final int VENICE_IMAGE_HEIGHT = 103;
 | 
			
		||||
  private static final String VENICE_ALT = "Powered By Venice";
 | 
			
		||||
 | 
			
		||||
  private static Category logger = Category.getInstance(RootConfig.class);
 | 
			
		||||
  private static Logger logger = Logger.getLogger(RootConfig.class);
 | 
			
		||||
 | 
			
		||||
  private static final Map link_types;
 | 
			
		||||
 | 
			
		||||
@ -76,7 +77,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
  private String page_icon_tags = null;    // the HTML snippet containing the page icons
 | 
			
		||||
  private String font_face;                // the default font face name
 | 
			
		||||
  private String base_font;                // the default <BASEFONT> tag
 | 
			
		||||
  private Map font_sizes;                  // the stock font sizes
 | 
			
		||||
  private Map m_font_sizes;                // the stock font sizes
 | 
			
		||||
  private ColorPalette colors;             // all the colors
 | 
			
		||||
  private boolean html_comments;           // do we want to embed HTML comments?
 | 
			
		||||
  private ButtonHolder buttons;            // the button definitions
 | 
			
		||||
@ -86,6 +87,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
  private List xmlrpc_methods;             // the list of XML-RPC methods
 | 
			
		||||
  private StockMessages stock_messages;    // the stock messages
 | 
			
		||||
  private Map menus;                       // the menus
 | 
			
		||||
  private Map m_menu_templates;            // the menu templates
 | 
			
		||||
  private DialogManager dialogs;           // the dialog manager
 | 
			
		||||
  private SideBoxManager sideboxes;        // the sidebox manager
 | 
			
		||||
  private CommunityMenuFactory comm_menu_fact;  // the community menu factory
 | 
			
		||||
@ -393,13 +395,13 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
 | 
			
		||||
      // save off the returned sizes
 | 
			
		||||
      if (tmap.isEmpty())
 | 
			
		||||
	font_sizes = Collections.EMPTY_MAP;
 | 
			
		||||
	m_font_sizes = Collections.EMPTY_MAP;
 | 
			
		||||
      else
 | 
			
		||||
	font_sizes = Collections.unmodifiableMap(tmap);
 | 
			
		||||
	m_font_sizes = Collections.unmodifiableMap(tmap);
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
    else  // no font sizes - just leave this empty
 | 
			
		||||
      font_sizes = Collections.EMPTY_MAP;
 | 
			
		||||
      m_font_sizes = Collections.EMPTY_MAP;
 | 
			
		||||
 | 
			
		||||
    // Load all the colors.
 | 
			
		||||
    colors = new ColorPalette(loader.configGetSubSection(sect_h,"colors"));
 | 
			
		||||
@ -497,6 +499,31 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
    else
 | 
			
		||||
      menus = Collections.unmodifiableMap(tmap);
 | 
			
		||||
 | 
			
		||||
    // Get the <menu-template-definitions/> section.
 | 
			
		||||
    sect = loader.configGetSubSection(root_h,"menu-template-definitions");
 | 
			
		||||
 | 
			
		||||
    tmap = new HashMap();
 | 
			
		||||
    nl = sect.getChildNodes();
 | 
			
		||||
    for (i=0; i<nl.getLength(); i++)
 | 
			
		||||
    { // look for <menudef> subnodes and use them to initialize menu templates
 | 
			
		||||
      Node n = nl.item(i);
 | 
			
		||||
      if (n.getNodeType()==Node.ELEMENT_NODE)
 | 
			
		||||
      { // verify that it's a menu template definition, then get its ID and build a menu
 | 
			
		||||
	loader.configVerifyNodeName(n,"menu-template");
 | 
			
		||||
	String menuid = loader.configGetAttribute((Element)n,"id");
 | 
			
		||||
	MenuTemplate m = new MenuTemplate((Element)n,this,menuid);
 | 
			
		||||
	tmap.put(menuid,m);
 | 
			
		||||
 | 
			
		||||
      } // end if
 | 
			
		||||
      // else just ignore it
 | 
			
		||||
 | 
			
		||||
    } // end for
 | 
			
		||||
 | 
			
		||||
    if (tmap.isEmpty())
 | 
			
		||||
      m_menu_templates = Collections.EMPTY_MAP;
 | 
			
		||||
    else
 | 
			
		||||
      m_menu_templates = Collections.unmodifiableMap(tmap);
 | 
			
		||||
 | 
			
		||||
    // Get the <dialog-definitions/> section.
 | 
			
		||||
    sect = loader.configGetSubSection(root_h,"dialog-definitions");
 | 
			
		||||
 | 
			
		||||
@ -529,7 +556,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
 | 
			
		||||
  private final String mapFontSize(String sz)
 | 
			
		||||
  {
 | 
			
		||||
    String rc = (String)(font_sizes.get(sz));
 | 
			
		||||
    String rc = (String)(m_font_sizes.get(sz));
 | 
			
		||||
    return ((rc==null) ? sz : rc);
 | 
			
		||||
 | 
			
		||||
  } // end mapFontSize
 | 
			
		||||
@ -781,6 +808,12 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
 | 
			
		||||
  } // end getMenu
 | 
			
		||||
 | 
			
		||||
  public final MenuTemplate getMenuTemplate(String name)
 | 
			
		||||
  {
 | 
			
		||||
    return (MenuTemplate)(m_menu_templates.get(name));
 | 
			
		||||
 | 
			
		||||
  } // end getMenuTemplate
 | 
			
		||||
 | 
			
		||||
  public final String getButtonVisual(String id)
 | 
			
		||||
  {
 | 
			
		||||
    return buttons.getButtonVisual(id);
 | 
			
		||||
@ -847,6 +880,22 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
 | 
			
		||||
  } // end getXmlRpcMethods
 | 
			
		||||
 | 
			
		||||
  public final void addFormatParams(Map map)
 | 
			
		||||
  {
 | 
			
		||||
    // add font and colors first
 | 
			
		||||
    map.put("font",font_face);
 | 
			
		||||
    colors.fillParameterMap("color.",map);
 | 
			
		||||
 | 
			
		||||
    // now add font sizes
 | 
			
		||||
    for (Iterator it=m_font_sizes.entrySet().iterator(); it.hasNext(); )
 | 
			
		||||
    { // add the size parameters
 | 
			
		||||
      Map.Entry ntry = (Map.Entry)(it.next());
 | 
			
		||||
      map.put("size." + ntry.getKey().toString(),ntry.getValue());
 | 
			
		||||
 | 
			
		||||
    } // end for
 | 
			
		||||
 | 
			
		||||
  } // end addFormatParams
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Static initializer
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								src/com/silverwrist/venice/ui/helpers/ResourceLoader.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/com/silverwrist/venice/ui/helpers/ResourceLoader.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
			
		||||
/*
 | 
			
		||||
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 | 
			
		||||
 * (the "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
 | 
			
		||||
 * 
 | 
			
		||||
 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
 | 
			
		||||
 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
 | 
			
		||||
 * language governing rights and limitations under the License.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.ui.helpers;
 | 
			
		||||
 | 
			
		||||
import com.silverwrist.venice.ui.menus.MenuTemplate;
 | 
			
		||||
 | 
			
		||||
public interface ResourceLoader
 | 
			
		||||
{
 | 
			
		||||
  public MenuTemplate getMenuTemplate(String name);
 | 
			
		||||
 | 
			
		||||
} // end interface ResourceLoader
 | 
			
		||||
@ -9,9 +9,9 @@
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
@ -21,7 +21,9 @@ import java.io.IOException;
 | 
			
		||||
import javax.servlet.jsp.*;
 | 
			
		||||
import javax.servlet.jsp.tagext.*;
 | 
			
		||||
import com.silverwrist.venice.ui.*;
 | 
			
		||||
import com.silverwrist.venice.ui.helpers.ResourceLoader;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.MenuComponent;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.MenuTemplate;
 | 
			
		||||
 | 
			
		||||
public class FrameCurrentMenuTag extends VeniceTagSupport
 | 
			
		||||
{
 | 
			
		||||
@ -32,15 +34,21 @@ public class FrameCurrentMenuTag extends VeniceTagSupport
 | 
			
		||||
 | 
			
		||||
  public int doStartTag() throws JspException
 | 
			
		||||
  {
 | 
			
		||||
    RequestInput ri = getRequestInput();
 | 
			
		||||
    MenuComponent mc =
 | 
			
		||||
        (MenuComponent)(getRequestInput().getSessionAttribute(RequestInput.LEFT_MENU_SESSION_ATTR));
 | 
			
		||||
        (MenuComponent)(ri.getSessionAttribute(RequestInput.LEFT_MENU_SESSION_ATTR));
 | 
			
		||||
    if (mc==null)
 | 
			
		||||
      throw new JspTagException("<frame:currentmenu/> menu not defined!");
 | 
			
		||||
 | 
			
		||||
    ResourceLoader rload = (ResourceLoader)(ri.queryService(ResourceLoader.class));
 | 
			
		||||
    MenuTemplate templ = rload.getMenuTemplate("left");
 | 
			
		||||
    if (templ==null)
 | 
			
		||||
      throw new JspTagException("internal error: \"left\" menu template not defined!");
 | 
			
		||||
 | 
			
		||||
    try
 | 
			
		||||
    { // write out what we came here to accomplish
 | 
			
		||||
      JspWriter out = pageContext.getOut();
 | 
			
		||||
      mc.renderOnLeft(getRequestOutput(),out);
 | 
			
		||||
      mc.render(getRequestOutput(),out,templ);
 | 
			
		||||
 | 
			
		||||
    } // end try
 | 
			
		||||
    catch (IOException e)
 | 
			
		||||
 | 
			
		||||
@ -9,9 +9,9 @@
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
@ -21,7 +21,9 @@ import java.io.IOException;
 | 
			
		||||
import javax.servlet.jsp.*;
 | 
			
		||||
import javax.servlet.jsp.tagext.*;
 | 
			
		||||
import com.silverwrist.venice.ui.*;
 | 
			
		||||
import com.silverwrist.venice.ui.helpers.ResourceLoader;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.MenuComponent;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.MenuTemplate;
 | 
			
		||||
 | 
			
		||||
public class FrameLeftMenuTag extends VeniceTagSupport
 | 
			
		||||
{
 | 
			
		||||
@ -30,7 +32,7 @@ public class FrameLeftMenuTag extends VeniceTagSupport
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private String name = null;
 | 
			
		||||
  private String m_name = null;
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Overrides from class TagSupport
 | 
			
		||||
@ -39,16 +41,22 @@ public class FrameLeftMenuTag extends VeniceTagSupport
 | 
			
		||||
 | 
			
		||||
  public int doStartTag() throws JspException
 | 
			
		||||
  {
 | 
			
		||||
    if (name==null)
 | 
			
		||||
    if (m_name==null)
 | 
			
		||||
      throw new JspTagException("<frame:leftmenu/> tag without name= attribute!");
 | 
			
		||||
    MenuComponent mc = getRequestInput().getMenu(name);
 | 
			
		||||
    RequestInput ri = getRequestInput();
 | 
			
		||||
    MenuComponent mc = ri.getMenu(m_name);
 | 
			
		||||
    if (mc==null)
 | 
			
		||||
      throw new JspTagException("<frame:leftmenu/> menu name= not defined!");
 | 
			
		||||
 | 
			
		||||
    ResourceLoader rload = (ResourceLoader)(ri.queryService(ResourceLoader.class));
 | 
			
		||||
    MenuTemplate templ = rload.getMenuTemplate("left");
 | 
			
		||||
    if (templ==null)
 | 
			
		||||
      throw new JspTagException("internal error: \"left\" menu template not defined!");
 | 
			
		||||
 | 
			
		||||
    try
 | 
			
		||||
    { // write out what we came here to accomplish
 | 
			
		||||
      JspWriter out = pageContext.getOut();
 | 
			
		||||
      mc.renderOnLeft(getRequestOutput(),out);
 | 
			
		||||
      mc.render(getRequestOutput(),out,templ);
 | 
			
		||||
 | 
			
		||||
    } // end try
 | 
			
		||||
    catch (IOException e)
 | 
			
		||||
@ -64,7 +72,7 @@ public class FrameLeftMenuTag extends VeniceTagSupport
 | 
			
		||||
  public void release()
 | 
			
		||||
  {
 | 
			
		||||
    super.release();
 | 
			
		||||
    name = null;
 | 
			
		||||
    m_name = null;
 | 
			
		||||
 | 
			
		||||
  } // end release
 | 
			
		||||
 | 
			
		||||
@ -75,7 +83,7 @@ public class FrameLeftMenuTag extends VeniceTagSupport
 | 
			
		||||
 | 
			
		||||
  public void setName(String s)
 | 
			
		||||
  {
 | 
			
		||||
    name = s;
 | 
			
		||||
    m_name = s;
 | 
			
		||||
 | 
			
		||||
  } // end setName
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -9,9 +9,9 @@
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
@ -28,16 +28,24 @@ import com.silverwrist.venice.ui.helpers.HTMLRendering;
 | 
			
		||||
 | 
			
		||||
public class CommunityMenu implements MenuComponent
 | 
			
		||||
{
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Static data members
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private static final TextItem s_unjoin = new TextItem("Unjoin");
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Attributes
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private String image_url;                       // path to actual image
 | 
			
		||||
  private String title;                           // title for menu
 | 
			
		||||
  private List items_list;                        // list of menu items
 | 
			
		||||
  private int cid;                                // community ID
 | 
			
		||||
  private boolean show_unjoin;                    // show the "Unjoin" menu choice?
 | 
			
		||||
  private String m_image_url;                     // path to actual image
 | 
			
		||||
  private String m_title;                         // title for menu
 | 
			
		||||
  private List m_items_list;                      // list of menu items
 | 
			
		||||
  private int m_cid;                              // community ID
 | 
			
		||||
  private boolean m_show_unjoin;                  // show the "Unjoin" menu choice?
 | 
			
		||||
  private MenuComponent m_unjoin = null;          // "unjoin" menu choice, or null
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -49,19 +57,21 @@ public class CommunityMenu implements MenuComponent
 | 
			
		||||
    try
 | 
			
		||||
    { // retrieve the contact info for this puppy
 | 
			
		||||
      ContactInfo ci = ctxt.getContactInfo();
 | 
			
		||||
      image_url = ci.getPhotoURL();
 | 
			
		||||
      m_image_url = ci.getPhotoURL();
 | 
			
		||||
 | 
			
		||||
    } // end try
 | 
			
		||||
    catch (DataException e)
 | 
			
		||||
    { // if we couldn't get the contact info, screw it
 | 
			
		||||
      image_url = null;
 | 
			
		||||
      m_image_url = null;
 | 
			
		||||
 | 
			
		||||
    } // end catch
 | 
			
		||||
 | 
			
		||||
    title = StringUtil.encodeHTML(ctxt.getName());
 | 
			
		||||
    items_list = items;
 | 
			
		||||
    cid = ctxt.getCommunityID();
 | 
			
		||||
    show_unjoin = ctxt.canUnjoin();
 | 
			
		||||
    m_title = ctxt.getName();
 | 
			
		||||
    m_items_list = items;
 | 
			
		||||
    m_cid = ctxt.getCommunityID();
 | 
			
		||||
    m_show_unjoin = ctxt.canUnjoin();
 | 
			
		||||
    if (ctxt.canUnjoin())
 | 
			
		||||
      m_unjoin = new LinkItem("comm/unjoin.js.vs?cc=" + ctxt.getCommunityID(),LinkTypes.SERVLET,s_unjoin);
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -70,82 +80,52 @@ public class CommunityMenu implements MenuComponent
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.render(out,wr,Collections.EMPTY_SET);
 | 
			
		||||
    HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class));
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    template.writeBlock(wr,"pre-comm");
 | 
			
		||||
    wr.write(html.getCommunityLogoTag(m_image_url));
 | 
			
		||||
    template.writeBlock(wr,"title-pre-comm");
 | 
			
		||||
    template.renderTitle(wr,m_title,null);
 | 
			
		||||
    template.writeBlock(wr,"title-post-comm");
 | 
			
		||||
 | 
			
		||||
    if ((m_items_list.size()>0) || m_show_unjoin)
 | 
			
		||||
    { // write the items list
 | 
			
		||||
      template.writeBlock(wr,"items-pre-comm");
 | 
			
		||||
      for (Iterator it=m_items_list.iterator(); it.hasNext(); )
 | 
			
		||||
      { // display each menu item in turn
 | 
			
		||||
	MenuComponent mc = (MenuComponent)(it.next());
 | 
			
		||||
	mc.render(out,wr,template,defines);
 | 
			
		||||
 | 
			
		||||
      } // end for
 | 
			
		||||
 | 
			
		||||
      if (m_show_unjoin)
 | 
			
		||||
      { // write the "Unjoin" link
 | 
			
		||||
	if (m_items_list.size()>0)
 | 
			
		||||
	  template.writeBlock(wr,"unjoin-break");
 | 
			
		||||
	m_unjoin.render(out,wr,template,defines);
 | 
			
		||||
 | 
			
		||||
      } // end if
 | 
			
		||||
 | 
			
		||||
      template.writeBlock(wr,"items-post-comm");
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    template.writeBlock(wr,"post-comm");
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class));
 | 
			
		||||
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
 | 
			
		||||
    wr.write("<TABLE BORDER=0 CELLPADDING=2 CELLSPACING=0><TR VALIGN=BOTTOM>\n<TD ALIGN=LEFT WIDTH=110>"
 | 
			
		||||
	     + html.getCommunityLogoTag(image_url) + "</TD>\n<TD ALIGN=LEFT>\n");
 | 
			
		||||
 | 
			
		||||
    // display the title
 | 
			
		||||
    out.writeContentHeader(wr,title,null);
 | 
			
		||||
    wr.write("</TD>\n</TR></TABLE><BR>\n");
 | 
			
		||||
 | 
			
		||||
    // display the menu items
 | 
			
		||||
    Iterator it = items_list.iterator();
 | 
			
		||||
    while (it.hasNext())
 | 
			
		||||
    { // display each menu item in turn
 | 
			
		||||
      MenuComponent mc = (MenuComponent)(it.next());
 | 
			
		||||
      mc.render(out,wr,defines);
 | 
			
		||||
 | 
			
		||||
    } // end while
 | 
			
		||||
 | 
			
		||||
    if (show_unjoin)  // display the "Unjoin" link
 | 
			
		||||
      wr.write("<P><IMG SRC=\"" + html.getImagePath("purple-ball.gif")
 | 
			
		||||
	       + "\" ALT=\"*\" WIDTH=14 HEIGHT=14 BORDER=0><A HREF=\""
 | 
			
		||||
	       + html.formatURL("comm/unjoin.js.vs?cc=" + cid,html.SERVLET) + "\">Unjoin</A><BR>\n");
 | 
			
		||||
 | 
			
		||||
    wr.write("\n");  // all done...
 | 
			
		||||
    this.render(out,wr,template,Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.renderOnLeft(out,wr,Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class));
 | 
			
		||||
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    String hilite = html.getFontTag(html.LEFT_LINK,null);
 | 
			
		||||
 | 
			
		||||
    // display the image URL and title
 | 
			
		||||
    wr.write("<DIV ALIGN=\"LEFT\">" + html.getCommunityLogoTag(image_url) + "</DIV>\n<B>"
 | 
			
		||||
	     + StringUtil.encodeHTML(title) + "</B><BR>\n");
 | 
			
		||||
 | 
			
		||||
    // display the menu items
 | 
			
		||||
    Iterator it = items_list.iterator();
 | 
			
		||||
    while (it.hasNext())
 | 
			
		||||
    { // display each menu item in turn
 | 
			
		||||
      MenuComponent mc = (MenuComponent)(it.next());
 | 
			
		||||
      mc.renderOnLeft(out,wr,defines);
 | 
			
		||||
 | 
			
		||||
    } // end while
 | 
			
		||||
 | 
			
		||||
    if (show_unjoin)
 | 
			
		||||
      wr.write("<BR>\n<A CLASS=\"lbar\" HREF=\"" + html.formatURL("comm/unjoin.js.vs?cc=" + cid,html.SERVLET)
 | 
			
		||||
	       + "\">" + hilite	+ "Unjoin</FONT></A>\n");
 | 
			
		||||
 | 
			
		||||
    wr.write("\n");  // all done...
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
 | 
			
		||||
  public String getTitle(RequestOutput out)
 | 
			
		||||
  {
 | 
			
		||||
    return title;
 | 
			
		||||
    return m_title;
 | 
			
		||||
 | 
			
		||||
  } // end getTitle
 | 
			
		||||
 | 
			
		||||
@ -156,7 +136,7 @@ public class CommunityMenu implements MenuComponent
 | 
			
		||||
 | 
			
		||||
  public final int getID()
 | 
			
		||||
  {
 | 
			
		||||
    return cid;
 | 
			
		||||
    return m_cid;
 | 
			
		||||
 | 
			
		||||
  } // end getID
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -9,16 +9,15 @@
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.ui.menus;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.Writer;
 | 
			
		||||
import java.io.*;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import org.w3c.dom.*;
 | 
			
		||||
import com.silverwrist.util.DOMElementHelper;
 | 
			
		||||
@ -31,7 +30,7 @@ class HeaderItem implements MenuComponent
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private TextItem subitem;
 | 
			
		||||
  private TextItem m_subitem;
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -41,7 +40,7 @@ class HeaderItem implements MenuComponent
 | 
			
		||||
  HeaderItem(Element elt)
 | 
			
		||||
  {
 | 
			
		||||
    DOMElementHelper h = new DOMElementHelper(elt);
 | 
			
		||||
    subitem = new TextItem(h.getElementText());
 | 
			
		||||
    m_subitem = new TextItem(h.getElementText());
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -50,38 +49,26 @@ class HeaderItem implements MenuComponent
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.render(out,wr,java.util.Collections.EMPTY_SET);
 | 
			
		||||
    // Render the subitem first.
 | 
			
		||||
    StringWriter subwr = new StringWriter();
 | 
			
		||||
    m_subitem.render(out,subwr,template,defines);
 | 
			
		||||
    subwr.flush();
 | 
			
		||||
 | 
			
		||||
    // Now render this as a header.
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    template.renderItem(wr,"header",subwr.toString(),null);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    wr.write("<FONT SIZE=+1><B>");
 | 
			
		||||
    subitem.render(out,wr,defines);
 | 
			
		||||
    wr.write("</B></FONT><BR>\n");
 | 
			
		||||
    this.render(out,wr,template,java.util.Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.renderOnLeft(out,wr,java.util.Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    wr.write("<B>");
 | 
			
		||||
    subitem.renderOnLeft(out,wr,defines);
 | 
			
		||||
    wr.write("</B><BR>\n");
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
 | 
			
		||||
  public String getTitle(RequestOutput out)
 | 
			
		||||
  {
 | 
			
		||||
    return null;
 | 
			
		||||
 | 
			
		||||
@ -9,9 +9,9 @@
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
@ -34,12 +34,12 @@ class ImageItem implements MenuComponent
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private String src;                    // image source URL
 | 
			
		||||
  private String alt = null;             // image alternate text
 | 
			
		||||
  private String name = null;            // image NAME= attribute
 | 
			
		||||
  private int width;                     // width of image in pixels
 | 
			
		||||
  private int height;                    // height of image in pixels
 | 
			
		||||
  private boolean fixup;                 // does image source URL need fixing up?
 | 
			
		||||
  private String m_src;                  // image source URL
 | 
			
		||||
  private String m_alt = null;           // image alternate text
 | 
			
		||||
  private String m_name = null;          // image NAME= attribute
 | 
			
		||||
  private int m_width;                   // width of image in pixels
 | 
			
		||||
  private int m_height;                  // height of image in pixels
 | 
			
		||||
  private boolean m_fixup;               // does image source URL need fixing up?
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -53,65 +53,65 @@ class ImageItem implements MenuComponent
 | 
			
		||||
    loader.configVerifyNodeName(elt,"image");
 | 
			
		||||
 | 
			
		||||
    // get image source & dimensions
 | 
			
		||||
    src = loader.configGetAttribute(elt,"src");
 | 
			
		||||
    width = loader.configGetAttributeInt(elt,"width");
 | 
			
		||||
    height = loader.configGetAttributeInt(elt,"height");
 | 
			
		||||
    m_src = loader.configGetAttribute(elt,"src");
 | 
			
		||||
    m_width = loader.configGetAttributeInt(elt,"width");
 | 
			
		||||
    m_height = loader.configGetAttributeInt(elt,"height");
 | 
			
		||||
 | 
			
		||||
    // get the rest of the attributes
 | 
			
		||||
    DOMElementHelper h = new DOMElementHelper(elt);
 | 
			
		||||
    if (h.hasAttribute("alt"))
 | 
			
		||||
      alt = elt.getAttribute("alt");
 | 
			
		||||
      m_alt = elt.getAttribute("alt");
 | 
			
		||||
    if (h.hasAttribute("name"))
 | 
			
		||||
      name = elt.getAttribute("name");
 | 
			
		||||
      m_name = elt.getAttribute("name");
 | 
			
		||||
    if (h.hasAttribute("fixup"))
 | 
			
		||||
      fixup = true;
 | 
			
		||||
      m_fixup = true;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Internal operations
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private final String getImageTag(RequestOutput out)
 | 
			
		||||
  {
 | 
			
		||||
    StringBuffer buf = new StringBuffer("<img src=\"");
 | 
			
		||||
    if (m_fixup)
 | 
			
		||||
    { // fix up the image path
 | 
			
		||||
      HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class));
 | 
			
		||||
      m_src = html.getImagePath(m_src);
 | 
			
		||||
      m_fixup = false;
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    buf.append(m_src).append("\" width=\"").append(m_width).append("\" height=\"").append(m_height).append("\"");
 | 
			
		||||
    if (m_alt!=null)
 | 
			
		||||
      buf.append(" alt=\"").append(m_alt).append("\" title=\"").append(m_alt).append("\"");
 | 
			
		||||
    if (m_name!=null)
 | 
			
		||||
      buf.append(" name=\"").append(m_name).append("\"");
 | 
			
		||||
    buf.append(" border=\"0\" />");
 | 
			
		||||
    return buf.toString();
 | 
			
		||||
 | 
			
		||||
  } // end getImageTag
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Implementations from interface MenuComponent
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.render(out,wr,java.util.Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    wr.write("<IMG SRC=\"");
 | 
			
		||||
    if (fixup)
 | 
			
		||||
    { // fix up the image path
 | 
			
		||||
      HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class));
 | 
			
		||||
      src = html.getImagePath(src);
 | 
			
		||||
      fixup = false;
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    wr.write(src + "\" WIDTH=" + width + " HEIGHT=" + height);
 | 
			
		||||
    if (alt!=null)
 | 
			
		||||
      wr.write(" ALT=\"" + alt + "\"");
 | 
			
		||||
    if (name!=null)
 | 
			
		||||
      wr.write(" NAME=\"" + name + "\"");
 | 
			
		||||
    wr.write(" BORDER=0>");
 | 
			
		||||
    template.renderItem(wr,"image",getImageTag(out),null);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.render(out,wr,java.util.Collections.EMPTY_SET);
 | 
			
		||||
    this.render(out,wr,template,java.util.Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.render(out,wr,defines);
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public String getTitle(RequestOutput out)
 | 
			
		||||
  {
 | 
			
		||||
 | 
			
		||||
@ -9,18 +9,16 @@
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.ui.menus;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.Writer;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.io.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import org.apache.log4j.*;
 | 
			
		||||
import org.w3c.dom.*;
 | 
			
		||||
import com.silverwrist.util.*;
 | 
			
		||||
@ -37,23 +35,23 @@ class LinkItem implements MenuComponent
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private static Category logger = Category.getInstance(LinkItem.class);
 | 
			
		||||
  private static Logger logger = Logger.getLogger(LinkItem.class);
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Attributes
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private String href;                // what we actually link to
 | 
			
		||||
  private int type;                   // the type of item we specify
 | 
			
		||||
  private boolean enabled = true;     // is this item enabled?
 | 
			
		||||
  private String target = null;       // target window for the link
 | 
			
		||||
  private String title = null;        // title (tooltip) for the link
 | 
			
		||||
  private String on_click = null;     // onClick JavaScript for the link
 | 
			
		||||
  private String ifdef_sym = null;    // include only if defined
 | 
			
		||||
  private String ifndef_sym = null;   // include only if NOT defined
 | 
			
		||||
  private int indent = 0;             // how many spaces do we indent this link?
 | 
			
		||||
  private MenuComponent contents;     // what does this link contain?  (image vs. text)
 | 
			
		||||
  private String m_href;              // what we actually link to
 | 
			
		||||
  private int m_type;                 // the type of item we specify
 | 
			
		||||
  private boolean m_enabled = true;   // is this item enabled?
 | 
			
		||||
  private String m_target = null;     // target window for the link
 | 
			
		||||
  private String m_title = null;      // title (tooltip) for the link
 | 
			
		||||
  private String m_on_click = null;   // onClick JavaScript for the link
 | 
			
		||||
  private String m_ifdef_sym = null;  // include only if defined
 | 
			
		||||
  private String m_ifndef_sym = null; // include only if NOT defined
 | 
			
		||||
  private int m_indent = 0;           // how many spaces do we indent this link?
 | 
			
		||||
  private MenuComponent m_contents;     // what does this link contain?  (image vs. text)
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -66,47 +64,47 @@ class LinkItem implements MenuComponent
 | 
			
		||||
 | 
			
		||||
    loader.configVerifyNodeName(elt,"link");
 | 
			
		||||
 | 
			
		||||
    href = loader.configGetAttribute(elt,"href");
 | 
			
		||||
    m_href = loader.configGetAttribute(elt,"href");
 | 
			
		||||
 | 
			
		||||
    DOMElementHelper h = new DOMElementHelper(elt);
 | 
			
		||||
    if (h.hasAttribute("type"))
 | 
			
		||||
    { // convert link type to an index
 | 
			
		||||
      type = rconf.convertLinkType(elt.getAttribute("type"));
 | 
			
		||||
      if (type<0) // the type is not valid
 | 
			
		||||
      m_type = rconf.convertLinkType(elt.getAttribute("type"));
 | 
			
		||||
      if (m_type<0) // the type is not valid
 | 
			
		||||
	throw new ConfigException("invalid type= attribute of <link/>");
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
    else // default to "absolute"
 | 
			
		||||
      type = LinkTypes.ABSOLUTE;
 | 
			
		||||
      m_type = LinkTypes.ABSOLUTE;
 | 
			
		||||
 | 
			
		||||
    // load the "target"
 | 
			
		||||
    if (h.hasAttribute("target"))
 | 
			
		||||
      target = elt.getAttribute("target");
 | 
			
		||||
      m_target = elt.getAttribute("target");
 | 
			
		||||
 | 
			
		||||
    // load the "title"
 | 
			
		||||
    if (h.hasAttribute("title"))
 | 
			
		||||
      title = elt.getAttribute("title");
 | 
			
		||||
      m_title = elt.getAttribute("title");
 | 
			
		||||
 | 
			
		||||
    // load the "onClick" script code
 | 
			
		||||
    if (h.hasAttribute("onClick"))
 | 
			
		||||
      on_click = elt.getAttribute("onClick");
 | 
			
		||||
      m_on_click = elt.getAttribute("onClick");
 | 
			
		||||
 | 
			
		||||
    // load the "ifdef" and "ifndef" symbols
 | 
			
		||||
    if (h.hasAttribute("ifdef"))
 | 
			
		||||
      ifdef_sym = elt.getAttribute("ifdef");
 | 
			
		||||
      m_ifdef_sym = elt.getAttribute("ifdef");
 | 
			
		||||
    if (h.hasAttribute("ifndef"))
 | 
			
		||||
      ifndef_sym = elt.getAttribute("ifndef");
 | 
			
		||||
      m_ifndef_sym = elt.getAttribute("ifndef");
 | 
			
		||||
 | 
			
		||||
    // load the "disabled" attribute
 | 
			
		||||
    if (h.hasAttribute("disabled"))
 | 
			
		||||
      enabled = false;
 | 
			
		||||
      m_enabled = false;
 | 
			
		||||
 | 
			
		||||
    if (h.hasAttribute("indent"))
 | 
			
		||||
    { // load the "indent" attribute, make sure it's not less than 0
 | 
			
		||||
      indent = loader.configGetAttributeInt(elt,"indent");
 | 
			
		||||
      if (indent<0)
 | 
			
		||||
      m_indent = loader.configGetAttributeInt(elt,"indent");
 | 
			
		||||
      if (m_indent<0)
 | 
			
		||||
      { // whoops - this is an error!
 | 
			
		||||
	logger.fatal("indent=\"" + indent + "\" is not a valid value");
 | 
			
		||||
	logger.fatal("indent=\"" + m_indent + "\" is not a valid value");
 | 
			
		||||
	throw new ConfigException("invalid indent= attribute of <link/>");
 | 
			
		||||
 | 
			
		||||
      } // end if
 | 
			
		||||
@ -116,24 +114,32 @@ class LinkItem implements MenuComponent
 | 
			
		||||
    // load the contents
 | 
			
		||||
    Element x = h.getSubElement("image");
 | 
			
		||||
    if (x!=null)
 | 
			
		||||
      contents = new ImageItem(x);
 | 
			
		||||
      m_contents = new ImageItem(x);
 | 
			
		||||
    else
 | 
			
		||||
      contents = new TextItem(h.getElementText());
 | 
			
		||||
      m_contents = new TextItem(h.getElementText());
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
  LinkItem(String href, int type, MenuComponent contents)
 | 
			
		||||
  {
 | 
			
		||||
    m_href = href;
 | 
			
		||||
    m_type = type;
 | 
			
		||||
    m_contents = contents;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
  LinkItem(LinkItem other, Map vars)
 | 
			
		||||
  {
 | 
			
		||||
    this.href = StringUtil.replaceAllVariables(other.href,vars);
 | 
			
		||||
    this.type = other.type;
 | 
			
		||||
    this.enabled = other.enabled;
 | 
			
		||||
    this.target = other.target;
 | 
			
		||||
    this.title = other.title;
 | 
			
		||||
    this.on_click = StringUtil.replaceAllVariables(other.on_click,vars);
 | 
			
		||||
    this.ifdef_sym = other.ifdef_sym;
 | 
			
		||||
    this.ifndef_sym = other.ifndef_sym;
 | 
			
		||||
    this.indent = other.indent;
 | 
			
		||||
    this.contents = other.contents;
 | 
			
		||||
    m_href = StringUtil.replaceAllVariables(other.m_href,vars);
 | 
			
		||||
    m_type = other.m_type;
 | 
			
		||||
    m_enabled = other.m_enabled;
 | 
			
		||||
    m_target = other.m_target;
 | 
			
		||||
    m_title = other.m_title;
 | 
			
		||||
    m_on_click = StringUtil.replaceAllVariables(other.m_on_click,vars);
 | 
			
		||||
    m_ifdef_sym = other.m_ifdef_sym;
 | 
			
		||||
    m_ifndef_sym = other.m_ifndef_sym;
 | 
			
		||||
    m_indent = other.m_indent;
 | 
			
		||||
    m_contents = other.m_contents;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -144,100 +150,67 @@ class LinkItem implements MenuComponent
 | 
			
		||||
 | 
			
		||||
  private final String getAddress(HTMLRendering html, Map vars)
 | 
			
		||||
  {
 | 
			
		||||
    String s = StringUtil.replaceAllVariables(href,vars);
 | 
			
		||||
    return html.formatURL(s,type);
 | 
			
		||||
    String s = StringUtil.replaceAllVariables(m_href,vars);
 | 
			
		||||
    return html.formatURL(s,m_type);
 | 
			
		||||
 | 
			
		||||
  } // end getAddress
 | 
			
		||||
 | 
			
		||||
  private final String getExtraAttributes()
 | 
			
		||||
  {
 | 
			
		||||
    StringBuffer buf = new StringBuffer();
 | 
			
		||||
    if (m_target!=null)
 | 
			
		||||
      buf.append(" target=\"").append(m_target).append("\"");
 | 
			
		||||
    if (m_title!=null)
 | 
			
		||||
      buf.append(" title=\"").append(m_title).append("\"");
 | 
			
		||||
    if (m_on_click!=null)
 | 
			
		||||
      buf.append(" onClick=\"").append(m_on_click).append("\"");
 | 
			
		||||
    return buf.toString();
 | 
			
		||||
 | 
			
		||||
  } // end getExtraAttributes
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Implementations from interface MenuComponent
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.render(out,wr,java.util.Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    if ((ifdef_sym!=null) && !(defines.contains(ifdef_sym)))
 | 
			
		||||
    if ((m_ifdef_sym!=null) && !(defines.contains(m_ifdef_sym)))
 | 
			
		||||
      return;
 | 
			
		||||
    if ((ifndef_sym!=null) && defines.contains(ifndef_sym))
 | 
			
		||||
    if ((m_ifndef_sym!=null) && defines.contains(m_ifndef_sym))
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
    HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class));
 | 
			
		||||
 | 
			
		||||
    // Build up the parms map.
 | 
			
		||||
    HashMap parms = new HashMap();
 | 
			
		||||
    parms.put("xattr",getExtraAttributes());
 | 
			
		||||
    parms.put("stdbullet","<img src=\"" + html.getImagePath("purple-ball.gif")
 | 
			
		||||
	                  + "\" alt=\"*\" width=\"14\" height=\"14\" border=\"0\" />");
 | 
			
		||||
 | 
			
		||||
    // Format the item text to a StringWriter.
 | 
			
		||||
    StringWriter subwr = new StringWriter();
 | 
			
		||||
    m_contents.render(out,subwr,template,defines);
 | 
			
		||||
    subwr.flush();
 | 
			
		||||
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    for (int i=0; i<indent; i++)
 | 
			
		||||
      wr.write("    ");  // do indent
 | 
			
		||||
    wr.write("<IMG SRC=\"" + html.getImagePath("purple-ball.gif")
 | 
			
		||||
	      + "\" ALT=\"*\" WIDTH=14 HEIGHT=14 BORDER=0> ");
 | 
			
		||||
    if (enabled)
 | 
			
		||||
    { // render the URL as an <A> tag
 | 
			
		||||
      wr.write("<A HREF=\"" + html.formatURL(href,type) + "\"");
 | 
			
		||||
      if (target!=null)
 | 
			
		||||
	wr.write(" TARGET=\"" + target + "\"");
 | 
			
		||||
      if (title!=null)
 | 
			
		||||
	wr.write(" TITLE=\"" + title + "\"");
 | 
			
		||||
      if (on_click!=null)
 | 
			
		||||
	wr.write(" onClick=\"" + on_click + "\"");
 | 
			
		||||
      wr.write(">");
 | 
			
		||||
      
 | 
			
		||||
    } // end if
 | 
			
		||||
    else  // just disable the color
 | 
			
		||||
      wr.write(html.getFontTag(html.CONTENT_DISABLED,null));
 | 
			
		||||
    contents.render(out,wr,defines);
 | 
			
		||||
    if (enabled)
 | 
			
		||||
      wr.write("</A>");
 | 
			
		||||
    else
 | 
			
		||||
      wr.write("</FONT>");
 | 
			
		||||
    wr.write("<BR>\n");
 | 
			
		||||
 | 
			
		||||
    // output the indenting
 | 
			
		||||
    String nstr = template.getBlock("link-indent");
 | 
			
		||||
    for (int i=0; i<m_indent; i++)
 | 
			
		||||
      wr.write(nstr);
 | 
			
		||||
 | 
			
		||||
    // output the actual item
 | 
			
		||||
    template.renderItem(wr,(m_enabled ? "normal" : "disabled"),subwr.toString(),html.formatURL(m_href,m_type),parms);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.renderOnLeft(out,wr,java.util.Collections.EMPTY_SET);
 | 
			
		||||
    this.render(out,wr,template,java.util.Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    if ((ifdef_sym!=null) && !(defines.contains(ifdef_sym)))
 | 
			
		||||
      return;
 | 
			
		||||
    if ((ifndef_sym!=null) && defines.contains(ifndef_sym))
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
    HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class));
 | 
			
		||||
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    for (int i=0; i<indent; i++)
 | 
			
		||||
      wr.write(" ");  // do indent
 | 
			
		||||
    if (enabled)
 | 
			
		||||
    { // write the opening <A> and <FONT> tags
 | 
			
		||||
      wr.write("<A HREF=\"" + html.formatURL(href,type) + "\" CLASS=\"lbar\"");
 | 
			
		||||
      if (target!=null)
 | 
			
		||||
	wr.write(" TARGET=\"" + target + "\"");
 | 
			
		||||
      if (title!=null)
 | 
			
		||||
	wr.write(" TITLE=\"" + title + "\"");
 | 
			
		||||
      if (on_click!=null)
 | 
			
		||||
	wr.write(" onClick=\"" + on_click + "\"");
 | 
			
		||||
      wr.write(">" + html.getFontTag(html.LEFT_LINK,null));
 | 
			
		||||
      
 | 
			
		||||
    } // end if
 | 
			
		||||
    else
 | 
			
		||||
      wr.write(html.getFontTag(html.CONTENT_DISABLED,null));
 | 
			
		||||
    contents.renderOnLeft(out,wr,defines);
 | 
			
		||||
    wr.write("</FONT>");
 | 
			
		||||
    if (enabled)
 | 
			
		||||
      wr.write("</A>");
 | 
			
		||||
    wr.write("<BR>\n");
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public String getTitle(RequestOutput out)
 | 
			
		||||
  {
 | 
			
		||||
 | 
			
		||||
@ -9,9 +9,9 @@
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
@ -33,7 +33,7 @@ import com.silverwrist.venice.util.XMLLoader;
 | 
			
		||||
public class Menu implements MenuComponent
 | 
			
		||||
{
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
   * Attributes
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
@ -137,80 +137,42 @@ public class Menu implements MenuComponent
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.render(out,wr,Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class));
 | 
			
		||||
 | 
			
		||||
    if (title!=null)
 | 
			
		||||
    { // write the header
 | 
			
		||||
      if (wr==null)
 | 
			
		||||
	out.writeContentHeader(title,subtitle);
 | 
			
		||||
      else
 | 
			
		||||
	out.writeContentHeader(wr,title,subtitle);
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    if (wr!=null)
 | 
			
		||||
    { // write using specified writer
 | 
			
		||||
      wr.write(html.getFontTag(html.CONTENT_FOREGROUND,"content") + "\n");
 | 
			
		||||
      wr.flush();
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
    else
 | 
			
		||||
      out.write(html.getFontTag(html.CONTENT_FOREGROUND,"content") + "\n");
 | 
			
		||||
 | 
			
		||||
    Iterator it = menu_items.iterator();
 | 
			
		||||
    while (it.hasNext())
 | 
			
		||||
    { // render each menu item in turn
 | 
			
		||||
      MenuComponent mc = (MenuComponent)(it.next());
 | 
			
		||||
      mc.render(out,wr,defines);
 | 
			
		||||
 | 
			
		||||
    } // end while
 | 
			
		||||
 | 
			
		||||
    if (wr!=null)
 | 
			
		||||
    { // write using specified writer
 | 
			
		||||
      wr.write("</FONT>\n");
 | 
			
		||||
      wr.flush();
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
    else
 | 
			
		||||
      out.write("</FONT>\n");
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.renderOnLeft(out,wr,Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    template.writeBlock(wr,"pre");
 | 
			
		||||
    if (title!=null)
 | 
			
		||||
    { // write the title and subtitle
 | 
			
		||||
      wr.write("<B>" + StringUtil.encodeHTML(title) + "</B><BR>\n");
 | 
			
		||||
      if (subtitle!=null)
 | 
			
		||||
	wr.write(StringUtil.encodeHTML(subtitle) + "<BR>\n");
 | 
			
		||||
    { // render the title
 | 
			
		||||
      template.writeBlock(wr,"title-pre");
 | 
			
		||||
      template.renderTitle(wr,title,subtitle);
 | 
			
		||||
      template.writeBlock(wr,"title-post");
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    Iterator it = menu_items.iterator();
 | 
			
		||||
    while (it.hasNext())
 | 
			
		||||
    { // render each menu item in turn
 | 
			
		||||
      MenuComponent mc = (MenuComponent)(it.next());
 | 
			
		||||
      mc.renderOnLeft(out,wr,defines);
 | 
			
		||||
    if (menu_items.size()>0)
 | 
			
		||||
    { // write the menu items
 | 
			
		||||
      template.writeBlock(wr,"items-pre");
 | 
			
		||||
      for (Iterator it=menu_items.iterator(); it.hasNext(); )
 | 
			
		||||
      { // render the menu items
 | 
			
		||||
	MenuComponent mc = (MenuComponent)(it.next());
 | 
			
		||||
	mc.render(out,wr,template,defines);
 | 
			
		||||
 | 
			
		||||
    } // end while
 | 
			
		||||
      } // end for
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
      template.writeBlock(wr,"items-post");
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    template.writeBlock(wr,"post");
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.render(out,wr,template,Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public String getTitle(RequestOutput out)
 | 
			
		||||
  {
 | 
			
		||||
 | 
			
		||||
@ -9,9 +9,9 @@
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
@ -24,14 +24,10 @@ import com.silverwrist.venice.ui.RequestOutput;
 | 
			
		||||
 | 
			
		||||
public interface MenuComponent
 | 
			
		||||
{
 | 
			
		||||
  public abstract void render(RequestOutput out, Writer wr) throws IOException;
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template, Set defines) throws IOException;
 | 
			
		||||
 | 
			
		||||
  public abstract void render(RequestOutput out, Writer wr, Set defines) throws IOException;
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template) throws IOException;
 | 
			
		||||
 | 
			
		||||
  public abstract void renderOnLeft(RequestOutput out, Writer wr) throws IOException;
 | 
			
		||||
 | 
			
		||||
  public abstract void renderOnLeft(RequestOutput out, Writer wr, Set defines) throws IOException;
 | 
			
		||||
 | 
			
		||||
  public abstract String getTitle(RequestOutput out);
 | 
			
		||||
  public String getTitle(RequestOutput out);
 | 
			
		||||
 | 
			
		||||
} // end interface MenuComponent
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										243
									
								
								src/com/silverwrist/venice/ui/menus/MenuTemplate.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										243
									
								
								src/com/silverwrist/venice/ui/menus/MenuTemplate.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,243 @@
 | 
			
		||||
/*
 | 
			
		||||
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 | 
			
		||||
 * (the "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
 | 
			
		||||
 * 
 | 
			
		||||
 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
 | 
			
		||||
 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
 | 
			
		||||
 * language governing rights and limitations under the License.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.ui.menus;
 | 
			
		||||
 | 
			
		||||
import java.io.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import org.w3c.dom.*;
 | 
			
		||||
import com.silverwrist.util.*;
 | 
			
		||||
import com.silverwrist.venice.except.*;
 | 
			
		||||
import com.silverwrist.venice.ui.*;
 | 
			
		||||
import com.silverwrist.venice.ui.config.RootConfig;
 | 
			
		||||
import com.silverwrist.venice.util.XMLLoader;
 | 
			
		||||
 | 
			
		||||
public class MenuTemplate
 | 
			
		||||
{
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Attributes
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private String m_identifier;     // menu template identifier
 | 
			
		||||
  private RootConfig m_rootconf;   // backreference to root configuration
 | 
			
		||||
  private Map m_blocks;            // blocks defined in menu template
 | 
			
		||||
  private String m_title_single;   // single title block
 | 
			
		||||
  private String m_title_double;   // double title block
 | 
			
		||||
  private Map m_items;             // item templates defined in menu template
 | 
			
		||||
  private Map m_links;             // link templates defined in menu template
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public MenuTemplate(Element elt, RootConfig rootconf, String identifier) throws ConfigException
 | 
			
		||||
  {
 | 
			
		||||
    XMLLoader loader = XMLLoader.get();
 | 
			
		||||
 | 
			
		||||
    loader.configVerifyNodeName(elt,"menu-template");  // verify the name of the root node
 | 
			
		||||
    m_identifier = identifier;
 | 
			
		||||
    m_rootconf = rootconf;
 | 
			
		||||
 | 
			
		||||
    // load the contents of the menu template
 | 
			
		||||
    HashMap tmp_blocks = new HashMap();
 | 
			
		||||
    HashMap tmp_items = new HashMap();
 | 
			
		||||
    HashMap tmp_links = new HashMap();
 | 
			
		||||
    NodeList nl = elt.getChildNodes();
 | 
			
		||||
    for (int i=0; i<nl.getLength(); i++)
 | 
			
		||||
    { // examine each child node
 | 
			
		||||
      Node n = nl.item(i);
 | 
			
		||||
      if (n.getNodeType()==Node.ELEMENT_NODE)
 | 
			
		||||
      { // look at the node name
 | 
			
		||||
	Element ne = (Element)n;
 | 
			
		||||
	String nn = n.getNodeName();
 | 
			
		||||
	if (nn.equals("block"))
 | 
			
		||||
	{ // get block by ID and save it off
 | 
			
		||||
	  String id = ne.getAttribute("id");
 | 
			
		||||
	  if (StringUtil.isStringEmpty(id))
 | 
			
		||||
	    throw new ConfigException("menu template \"" + identifier + "\" has a <block/> with no id",ne);
 | 
			
		||||
	  DOMElementHelper h = new DOMElementHelper(ne);
 | 
			
		||||
	  tmp_blocks.put(id,h.getElementText());
 | 
			
		||||
 | 
			
		||||
	} // end if
 | 
			
		||||
	else if (nn.equals("title"))
 | 
			
		||||
	{ // get title type and save it off
 | 
			
		||||
	  String typ = ne.getAttribute("type");
 | 
			
		||||
	  if ((typ==null) || !(typ.equalsIgnoreCase("single") || typ.equalsIgnoreCase("double")))
 | 
			
		||||
	    throw new ConfigException("menu template \"" + identifier + "\" has a <title/> with bad type \""
 | 
			
		||||
				      + typ + "\"",ne);
 | 
			
		||||
	  DOMElementHelper h = new DOMElementHelper(ne);
 | 
			
		||||
	  if (typ.equalsIgnoreCase("single"))
 | 
			
		||||
	    m_title_single = h.getElementText();
 | 
			
		||||
	  else
 | 
			
		||||
	    m_title_double = h.getElementText();
 | 
			
		||||
 | 
			
		||||
	} // end else if
 | 
			
		||||
	else if (nn.equals("item"))
 | 
			
		||||
	{ // save off item template
 | 
			
		||||
	  String typ = ne.getAttribute("type");
 | 
			
		||||
	  if (StringUtil.isStringEmpty(typ))
 | 
			
		||||
	    throw new ConfigException("menu template \"" + identifier + "\" has an <item/> with no type",ne);
 | 
			
		||||
	  DOMElementHelper h = new DOMElementHelper(ne);
 | 
			
		||||
	  tmp_items.put(typ,h.getElementText());
 | 
			
		||||
	  
 | 
			
		||||
	} // end else if
 | 
			
		||||
	else if (nn.equals("link"))
 | 
			
		||||
	{ // save off the link template
 | 
			
		||||
	  String typ = ne.getAttribute("type");
 | 
			
		||||
	  if (StringUtil.isStringEmpty(typ))
 | 
			
		||||
	    throw new ConfigException("menu template \"" + identifier + "\" has a <link/> with no type",ne);
 | 
			
		||||
	  DOMElementHelper h = new DOMElementHelper(ne);
 | 
			
		||||
	  tmp_links.put(typ,h.getElementText());
 | 
			
		||||
 | 
			
		||||
	} // end else if
 | 
			
		||||
	else  // unknown item
 | 
			
		||||
	  throw new ConfigException("unknown element <" + nn + "/> inside <menu-template/>",ne);
 | 
			
		||||
 | 
			
		||||
      } // end if (element found)
 | 
			
		||||
      // else ignore this node
 | 
			
		||||
 | 
			
		||||
    } // end for
 | 
			
		||||
 | 
			
		||||
    if (tmp_blocks.isEmpty())
 | 
			
		||||
      m_blocks = Collections.EMPTY_MAP;
 | 
			
		||||
    else
 | 
			
		||||
      m_blocks = Collections.unmodifiableMap(tmp_blocks);
 | 
			
		||||
    if (tmp_items.isEmpty())
 | 
			
		||||
      m_items = Collections.EMPTY_MAP;
 | 
			
		||||
    else
 | 
			
		||||
      m_items = Collections.unmodifiableMap(tmp_items);
 | 
			
		||||
    if (tmp_links.isEmpty())
 | 
			
		||||
      m_links = Collections.EMPTY_MAP;
 | 
			
		||||
    else
 | 
			
		||||
      m_links = Collections.unmodifiableMap(tmp_links);
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * External operations
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public String getIdentifier()
 | 
			
		||||
  {
 | 
			
		||||
    return m_identifier;
 | 
			
		||||
 | 
			
		||||
  } // end getIdentifier
 | 
			
		||||
 | 
			
		||||
  public String getBlock(String id)
 | 
			
		||||
  {
 | 
			
		||||
    String bk = (String)(m_blocks.get(id));
 | 
			
		||||
    if (StringUtil.isStringEmpty(bk))
 | 
			
		||||
      return "";
 | 
			
		||||
    HashMap parms = new HashMap();
 | 
			
		||||
    m_rootconf.addFormatParams(parms);
 | 
			
		||||
    String rc = StringUtil.replaceAllVariables(bk,parms);
 | 
			
		||||
    return (rc==null) ? "" : rc;
 | 
			
		||||
 | 
			
		||||
  } // end getBlock
 | 
			
		||||
 | 
			
		||||
  public void writeBlock(Writer wr, String id) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    String bk = (String)(m_blocks.get(id));
 | 
			
		||||
    if (StringUtil.isStringEmpty(bk))
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
    HashMap parms = new HashMap();
 | 
			
		||||
    m_rootconf.addFormatParams(parms);
 | 
			
		||||
    String out = StringUtil.replaceAllVariables(bk,parms);
 | 
			
		||||
    if (!(StringUtil.isStringEmpty(out)))
 | 
			
		||||
      wr.write(out);
 | 
			
		||||
 | 
			
		||||
  } // end writeBlock
 | 
			
		||||
 | 
			
		||||
  public void renderTitle(Writer wr, String title, String subtitle) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    if (StringUtil.isStringEmpty(title))
 | 
			
		||||
      throw new IllegalArgumentException("title should not be empty!");
 | 
			
		||||
    String templ = m_title_single;
 | 
			
		||||
    HashMap parms = new HashMap();
 | 
			
		||||
    parms.put("title",StringUtil.encodeHTML(title));
 | 
			
		||||
    if (!(StringUtil.isStringEmpty(subtitle)))
 | 
			
		||||
    { // shift to "double" template
 | 
			
		||||
      templ = m_title_double;
 | 
			
		||||
      parms.put("subtitle",StringUtil.encodeHTML(subtitle));
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    m_rootconf.addFormatParams(parms);
 | 
			
		||||
    String out = StringUtil.replaceAllVariables(templ,parms);
 | 
			
		||||
    if (!(StringUtil.isStringEmpty(out)))
 | 
			
		||||
      wr.write(out);
 | 
			
		||||
 | 
			
		||||
  } // end renderTitle
 | 
			
		||||
 | 
			
		||||
  public void renderItem(Writer wr, String type, String text, String link, Map params) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    String out = text;
 | 
			
		||||
    HashMap myparms = new HashMap();
 | 
			
		||||
    String templ = (String)(m_items.get(type));
 | 
			
		||||
    if (templ==null)
 | 
			
		||||
      templ = (String)(m_items.get("*"));
 | 
			
		||||
    if (templ!=null)
 | 
			
		||||
    { // format the item template
 | 
			
		||||
      if (text!=null)
 | 
			
		||||
      { // format the text
 | 
			
		||||
	m_rootconf.addFormatParams(myparms);
 | 
			
		||||
	myparms.putAll(params);
 | 
			
		||||
	myparms.put("text",text);
 | 
			
		||||
	out = StringUtil.replaceAllVariables(templ,myparms);
 | 
			
		||||
 | 
			
		||||
      } // end if
 | 
			
		||||
      else  // just use the template as the output text
 | 
			
		||||
	out = templ;
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    if (link!=null)
 | 
			
		||||
    { // there's a link - need to look for a link template
 | 
			
		||||
      templ = (String)(m_links.get(type));
 | 
			
		||||
      if (templ==null)
 | 
			
		||||
	templ = (String)(m_links.get("*"));
 | 
			
		||||
      if (templ!=null)
 | 
			
		||||
      { // format the link
 | 
			
		||||
	myparms.clear();
 | 
			
		||||
	m_rootconf.addFormatParams(myparms);
 | 
			
		||||
	myparms.putAll(params);
 | 
			
		||||
	myparms.put("link",link);
 | 
			
		||||
	myparms.put("item",out);
 | 
			
		||||
	if (text!=null)
 | 
			
		||||
	  myparms.put("text",text);
 | 
			
		||||
	out = StringUtil.replaceAllVariables(templ,myparms);
 | 
			
		||||
 | 
			
		||||
      } // end if
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    if (!(StringUtil.isStringEmpty(out)))
 | 
			
		||||
      wr.write(out);  // write it!
 | 
			
		||||
 | 
			
		||||
  } // end renderItem
 | 
			
		||||
 | 
			
		||||
  public void renderItem(Writer wr, String type, String text, String link) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.renderItem(wr,type,text,link,Collections.EMPTY_MAP);
 | 
			
		||||
 | 
			
		||||
  } // end renderItem
 | 
			
		||||
 | 
			
		||||
} // end class MenuTemplate
 | 
			
		||||
@ -9,16 +9,15 @@
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.ui.menus;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.Writer;
 | 
			
		||||
import java.io.*;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import com.silverwrist.venice.ui.RequestOutput;
 | 
			
		||||
 | 
			
		||||
@ -29,14 +28,14 @@ class SeparatorItem implements MenuComponent
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private static SeparatorItem the_blank = new SeparatorItem(null);
 | 
			
		||||
  private static SeparatorItem s_blank = new SeparatorItem(null);
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Attributes
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private MenuComponent subitem;
 | 
			
		||||
  private MenuComponent m_subitem;
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -45,7 +44,7 @@ class SeparatorItem implements MenuComponent
 | 
			
		||||
 | 
			
		||||
  SeparatorItem(MenuComponent subitem)
 | 
			
		||||
  {
 | 
			
		||||
    this.subitem = subitem;
 | 
			
		||||
    m_subitem = subitem;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -54,38 +53,30 @@ class SeparatorItem implements MenuComponent
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.render(out,wr,java.util.Collections.EMPTY_SET);
 | 
			
		||||
    String text = "";
 | 
			
		||||
    if (m_subitem!=null)
 | 
			
		||||
    { // render the subitem
 | 
			
		||||
      StringWriter subwr = new StringWriter();
 | 
			
		||||
      m_subitem.render(out,subwr,template,defines);
 | 
			
		||||
      subwr.flush();
 | 
			
		||||
      text = subwr.toString();
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    template.renderItem(wr,"separator",text,null);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    if (subitem!=null)
 | 
			
		||||
      subitem.render(out,wr,defines);
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    wr.write("<BR>\n");
 | 
			
		||||
    this.render(out,wr,template,java.util.Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.renderOnLeft(out,wr,java.util.Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    if (subitem!=null)
 | 
			
		||||
      subitem.renderOnLeft(out,wr,defines);
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    wr.write("<BR>\n");
 | 
			
		||||
 | 
			
		||||
  } // end renderHere
 | 
			
		||||
 | 
			
		||||
  public String getTitle(RequestOutput out)
 | 
			
		||||
  {
 | 
			
		||||
    return null;
 | 
			
		||||
@ -99,7 +90,7 @@ class SeparatorItem implements MenuComponent
 | 
			
		||||
 | 
			
		||||
  static SeparatorItem getBlank()
 | 
			
		||||
  {
 | 
			
		||||
    return the_blank;
 | 
			
		||||
    return s_blank;
 | 
			
		||||
 | 
			
		||||
  } // end getBlank
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -9,9 +9,9 @@
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
@ -30,7 +30,7 @@ class TextItem implements MenuComponent
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private String contents;
 | 
			
		||||
  private String m_contents;
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -39,7 +39,7 @@ class TextItem implements MenuComponent
 | 
			
		||||
 | 
			
		||||
  TextItem(String contents)
 | 
			
		||||
  {
 | 
			
		||||
    this.contents = StringUtil.encodeHTML(contents);
 | 
			
		||||
    m_contents = StringUtil.encodeHTML(contents);
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -48,32 +48,19 @@ class TextItem implements MenuComponent
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.render(out,wr,java.util.Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    if (wr==null)
 | 
			
		||||
      out.write(contents);
 | 
			
		||||
    else
 | 
			
		||||
      wr.write(contents);
 | 
			
		||||
      wr = out.getWriter();
 | 
			
		||||
    template.renderItem(wr,"text",m_contents,null);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr) throws IOException
 | 
			
		||||
  public void render(RequestOutput out, Writer wr, MenuTemplate template) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.render(out,wr,java.util.Collections.EMPTY_SET);
 | 
			
		||||
    this.render(out,wr,template,java.util.Collections.EMPTY_SET);
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
 | 
			
		||||
  public void renderOnLeft(RequestOutput out, Writer wr, Set defines) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    this.render(out,wr,defines);
 | 
			
		||||
 | 
			
		||||
  } // end renderOnLeft
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
  public String getTitle(RequestOutput out)
 | 
			
		||||
  {
 | 
			
		||||
 | 
			
		||||
@ -38,6 +38,7 @@ import com.silverwrist.venice.ui.helpers.*;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.CommunityMenu;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.Menu;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.MenuComponent;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.MenuTemplate;
 | 
			
		||||
import com.silverwrist.venice.ui.script.*;
 | 
			
		||||
import com.silverwrist.venice.util.XMLLoader;
 | 
			
		||||
 | 
			
		||||
@ -75,6 +76,8 @@ public class RequestImpl implements RequestInput
 | 
			
		||||
    {
 | 
			
		||||
      if (klass==HTMLRendering.class)
 | 
			
		||||
	return RequestImpl.this.queryService(klass);
 | 
			
		||||
      if (klass==ResourceLoader.class)
 | 
			
		||||
	return RequestImpl.this.queryService(klass);
 | 
			
		||||
      throw new NoSuchServiceException("RequestOutput",klass);
 | 
			
		||||
 | 
			
		||||
    } // end queryService
 | 
			
		||||
@ -553,6 +556,7 @@ public class RequestImpl implements RequestInput
 | 
			
		||||
  private CookieControlImpl cookie_control = null;       // cookie control interface
 | 
			
		||||
  private HTMLRenderingImpl html_rendering = null;       // HTML rendering interface
 | 
			
		||||
  private ScriptSupportImpl script_support = null;       // script support interface
 | 
			
		||||
  private ResourceLoaderImpl m_resource_loader = null;   // resource loader interface
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -902,6 +906,14 @@ public class RequestImpl implements RequestInput
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    if (klass==ResourceLoader.class)
 | 
			
		||||
    { // create script support object and return it
 | 
			
		||||
      if (m_resource_loader==null)
 | 
			
		||||
	m_resource_loader = new ResourceLoaderImpl(config);
 | 
			
		||||
      return m_resource_loader;
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    throw new NoSuchServiceException("RequestInput",klass);
 | 
			
		||||
 | 
			
		||||
  } // end queryService
 | 
			
		||||
@ -2272,8 +2284,8 @@ class ScriptSupportImpl implements ScriptSupport
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private RequestImpl req;                 // request we're attached to
 | 
			
		||||
  private RootConfig config;               // configuration data
 | 
			
		||||
  private RequestImpl m_req;               // request we're attached to
 | 
			
		||||
  private RootConfig m_config;             // configuration data
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -2282,8 +2294,8 @@ class ScriptSupportImpl implements ScriptSupport
 | 
			
		||||
 | 
			
		||||
  ScriptSupportImpl(RequestImpl req, RootConfig config)
 | 
			
		||||
  {
 | 
			
		||||
    this.req = req;
 | 
			
		||||
    this.config = config;
 | 
			
		||||
    m_req = req;
 | 
			
		||||
    m_config = config;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -2329,13 +2341,13 @@ class ScriptSupportImpl implements ScriptSupport
 | 
			
		||||
 | 
			
		||||
  public String getScriptName(String raw_name)
 | 
			
		||||
  {
 | 
			
		||||
    return config.getScriptPath(raw_name);
 | 
			
		||||
    return m_config.getScriptPath(raw_name);
 | 
			
		||||
 | 
			
		||||
  } // end getScriptName
 | 
			
		||||
 | 
			
		||||
  public String getScriptName(boolean strip_ext)
 | 
			
		||||
  {
 | 
			
		||||
    String script = req.getServletPath();
 | 
			
		||||
    String script = m_req.getServletPath();
 | 
			
		||||
    if (script.charAt(0)=='/')
 | 
			
		||||
      script = script.substring(1);
 | 
			
		||||
 | 
			
		||||
@ -2348,7 +2360,7 @@ class ScriptSupportImpl implements ScriptSupport
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    return config.getScriptPath(script);
 | 
			
		||||
    return m_config.getScriptPath(script);
 | 
			
		||||
 | 
			
		||||
  } // end getScriptName
 | 
			
		||||
 | 
			
		||||
@ -2360,7 +2372,7 @@ class ScriptSupportImpl implements ScriptSupport
 | 
			
		||||
 | 
			
		||||
  public String getScriptLoggerName()
 | 
			
		||||
  {
 | 
			
		||||
    String script = req.getServletPath();
 | 
			
		||||
    String script = m_req.getServletPath();
 | 
			
		||||
    if (script.charAt(0)=='/')
 | 
			
		||||
      script = script.substring(1);
 | 
			
		||||
 | 
			
		||||
@ -2370,7 +2382,7 @@ class ScriptSupportImpl implements ScriptSupport
 | 
			
		||||
 | 
			
		||||
  public String getRPCScriptName(String raw_name)
 | 
			
		||||
  {
 | 
			
		||||
    return config.getRPCScriptPath(raw_name);
 | 
			
		||||
    return m_config.getRPCScriptPath(raw_name);
 | 
			
		||||
 | 
			
		||||
  } // end getScriptName
 | 
			
		||||
 | 
			
		||||
@ -2381,3 +2393,36 @@ class ScriptSupportImpl implements ScriptSupport
 | 
			
		||||
  } // end getScriptLoggerName
 | 
			
		||||
 | 
			
		||||
} // end class ScriptSupportImpl
 | 
			
		||||
 | 
			
		||||
class ResourceLoaderImpl implements ResourceLoader
 | 
			
		||||
{
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Attributes
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private RootConfig m_config;             // configuration data
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  ResourceLoaderImpl(RootConfig config)
 | 
			
		||||
  {
 | 
			
		||||
    m_config = config;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Implementations from interface ResourceLoader
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  public MenuTemplate getMenuTemplate(String name)
 | 
			
		||||
  {
 | 
			
		||||
    return m_config.getMenuTemplate(name);
 | 
			
		||||
 | 
			
		||||
  } // end getMenuTemplate
 | 
			
		||||
 | 
			
		||||
} // end class ResourceLoader
 | 
			
		||||
 | 
			
		||||
@ -9,9 +9,9 @@
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
 * Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 * 
 | 
			
		||||
 * Contributor(s): 
 | 
			
		||||
 */
 | 
			
		||||
@ -21,7 +21,9 @@ import java.io.IOException;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import com.silverwrist.util.StringUtil;
 | 
			
		||||
import com.silverwrist.venice.ui.*;
 | 
			
		||||
import com.silverwrist.venice.ui.helpers.ResourceLoader;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.MenuComponent;
 | 
			
		||||
import com.silverwrist.venice.ui.menus.MenuTemplate;
 | 
			
		||||
 | 
			
		||||
public class MenuView implements ContentDirect
 | 
			
		||||
{
 | 
			
		||||
@ -30,10 +32,10 @@ public class MenuView implements ContentDirect
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private int menu_selector = MENU_SELECTOR_NOCHANGE;
 | 
			
		||||
  private String qid = null;
 | 
			
		||||
  private MenuComponent component;
 | 
			
		||||
  private Set defines = Collections.EMPTY_SET;
 | 
			
		||||
  private int m_menu_selector = MENU_SELECTOR_NOCHANGE;
 | 
			
		||||
  private String m_qid = null;
 | 
			
		||||
  private MenuComponent m_component;
 | 
			
		||||
  private Set m_defines = Collections.EMPTY_SET;
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -42,7 +44,7 @@ public class MenuView implements ContentDirect
 | 
			
		||||
 | 
			
		||||
  public MenuView(MenuComponent component)
 | 
			
		||||
  {
 | 
			
		||||
    this.component = component;
 | 
			
		||||
    m_component = component;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -59,19 +61,19 @@ public class MenuView implements ContentDirect
 | 
			
		||||
 | 
			
		||||
  public int getMenuSelector()
 | 
			
		||||
  {
 | 
			
		||||
    return menu_selector;
 | 
			
		||||
    return m_menu_selector;
 | 
			
		||||
 | 
			
		||||
  } // end getMenuSelector
 | 
			
		||||
 | 
			
		||||
  public String getPageTitle(RequestOutput ro)
 | 
			
		||||
  {
 | 
			
		||||
    return component.getTitle(ro);
 | 
			
		||||
    return m_component.getTitle(ro);
 | 
			
		||||
 | 
			
		||||
  } // end getPageTitle
 | 
			
		||||
 | 
			
		||||
  public String getPageQID()
 | 
			
		||||
  {
 | 
			
		||||
    return qid;
 | 
			
		||||
    return m_qid;
 | 
			
		||||
 | 
			
		||||
  } // end getPageQID
 | 
			
		||||
 | 
			
		||||
@ -82,7 +84,9 @@ public class MenuView implements ContentDirect
 | 
			
		||||
 | 
			
		||||
  public void render(RequestOutput out) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    component.render(out,null,defines);
 | 
			
		||||
    ResourceLoader rload = (ResourceLoader)(out.queryService(ResourceLoader.class));
 | 
			
		||||
    MenuTemplate templ = rload.getMenuTemplate("normal");
 | 
			
		||||
    m_component.render(out,null,templ,m_defines);
 | 
			
		||||
 | 
			
		||||
  } // end render
 | 
			
		||||
 | 
			
		||||
@ -93,21 +97,21 @@ public class MenuView implements ContentDirect
 | 
			
		||||
 | 
			
		||||
  public final void setMenuSelector(int sel)
 | 
			
		||||
  {
 | 
			
		||||
    menu_selector = sel;
 | 
			
		||||
    m_menu_selector = sel;
 | 
			
		||||
 | 
			
		||||
  } // end setMenuSelector
 | 
			
		||||
 | 
			
		||||
  public final void setPageQID(String s)
 | 
			
		||||
  {
 | 
			
		||||
    qid = s;
 | 
			
		||||
    m_qid = s;
 | 
			
		||||
 | 
			
		||||
  } // end setPageQID
 | 
			
		||||
 | 
			
		||||
  public final void define(String symbol)
 | 
			
		||||
  {
 | 
			
		||||
    if (defines==Collections.EMPTY_SET)
 | 
			
		||||
      defines = new HashSet();
 | 
			
		||||
    defines.add(symbol);
 | 
			
		||||
    if (m_defines==Collections.EMPTY_SET)
 | 
			
		||||
      m_defines = new HashSet();
 | 
			
		||||
    m_defines.add(symbol);
 | 
			
		||||
 | 
			
		||||
  } // end define
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user