added content metadata processing and its first application, making the Front

Page auto-refresh
This commit is contained in:
Eric J. Bowersox 2004-06-27 02:38:51 +00:00
parent aa186601a4
commit b437a15e73
10 changed files with 364 additions and 140 deletions

View File

@ -68,6 +68,9 @@
<!-- The maximum age of the persistent login cookie. --> <!-- The maximum age of the persistent login cookie. -->
<property name="login.cookie.age">31536000</property> <!-- one year --> <property name="login.cookie.age">31536000</property> <!-- one year -->
<!-- The Front Page will automatically refresh if this property is set. -->
<property name="top.refresh">300</property> <!-- every five minutes -->
</properties> </properties>
<!-- Settings related to the outer frame. --> <!-- Settings related to the outer frame. -->

View File

@ -8,9 +8,9 @@
// //
// The Original Code is the Venice Web Communities System. // 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 // 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): // Contributor(s):
@ -54,6 +54,11 @@ try
view.menuSelector = Content.MENU_SELECTOR_TOP; view.menuSelector = Content.MENU_SELECTOR_TOP;
view.pageQID = "top"; view.pageQID = "top";
// set it up to auto-refresh if configured to do that
ar = rinput.getConfigProperty("top.refresh");
if (ar!=null)
view.addHTTPMetadata("refresh",ar);
// wrap the JSP view in our sidebox view for return // wrap the JSP view in our sidebox view for return
rc = new SideBoxNestedView(rinput,view); rc = new SideBoxNestedView(rinput,view);

View File

@ -0,0 +1,28 @@
/*
* 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;
import java.util.Map;
public interface ContentMetadata
{
public Map getMetadata();
public Map getHTTPMetadata();
} // end interface ContentMetadata

View File

@ -9,9 +9,9 @@
* *
* The Original Code is the Venice Web Communities System. * 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 * 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): * Contributor(s):
*/ */
@ -25,4 +25,6 @@ public interface LinkTypes
public static final int FRAME = 2; public static final int FRAME = 2;
public static final int FULLSERVLET = 3;
} // end interface LinkTypes } // end interface LinkTypes

View File

@ -9,9 +9,9 @@
* *
* The Original Code is the Venice Web Communities System. * 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 * 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): * Contributor(s):
*/ */
@ -282,32 +282,32 @@ public class RootConfig implements LinkTypes, ColorSelectors
// Retrieve the site logo. // Retrieve the site logo.
sect1 = loader.configGetSubSection(sect_h,"site-logo"); sect1 = loader.configGetSubSection(sect_h,"site-logo");
sect1_h = new DOMElementHelper(sect1); sect1_h = new DOMElementHelper(sect1);
StringBuffer tmpbuf = new StringBuffer("<IMG SRC=\""); StringBuffer tmpbuf = new StringBuffer("<img src=\"");
tmpbuf.append(loader.configGetText(sect1_h)).append("\" ALT=\"").append(site_title).append("\" WIDTH="); tmpbuf.append(loader.configGetText(sect1_h)).append("\" alt=\"").append(site_title).append("\" width=\"");
// Get the logo width. // Get the logo width.
Integer itmp = sect1_h.getAttributeInt("width"); Integer itmp = sect1_h.getAttributeInt("width");
if (itmp==null) if (itmp==null)
itmp = new Integer(140); itmp = new Integer(140);
tmpbuf.append(itmp).append(" HEIGHT="); tmpbuf.append(itmp).append("\" height=\"");
// Get the logo height. // Get the logo height.
itmp = sect1_h.getAttributeInt("height"); itmp = sect1_h.getAttributeInt("height");
if (itmp==null) if (itmp==null)
itmp = new Integer(80); itmp = new Integer(80);
tmpbuf.append(itmp).append(" HSPACE="); tmpbuf.append(itmp).append("\" hspace=\"");
// Get the horizontal spacing for the logo. // Get the horizontal spacing for the logo.
itmp = sect1_h.getAttributeInt("hspace"); itmp = sect1_h.getAttributeInt("hspace");
if (itmp==null) if (itmp==null)
itmp = new Integer(2); itmp = new Integer(2);
tmpbuf.append(itmp).append(" VSPACE="); tmpbuf.append(itmp).append("\" vspace=\"");
// Get the vertical spacing for the logo. // Get the vertical spacing for the logo.
itmp = sect1_h.getAttributeInt("vspace"); itmp = sect1_h.getAttributeInt("vspace");
if (itmp==null) if (itmp==null)
itmp = new Integer(2); itmp = new Integer(2);
tmpbuf.append(itmp).append(" BORDER=0>"); tmpbuf.append(itmp).append("\" border=\"0\" />");
site_logo_img_tag = tmpbuf.toString(); site_logo_img_tag = tmpbuf.toString();
// Get the link URL of the logo. // Get the link URL of the logo.
@ -334,9 +334,9 @@ public class RootConfig implements LinkTypes, ColorSelectors
itmp = new Integer(100); itmp = new Integer(100);
int tmp_width = (VENICE_IMAGE_WIDTH * itmp.intValue()) / 100; int tmp_width = (VENICE_IMAGE_WIDTH * itmp.intValue()) / 100;
int tmp_height = (VENICE_IMAGE_HEIGHT * itmp.intValue()) / 100; int tmp_height = (VENICE_IMAGE_HEIGHT * itmp.intValue()) / 100;
venice_logo_tag = "<A HREF=\"" + VENICE_URL + "\" TARGET=\"_blank\"><IMG SRC=\"" + image_path venice_logo_tag = "<a href=\"" + VENICE_URL + "\" target=\"_blank\"><img src=\"" + image_path
+ VENICE_IMAGE + "\" ALT=\"" + VENICE_ALT + "\" WIDTH=" + tmp_width + " HEIGHT=" + VENICE_IMAGE + "\" alt=\"" + VENICE_ALT + "\" width=\"" + tmp_width + "\" height=\""
+ tmp_height + " BORDER=0 HSPACE=0 VSPACE=0></A>"; + tmp_height + "\" border=\"0\" hspace=\"0\" vspace=\"0\" /></a>";
// Get the page icon and icon type, and the "favorites icon" (MS-specific). // Get the page icon and icon type, and the "favorites icon" (MS-specific).
String page_icon_1 = null, page_icon_2 = null; String page_icon_1 = null, page_icon_2 = null;
@ -344,7 +344,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
if (sect1!=null) if (sect1!=null)
{ // get the URL and create the "shortcut icon" tag { // get the URL and create the "shortcut icon" tag
String url = loader.configGetText(sect1); String url = loader.configGetText(sect1);
page_icon_2 = "<LINK REL=\"SHORTCUT ICON\" HREF=\"" + url + "\">\n"; page_icon_2 = "<link rel=\"SHORTCUT ICON\" href=\"" + url + "\" />\n";
} // end if } // end if
@ -353,9 +353,9 @@ public class RootConfig implements LinkTypes, ColorSelectors
{ // get the URL and type, and create the page icon tag { // get the URL and type, and create the page icon tag
String url = loader.configGetText(sect1); String url = loader.configGetText(sect1);
String type = loader.configGetAttribute(sect1,"type"); String type = loader.configGetAttribute(sect1,"type");
page_icon_1 = "<LINK REL=\"icon\" HREF=\"" + url + "\" TYPE=\"" + type + "\">\n"; page_icon_1 = "<link rel=\"icon\" href=\"" + url + "\" type=\"" + type + "\" />\n";
if (page_icon_2==null) // fill this in for the "shortcut icon" as well if (page_icon_2==null) // fill this in for the "shortcut icon" as well
page_icon_2 = "<LINK REL=\"SHORTCUT ICON\" HREF=\"" + url + "\">\n"; page_icon_2 = "<link rel=\"SHORTCUT ICON\" href=\"" + url + "\" />\n";
} // end if } // end if
@ -370,7 +370,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
// Get the default font face name. // Get the default font face name.
font_face = loader.configGetSubElementText(sect_h,"font"); font_face = loader.configGetSubElementText(sect_h,"font");
base_font = "<BASEFONT FACE=\"" + font_face + "\" SIZE=" + bf_size.intValue() + ">"; base_font = "<basefont face=\"" + font_face + "\" size=\"" + bf_size.intValue() + "\" />";
// Load the stock font sizes. // Load the stock font sizes.
sect1 = sect_h.getSubElement("font-sizes"); sect1 = sect_h.getSubElement("font-sizes");
@ -406,11 +406,11 @@ public class RootConfig implements LinkTypes, ColorSelectors
// Set up the content header array. // Set up the content header array.
content_hdr = new String[5]; content_hdr = new String[5];
content_hdr[0] = "<SPAN CLASS=\"chead1\">" + getFontTag(CONTENT_HEADER,"header") + "<B>"; content_hdr[0] = "<span class=\"chead1\">" + getFontTag(CONTENT_HEADER,"header") + "<b>";
content_hdr[1] = "</B></FONT></SPAN>"; content_hdr[1] = "</b></font></span>";
content_hdr[2] = "&nbsp;&nbsp;<SPAN CLASS=\"chead2\">" + getFontTag(CONTENT_HEADER,"subhead") + "<B>"; content_hdr[2] = "&nbsp;&nbsp;<span class=\"chead2\">" + getFontTag(CONTENT_HEADER,"subhead") + "<b>";
content_hdr[3] = "</B></FONT></SPAN>"; content_hdr[3] = "</b></font></span>";
content_hdr[4] = "<HR ALIGN=LEFT SIZE=2 WIDTH=\"90%\" NOSHADE>\n"; content_hdr[4] = "<hr align=\"left\" size=\"2\" width=\"90%\" noshade=\"noshade\" />\n";
// Get the "HTML Comments" flag. // Get the "HTML Comments" flag.
html_comments = sect_h.hasChildElement("html-comments"); html_comments = sect_h.hasChildElement("html-comments");
@ -652,16 +652,16 @@ public class RootConfig implements LinkTypes, ColorSelectors
public final String getFontTag(int colorsel, int size) public final String getFontTag(int colorsel, int size)
{ {
return "<FONT FACE=\"" + font_face + "\" COLOR=\"" + colors.getColor(colorsel) + "\" SIZE=" + size + ">"; return "<font face=\"" + font_face + "\" color=\"" + colors.getColor(colorsel) + "\" size=\"" + size + "\">";
} // end getFontTag } // end getFontTag
public final String getFontTag(String color, int size) public final String getFontTag(String color, int size)
{ {
StringBuffer rc = new StringBuffer("<FONT FACE=\""); StringBuffer rc = new StringBuffer("<font face=\"");
rc.append(font_face).append("\" SIZE=").append(size); rc.append(font_face).append("\" size=\"").append(size).append("\"");
if (color!=null) if (color!=null)
rc.append(" COLOR=\"").append(colors.getColor(color)).append("\""); rc.append(" color=\"").append(colors.getColor(color)).append("\"");
rc.append('>'); rc.append('>');
return rc.toString(); return rc.toString();
@ -669,10 +669,10 @@ public class RootConfig implements LinkTypes, ColorSelectors
public final String getFontTag(int colorsel, String size) public final String getFontTag(int colorsel, String size)
{ {
StringBuffer rc = new StringBuffer("<FONT FACE=\""); StringBuffer rc = new StringBuffer("<font face=\"");
rc.append(font_face).append("\" COLOR=\"").append(colors.getColor(colorsel)).append('\"'); rc.append(font_face).append("\" color=\"").append(colors.getColor(colorsel)).append('\"');
if (size!=null) if (size!=null)
rc.append(" SIZE=\"").append(mapFontSize(size)).append('\"'); rc.append(" size=\"").append(mapFontSize(size)).append('\"');
rc.append('>'); rc.append('>');
return rc.toString(); return rc.toString();
@ -680,12 +680,12 @@ public class RootConfig implements LinkTypes, ColorSelectors
public final String getFontTag(String color, String size) public final String getFontTag(String color, String size)
{ {
StringBuffer rc = new StringBuffer("<FONT FACE=\""); StringBuffer rc = new StringBuffer("<font face=\"");
rc.append(font_face).append("\""); rc.append(font_face).append("\"");
if (color!=null) if (color!=null)
rc.append(" COLOR=\"").append(colors.getColor(color)).append("\""); rc.append(" color=\"").append(colors.getColor(color)).append("\"");
if (size!=null) if (size!=null)
rc.append(" SIZE=\"").append(mapFontSize(size)).append('\"'); rc.append(" size=\"").append(mapFontSize(size)).append('\"');
rc.append('>'); rc.append('>');
return rc.toString(); return rc.toString();
@ -858,6 +858,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
m.put("absolute",new Integer(ABSOLUTE)); m.put("absolute",new Integer(ABSOLUTE));
m.put("servlet",new Integer(SERVLET)); m.put("servlet",new Integer(SERVLET));
m.put("frame",new Integer(FRAME)); m.put("frame",new Integer(FRAME));
m.put("fullservlet",new Integer(FULLSERVLET));
link_types = Collections.unmodifiableMap(m); link_types = Collections.unmodifiableMap(m);
} // end static initializer } // end static initializer

View File

@ -8,13 +8,14 @@
# #
# The Original Code is the Venice Web Communities System. # 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 # 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): # Contributor(s):
# ------------------------------------------------------------------------------------- # -------------------------------------------------------------------------------------
# Default values for the properties that are loaded from the ui-config.xml <properties/> section. # Default values for the properties that are loaded from the ui-config.xml <properties/> section.
session.init=session_init.js session.init=session_init.js
login.cookie=VeniceAuth login.cookie=VeniceAuth
login.cookie.age=31536000 login.cookie.age=31536000
# no default for top.refresh

View File

@ -50,12 +50,27 @@ public class RequestImpl implements RequestInput
class OutputImpl implements RequestOutput class OutputImpl implements RequestOutput
{ {
/*====================================================================
* Attributes
*====================================================================
*/
private Writer wr = null; private Writer wr = null;
/*====================================================================
* Constructor
*====================================================================
*/
OutputImpl() OutputImpl()
{ // do nothing { // do nothing
} // end constructor } // end constructor
/*====================================================================
* Implementations from interface ServiceProvider
*====================================================================
*/
public Object queryService(Class klass) public Object queryService(Class klass)
{ {
if (klass==HTMLRendering.class) if (klass==HTMLRendering.class)
@ -70,6 +85,11 @@ public class RequestImpl implements RequestInput
} // end queryService } // end queryService
/*====================================================================
* Implementations from interface RequestOutput
*====================================================================
*/
public Writer getWriter() throws IOException public Writer getWriter() throws IOException
{ {
if (wr==null) if (wr==null)
@ -237,17 +257,51 @@ public class RequestImpl implements RequestInput
{ {
HTMLRendering html = (HTMLRendering)(RequestImpl.this.queryService(HTMLRendering.class)); HTMLRendering html = (HTMLRendering)(RequestImpl.this.queryService(HTMLRendering.class));
out.write("<HEAD>\n<TITLE>" + config.getPageTitle(c.getPageTitle(this)) + "</TITLE>\n" out.write("<head>\n<title>" + config.getPageTitle(c.getPageTitle(this)) + "</title>\n"
+ config.getBaseFontTag() + "\n"); + config.getBaseFontTag() + "\n");
if (config.usingStyleSheet()) if (config.usingStyleSheet())
out.write("<LINK REL=\"stylesheet\" HREF=\"" + html.formatURL("stylesheet",html.SERVLET) out.write("<link rel=\"stylesheet\" href=\"" + html.formatURL("stylesheet",html.SERVLET)
+ "\" TYPE=\"text/css\">\n"); + "\" type=\"text/css\" />\n");
String tmp = config.getPageIconTags(); String tmp = config.getPageIconTags();
if (tmp!=null) if (tmp!=null)
out.write(tmp); out.write(tmp);
if (!(config.useSmartTags())) if (!(config.useSmartTags()))
out.write("<META NAME=\"MSSmartTagsPreventParsing\" CONTENT=\"TRUE\">\n"); out.write("<meta name=\"MSSmartTagsPreventParsing\" content=\"TRUE\" />\n");
out.write("</HEAD>\n"); if (c instanceof ContentMetadata)
{ // look for additional metadata on the content
ContentMetadata cm = (ContentMetadata)c;
Map meta = cm.getMetadata();
if (meta==null)
meta = Collections.EMPTY_MAP;
Iterator it;
for (it=meta.entrySet().iterator(); it.hasNext(); )
{ // write the metadata
Map.Entry ntry = (Map.Entry)(it.next());
out.write("<meta name=\"");
out.write(ntry.getKey().toString());
out.write("\" content=\"");
out.write(ntry.getValue().toString());
out.write("\" />\n");
} // end for
meta = cm.getHTTPMetadata();
if (meta==null)
meta = Collections.EMPTY_MAP;
for (it=meta.entrySet().iterator(); it.hasNext(); )
{ // write the metadata
Map.Entry ntry = (Map.Entry)(it.next());
out.write("<meta http-equiv=\"");
out.write(ntry.getKey().toString());
out.write("\" content=\"");
out.write(ntry.getValue().toString());
out.write("\" />\n");
} // end for
} // end if
out.write("</head>\n");
} // end writeFrameHead } // end writeFrameHead
@ -265,10 +319,10 @@ public class RequestImpl implements RequestInput
String href = config.getSiteLogoLink(); String href = config.getSiteLogoLink();
if (href!=null) if (href!=null)
out.write("<A HREF=\"" + html.formatURL(href,config.getSiteLogoLinkType()) + "\">"); out.write("<a href=\"" + html.formatURL(href,config.getSiteLogoLinkType()) + "\">");
out.write(config.getSiteLogoImageTag()); out.write(config.getSiteLogoImageTag());
if (href!=null) if (href!=null)
out.write("</A>"); out.write("</a>");
} // end writeSiteImageTag } // end writeSiteImageTag
@ -317,10 +371,20 @@ public class RequestImpl implements RequestInput
class ExecImpl implements RequestExec class ExecImpl implements RequestExec
{ {
/*====================================================================
* Constructor
*====================================================================
*/
ExecImpl() ExecImpl()
{ // do nothing { // do nothing
} // end constructor } // end constructor
/*====================================================================
* Implementations from interface RequestExec
*====================================================================
*/
public void error(int code) throws IOException public void error(int code) throws IOException
{ {
flushCookies(); flushCookies();
@ -454,7 +518,7 @@ public class RequestImpl implements RequestInput
*/ */
private static Logger logger = Logger.getLogger(RequestImpl.class); private static Logger logger = Logger.getLogger(RequestImpl.class);
private static int serial_gen = 1; private static int s_serial_gen = 1;
private static final String APP_ATTRIBUTE_STEM = "com.silverwrist.venice.ui.variables."; private static final String APP_ATTRIBUTE_STEM = "com.silverwrist.venice.ui.variables.";
@ -468,7 +532,7 @@ public class RequestImpl implements RequestInput
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
private int serial; // serial number of this request private int m_serial; // serial number of this request
private ServletContext ctxt; // the servlet context private ServletContext ctxt; // the servlet context
private HttpServletRequest request; // the servlet request data private HttpServletRequest request; // the servlet request data
private HttpServletResponse response; // the servlet response data private HttpServletResponse response; // the servlet response data
@ -508,7 +572,7 @@ public class RequestImpl implements RequestInput
synchronized (RequestImpl.class) synchronized (RequestImpl.class)
{ // add serial number { // add serial number
this.serial = serial_gen++; m_serial = s_serial_gen++;
} // end synchronized block } // end synchronized block
@ -751,15 +815,19 @@ public class RequestImpl implements RequestInput
* &quot;http://venice.example.org/venice/foobar&quot;. * &quot;http://venice.example.org/venice/foobar&quot;.
* *
* @param spath Servlet path to be expanded. * @param spath Servlet path to be expanded.
* @param encode <code>true</code> to encode the servlet path first, <code>false</code> to not do so.
* @return The fully-expanded servlet path. * @return The fully-expanded servlet path.
*/ */
final String expandServletPath(String spath) final String expandServletPath(String spath, boolean encode)
{ {
StringBuffer buf = new StringBuffer("http://"); StringBuffer buf = new StringBuffer("http://");
buf.append(request.getServerName()); buf.append(request.getServerName());
if (request.getServerPort()!=80) if (request.getServerPort()!=80)
buf.append(':').append(request.getServerPort()); buf.append(':').append(request.getServerPort());
buf.append(request.getContextPath()).append('/').append(spath); if (encode)
buf.append(encodeServletPath(spath));
else
buf.append(request.getContextPath()).append('/').append(spath);
return buf.toString(); return buf.toString();
} // end expandServletPath } // end expandServletPath
@ -772,7 +840,7 @@ public class RequestImpl implements RequestInput
public String toString() public String toString()
{ {
StringBuffer buf = new StringBuffer("{RequestImpl #"); StringBuffer buf = new StringBuffer("{RequestImpl #");
buf.append(serial).append("from [").append(request.getRemoteAddr()).append("] for "); buf.append(m_serial).append("from [").append(request.getRemoteAddr()).append("] for ");
buf.append(request.getServletPath()).append("}"); buf.append(request.getServletPath()).append("}");
return buf.toString(); return buf.toString();
@ -2000,6 +2068,8 @@ class HTMLRenderingImpl implements HTMLRendering
return req.encodeServletPath(url); return req.encodeServletPath(url);
else if (type==FRAME) else if (type==FRAME)
return req.encodeServletPath("frame/" + url); return req.encodeServletPath("frame/" + url);
else if (type==FULLSERVLET)
return req.expandServletPath(url,true);
else else
throw new IndexOutOfBoundsException("invalid format type index for formatURL"); throw new IndexOutOfBoundsException("invalid format type index for formatURL");
@ -2102,13 +2172,13 @@ class HTMLRenderingImpl implements HTMLRendering
public String getUserPhotoTag(String url, Dimension size) public String getUserPhotoTag(String url, Dimension size)
{ {
StringBuffer buf = new StringBuffer("<IMG SRC=\""); StringBuffer buf = new StringBuffer("<img src=\"");
if (StringUtil.isStringEmpty(url)) if (StringUtil.isStringEmpty(url))
buf.append(config.getBlankPhoto()); buf.append(config.getBlankPhoto());
else else
buf.append(url); buf.append(url);
buf.append("\" ALT=\"\" ALIGN=LEFT BORDER=0 WIDTH=").append(size.width).append(" HEIGHT="); buf.append("\" alt=\"\" align=\"left\" border=\"0\" width=\"").append(size.width).append("\" height=\"");
buf.append(size.height).append(">"); buf.append(size.height).append("\" />");
return buf.toString(); return buf.toString();
} // end getUserPhotoTag } // end getUserPhotoTag
@ -2160,21 +2230,21 @@ class HTMLRenderingImpl implements HTMLRendering
public String getCommunityLogoTag(String url) public String getCommunityLogoTag(String url)
{ {
StringBuffer buf = new StringBuffer("<IMG SRC=\""); StringBuffer buf = new StringBuffer("<img src=\"");
if (StringUtil.isStringEmpty(url)) if (StringUtil.isStringEmpty(url))
buf.append(this.getImagePath("sig_other.jpg")); buf.append(this.getImagePath("sig_other.jpg"));
else else
buf.append(url); buf.append(url);
Dimension sz = req.getEngine().getCommunityLogoSize(); Dimension sz = req.getEngine().getCommunityLogoSize();
buf.append("\" ALT=\"\" BORDER=0 WIDTH=").append(sz.width).append(" HEIGHT=").append(sz.height); buf.append("\" alt=\"\" border=\"0\" width=\"").append(sz.width).append("\" height=\"").append(sz.height);
buf.append(">"); buf.append("\" />");
return buf.toString(); return buf.toString();
} // end getCommunityLogoTag } // end getCommunityLogoTag
public String expandServletPath(String spath) public String expandServletPath(String spath)
{ {
return req.expandServletPath(spath); return req.expandServletPath(spath,false);
} // end expandServletPath } // end expandServletPath

View File

@ -9,35 +9,36 @@
* *
* The Original Code is the Venice Web Communities System. * 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 * 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): * Contributor(s):
*/ */
package com.silverwrist.venice.ui.view; package com.silverwrist.venice.ui.view;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import javax.servlet.*; import javax.servlet.*;
import com.silverwrist.venice.core.CommunityContext; import com.silverwrist.venice.core.CommunityContext;
import com.silverwrist.venice.ui.*; import com.silverwrist.venice.ui.*;
import com.silverwrist.venice.ui.helpers.HTMLRendering; import com.silverwrist.venice.ui.helpers.HTMLRendering;
import com.silverwrist.venice.ui.servlet.RequestImpl; import com.silverwrist.venice.ui.servlet.RequestImpl;
public class JSPView implements ContentJSP public class JSPView implements ContentJSP, ContentMetadata
{ {
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Attributes * Attributes
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
private int menu_sel = MENU_SELECTOR_NOCHANGE; private int m_menu_sel = MENU_SELECTOR_NOCHANGE; // menu selector output by this code
private String title; private String m_title; // page title
private String qid = null; private String m_qid = null; // page Quick ID
private String jsp_name; private String m_jsp_name; // name of JSP page to forward to
private RequestInput rinput = null; private RequestInput m_rinput = null; // input request used by inner code
private HTMLRendering html = null; private HTMLRendering m_html = null; // HTML rendering helper
private HashMap m_metadata = null; // collection of metadata to output
private HashMap m_http_metadata = null; // collection of HTTP metadata to output
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Constructor * Constructor
@ -46,8 +47,8 @@ public class JSPView implements ContentJSP
public JSPView(String title, String jsp_name) public JSPView(String title, String jsp_name)
{ {
this.title = title; m_title = title;
this.jsp_name = jsp_name; m_jsp_name = jsp_name;
} // end constructor } // end constructor
@ -64,19 +65,19 @@ public class JSPView implements ContentJSP
public int getMenuSelector() public int getMenuSelector()
{ {
return menu_sel; return m_menu_sel;
} // end getMenuSelector } // end getMenuSelector
public String getPageTitle(RequestOutput ro) public String getPageTitle(RequestOutput ro)
{ {
return title; return m_title;
} // end getPageTitle } // end getPageTitle
public String getPageQID() public String getPageQID()
{ {
return qid; return m_qid;
} // end getPageQID } // end getPageQID
@ -87,24 +88,47 @@ public class JSPView implements ContentJSP
public String getJSPName() public String getJSPName()
{ {
return jsp_name; return m_jsp_name;
} // end getJSPName } // end getJSPName
public void initialize(RequestInput req) public void initialize(RequestInput req)
{ {
rinput = req; m_rinput = req;
html = (HTMLRendering)(req.queryService(HTMLRendering.class)); m_html = (HTMLRendering)(req.queryService(HTMLRendering.class));
} // end initialize } // end initialize
public void terminate(RequestInput req) public void terminate(RequestInput req)
{ {
rinput = null; m_rinput = null;
html = null; m_html = null;
} // end terminate } // end terminate
/*--------------------------------------------------------------------------------
* Implementations from interface ContentMetadata
*--------------------------------------------------------------------------------
*/
public Map getMetadata()
{
if (m_metadata==null)
return Collections.EMPTY_MAP;
else
return Collections.unmodifiableMap(m_metadata);
} // end getMetadata
public Map getHTTPMetadata()
{
if (m_http_metadata==null)
return Collections.EMPTY_MAP;
else
return Collections.unmodifiableMap(m_http_metadata);
} // end getHTTPMetadata
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* External operations * External operations
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
@ -112,39 +136,59 @@ public class JSPView implements ContentJSP
public final void setMenuSelector(int sel) public final void setMenuSelector(int sel)
{ {
if (rinput==null) if (m_rinput==null)
menu_sel = sel; m_menu_sel = sel;
} // end setMenuSelector } // end setMenuSelector
public final void setPageQID(String s) public final void setPageQID(String s)
{ {
if (rinput==null) if (m_rinput==null)
qid = s; m_qid = s;
} // end setPageQID } // end setPageQID
public final void addMetadata(String name, String value)
{
if (m_rinput!=null)
return;
if (m_metadata==null)
m_metadata = new HashMap();
m_metadata.put(name,value);
} // end addMetadata
public final void addHTTPMetadata(String name, String value)
{
if (m_rinput!=null)
return;
if (m_http_metadata==null)
m_http_metadata = new HashMap();
m_http_metadata.put(name,value);
} // end addHTTPMetadata
public final Object getRequestAttribute(String s) public final Object getRequestAttribute(String s)
{ {
return ((rinput==null) ? null : rinput.getRequestAttribute(s)); return ((m_rinput==null) ? null : m_rinput.getRequestAttribute(s));
} // end getRequestAttribute } // end getRequestAttribute
public final String formatDate(Date date) public final String formatDate(Date date)
{ {
return ((html==null) ? null : html.formatDate(date)); return ((m_html==null) ? null : m_html.formatDate(date));
} // end formatDate } // end formatDate
public final CommunityContext getCommunity() public final CommunityContext getCommunity()
{ {
return ((rinput==null) ? null : rinput.getCommunity()); return ((m_rinput==null) ? null : m_rinput.getCommunity());
} // end getCommunity } // end getCommunity
public final String getActivityString(Date date) public final String getActivityString(Date date)
{ {
return ((html==null) ? null : html.getActivityString(date)); return ((m_html==null) ? null : m_html.getActivityString(date));
} // end getActivityString } // end getActivityString

View File

@ -9,32 +9,32 @@
* *
* The Original Code is the Venice Web Communities System. * 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 * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * Copyright (C) 2002-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
*/ */
package com.silverwrist.venice.ui.view; package com.silverwrist.venice.ui.view;
import java.util.Date; import java.util.*;
import javax.servlet.*; import javax.servlet.*;
import com.silverwrist.venice.core.CommunityContext; import com.silverwrist.venice.core.CommunityContext;
import com.silverwrist.venice.ui.*; import com.silverwrist.venice.ui.*;
import com.silverwrist.venice.ui.helpers.HTMLRendering; import com.silverwrist.venice.ui.helpers.HTMLRendering;
import com.silverwrist.venice.ui.servlet.RequestImpl; import com.silverwrist.venice.ui.servlet.RequestImpl;
public class NestedJSPView implements ContentJSP public class NestedJSPView implements ContentJSP, ContentMetadata
{ {
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Attributes * Attributes
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
private Content outer; private Content m_outer; // outer content being rendered
private String jspname; private String m_jspname; // JSP template to be rendered
private RequestInput rinput = null; private RequestInput m_rinput = null; // RequestInput object for use by internal code
private HTMLRendering html = null; private HTMLRendering m_html = null; // HTML rendering helper
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Constructor * Constructor
@ -43,8 +43,8 @@ public class NestedJSPView implements ContentJSP
public NestedJSPView(Content outer, String jspname) public NestedJSPView(Content outer, String jspname)
{ {
this.outer = outer; m_outer = outer;
this.jspname = jspname; m_jspname = jspname;
} // end constructor } // end constructor
@ -55,25 +55,25 @@ public class NestedJSPView implements ContentJSP
public boolean needFrame() public boolean needFrame()
{ {
return outer.needFrame(); return m_outer.needFrame();
} // end needFrame } // end needFrame
public int getMenuSelector() public int getMenuSelector()
{ {
return outer.getMenuSelector(); return m_outer.getMenuSelector();
} // end getMenuSelector } // end getMenuSelector
public String getPageTitle(RequestOutput ro) public String getPageTitle(RequestOutput ro)
{ {
return outer.getPageTitle(ro); return m_outer.getPageTitle(ro);
} // end getPageTitle } // end getPageTitle
public String getPageQID() public String getPageQID()
{ {
return outer.getPageQID(); return m_outer.getPageQID();
} // end getPageQID } // end getPageQID
@ -84,24 +84,47 @@ public class NestedJSPView implements ContentJSP
public String getJSPName() public String getJSPName()
{ {
return jspname; return m_jspname;
} // end getJSPName } // end getJSPName
public void initialize(RequestInput req) public void initialize(RequestInput req)
{ {
rinput = req; m_rinput = req;
html = (HTMLRendering)(req.queryService(HTMLRendering.class)); m_html = (HTMLRendering)(req.queryService(HTMLRendering.class));
} // end initialize } // end initialize
public void terminate(RequestInput req) public void terminate(RequestInput req)
{ {
rinput = null; m_rinput = null;
html = null; m_html = null;
} // end terminate } // end terminate
/*--------------------------------------------------------------------------------
* Implementations from interface ContentMetadata
*--------------------------------------------------------------------------------
*/
public Map getMetadata()
{
if (m_outer instanceof ContentMetadata)
return ((ContentMetadata)m_outer).getMetadata();
else
return Collections.EMPTY_MAP;
} // end getMetadata
public Map getHTTPMetadata()
{
if (m_outer instanceof ContentMetadata)
return ((ContentMetadata)m_outer).getHTTPMetadata();
else
return Collections.EMPTY_MAP;
} // end getHTTPMetadata
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* External operations * External operations
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
@ -109,31 +132,31 @@ public class NestedJSPView implements ContentJSP
public final Content getOuterView() public final Content getOuterView()
{ {
return outer; return m_outer;
} // end getOuterView } // end getOuterView
public final Object getRequestAttribute(String s) public final Object getRequestAttribute(String s)
{ {
return ((rinput==null) ? null : rinput.getRequestAttribute(s)); return ((m_rinput==null) ? null : m_rinput.getRequestAttribute(s));
} // end getRequestAttribute } // end getRequestAttribute
public final String formatDate(Date date) public final String formatDate(Date date)
{ {
return ((html==null) ? null : html.formatDate(date)); return ((m_html==null) ? null : m_html.formatDate(date));
} // end formatDate } // end formatDate
public final CommunityContext getCommunity() public final CommunityContext getCommunity()
{ {
return ((rinput==null) ? null : rinput.getCommunity()); return ((m_rinput==null) ? null : m_rinput.getCommunity());
} // end getCommunity } // end getCommunity
public final String getActivityString(Date date) public final String getActivityString(Date date)
{ {
return ((html==null) ? null : html.getActivityString(date)); return ((m_html==null) ? null : m_html.getActivityString(date));
} // end getActivityString } // end getActivityString

View File

@ -9,95 +9,119 @@
* *
* The Original Code is the Venice Web Communities System. * 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 * 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): * Contributor(s):
*/ */
package com.silverwrist.venice.ui.view; package com.silverwrist.venice.ui.view;
import java.io.IOException; import java.io.IOException;
import java.util.Collections;
import java.util.Map;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import com.silverwrist.venice.core.UserContext; import com.silverwrist.venice.core.UserContext;
import com.silverwrist.venice.except.*; import com.silverwrist.venice.except.*;
import com.silverwrist.venice.ui.*; import com.silverwrist.venice.ui.*;
import com.silverwrist.venice.ui.helpers.HTMLRendering; import com.silverwrist.venice.ui.helpers.HTMLRendering;
public class SideBoxNestedView implements ContentDirect public class SideBoxNestedView implements ContentDirect, ContentMetadata
{ {
private Content inner; /*--------------------------------------------------------------------------------
private Content[] sideboxes; * Attributes
private boolean do_configure; *--------------------------------------------------------------------------------
*/
private Content m_inner; // the inner content object to be displayed
private Content[] m_sideboxes; // the sideboxes to be displayed
private boolean m_configure; // display the sidebox Configure button?
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
public SideBoxNestedView(RequestInput ri, Content inner) throws AccessError, DataException public SideBoxNestedView(RequestInput ri, Content inner) throws AccessError, DataException
{ {
this.inner = inner; m_inner = inner;
this.sideboxes = ri.getSideBoxes(); m_sideboxes = ri.getSideBoxes();
this.do_configure = ri.getUser().isLoggedIn(); m_configure = ri.getUser().isLoggedIn();
} // end constructor } // end constructor
/*--------------------------------------------------------------------------------
* Implementations from interface Content
*--------------------------------------------------------------------------------
*/
public boolean needFrame() public boolean needFrame()
{ {
return inner.needFrame(); return m_inner.needFrame();
} // end needFrame } // end needFrame
public int getMenuSelector() public int getMenuSelector()
{ {
return inner.getMenuSelector(); return m_inner.getMenuSelector();
} // end getMenuSelector } // end getMenuSelector
public String getPageTitle(RequestOutput ro) public String getPageTitle(RequestOutput ro)
{ {
return inner.getPageTitle(ro); return m_inner.getPageTitle(ro);
} // end getPageTitle } // end getPageTitle
public String getPageQID() public String getPageQID()
{ {
return inner.getPageQID(); return m_inner.getPageQID();
} // end getPageQID } // end getPageQID
/*--------------------------------------------------------------------------------
* Implementations from interface ContentDirect
*--------------------------------------------------------------------------------
*/
public void render(RequestOutput out) throws IOException public void render(RequestOutput out) throws IOException
{ {
HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class)); HTMLRendering html = (HTMLRendering)(out.queryService(HTMLRendering.class));
try try
{ // Write out the start of the content structure. { // Write out the start of the content structure.
out.write("<TABLE BORDER=0 ALIGN=CENTER WIDTH=\"100%\" CELLPADDING=4 CELLSPACING=0><TR VALIGN=TOP>\n" out.write("<table border=\"0\" align=\"center\" width=\"100%\" cellpadding=\"4\" cellspacing=\"0\">\n"
+ "<TD ALIGN=LEFT>\n"); + "<tr valign=\"top\"><td align=\"left\">\n");
// Write out the inner content. // Write out the inner content.
out.output(inner); out.output(m_inner);
out.write("</TD>\n<TD ALIGN=CENTER WIDTH=210>\n"); // break to the sidebox column out.write("</td>\n<td align=\"center\" width=\"210\"><table border=\"0\" cellpadding=\"0\" "
+ "cellspacing=\"0\">\n"); // break to the sidebox column
for (int i=0; i<sideboxes.length; i++) for (int i=0; i<m_sideboxes.length; i++)
{ // draw in the outer framework of the current sidebox { // draw in the outer framework of the current sidebox
out.write("<TABLE ALIGN=CENTER WIDTH=200 BORDER=0 CELLPADDING=2 CELLSPACING=0><TR VALIGN=MIDDLE " out.write("<tr valign=\"top\"><td align=\"center\"><table align=\"center\" width=\"200\" border=\"0\" "
+ "BGCOLOR=\"" + html.getColor(html.SIDEBOX_TITLE_BACKGROUND) + "cellpadding=\"2\" cellspacing=\"0\">\n<tr valign=\"middle\" bgcolor=\""
+ "\"><TD ALIGN=LEFT CLASS=\"sideboxtop\">\n" + html.getColor(html.SIDEBOX_TITLE_BACKGROUND) + "\"><td align=\"left\" class=\"sideboxtop\">"
+ html.getFontTag(html.SIDEBOX_TITLE_FOREGROUND,"sidebox-title") + "<B>" + html.getFontTag(html.SIDEBOX_TITLE_FOREGROUND,"sidebox-title") + "<b>"
+ sideboxes[i].getPageTitle(out) + "</B></FONT>\n</TD></TR><TR VALIGN=TOP BGCOLOR=\"" + m_sideboxes[i].getPageTitle(out) + "</b></font></td></tr>\n<tr valign=\"top\" bgcolor=\""
+ html.getColor(html.SIDEBOX_CONTENT_BACKGROUND) + "\"><TD ALIGN=LEFT CLASS=\"sidebox\">\n"); + html.getColor(html.SIDEBOX_CONTENT_BACKGROUND) + "\"><td align=\"left\" class=\"sidebox\">\n");
out.output(sideboxes[i]); // output the sidebox content out.output(m_sideboxes[i]); // output the sidebox content
// close up the framework of this sidebox // close up the framework of this sidebox
out.write("</TD></TR></TABLE><P>\n"); out.write("</td></tr></table></td></tr><tr><td>&nbsp;</td></tr>\n");
} // end for } // end for
if (do_configure) // write the Configure button below the sideboxes if (m_configure) // write the Configure button below the sideboxes
out.write("<A HREF=\"" + html.formatURL("usr/sidebox.js.vs",html.SERVLET) + "\">" out.write("<tr valign=\"middle\"><td align=\"center\"><a href=\""
+ html.getButtonVisual("configure") + "</A>\n"); + html.formatURL("usr/sidebox.js.vs",html.SERVLET) + "\">" + html.getButtonVisual("configure")
+ "</a></td></tr>\n");
// Finish up. // Finish up.
out.write("</TD>\n</TR></TABLE>"); out.write("</table></td>\n</tr></table>");
} // end try } // end try
catch (ServletException se) catch (ServletException se)
@ -108,4 +132,27 @@ public class SideBoxNestedView implements ContentDirect
} // end render } // end render
/*--------------------------------------------------------------------------------
* Implementations from interface ContentMetadata
*--------------------------------------------------------------------------------
*/
public Map getMetadata()
{
if (m_inner instanceof ContentMetadata)
return ((ContentMetadata)m_inner).getMetadata();
else
return Collections.EMPTY_MAP;
} // end getMetadata
public Map getHTTPMetadata()
{
if (m_inner instanceof ContentMetadata)
return ((ContentMetadata)m_inner).getHTTPMetadata();
else
return Collections.EMPTY_MAP;
} // end getHTTPMetadata
} // end class SideBoxNestedView } // end class SideBoxNestedView