/*
* Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: StateStoreTools.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.engine;
import com.uwyn.rife.engine.exceptions.EngineException;
public abstract class StateStoreTools
{
private final static String HTML_PART1 = "<input name=\"";
private final static String HTML_PART2 = "\" type=\"hidden\" value=\"";
private final static String HTML_PART3 = "\" />";
private final static String JAVASCRIPT_PART1 = appendJavascriptAsciiArray(new StringBuilder(), HTML_PART1).toString();
private final static String JAVASCRIPT_PART2 = appendJavascriptAsciiArray(new StringBuilder(), HTML_PART2).toString();
private final static String JAVASCRIPT_PART3 = appendJavascriptAsciiArray(new StringBuilder(), HTML_PART3).toString();
public static void appendJavascriptHeader(StringBuilder state)
throws EngineException
{
state.append("<script type=\"text/javascript\">\n");
state.append("{\n");
state.append("var part1 = ");
state.append(JAVASCRIPT_PART1);
state.append("; ");
state.append("var part2 = ");
state.append(JAVASCRIPT_PART2);
state.append("; ");
state.append("var part3 = ");
state.append(JAVASCRIPT_PART3);
state.append("; ");
state.append("var state = ''; ");
state.append("var intArrayToString = function(intArray) { ");
state.append(" var result = ''; ");
state.append(" for (var i = 0; i < intArray.length; i++) result += String.fromCharCode(intArray[i]); ");
state.append(" return result; ");
state.append("}; ");
}
public static void appendHtmlHiddenParam(StringBuilder state, CharSequenceDeferred deferred, String name, String value)
throws EngineException
{
state.append(HTML_PART1);
state.append(deferred.encode(name));
state.append(HTML_PART2);
state.append(deferred.encode(value));
state.append(HTML_PART3);
}
public static StringBuilder appendJavascriptAsciiArray(StringBuilder state, String value)
{
if (null == value)
{
state.append("[]");
}
char seperator = ',';
int current_index = 0;
state.append("[");
while (current_index < value.length() - 1)
{
state.append((int)value.charAt(current_index));
state.append(seperator);
current_index++;
}
state.append((int)value.charAt(current_index));
state.append("]");
return state;
}
public static void appendJavascriptHiddenParam(StringBuilder state, String name, String value)
throws EngineException
{
state.append("state += intArrayToString(part1); ");
state.append("state += intArrayToString(");
appendJavascriptAsciiArray(state, name);
state.append("); ");
state.append("state += intArrayToString(part2); ");
state.append("state += intArrayToString(");
appendJavascriptAsciiArray(state, value);
state.append("); ");
state.append("state += intArrayToString(part3); ");
}
public static void appendJavascriptFooter(StringBuilder state)
throws EngineException
{
state.append("document.write(state);\n");
state.append("}\n");
state.append("</script>");
}
}