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.MimsyDataDTO;
import com.k_int.aggr2.mimsy.data.MimsyPublicationDataDTO;
import com.k_int.aggr2.mimsy.data.conversion.AbstractPublicationFormatConverter;
import com.k_int.mimsy.ref.DataException;

public class RDFPublicationConverter extends AbstractPublicationFormatConverter {

	private Writer writer;
	
	public RDFPublicationConverter(Writer writer)
	{
		this.writer=writer;
	}
	@Override
	protected void convertStringList(String name, Set<String> data)
			throws DataException {
		
		try
		{
			writer.write("<");
			writer.write(name);
			writer.write("Links>");
			Iterator<String> m = data.iterator();
			while(m.hasNext())
			{
				writer.write("<");
				writer.write(name);
				writer.write("Link>");
				convert(name,m.next()); 
				writer.write("</");
				writer.write(name);
				writer.write("Link>");				
			}
			writer.write("</");
			writer.write(name);
			writer.write("Links>");
		}
		catch(Exception e)
		{
			throw new DataException(e);
		}

	}

	@Override
	protected void convert(String elementVal, String val) throws DataException {
		try
		{
			RDFHelper.writeElement(writer,elementVal, null, val);
		}
		catch(Exception e)
		{
			throw new DataException(e);
		}

	}

	@Override
	protected void convertConfAndLastUpdate(MimsyDataDTO data)
			throws DataException {
		try
		{
			RDFHelper.writeConfStatusAndLastUpdate(writer,data);
		}
		catch(Exception e)
		{
			throw new DataException(e);
		}


	}

	@Override
	protected void convertInstructions(Set<InstructionDTO> instructions)
			throws DataException {
		try
		{
			RDFHelper.writeInstructions(writer,instructions);
		}
		catch(Exception e)
		{
			throw new DataException(e);
		}

	}

	@Override
	public void prefix(MimsyPublicationDataDTO data) throws DataException {
		try
        {          
           RDFHelper.writePreamble(writer, "publication", data.getMimsyIdentifier());
        }
        catch(Exception ex)
        {
            throw new DataException(ex);
        }      

	}

	@Override
	public void suffix(MimsyPublicationDataDTO data) throws DataException {
		try
		{
			RDFHelper.writeEndAndFlush(writer, "publication");
		}
		catch(Exception e)
		{
			throw new DataException(e);
		}

	}

}
