/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.function.blacklist;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import com.opengamma.engine.calcnode.CalculationJobItem;
import com.opengamma.engine.function.blacklist.FunctionBlacklistPolicy.Entry;
import com.opengamma.util.ArgumentChecker;
/**
* Default application of a {@link FunctionBlacklistPolicy} to a {@link ManageableFunctionBlacklist} interface.
*/
public class DefaultFunctionBlacklistMaintainer implements FunctionBlacklistMaintainer {
private final FunctionBlacklistPolicy _policy;
private final ManageableFunctionBlacklist _update;
public DefaultFunctionBlacklistMaintainer(final FunctionBlacklistPolicy policy, final ManageableFunctionBlacklist update) {
ArgumentChecker.notNull(policy, "policy");
ArgumentChecker.notNull(update, "update");
_policy = policy;
_update = update;
}
protected FunctionBlacklistPolicy getPolicy() {
return _policy;
}
protected ManageableFunctionBlacklist getUpdate() {
return _update;
}
protected FunctionBlacklistRule createRule(final Entry entry, final CalculationJobItem item) {
final FunctionBlacklistRule rule = new FunctionBlacklistRule();
if (entry.isMatchFunctionIdentifier()) {
rule.setFunctionIdentifier(item.getFunctionUniqueIdentifier());
}
if (entry.isMatchFunctionParameters()) {
rule.setFunctionParameters(item.getFunctionParameters());
}
if (entry.isMatchTarget()) {
rule.setTarget(item.getComputationTargetSpecification());
}
if (entry.isMatchInputs()) {
rule.setInputs(Arrays.asList(item.getInputs()));
}
if (entry.isMatchOutputs()) {
rule.setOutputs(Arrays.asList(item.getOutputs()));
}
return rule;
}
@Override
public void failedJobItem(final CalculationJobItem item) {
final Collection<Entry> entries = getPolicy().getEntries();
for (Entry entry : entries) {
getUpdate().addBlacklistRule(createRule(entry, item), entry.getActivationPeriod(getPolicy()));
}
}
@Override
public void failedJobItems(final Collection<CalculationJobItem> items) {
final Collection<Entry> entries = getPolicy().getEntries();
final ArrayList<FunctionBlacklistRule> rules = new ArrayList<FunctionBlacklistRule>(items.size());
for (Entry entry : entries) {
rules.clear();
for (CalculationJobItem item : items) {
rules.add(createRule(entry, item));
}
getUpdate().addBlacklistRules(rules, entry.getActivationPeriod(getPolicy()));
}
}
}