com.opengamma.component.factory.engine.FunctionBlacklistComponentFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.component.factory.engine.FunctionBlacklistComponentFactory.java

Source

/**
 * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
 *
 * Please see distribution for license.
 */
package com.opengamma.component.factory.engine;

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;

import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.component.ComponentInfo;
import com.opengamma.component.ComponentRepository;
import com.opengamma.component.factory.AbstractComponentFactory;
import com.opengamma.component.factory.ComponentInfoAttributes;
import com.opengamma.engine.function.blacklist.FunctionBlacklist;
import com.opengamma.engine.function.blacklist.FunctionBlacklistFactoryBean;
import com.opengamma.engine.function.blacklist.ManageableFunctionBlacklist;
import com.opengamma.engine.function.blacklist.RemoteFunctionBlacklist;
import com.opengamma.engine.function.blacklist.RemoteManageableFunctionBlacklist;

/**
 * Component factory form of {@link FunctionBlacklistFactoryBean}.
 */
public class FunctionBlacklistComponentFactory extends AbstractComponentFactory {

    /**
     * The underlying bean.
     */
    private final FunctionBlacklistFactoryBean _bean = new FunctionBlacklistFactoryBean();

    @Override
    public void init(final ComponentRepository repo, final LinkedHashMap<String, String> configuration) {
        String classifier = "default";
        final Iterator<Map.Entry<String, String>> itr = configuration.entrySet().iterator();
        while (itr.hasNext()) {
            final Map.Entry<String, String> conf = itr.next();
            if ("classifier".equals(conf.getKey())) {
                classifier = conf.getValue();
            } else {
                try {
                    if (conf.getValue().startsWith("::")) {
                        final Class<?> property = PropertyUtils.getPropertyType(_bean, conf.getKey());
                        final ComponentInfo info = repo.findInfo(property, conf.getValue().substring(2));
                        if (info != null) {
                            BeanUtils.setProperty(_bean, conf.getKey(), repo.getInstance(info));
                        } else {
                            BeanUtils.setProperty(_bean, conf.getKey(), conf.getValue());
                        }
                    } else {
                        BeanUtils.setProperty(_bean, conf.getKey(), conf.getValue());
                    }
                } catch (Exception e) {
                    throw new OpenGammaRuntimeException("invalid property '" + conf.getKey() + "' on " + _bean, e);
                }
            }
            itr.remove();
        }
        final FunctionBlacklist blacklist = _bean.getObjectCreating();

        ComponentInfo infoRO = new ComponentInfo(FunctionBlacklist.class, classifier);
        infoRO.addAttribute(ComponentInfoAttributes.LEVEL, 1);
        infoRO.addAttribute(ComponentInfoAttributes.REMOTE_CLIENT_JAVA, RemoteFunctionBlacklist.class);
        repo.registerComponent(infoRO, blacklist);

        if (blacklist instanceof ManageableFunctionBlacklist) {
            ComponentInfo infoMng = new ComponentInfo(ManageableFunctionBlacklist.class, classifier);
            infoMng.addAttribute(ComponentInfoAttributes.LEVEL, 1);
            infoMng.addAttribute(ComponentInfoAttributes.REMOTE_CLIENT_JAVA,
                    RemoteManageableFunctionBlacklist.class);
            repo.registerComponent(infoMng, blacklist);
        }
    }

}