revamped the post box tag to use a Velocity template to render with

This commit is contained in:
Eric J. Bowersox 2004-07-26 07:00:26 +00:00
parent 7d3c167733
commit 7060b5ff76
5 changed files with 238 additions and 103 deletions

View File

@ -19,11 +19,13 @@ package com.silverwrist.venice.ui.conf.jsp;
import java.io.IOException;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import org.apache.log4j.*;
import com.silverwrist.venice.ui.*;
import com.silverwrist.venice.ui.helpers.HTMLRendering;
import com.silverwrist.venice.ui.velocity.*;
public class PostBoxTag extends VeniceConfBodyTagSupport
{
@ -41,17 +43,9 @@ public class PostBoxTag extends VeniceConfBodyTagSupport
private String m_action = null;
private String m_type = "servlet";
private int m_real_type = -1;
private HashMap m_params = new HashMap();
private String m_newtopic_name = null;
private String m_newtopic_value = null;
private String m_pseud_name = null;
private String m_pseud_value = null;
private String m_attach_name = null;
private boolean m_attach_value = false;
private String m_text_name = null;
private String m_text_value = null;
private ArrayList m_buttons = new ArrayList();
private HashMap m_params = null;
private ArrayList m_buttons = null;
private HashMap m_render_data = null;
/*--------------------------------------------------------------------------------
* Overrides from class BodyTagSupport
@ -65,9 +59,15 @@ public class PostBoxTag extends VeniceConfBodyTagSupport
if (m_action==null)
throw new JspTagException("<post:box/> action= attribute not specified!");
HTMLRendering html = (HTMLRendering)(getRequestInput().queryService(HTMLRendering.class));
m_real_type = html.convertLinkType(m_type);
if (m_real_type<0)
if (html.convertLinkType(m_type)<0)
throw new JspTagException("<post:box/> type= attribute not a valid link type");
m_render_data = new HashMap();
m_params = new HashMap();
m_buttons = new ArrayList();
m_render_data.put("action",m_action);
m_render_data.put("action_type",m_type);
m_render_data.put("params",m_params);
m_render_data.put("buttons",m_buttons);
return EVAL_BODY_BUFFERED;
} // end doStartTag
@ -84,97 +84,37 @@ public class PostBoxTag extends VeniceConfBodyTagSupport
{
if (logger.isDebugEnabled())
logger.debug("PostBoxTag.doEndTag(): entry");
if (m_pseud_name==null)
if (!(m_render_data.containsKey("pseud_name")))
throw new JspTagException("<post:box/> tag has no <post:pseud/> tag inside it!");
if (m_attach_name==null)
if (!(m_render_data.containsKey("attach_name")))
throw new JspTagException("<post:box/> tag has no <post:attach/> tag inside it!");
if (m_text_name==null)
if (!(m_render_data.containsKey("text_name")))
throw new JspTagException("<post:box/> tag has no <post:text/> tag inside it!");
if (m_buttons.isEmpty())
throw new JspTagException("<post:box/> tag has no <post:button/> tags inside it!");
HTMLRendering html = (HTMLRendering)(getRequestOutput().queryService(HTMLRendering.class));
try
{ // write out what we came here to accomplish
{ // render this as a template
JspWriter out = pageContext.getOut();
out.write("<form method=\"POST\" action=\"" + html.formatURL(m_action,m_real_type)
+ "\"><div class=\"content\">\n");
Iterator it = m_params.entrySet().iterator();
while (it.hasNext())
{ // write the hidden parameters
Map.Entry ntry = (Map.Entry)(it.next());
out.write("<input type=\"hidden\" name=\"" + ntry.getKey() + "\" value=\"" + ntry.getValue()
+ "\" />\n");
} // end while
String my_font = html.getFontTag(html.CONTENT_FOREGROUND,"content");
out.write("<table border=\"0\" cellpadding=\"0\">\n");
if (m_newtopic_name!=null)
{ // write the "new topic name" field
out.write("<tr><td align=\"left\" colspan=\"2\" class=\"content\">\n"
+ my_font + "New topic name:</font><br />\n<span class=\"cinput\">"
+ "<input type=\"text\" class=\"cinput\" name=\"" + m_newtopic_name
+ "\" size=\"37\" maxlength=\"128\" VALUE=\"");
if (m_newtopic_value!=null)
out.write(m_newtopic_value);
out.write("\" /></span>\n</td></tr>\n");
} // end if
out.write("<tr><td align=\"left\" colspan=\"2\" class=\"content\">\n"
+ my_font + "Your name/header:</font><br/>\n<span class=\"cinput\">"
+ "<input type=\"text\" class=\"cinput\" name=\"" + m_pseud_name
+ "\" size=\"37\" maxlength=\"255\" value=\"");
if (m_pseud_value!=null)
out.write(m_pseud_value);
out.write("\" /></span>\n" + my_font + "<input type=\"checkbox\" name=\"" + m_attach_name
+ "\" value=\"Y\"");
if (m_attach_value)
out.write(" checked=\"checked\"");
out.write(" /> Attach a file</font>\n</td></tr>\n<tr>\n<td align=\"left\" class=\"content\">\n"
+ my_font + "Message:</font>\n</td>\n<td align=\"right\" class=\"content\">" + my_font
+ "\n<a href=\"" + html.getExternalStaticPath("html-reference.html")
+ "\" target=\"_blank\">HTML Guide</a>\n</font></td>\n</tr>\n<tr>"
+ "<td align=\"left\" colspan=\"2\" class=\"cinput\">\n<textarea name=\"" + m_text_name
+ "\" wrap=\"soft\" rows=\"7\" cols=\"51\">");
if (m_text_value!=null)
out.write(m_text_value);
out.write("</textarea>\n</td></tr>\n<tr><td align=\"center\" colspan=\"2\" class=\"content\">\n");
boolean first = true;
it = m_buttons.iterator();
while (it.hasNext())
{ // write out all the buttons
String id = (String)(it.next());
if (first)
first = false;
else
out.write("&nbsp;");
out.write(html.getButtonInput(id) + "\n");
} // end while
out.write("</td></tr>\n</table>\n</div></form>\n");
VelocityRenderer vr = VelocityRenderer.get(pageContext.getServletContext());
vr.formatTemplate("conf/post_box.vm",new ParamMapWrapper(m_render_data),getRequestOutput(),out);
} // end try
catch (IOException e)
{ // convert the I/O error into something the servlet engine can deal with
throw new JspTagException("error writing post box - " + e.getMessage());
} // end catch
catch (ServletException e)
{ // convert the I/O error into something the servlet engine can deal with
throw new JspTagException("error writing post box - " + e.getMessage());
} // end catch
// anything set by subtags must be cleared in doEndTag, not release
m_params.clear();
m_newtopic_name = null;
m_newtopic_value = null;
m_pseud_name = null;
m_pseud_value = null;
m_attach_name = null;
m_attach_value = false;
m_text_name = null;
m_text_value = null;
m_buttons.clear();
m_render_data = null;
m_params = null;
m_buttons = null;
return EVAL_PAGE;
} // end doEndTag
@ -186,7 +126,6 @@ public class PostBoxTag extends VeniceConfBodyTagSupport
super.release();
m_action = null;
m_type = "servlet";
m_real_type = -1;
} // end release
@ -204,7 +143,6 @@ public class PostBoxTag extends VeniceConfBodyTagSupport
public void setType(String v)
{
m_type = v;
m_real_type = -1;
} // end setType
@ -213,8 +151,10 @@ public class PostBoxTag extends VeniceConfBodyTagSupport
*--------------------------------------------------------------------------------
*/
final void addParam(String name, String value)
final void addParam(String name, String value) throws JspException
{
if (m_params==null)
throw new JspTagException("addParam() called at wrong time!");
if (logger.isDebugEnabled())
logger.debug("PostBoxTag.addParam(\"" + name + "\",\"" + value + "\") entry");
m_params.put(name,value);
@ -223,54 +163,64 @@ public class PostBoxTag extends VeniceConfBodyTagSupport
final void setNewTopic(String param_name, String value) throws JspException
{
if (m_newtopic_name!=null)
if (m_render_data==null)
throw new JspTagException("setNewTopic() called at wrong time!");
if (m_render_data.containsKey("newtopic_name"))
throw new JspTagException("<post:newtopic/> may only appear once inside a <post:box/>!");
if (param_name==null)
throw new JspTagException("<post:newtopic/> parameter name not specified!");
m_newtopic_name = param_name;
m_newtopic_value = value;
m_render_data.put("newtopic_name",param_name);
m_render_data.put("newtopic_value",value);
} // end setNewTopic
final void setPseud(String param_name, String value) throws JspException
{
if (m_render_data==null)
throw new JspTagException("setPseud() called at wrong time!");
if (logger.isDebugEnabled())
logger.debug("PostBoxTag.setPseud(\"" + param_name + "\",\"" + value + "\") entry");
if (m_pseud_name!=null)
if (m_render_data.containsKey("pseud_name"))
throw new JspTagException("<post:pseud/> may only appear once inside a <post:box/>!");
if (param_name==null)
throw new JspTagException("<post:pseud/> parameter name not specified!");
m_pseud_name = param_name;
m_pseud_value = value;
m_render_data.put("pseud_name",param_name);
m_render_data.put("pseud_value",value);
} // end setPseud
final void setAttach(String param_name, boolean value) throws JspException
{
if (m_attach_name!=null)
if (m_render_data==null)
throw new JspTagException("setAttach() called at wrong time!");
if (m_render_data.containsKey("attach_name"))
throw new JspTagException("<post:attach/> may only appear once inside a <post:box/>!");
if (param_name==null)
throw new JspTagException("<post:attach/> parameter name not specified!");
m_attach_name = param_name;
m_attach_value = value;
m_render_data.put("attach_name",param_name);
m_render_data.put("attach_value",(value ? Boolean.TRUE : Boolean.FALSE));
} // end setAttach
final void setText(String param_name, String value) throws JspException
{
if (m_render_data==null)
throw new JspTagException("setText() called at wrong time!");
if (logger.isDebugEnabled())
logger.debug("PostBoxTag.setText(\"" + param_name + "\",<value>) entry");
if (m_text_name!=null)
if (m_render_data.containsKey("text_name"))
throw new JspTagException("<post:text/> may only appear once inside a <post:box/>!");
if (param_name==null)
throw new JspTagException("<post:text/> parameter name not specified!");
m_text_name = param_name;
m_text_value = value;
m_render_data.put("text_name",param_name);
m_render_data.put("text_value",value);
} // end setText
final void addButton(String id)
final void addButton(String id) throws JspException
{
if (m_buttons==null)
throw new JspTagException("addButton() called at wrong time!");
m_buttons.add(id);
} // end addButton

View File

@ -0,0 +1,70 @@
/*
* 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.velocity;
import java.util.*;
public final class ParamMapWrapper implements VelocitySupplyParams
{
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
*/
private Map m_map;
/*--------------------------------------------------------------------------------
* Constructor
*--------------------------------------------------------------------------------
*/
public ParamMapWrapper(Map map)
{
m_map = map;
} // end constructor
/*--------------------------------------------------------------------------------
* Implementations from interface VelocitySupplyParams
*--------------------------------------------------------------------------------
*/
/**
* Returns the value of a parameter set on the object.
*
* @param key The name of the parameter to look up.
* @return The parameter's value, or <code>null</code> if the parameter was not set.
*/
public Object getParameter(String key)
{
return m_map.get(key);
} // end getParameter
/**
* Returns a <code>java.util.Collection</code> of all parameter names currently defined on this object.
*
* @return A collection of all parameter names currently defined.
*/
public Collection getParameterNames()
{
return m_map.keySet();
} // end getParameterNames
} // end class ParamMapWrapper

View File

@ -54,4 +54,46 @@ public class StdObject
} // end formatURL
public String fontTag(String color, String size)
{
if (m_html==null)
m_html = (HTMLRendering)(m_rout.queryService(HTMLRendering.class));
return m_html.getFontTag(color.trim(),size.trim());
} // end fontTag
public String externalStatic(String path)
{
if (m_html==null)
m_html = (HTMLRendering)(m_rout.queryService(HTMLRendering.class));
return m_html.getExternalStaticPath(path);
} // end externalStatic
public String button(String id, String type)
{
if (m_html==null)
m_html = (HTMLRendering)(m_rout.queryService(HTMLRendering.class));
id = id.trim().toLowerCase();
type = type.trim().toLowerCase();
if (type.equals("visual"))
return m_html.getButtonVisual(id);
else if (type.equals("input"))
return m_html.getButtonInput(id);
else
return "";
} // end button
public String comment(String data)
{
if (m_html==null)
m_html = (HTMLRendering)(m_rout.queryService(HTMLRendering.class));
if (m_html.useHTMLComments())
return "<!-- " + data + " -->";
else
return "";
} // end comment
} // end class StdObject

View File

@ -18,3 +18,11 @@
## Define macros around the "std" object.
#macro( formatURL $type $url )$std.formatURL($type,$url)#end
#macro( font $color $size )$std.fontTag($color,$size)#end
#macro( externalStatic $p )$std.externalStatic($p)#end
#macro( button $id $typ )$std.button($id,$typ)#end
#macro( comment $d )$std.comment($d)#end

View File

@ -0,0 +1,65 @@
#*
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):
*#
## Render the post box.
#set( $html_reference = "html-reference.html" )
#comment( "BEGIN POST BOX" )
<form method="POST" action="#formatURL( $action $action_type )"><div class="content">
#foreach( $pn in $params.keySet() )
<input type="hidden" name="$pn" value="$!{params.get($pn)}" />
#end
<table border="0" cellpadding="0">
#if( $newtopic_name )
<tr><td align="left" colspan="2" class="content">
#font( "content.fg" "content" )New topic name:</font><br />
<span class="cinput"><input type="text" class="cinput" name="$newtopic_name"
size="37" maxlength="128" value="$!newtopic_value" /></span>
</td></tr>
#end
<tr><td align="left" colspan="2" class="content">
#font( "content.fg" "content" )Your name/header:</font><br />
<span class="cinput"><input type="text" class="cinput" name="$pseud_name"
size="37" maxlength="255" value="$!pseud_value" /></span>
#font( "content.fg" "content" )<input type="checkbox"
name="$attach_name"
#if( $attach_value )checked="checked"#end
value="Y" /> Attach a file</font>
</td></tr>
<tr>
<td align="left" class="content">#font( "content.fg" "content" )Message:</font></td>
<td align="right" class="content">#font( "content.fg" "content" )
<a href="#externStatic( $html_reference )" target="_blank">HTML Guide</a>
</font></td>
</tr>
<tr><td align="left" colspan="2" class="cinput">
<textarea name="$text_name" wrap="soft" rows="7" cols="51">$!text_value</textarea>
</td></tr>
<tr><td align="center" colspan="2" class="content">
#set( $first = 1 )
#foreach( $bn in $buttons )
#if( $first == 1 )
#set( $first = 0 )
#else
&nbsp;
#end
#button( $bn "input" )
#end
</td></tr>
</table>
</div></form>
#comment( "END POST BOX" )
## -- EOF --