/** * 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); } } }