devdaily home | apple | java | perl | unix | directory | blog

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

package com.efsol.friki;

import java.util.Map;
import java.util.HashMap;
import java.io.StringReader;
import java.io.Writer;
import java.io.StringWriter;
import java.io.IOException;

import org.stringtree.factory.CachedStringFetcher;
import org.stringtree.factory.StringFetcher;
import org.stringtree.factory.memory.MapStringRepository;
import org.stringtree.template.TemplateEngine;
import org.stringtree.util.tract.Tract;

public class HTMLRenderer implements Renderer
{
	private TemplateEngine engine;
	private ContentFilter filter;
	private StringFetcher templates;
	private String unknown;

	public HTMLRenderer(ContentFilter filter, StringFetcher templates,
		String unknown)
	{
		engine = new TemplateEngine('@');
		this.filter = filter;
		this.templates = new CachedStringFetcher(templates);
		this.unknown = unknown;
	}

	private String convert(String content)
		throws IOException
	{
		StringWriter out = new StringWriter();
		filter.filter(new StringReader(content), out);
		return out.toString();
	}

	private String splitTitle(String name)
	{
		StringBuffer buf = new StringBuffer();
		for (int i = 0; i < name.length(); ++i)
		{
			char c = name.charAt(i);
			if (c == '_')
			{
				buf.append(' ');
			}
			else
			{
				if (i > 0 && Character.isUpperCase(c))
				{
					buf.append(' ');
				}
				buf.append(c);
			}
		}

		return buf.toString();
	}

	private void putDefaultValues(Map map)
	{
		map.put("previous.version", "old/EmptyPage");
		map.put("page.name", "old/EmptyPage");
		map.put("last.edit", "never");
	}

	public void render(Tract page, String mode, Writer out, boolean isFiltered)
		throws IOException
	{
		String content = page.getContent();
		if (isFiltered)
		{
			content = convert(content);
		}

		Map tokens = new HashMap();
		putDefaultValues(tokens);

		tokens.putAll(page);
		tokens.put("CONTENT", content);
		tokens.put("TITLE", splitTitle((String)tokens.get("page.name")));

		String template = templates.get(mode);
		engine.expand(new StringReader(template), out, new MapStringRepository(tokens));
	}
}




Copyright 1998-2008 Alvin Alexander
All Rights Reserved.
 
devdaily.com is based in louisville, kentucky, and this web site is hosted by godaddy.com