package eu.dnetlib.functionality.index.solr;

import java.io.IOException;

import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.schema.IndexSchema;

import eu.dnetlib.functionality.index.cql.CqlValueTransformerMap;
import eu.dnetlib.functionality.index.solr.cql.SolrTypeBasedCqlValueTransformerMapFactory;

public class SolrIndex {
	private LocalIndexServer server;
	private String dsId;
	private IndexSchema indexSchema;
	private boolean isFeeding;
	private SolrTypeBasedCqlValueTransformerMapFactory cqlTransformerMapFactory;

	public SolrIndex(
			LocalIndexServer server, 
			String dsId,
			SolrTypeBasedCqlValueTransformerMapFactory cqlTransformerMapFactory) {
		super();
		this.server = server;
		this.indexSchema = server.getSchema();
		this.isFeeding = server.isFeeding();
		this.dsId = dsId;
		this.cqlTransformerMapFactory = cqlTransformerMapFactory;
	}
	
	public SolrIndex(LocalIndexServer server, SolrTypeBasedCqlValueTransformerMapFactory cqlTransformerMapFactory) {
		this(server, null, cqlTransformerMapFactory);
	}

	public CqlValueTransformerMap getValueTransformerMap() {
		return cqlTransformerMapFactory.getIt(indexSchema);
	}
	
	public UpdateResponse add(final SolrInputDocument doc) 
		throws SolrServerException, IOException {

		return getServer().add(doc);
	}
	
	public SolrServer getServer() {
		return server.getServer();
	}

	public String getDsId() {
		return dsId;
	}

	public IndexSchema getIndexSchema() {
		return indexSchema;
	}
	
	public boolean isFeeding() {
		return isFeeding;
	}

	public void setIsFeeding(boolean isFeeding) {
		server.setFeeding(isFeeding);
	}
	
}