package com.k_int.aggr2.mimsy.rdf;

import java.io.Writer;
import java.util.Iterator;
import java.util.Set;

import com.k_int.aggr2.mimsy.data.InstructionDTO;
import com.k_int.aggr2.mimsy.data.MimsyAgentDataDTO;
import com.k_int.aggr2.mimsy.data.MimsyDataDTO;
import com.k_int.aggr2.mimsy.data.TextTypePairDTO;
import com.k_int.aggr2.mimsy.data.conversion.AbstractAgentFormatConverter;
import com.k_int.mimsy.ref.DataException;

public class RDFAgentConverter extends AbstractAgentFormatConverter 
{
	private Writer writer;
	
	public RDFAgentConverter(Writer writer)
	{
		this.writer=writer;
	}

	protected void convertVariations(Set<TextTypePairDTO> variations) throws DataException
	{
		 if(variations.size()>0)
		 {
			 try
			 {
	        	writer.write("<mo:variationLinks>");
	        	Iterator<TextTypePairDTO> i = variations.iterator();
	        	while(i.hasNext())
	        	{
	        		writer.write("<mo:variationLink>");
	        		TextTypePairDTO pair = i.next();
	        		convert("mo:variation",pair.getText());
	        		String type="undefined";
	        		if(pair.getType()!=null)
	        			type=pair.getType();
	        		convert("mo:variationType",type);
	        	
	        		writer.write("</mo:variationLink>");
	        	}
	        	writer.write("</mo:variationLinks>");
			 }
			 catch(Exception e)
			 {
				 throw new DataException(e);
			 }
        	
		 }

	}

	protected void convert(String elementVal, String val) throws DataException
	{
		try
		{
			RDFHelper.writeElement(writer,elementVal, null, val);
		}
		catch(Exception e)
		{
			throw new DataException(e);
		}
	}

	
	protected void convertConfAndLastUpdate(MimsyDataDTO data) throws DataException
	{
		try
		{
			RDFHelper.writeConfStatusAndLastUpdate(writer,data);
		}
		catch(Exception e)
		{
			throw new DataException(e);
		}
	}

	
	protected void convertInstructions(Set<InstructionDTO> instructions) throws DataException
	{
		try
		{
			RDFHelper.writeInstructions(writer,instructions);
		}
		catch(Exception e)
		{
			throw new DataException(e);
		}
	}

	
	public void prefix(MimsyAgentDataDTO data) throws DataException 
	{
		try
        {          
           RDFHelper.writePreamble(writer, "agent", data.getMimsyIdentifier());
        }
        catch(Exception ex)
        {
            throw new DataException(ex);
        }         
		
	}

	
	public void suffix(MimsyAgentDataDTO data) throws DataException 
	{
		try
		{
			RDFHelper.writeEndAndFlush(writer, "agent");
		}
		catch(Exception e)
		{
			throw new DataException(e);
		}
	}
}
