/**
* 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.Collection;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import org.fudgemsg.FudgeContext;
import org.fudgemsg.FudgeField;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.mapping.FudgeDeserializer;
import com.opengamma.transport.jaxrs.FudgeRest;
import com.opengamma.util.jms.JmsConnector;
/**
* Publishes a {@link ManageableFunctionBlacklist} to remote clients
*/
public class DataManageableFunctionBlacklistResource extends DataFunctionBlacklistResource {
/**
* Name of a field containing a rule in a request.
*/
public static final String RULE_FIELD = "rule";
/**
* Name of a field containing the ttl in a request.
*/
public static final String TTL_FIELD = "ttl";
public DataManageableFunctionBlacklistResource(final ManageableFunctionBlacklist underlying, final FudgeContext fudgeContext, final JmsConnector jmsConnector) {
super(underlying, fudgeContext, jmsConnector);
}
@Override
protected ManageableFunctionBlacklist getUnderlying() {
return (ManageableFunctionBlacklist) super.getUnderlying();
}
@POST
@Path("add")
@Consumes(FudgeRest.MEDIA)
public void add(final FudgeMsg request) {
final FudgeDeserializer fdc = new FudgeDeserializer(getFudgeContext());
final Integer ttl = request.getInt(TTL_FIELD);
final List<FudgeField> fields = request.getAllByName(RULE_FIELD);
if (fields.size() > 1) {
final Collection<FunctionBlacklistRule> rules = new ArrayList<FunctionBlacklistRule>(fields.size());
for (FudgeField field : fields) {
rules.add(fdc.fieldValueToObject(FunctionBlacklistRule.class, field));
}
if (ttl != null) {
getUnderlying().addBlacklistRules(rules, ttl);
} else {
getUnderlying().addBlacklistRules(rules);
}
} else if (!fields.isEmpty()) {
final FunctionBlacklistRule rule = fdc.fieldValueToObject(FunctionBlacklistRule.class, fields.get(0));
if (ttl != null) {
getUnderlying().addBlacklistRule(rule, ttl);
} else {
getUnderlying().addBlacklistRule(rule);
}
}
}
@POST
@Path("remove")
@Consumes(FudgeRest.MEDIA)
public void remove(final FudgeMsg request) {
final FudgeDeserializer fdc = new FudgeDeserializer(getFudgeContext());
final List<FudgeField> fields = request.getAllByName(RULE_FIELD);
if (fields.size() > 1) {
final Collection<FunctionBlacklistRule> rules = new ArrayList<FunctionBlacklistRule>(fields.size());
for (FudgeField field : fields) {
rules.add(fdc.fieldValueToObject(FunctionBlacklistRule.class, field));
}
getUnderlying().removeBlacklistRules(rules);
} else if (!fields.isEmpty()) {
final FunctionBlacklistRule rule = fdc.fieldValueToObject(FunctionBlacklistRule.class, fields.get(0));
getUnderlying().removeBlacklistRule(rule);
}
}
}