package com.mozilla.grouperfish.batch.scheduling;
import java.util.Map;
import com.mozilla.grouperfish.base.Assert;
import com.mozilla.grouperfish.batch.api.BatchService;
import com.mozilla.grouperfish.model.Type;
import com.mozilla.grouperfish.model.Query;
import com.mozilla.grouperfish.model.Task;
import com.mozilla.grouperfish.model.TransformConfig;
import com.mozilla.grouperfish.naming.Scope;
import com.mozilla.grouperfish.services.api.Index;
import com.mozilla.grouperfish.services.api.IndexProvider;
abstract class AbstractBatchService implements BatchService {
private final IndexProvider indexes;
public AbstractBatchService(final IndexProvider indexes) {
this.indexes = indexes;
}
/** Run the configured transform over the query results. */
public void schedule(final Scope ns, final Query query, final TransformConfig transform) {
Assert.nonNull(query, transform);
final Index index = indexes.index(ns.bucket(Type.DOCUMENT));
for (final Query concreteQuery : index.resolve(query)) {
schedule(new Task(ns, concreteQuery, transform));
}
}
/** Run all configured transforms over the query results. */
public void schedule(final Scope ns, final Query query) {
final Map<String, String> transforms = ns.map(Type.CONFIGURATION_TRANSFORM);
for (final Map.Entry<String, String> item : transforms.entrySet()) {
schedule(ns, query, new TransformConfig(item.getKey(), item.getValue()));
}
}
/** Run all transforms configurations of this namespace over the results of all queries. */
public void schedule(final Scope ns) {
final Map<String, String> queries = ns.queries();
final Map<String, String> transforms = ns.map(Type.CONFIGURATION_TRANSFORM);
for (final Map.Entry<String, String> queryEntry : queries.entrySet()) {
final Query query = new Query(queryEntry.getKey(), queryEntry.getValue());
for (final Map.Entry<String, String> item : transforms.entrySet()) {
schedule(ns, query, new TransformConfig(item.getKey(), item.getValue()));
}
}
}
}