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.MimsyPlaceDataDTO;
import com.k_int.aggr2.mimsy.data.PlaceVariationDTO;
import com.k_int.aggr2.mimsy.data.conversion.AbstractPlaceFormatConverter;
import com.k_int.mimsy.ref.DataException;

public class RDFPlaceConverter extends AbstractPlaceFormatConverter {

	private Writer writer;
	
	public RDFPlaceConverter(Writer writer)
	{
		this.writer=writer;
	}
	@Override
	public void convertVariations(Set<PlaceVariationDTO> variations) throws DataException {
		if(variations.size()==0)
			return;
		try
		{
        	writer.write("<mo:variationLinks>");
        	Iterator<PlaceVariationDTO> i = variations.iterator();
        	while(i.hasNext())
        	{
        		writer.write("<mo:variationLink>");
        		PlaceVariationDTO pair = i.next();
        		convert("mo:variation",pair.getText());
        		String type="undefined";
        		if(pair.getType()!=null)
        			type=pair.getType();
        		convert("mo:variationType",type);
        	
        		type="undefined";
        		if(pair.getNote()!=null)
        			type=pair.getNote();
        		convert("mo:variationNote",type);
        		type="undefined";
        		if(pair.getStart()!=null)
        			type=pair.getStart();
        		convert("mo:variationStart",type);
        		type="undefined";
        		if(pair.getEnd()!=null)
        			type=pair.getEnd();
        		convert("mo:variationEnd",type);        	
        		writer.write("</mo:variationLink>");
        	}
        	writer.write("</mo:variationLinks>");
        }
		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(MimsyPlaceDataDTO data) throws DataException {
		try
        {          
           RDFHelper.writePreamble(writer, "place", data.getMimsyIdentifier());
        }
        catch(Exception ex)
        {
            throw new DataException(ex);
        }      

	}

	@Override
	public void suffix(MimsyPlaceDataDTO data) throws DataException {
		try
		{
			RDFHelper.writeEndAndFlush(writer, "place");
		}
		catch(Exception e)
		{
			throw new DataException(e);
		}

	}

}
