/*
 * LegacyTemplateProcessor.java
 *
 * Created on 13 June 2002, 15:42
 */

package org.bodington.servlet.template;

import org.bodington.servlet.*;
import org.bodington.servlet.facilities.*;
import java.util.*;

/**
 *
 * @author  bmb6jrm
 * @version
 */
public abstract class LegacyTemplateProcessor extends XmlTemplateProcessor
{
    
    /** Creates new LegacyTemplateProcessor */
    public LegacyTemplateProcessor()
    {
    }
    
    
    protected void insertInteractive(
    org.bodington.servlet.Request request, java.io.PrintWriter writer, java.util.Hashtable attributes )
    throws java.io.IOException, javax.servlet.ServletException
    {
	Facility facility = request.getFacility();
	
	request.setInsertAttributes( attributes );
	
	if ( request.getInsertCommand()==null )
	{
	    writer.println( "<! invalid BUILDING tag>" );
	    return;
	}
	
	try
	{
	    facility.insert( request, writer, request.getInsertCommand(), request.getInsertName() );
	}
	catch ( RuntimeException runex )
	{
	    facility.logException( writer, "BuildingServlet", "insertInteractive",
	    "Technical error trying to insert iteractive item.",
	    runex );
	}
	
    }
    
    protected void insertModifiedTag(
    org.bodington.servlet.Request request, java.io.PrintWriter writer, java.util.Hashtable table,
    String tag, String attribute )
    {
	writer.print( "<" );
	writer.print( tag );
	
	Enumeration enum = table.keys();
	String key, value, source;
	Template imgtplate = null;
	int a, b;
	
	while ( enum.hasMoreElements() )
	{
	    writer.print( " " );
	    
	    key = (String)enum.nextElement();
	    value = (String)table.get( key );
	    
	    //Logger.getLogger( "org.bodington" ).fine( "TAG = [" + key + "] value = [" + value + "]" );
	    
	    if ( key.equalsIgnoreCase( attribute ) )
	    {
		writer.print( attribute );
		try
		{
		    if ( value.startsWith( "bs_template_" ) ||
		    value.startsWith( "\"bs_template_" )    )
		    {
			a = value.startsWith( "\"" )?13:12;
			b = value.endsWith( "\"" )?(value.length()-1):value.length();
			
			imgtplate = Template.get( request.getFacility().facilityname,
			request.getResource().getImplicitHttpUIStyle(),
			request.getResource().getResourceId(),
			value.substring( a, b ) );
			if ( imgtplate != null )
			{
			    //Logger.getLogger( "org.bodington" ).fine( "Template found." );
			    if ( imgtplate.isRedirected() )
			    {
				value = request.getContextPath() + "/templates" + imgtplate.getUrl();
				//Logger.getLogger( "org.bodington" ).fine( "Template is redirected to " + value );
			    }
			}
		    }
		}
		catch ( Exception ex )
		{
		    value = (String)table.get( key );
		}
	    }
	    else
	    {
		writer.print( key.toLowerCase() );
	    }
	    
	    writer.print( "=\"" );
	    writer.print( value );
            writer.print( "\"" );
	}
	writer.print( ">" );
    }
    
    
    public abstract void process(org.bodington.servlet.Request request, org.bodington.servlet.Response response)
    throws java.io.IOException, javax.servlet.ServletException;
    
}
