/** * 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.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; /** * Abstract implementation of an enhancer of security information. * <p> * This provides default implementations of the interface methods that delegate to a * protected method that subclasses must implement. */ public abstract class AbstractSecurityEnhancer implements SecurityEnhancer { /** * Creates an instance. */ protected AbstractSecurityEnhancer() { } //------------------------------------------------------------------------- @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"); // short-cut empty case if (request.getSecurities().isEmpty()) { return new SecurityEnhancerResult(); } // get securities return doBulkEnhance(request); } /** * Enhances the securities. * * @param request the request, with a non-empty list of securities, not null * @return the result, not null */ protected abstract SecurityEnhancerResult doBulkEnhance(SecurityEnhancerRequest request); }