/*
* FormClientTemplate.java
*
* Brazil project web application toolkit,
* export version: 2.3
* Copyright (c) 1998-2008 Sun Microsystems, Inc.
*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License Version
* 1.0 (the "License"). You may not use this file except in compliance with
* the License. A copy of the License is included as the file "license.terms",
* and also available at http://www.sun.com/
*
* The Original Code is from:
* Brazil project web application toolkit release 2.3.
* The Initial Developer of the Original Code is: suhler.
* Portions created by suhler are Copyright (C) Sun Microsystems, Inc.
* All Rights Reserved.
*
* Contributor(s): cstevens, rinaldo, suhler.
*
* Version: 2.2
* Created by suhler on 98/10/27
* Last modified by suhler on 08/03/04 10:56:26
*
* Version Histories:
*
* 2.2 08/03/04-10:56:26 (suhler)
* javadoc fixes
*
* 2.1 02/10/01-16:36:43 (suhler)
* version change
*
* 1.14 02/07/24-10:46:53 (suhler)
* doc updates
*
* 1.13 02/05/01-11:27:24 (suhler)
* fix sccs version info
*
* 1.12 02/04/25-13:43:04 (suhler)
* doc fixes
*
* 1.11 00/12/11-20:25:48 (suhler)
* doc changes
*
* 1.10 00/12/11-13:29:49 (suhler)
* add class=props for automatic property extraction
*
* 1.9 00/05/31-13:49:04 (suhler)
* name change
*
* 1.8 00/04/26-16:08:18 (suhler)
* added documentation
*
* 1.7 99/10/21-18:08:41 (cstevens)
* Added ability to change a tag into a comment. Used by BSL and Tcl templates,
* to keep track of where the substitution occurred when examining the resultant
* HTML document.
*
* 1.6 99/09/29-16:05:04 (cstevens)
* New HtmlRewriter object, that allows arbitrary rewriting of the HTML (by
* templates and others), instead of forcing the templates to return a string
* that contained all of the new HTML content in one big string.
*
* 1.5 99/05/24-10:14:07 (suhler)
* - better documentation
* - added and processing
*
* 1.4 99/03/30-09:34:10 (suhler)
* documentation update
*
* 1.3 98/11/10-13:46:38 (suhler)
* Merged changes between child workspace "/home/suhler/naws" and
* parent workspace "/net/smartcard.eng/export/ws/brazil/naws".
*
* 1.1.1.2 98/11/10-13:33:54 (suhler)
* added an option to to provied default values
*
* 1.2 98/11/10-13:21:30 (rinaldo)
*
* 1.1.1.1 98/11/08-11:36:40 (suhler)
* added processing
*
* 1.2 98/10/27-14:32:47 (Codemgr)
* SunPro Code Manager data about conflicts, renames, etc...
* Name history : 2 1 handlers/templates/FormClientTemplate.java
* Name history : 1 0 templates/FormClientTemplate.java
*
* 1.1 98/10/27-14:32:46 (suhler)
* date and time created 98/10/27 14:32:46 by suhler
*
*/
package sunlabs.brazil.template;
import java.util.Hashtable;
import sunlabs.brazil.server.Server;
/**
* [Deprecated, use the FormTemplate and SetTemplate instead]
* SAMPLE Template class for substituting Default values into html forms
* The data is retrieved from the client, and sent back to
* the client later on. This will be used for e-business cards
* stored on java rings/cards. This template also incorporates the functionallity
* of the PropsTemplate, as the current scheme doesn't allow composition of
* template handler classes (at least for now).
*
* If a URL contains query data, and the value of the server
* property "uploadContains" occurs in the URL, then all of the query data
* is saved in the server on behalf of the client. IF no "uploadContains"
* string is set, all query data is saved on the server.
*
* The following Html entities processed by this class:
*
*
input
*
if the "name" attribute has saved data, the value attribute is
* replaced by the caved value. This allows default form values to be
* replaced by previous data submitted to the server by the client.
*
property
*
This tag is replaced by the value of a server property.
*
subst
*
This tag is replaced by the value previously uploaded to the the
* server from the client for this value.
*
tag, /tag
*
Inserts a "<" or ">" respectively, allowing parameters to
* be substituted inside of other entities. For example, suppose
* the client uploaded the value HOME as
* http://my.home.com/, and the server withes to create a
* link to that page. The template fragment:
* "<a href=<subst HOME>gt;
* won't work, as nested entities are not allowed. Instead, try:
* "<tag>a href=<subst HOME>lt;tag>
*
*
* @author Stephen Uhler
* @version @(#)FormClientTemplate.java 2.2
*/
public class FormClientTemplate
extends Template
{
Hashtable data; // data sent from client, to be stored on server
String uploadUrl; // url's to upload data must contain this string
static final String UPLOAD = "uploadContains";
public
FormClientTemplate()
{
data = new Hashtable();
}
/**
* Save a reference to our request properties.
* If the URL contains the upload string, save all of the query
* parameters on behalf of the user.
*/
public boolean
init(RewriteContext hr)
{
uploadUrl = hr.request.props.getProperty(hr.prefix + UPLOAD, "");
log(hr, "Upload url: " + uploadUrl);
/*
* If this is an "upload" url, save the data, and ignore the rest
* of the request. I'm not sure how to identify upload url's yet.
* For now, anything that has query data??
*/
if (hr.request.url.indexOf(uploadUrl) != -1) {
data = hr.request.getQueryData(data);
log(hr, "saving data for: " + hr.request.url);
}
log(hr, "data for: " + hr.request.url + ": " + data);
return true;
}
/**
* Look for , and replace the
* value with the entry in the previously saved client data.
* @param hr The rewrite Context
*/
public void
tag_input(RewriteContext hr)
{
String name = hr.get("name");
if (name == null) {
return;
}
String value = (String) data.get(name);
if (value == null) {
return;
}
hr.put("value", value);
}
/**
* Convert the html tag "property" in to the request's property.
* @param hr The rewrite context
*/
public void
tag_property(RewriteContext hr)
{
String name = hr.getArgs();
String value = null;
if (name.indexOf('=') >= 0) {
name = hr.get("name");
value = hr.get("default");
}
hr.append(hr.request.props.getProperty(name, value));
}
/**
* Tag to do substitution of previously uploaded data.
* @param hr The rewrite context.
*/
public void
tag_subst(RewriteContext hr)
{
String name = hr.getArgs();
String value = null;
if (name.indexOf('=') >= 0) {
name = hr.get("name");
value = hr.get("default");
}
String result = (String) data.get(name);
if (result == null) {
result = value;
}
hr.append(result);
}
/**
* Using the current scheme, there is no easy way to substitute into
* a tag parameter. So we'll invent a "magic" tag (called tag)
* that will allow us to create entities dynamically
*/
public void
tag_tag(RewriteContext hr)
{
hr.append("<");
}
public void
tag_slash_tag(RewriteContext hr)
{
hr.append(">");
}
/**
* simple interface to server logging
*/
private void
log(RewriteContext hr, String msg) {
hr.request.log(Server.LOG_DIAGNOSTIC,
hr.prefix + "formClientTemplate: " + msg);
}
}