/*
* Copyright (C) 2013 All rights reserved
* VPRO The Netherlands
*/
package dgm.fixtures;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.Provider;
import dgm.ID;
import dgm.configuration.Configuration;
import dgm.configuration.FixtureConfiguration;
import dgm.configuration.FixtureIndexConfiguration;
import dgm.configuration.FixtureTypeConfiguration;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.Client;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
/**
* User: rico
* Date: 08/04/2013
*/
public class InsertDocumentsCommand implements Command<List<ID>>
{
protected final Client client;
protected final Provider<Configuration> cfgProvider;
protected final ObjectMapper mapper = new ObjectMapper();
private static final Logger log = LoggerFactory.getLogger(InsertDocumentsCommand.class);
@Inject
public InsertDocumentsCommand(Client client, Provider<Configuration> cfgProvider)
{
this.client = client;
this.cfgProvider = cfgProvider;
}
@Override
public List<ID> execute() throws Exception
{
List<ID> ids = new ArrayList<ID>();
FixtureConfiguration fixtureConfig = cfgProvider.get().getFixtureConfiguration();
// Insert the documents. When this fails, we throw.
for (String indexName : fixtureConfig.getIndexNames())
{
log.debug("Creating index [{}]", indexName);
try
{
FixtureIndexConfiguration indexConfig = fixtureConfig.getIndexConfig(indexName);
ids.addAll(insertDocuments(indexName, indexConfig));
} catch (Exception e)
{
throw new RuntimeException("something went wrong creating index [" + indexName + "]", e);
}
}
return ids;
}
private List<ID> insertDocuments(String indexName, FixtureIndexConfiguration indexConfig) throws UnsupportedEncodingException, ExecutionException, InterruptedException
{
List<ID> ids = new ArrayList<ID>();
for (String typeName : indexConfig.getTypeNames())
{
FixtureTypeConfiguration typeConfig = indexConfig.getTypeConfig(typeName);
if (typeConfig.hasDocuments())
{
int c = 0;
for (String id : typeConfig.getDocumentIds())
{
IndexRequest request = new IndexRequest(indexName, typeName, id)
.source(typeConfig.getDocumentById(id).toString().getBytes("UTF-8"))
.refresh(true);
client.index(request).get();
c++;
ids.add(new ID(indexName,typeName,id,0));
}
log.debug("Inserted {} fixture documents of type [{}] in index [{}]", new Object[]{ c, typeName, indexName});
}
}
return ids;
}
}