public MutableFudgeMsg toFudgeMsg(final FudgeSerializer context) { final MutableFudgeMsg msg = context.newMessage(); for (Map.Entry<ExternalIdBundle, HistoricalTimeSeries> data : _timeSeries.entrySet()) { context.addToMessageWithClassHeaders(msg, null, 1, data.getKey(), ExternalIdBundle.class); context.addToMessageWithClassHeaders( msg, null, 2, data.getValue(), HistoricalTimeSeries.class); } return msg; }
@Override protected void buildMessage( final FudgeSerializer serializer, final MutableFudgeMsg message, final InflationProviderDiscount object) { serializer.addToMessageWithClassHeaders( message, YIELD_CURVES_FIELD, null, object.getMulticurveProvider()); final Map<IndexPrice, PriceIndexCurve> priceIndexCurves = object.getPriceIndexCurves(); for (final Map.Entry<IndexPrice, PriceIndexCurve> entry : priceIndexCurves.entrySet()) { serializer.addToMessageWithClassHeaders(message, PRICE_INDEX_FIELD, null, entry.getKey()); serializer.addToMessageWithClassHeaders( message, PRICE_INDEX_CURVE_FIELD, null, entry.getValue()); } }
@Override protected void buildMessage( final FudgeSerializer serializer, final MutableFudgeMsg message, final CurveBuildingBlockBundle object) { final Map<String, Pair<CurveBuildingBlock, DoubleMatrix2D>> data = object.getData(); for (final Map.Entry<String, Pair<CurveBuildingBlock, DoubleMatrix2D>> entry : data.entrySet()) { message.add(CURVE_NAME_FIELD, entry.getKey()); serializer.addToMessageWithClassHeaders( message, BLOCK_FIELD, null, entry.getValue().getFirst()); serializer.addToMessageWithClassHeaders( message, MATRIX_FIELD, null, entry.getValue().getSecond().getData()); } }
@Override public MutableFudgeMsg buildMessage(FudgeSerializer serializer, CalculationJobItem object) { MutableFudgeMsg msg = serializer.newMessage(); ComputationTargetSpecification computationTargetSpecification = object.getComputationTargetSpecification(); if (computationTargetSpecification != null) { MutableFudgeMsg specMsg = serializer.objectToFudgeMsg(computationTargetSpecification); for (FudgeField fudgeField : specMsg.getAllFields()) { msg.add(fudgeField); } } String functionUniqueIdentifier = object.getFunctionUniqueIdentifier(); if (functionUniqueIdentifier != null) { msg.add(FUNCTION_UNIQUE_ID_FIELD_NAME, functionUniqueIdentifier); } FunctionParameters functionParameters = object.getFunctionParameters(); if (functionParameters != null) { serializer.addToMessageWithClassHeaders( msg, FUNCTION_PARAMETERS_FIELD_NAME, null, functionParameters); } long[] inputs = object.getInputIdentifiers(); msg.add(INPUT_FIELD_NAME, inputs); for (ValueRequirement desiredValue : object.getDesiredValues()) { serializer.addToMessage(msg, DESIRED_VALUE_FIELD_NAME, null, desiredValue); } return msg; }
@Override protected void buildMessage( final FudgeSerializer serializer, final MutableFudgeMsg message, final YieldCurveBundle object) { serializer.addToMessageWithClassHeaders( message, FX_MATRIX_FIELD_NAME, null, object.getFxRates()); for (final String curve : object.getAllNames()) { serializer.addToMessageWithClassHeaders( message, CURVES_FIELD_NAME, null, object.getCurve(curve)); serializer.addToMessageWithClassHeaders(message, CURVES_NAME_FIELD_NAME, null, curve); } for (Map.Entry<String, Currency> ccyEntry : object.getCurrencyMap().entrySet()) { serializer.addToMessage(message, CURRENCY_CURVE_FIELD_NAME, null, ccyEntry.getKey()); serializer.addToMessageWithClassHeaders( message, CURRENCY_FIELD_NAME, null, ccyEntry.getValue()); } }
@Override protected void buildMessage( final FudgeSerializer serializer, final MutableFudgeMsg message, final FXMatrix object) { final Map<Currency, Integer> currencies = object.getCurrencies(); for (final Map.Entry<Currency, Integer> entry : currencies.entrySet()) { message.add(CURRENCY_FIELD, entry.getKey().getCode()); message.add(ORDER_FIELD, entry.getValue()); } final double[][] rates = object.getRates(); for (final double[] array : rates) { message.add(ENTRIES_FIELD, array.length); final MutableFudgeMsg msg = serializer.newMessage(); serializer.addToMessageWithClassHeaders(msg, ROW_FIELD, null, array); message.add(FX_RATES_FIELD, msg); } }
@Override protected void buildMessage( final FudgeSerializer serializer, final MutableFudgeMsg message, final MulticurveProviderDiscount object) { final Map<Currency, YieldAndDiscountCurve> discountingCurves = object.getDiscountingCurves(); for (final Map.Entry<Currency, YieldAndDiscountCurve> entry : discountingCurves.entrySet()) { message.add(CURRENCY_FIELD, entry.getKey().getCode()); serializer.addToMessageWithClassHeaders( message, DISCOUNTING_CURVE_FIELD, null, entry.getValue()); } final Map<IborIndex, YieldAndDiscountCurve> forwardIborCurves = object.getForwardIborCurves(); for (final Map.Entry<IborIndex, YieldAndDiscountCurve> entry : forwardIborCurves.entrySet()) { serializer.addToMessageWithClassHeaders(message, INDEX_IBOR_FIELD, null, entry.getKey()); serializer.addToMessageWithClassHeaders(message, INDEX_IBOR_CURVE, null, entry.getValue()); } final Map<IndexON, YieldAndDiscountCurve> forwardONCurves = object.getForwardONCurves(); for (final Map.Entry<IndexON, YieldAndDiscountCurve> entry : forwardONCurves.entrySet()) { serializer.addToMessageWithClassHeaders(message, INDEX_ON_FIELD, null, entry.getKey()); serializer.addToMessageWithClassHeaders( message, OVERNIGHT_CURVE_FIELD, null, entry.getValue()); } serializer.addToMessageWithClassHeaders(message, FX_MATRIX_FIELD, null, object.getFxRates()); }
@Override public MutableFudgeMsg buildMessage(FudgeSerializer serializer, final T auto) { MutableFudgeMsg outerMsg = serializer.newMessage(); outerMsg.add( null, FudgeSerializer.TYPES_HEADER_ORDINAL, FudgeWireType.STRING, AutoFudgable.class.getName()); final K inner = auto.object(); assertValid(inner.getClass()); try { MutableFudgeMsg msg = outerMsg.addSubMessage("inner", null); // save the internal class name msg.add( null, FudgeSerializer.TYPES_HEADER_ORDINAL, FudgeWireType.STRING, inner.getClass().getName()); // save the ctor parameters List<Object> parameters = AccessController.doPrivileged( new PrivilegedAction<List<Object>>() { @Override public List<Object> run() { try { final Constructor<?>[] ctors = inner.getClass().getDeclaredConstructors(); // We require that inner classes got only one ctor (anonymous inner classes will // do) // in order to avoid disambiguity if (ctors.length == 1) { final Constructor<?> ctor = ctors[0]; // types of parameters of ctor final Class<?>[] parameterTypes = ctor.getParameterTypes(); // all declared parameters of the inner class final Field[] fs = inner.getClass().getDeclaredFields(); // extracting copiler synthetized fields of inner class // first are the not sinthetized fields (regular ones) we need to skip // then there are compiler synthetized fields with corresponds to ctor // parameters // the last field is the reference to enclosing object so we need to skipp it // as well final Field[] paramFields = Arrays.copyOfRange(fs, fs.length - parameterTypes.length, fs.length - 1); final List<Object> parameters = newArrayList(); for (Field paramField : paramFields) { paramField.setAccessible(true); parameters.add(paramField.get(inner)); } return parameters; } } catch (IllegalAccessException e) { // Ignore } return null; } }); for (Object parameter : parameters) { // save the ctor parameter serializer.addToMessageWithClassHeaders(msg, null, 1, parameter); } return outerMsg; } catch (RuntimeException ex) { throw new FudgeRuntimeException("Unable to serialize: " + inner.getClass().getName(), ex); } }