/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.fudgemsg; import org.fudgemsg.mapping.FudgeBuilder; import org.fudgemsg.mapping.FudgeBuilderFactory; import org.fudgemsg.mapping.FudgeBuilderFactoryAdapter; import org.fudgemsg.mapping.FudgeMessageBuilder; import org.fudgemsg.mapping.FudgeObjectBuilder; import org.fudgemsg.mapping.FudgeObjectDictionary; /** * Utilities for converting Beans to Fudge and vice versa. */ public final class InnerClassFudgeBuilderFactory extends FudgeBuilderFactoryAdapter { /** * Map of bean class to builder. */ @SuppressWarnings("rawtypes") private final FudgeBuilder _innerClassFudgeBuilder = new InnerClassFudgeBuilder(); /** * Initializes an instance of this factory. * This extracts the existing factory from the dictionary, wraps it, and updates it. * @param dictionary the object dictionary to install into, not null */ public static void init(final FudgeObjectDictionary dictionary) { FudgeBuilderFactory factory = new InnerClassFudgeBuilderFactory(dictionary.getDefaultBuilderFactory()); dictionary.setDefaultBuilderFactory(factory); } /** * Constructor. * @param parent the parent factory, not null */ private InnerClassFudgeBuilderFactory(final FudgeBuilderFactory parent) { super(parent); } @SuppressWarnings("unchecked") @Override public <T> FudgeMessageBuilder<T> createMessageBuilder(final Class<T> clazz) { if (AutoFudgable.class.isAssignableFrom(clazz)) { return _innerClassFudgeBuilder; } else { return super.createMessageBuilder(clazz); } } @SuppressWarnings("unchecked") @Override public <T> FudgeObjectBuilder<T> createObjectBuilder(final Class<T> clazz) { if (AutoFudgable.class.isAssignableFrom(clazz)) { return _innerClassFudgeBuilder; } else { return super.createObjectBuilder(clazz); } } }