/*
 * Created on Sep 29, 2005
 *
 * The corresponding entry for this in MessageFields.xml is something like this:
  	<MessageField>
		<Name>BodyDollar</Name>
		<DataTypeClassName>java.lang.String</DataTypeClassName>
		<FetchingClassName>com.extrememessaging.ResponseMaster.example.ExampleMessageField</FetchingClassName>
		<Parameter/>
		<NotNull>0</NotNull>
		<ConstantLength>0</ConstantLength>
		<DefaultLength>250</DefaultLength>
		<ExcludeFromFieldList>0</ExcludeFromFieldList>
	</MessageField>
 */
package com.extrememessaging.ResponseMaster.example;

import javax.mail.Message;

import com.extrememessaging.ResponseMaster.CMessage;
import com.extrememessaging.ResponseMaster.CMonitorManager;
import com.extrememessaging.ResponseMaster.InvalidMessageFieldName;
import com.extrememessaging.ResponseMaster.ResponseMasterException;
import com.extrememessaging.ResponseMaster.eMessageFields;
import com.extrememessaging.ResponseMaster.MessageFields.IMessageField;

/**
 * Example message field that replaces all the letter 's's in the body with $ signs 
 */
public class ExampleMessageField implements IMessageField 
{
	private String _value=null;
	private CMessage _cmsg=null;
	private boolean _GotValue=false;
	
	public Object GetValue() 
	{
		try
		{
			if (_GotValue)
			{
				return _value;
			}
	
			String fieldValue = _cmsg.getField(eMessageFields.GetMessageFieldIdFromName("Body"),false,false);

			if (fieldValue==null)
			{
				_value=null;
			}
			else
			{
				_value=fieldValue.replace('s','$').replace('S','$');
			}
	    	_GotValue=true;
	        return _value;
		}
		catch (Exception e)
		{
			String sMessage="Error extracting example field";
			CMonitorManager.LogError(sMessage,e);
			_cmsg.SetField("FieldExtractionError",sMessage + ", error=" + e.toString()); //if the field doesn't exist, that is ok.
			return null;
		}
	}

	public void SetValue(Object newValue)
	{
		_GotValue=true;
		if (newValue==null)
		{
			_value=null;
			return;
		}
		_value=newValue.toString();
	}
	
	public void PassMessages(CMessage parentMessage, Message javaMailMsg) 
	{
		_cmsg=parentMessage;
	}

	public void Verify() 
		throws InvalidMessageFieldName
    {
		//be sure the Body field exists
		eMessageFields.GetMessageFieldIdFromName("Body");
	}

	public void Initialize(String Parameter) 
		throws ResponseMasterException 
	{
	}

	public void Shutdown() 
	{
		//do nothing
	}
}
