package pl.allegro.tech.search.elasticsearch.tools.reindex;
import com.beust.jcommander.JCommander;
import com.beust.jcommander.ParameterException;
import pl.allegro.tech.search.elasticsearch.tools.reindex.command.ReindexCommand;
import pl.allegro.tech.search.elasticsearch.tools.reindex.connection.ElasticDataPointer;
import pl.allegro.tech.search.elasticsearch.tools.reindex.connection.ElasticDataPointerBuilder;
import pl.allegro.tech.search.elasticsearch.tools.reindex.connection.ParsingElasticsearchAddressException;
import pl.allegro.tech.search.elasticsearch.tools.reindex.query.QuerySegmentation;
import pl.allegro.tech.search.elasticsearch.tools.reindex.query.QuerySegmentationFactory;
public class ReindexCommandParser {
private ElasticDataPointer sourcePointer;
private ElasticDataPointer targetPointer;
private QuerySegmentation segmentation;
public boolean tryParse(String... args) {
ReindexCommand command = new ReindexCommand();
JCommander jCommander = new JCommander(command);
try {
jCommander.parse(args);
buildReindexParameters(command);
} catch (ParameterException | ParsingElasticsearchAddressException exception) {
JCommander.getConsole().println("Parameters error occurred:");
JCommander.getConsole().println(exception.getMessage());
JCommander.getConsole().println("");
jCommander.usage();
return false;
}
return true;
}
private void buildReindexParameters(ReindexCommand command) {
sourcePointer = ElasticDataPointerBuilder.builder()
.setClusterName(command.getSourceClusterName())
.setAddress(command.getSource())
.setSniff(!command.isDisableSniff())
.build();
targetPointer = ElasticDataPointerBuilder.builder()
.setClusterName(command.getTargetClusterName())
.setAddress(command.getTarget())
.setSniff(!command.isDisableSniff())
.build();
segmentation = getFieldSegmentation(command);
}
private QuerySegmentation getFieldSegmentation(ReindexCommand command) {
return QuerySegmentationFactory.create(command);
}
public ElasticDataPointer getSourcePointer() {
return sourcePointer;
}
public ElasticDataPointer getTargetPointer() {
return targetPointer;
}
public QuerySegmentation getSegmentation() {
return segmentation;
}
}