/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.cache;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.longs.LongCollection;
import it.unimi.dsi.fastutil.objects.Object2LongMap;
import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import com.opengamma.engine.MemoryUtils;
import com.opengamma.engine.cache.msg.IdentifierLookupRequest;
import com.opengamma.engine.cache.msg.IdentifierLookupResponse;
import com.opengamma.engine.cache.msg.SpecificationLookupRequest;
import com.opengamma.engine.cache.msg.SpecificationLookupResponse;
import com.opengamma.engine.value.ValueSpecification;
/**
* Client to a {@link IdentifierMapServer}.
*/
public class RemoteIdentifierMap implements IdentifierMap {
private final RemoteCacheClient _client;
public RemoteIdentifierMap(final RemoteCacheClient client) {
_client = client;
}
protected RemoteCacheClient getRemoteCacheClient() {
return _client;
}
@Override
public long getIdentifier(final ValueSpecification spec) {
final IdentifierLookupRequest request = new IdentifierLookupRequest(Collections.singleton(spec));
final IdentifierLookupResponse response = getRemoteCacheClient().sendGetMessage(request, IdentifierLookupResponse.class);
return response.getIdentifier().get(0);
}
@Override
public Object2LongMap<ValueSpecification> getIdentifiers(Collection<ValueSpecification> specs) {
final IdentifierLookupRequest request = new IdentifierLookupRequest(specs);
final IdentifierLookupResponse response = getRemoteCacheClient().sendGetMessage(request, IdentifierLookupResponse.class);
final List<Long> identifiers = response.getIdentifier();
final Object2LongMap<ValueSpecification> identifierMap = new Object2LongOpenHashMap<ValueSpecification>();
int i = 0;
for (ValueSpecification spec : request.getSpecification()) {
identifierMap.put(spec, identifiers.get(i++));
}
return identifierMap;
}
@Override
public ValueSpecification getValueSpecification(long identifier) {
final SpecificationLookupRequest request = new SpecificationLookupRequest(Collections.singleton(identifier));
final SpecificationLookupResponse response = getRemoteCacheClient().sendGetMessage(request, SpecificationLookupResponse.class);
return MemoryUtils.instance(response.getSpecification().get(0));
}
@Override
public Long2ObjectMap<ValueSpecification> getValueSpecifications(LongCollection identifiers) {
final SpecificationLookupRequest request = new SpecificationLookupRequest(identifiers);
final SpecificationLookupResponse response = getRemoteCacheClient().sendGetMessage(request, SpecificationLookupResponse.class);
final List<ValueSpecification> specifications = response.getSpecification();
final Long2ObjectMap<ValueSpecification> specificationMap = new Long2ObjectOpenHashMap<ValueSpecification>();
int i = 0;
for (Long identifier : request.getIdentifier()) {
specificationMap.put(identifier, MemoryUtils.instance(specifications.get(i++)));
}
return specificationMap;
}
}