com.opengamma.core.config.impl.RemoteConfigSource.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.core.config.impl.RemoteConfigSource.java

Source

/**
 * Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
 *
 * Please see distribution for license.
 */
package com.opengamma.core.config.impl;

import java.net.URI;
import java.util.Collection;

import org.fudgemsg.FudgeField;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.mapping.FudgeDeserializer;

import com.google.common.collect.Lists;
import com.opengamma.DataNotFoundException;
import com.opengamma.core.AbstractRemoteSource;
import com.opengamma.core.change.BasicChangeManager;
import com.opengamma.core.change.ChangeManager;
import com.opengamma.core.config.ConfigSource;
import com.opengamma.id.ObjectId;
import com.opengamma.id.UniqueId;
import com.opengamma.id.VersionCorrection;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.fudgemsg.OpenGammaFudgeContext;
import com.opengamma.util.rest.UniformInterfaceException404NotFound;

/**
 * Provides remote access to a {@link ConfigSource}.
 */
public class RemoteConfigSource extends AbstractRemoteSource<ConfigItem<?>> implements ConfigSource {

    /**
     * The change manager.
     */
    private final ChangeManager _changeManager;

    /**
     * Creates an instance.
     *
     * @param baseUri  the base target URI for all RESTful web services, not null
     */
    public RemoteConfigSource(final URI baseUri) {
        super(baseUri);
        _changeManager = new BasicChangeManager();
    }

    /**
     * Creates an instance.
     *
     * @param baseUri  the base target URI for all RESTful web services, not null
     * @param changeManager  the change manager to use, not null
     */
    public RemoteConfigSource(final URI baseUri, final ChangeManager changeManager) {
        super(baseUri);
        ArgumentChecker.notNull(changeManager, "changeManager");
        _changeManager = changeManager;
    }

    @SuppressWarnings("unchecked")
    private <R> Collection<ConfigItem<R>> configItemCollectionResult(final FudgeMsg msg) {
        final Collection<ConfigItem<R>> result = Lists.newArrayListWithCapacity(msg.getNumFields());
        final FudgeDeserializer deserializer = new FudgeDeserializer(OpenGammaFudgeContext.getInstance());
        for (final FudgeField field : msg) {
            result.add(deserializer.fieldValueToObject(ConfigItem.class, field));
        }
        return result;
    }

    @Override
    public ChangeManager changeManager() {
        return _changeManager;
    }

    @Override
    public ConfigItem<?> get(final UniqueId uniqueId) {
        ArgumentChecker.notNull(uniqueId, "uniqueId");
        final URI uri = DataConfigSourceResource.uriGet(getBaseUri(), uniqueId);
        return accessRemote(uri).get(ConfigItem.class);
    }

    @Override
    public ConfigItem<?> get(final ObjectId objectId, final VersionCorrection versionCorrection) {
        ArgumentChecker.notNull(objectId, "objectId");
        ArgumentChecker.notNull(versionCorrection, "versionCorrection");
        final URI uri = DataConfigSourceResource.uriGet(getBaseUri(), objectId, versionCorrection);
        return accessRemote(uri).get(ConfigItem.class);
    }

    //-------------------------------------------------------------------------
    @Override
    @SuppressWarnings("unchecked")
    public <R> R getConfig(final Class<R> clazz, final UniqueId uniqueId) {
        final Object value = get(uniqueId).getValue();
        if (clazz.isAssignableFrom(value.getClass())) {
            return (R) value;
        } else {
            throw new IllegalArgumentException("The requested object is " + value.getClass() + ", not " + clazz);
        }
    }

    @Override
    @SuppressWarnings("unchecked")
    public <R> R getConfig(final Class<R> clazz, final ObjectId objectId,
            final VersionCorrection versionCorrection) {
        final Object value = get(objectId, versionCorrection).getValue();
        if (clazz.isAssignableFrom(value.getClass())) {
            return (R) value;
        } else {
            throw new IllegalArgumentException("The requested object is " + value.getClass() + ", not " + clazz);
        }
    }

    //-------------------------------------------------------------------------
    @Override
    public <R> R getSingle(final Class<R> clazz, final String configName,
            final VersionCorrection versionCorrection) {
        ArgumentChecker.notNull(clazz, "clazz");
        ArgumentChecker.notNull(configName, "configName");
        ArgumentChecker.notNull(versionCorrection, "versionCorrection");
        try {
            final URI uri = DataConfigSourceResource.uriSearchSingle(getBaseUri(), configName, versionCorrection,
                    clazz);
            return accessRemote(uri).get(clazz);
        } catch (DataNotFoundException ex) {
            return null;
        } catch (UniformInterfaceException404NotFound ex) {
            return null;
        }
    }

    @Override
    public <R> Collection<ConfigItem<R>> get(final Class<R> clazz, final String configName,
            final VersionCorrection versionCorrection) {
        ArgumentChecker.notNull(clazz, "clazz");
        ArgumentChecker.notNull(configName, "configName");
        ArgumentChecker.notNull(versionCorrection, "versionCorrection");
        final URI uri = DataConfigSourceResource.uriGet(getBaseUri(), configName, versionCorrection, clazz);
        return configItemCollectionResult(accessRemote(uri).get(FudgeMsg.class));
    }

    @Override
    public <R> R getLatestByName(final Class<R> clazz, final String name) {
        return getSingle(clazz, name, VersionCorrection.LATEST);
    }

    @Override
    public <R> Collection<ConfigItem<R>> getAll(final Class<R> clazz, final VersionCorrection versionCorrection) {
        ArgumentChecker.notNull(clazz, "clazz");
        ArgumentChecker.notNull(versionCorrection, "versionCorrection");
        final URI uri = DataConfigSourceResource.uriSearch(getBaseUri(), clazz, versionCorrection);
        return configItemCollectionResult(accessRemote(uri).get(FudgeMsg.class));
    }

}