/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.provider.security.impl;
import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.opengamma.core.security.Security;
import com.opengamma.provider.security.SecurityEnhancer;
import com.opengamma.provider.security.SecurityEnhancerRequest;
import com.opengamma.provider.security.SecurityEnhancerResult;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.rest.AbstractRemoteClient;
/**
* Provides access to a remote security enhancer.
* <p>
* This is a client that connects to a security enhancer at a remote URI.
*/
public class RemoteSecurityEnhancer extends AbstractRemoteClient implements SecurityEnhancer {
/**
* Creates an instance.
*
* @param baseUri the base target URI for all RESTful web services, not null
*/
public RemoteSecurityEnhancer(final URI baseUri) {
super(baseUri);
}
//-------------------------------------------------------------------------
// delegate convenience methods to request/result method
// code copied from AbstractSecurityEnhancer due to lack of multiple inheritance
@Override
public Security enhanceSecurity(Security security) {
SecurityEnhancerRequest request = SecurityEnhancerRequest.create(security);
SecurityEnhancerResult result = enhanceSecurities(request);
return Iterables.getOnlyElement(result.getResultList());
}
@Override
public List<Security> enhanceSecurities(List<Security> securities) {
SecurityEnhancerRequest request = SecurityEnhancerRequest.create(securities);
SecurityEnhancerResult result = enhanceSecurities(request);
return result.getResultList();
}
@Override
public <R> Map<R, Security> enhanceSecurities(Map<R, Security> securities) {
List<R> keyList = Lists.newArrayList();
List<Security> securityList = Lists.newArrayList();
for (Entry<R, Security> entry : securities.entrySet()) {
keyList.add(entry.getKey());
securityList.add(entry.getValue());
}
securityList = enhanceSecurities(securityList);
Map<R, Security> result = Maps.newHashMap();
for (int i = 0; i < keyList.size(); i++) {
result.put(keyList.get(i), securityList.get(i));
}
return result;
}
//-------------------------------------------------------------------------
@Override
public SecurityEnhancerResult enhanceSecurities(SecurityEnhancerRequest request) {
ArgumentChecker.notNull(request, "request");
URI uri = DataSecurityEnhancerResource.uriGet(getBaseUri());
return accessRemote(uri).post(SecurityEnhancerResult.class, request);
}
}