package com.k_int.aggr2.mimsy.solr;


import java.util.Properties;

import org.apache.solr.common.SolrInputDocument;

import com.k_int.aggr2.mimsy.data.DataContextDTO;
import com.k_int.aggr2.mimsy.data.GroupHierarchyDTO;
import com.k_int.aggr2.mimsy.data.MimsyAgentDataDTO;
import com.k_int.aggr2.mimsy.data.MimsyCuratedGroupDTO;
import com.k_int.aggr2.mimsy.data.MimsyDataDTO;
import com.k_int.aggr2.mimsy.data.MimsyEventDataDTO;
import com.k_int.aggr2.mimsy.data.MimsyMediaDataDTO;
import com.k_int.aggr2.mimsy.data.MimsyObjectDataDTO;
import com.k_int.aggr2.mimsy.data.MimsyPlaceDataDTO;
import com.k_int.aggr2.mimsy.data.MimsyPublicationDataDTO;
import com.k_int.aggr2.mimsy.data.MimsySiteDataDTO;
import com.k_int.aggr2.mimsy.data.MimsySubjectDataDTO;
import com.k_int.aggr2.mimsy.data.conversion.FormatConverter;
import com.k_int.mimsy.ref.DataException;
import com.k_int.mimsy.ref.MimsyDataTypeEnum;

public class SolrFormatConverter implements FormatConverter<MimsyDataDTO, SolrInputDocument> {

	private SolrInputDocument doc;
	private Properties solr_props;
   
	public SolrFormatConverter(Properties solr_props)
	{
		doc=new SolrInputDocument();
		this.solr_props=solr_props;
	}
	
	@Override
	public SolrInputDocument convert(MimsyDataDTO data) throws DataException {
		if(data.getDataType()==MimsyDataTypeEnum.AGENT)
		{
			SolrAgentConverter  converter = new SolrAgentConverter(doc,solr_props);
			converter.convertMain((MimsyAgentDataDTO)data);
		}
		else if (data.getDataType()==MimsyDataTypeEnum.GROUP)
		{
			SolrCuratedGroupConverter converter = new SolrCuratedGroupConverter(doc,solr_props);
			converter.convertMain((MimsyCuratedGroupDTO)data);
			
		}
		else if (data.getDataType()==MimsyDataTypeEnum.DATA_CONTEXT)
		{
			SolrDataContextConverter converter = new SolrDataContextConverter(doc,solr_props);
			converter.convertMain((DataContextDTO)data);
		}
		else if (data.getDataType()==MimsyDataTypeEnum.EVENT)
		{
			SolrEventConverter converter = new SolrEventConverter(doc,solr_props);
			converter.convertMain((MimsyEventDataDTO) data);
		}
		else if (data.getDataType()==MimsyDataTypeEnum.MEDIA)
		{
			SolrMediaConverter converter = new SolrMediaConverter(doc,solr_props);
			converter.convertMain((MimsyMediaDataDTO) data);
		}	
		else if (data.getDataType()==MimsyDataTypeEnum.OBJECT)
		{
			SolrObjectConverter converter = new SolrObjectConverter(doc,solr_props);
			converter.convertMain((MimsyObjectDataDTO) data);
		}
		else if (data.getDataType()==MimsyDataTypeEnum.PLACE)
		{
			SolrPlaceConverter converter = new SolrPlaceConverter(doc,solr_props);
			converter.convertMain((MimsyPlaceDataDTO) data);
		}
		else if (data.getDataType()==MimsyDataTypeEnum.PUBLICATION)
		{
			SolrPublicationConverter converter = new SolrPublicationConverter(doc,solr_props);
			converter.convertMain((MimsyPublicationDataDTO) data);
		}
		else if (data.getDataType()==MimsyDataTypeEnum.SITE)
		{
			SolrSiteConverter converter = new SolrSiteConverter(doc,solr_props);
			converter.convertMain((MimsySiteDataDTO) data);
		}
		else if (data.getDataType()==MimsyDataTypeEnum.SUBJECT)
		{
			SolrSubjectConverter converter = new SolrSubjectConverter(doc,solr_props);
			converter.convertMain((MimsySubjectDataDTO) data);
		}
		else if (data.getDataType()==MimsyDataTypeEnum.HIERARCHY)
		{
			SolrHierarchyConverter converter = new SolrHierarchyConverter(doc,solr_props);
			converter.convertMain((GroupHierarchyDTO) data);
		}
		else
			throw new DataException("No solr converter for data "+data.getClass());
		
		return doc;
	}

}
