/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.sesame.engine; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import org.fudgemsg.FudgeContext; import org.fudgemsg.MutableFudgeMsg; import org.fudgemsg.mapping.FudgeSerializer; import org.fudgemsg.wire.FudgeMsgWriter; import org.fudgemsg.wire.xml.FudgeXMLStreamWriter; import com.opengamma.OpenGammaRuntimeException; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.fudgemsg.OpenGammaFudgeContext; import com.opengamma.util.xml.FormattingXmlStreamWriter; /** * Responsible for serializing a ViewInputs object so that it * can be restored at a later time. Primarily a wrapper to * hide underlying fudge serialization constructs. */ public class ViewResultsSerializer { /** * The inputs used for the view. */ private final ViewInputs _viewInputs; /** * The outputs produced by the view. */ private final ViewOutputs _viewOutputs; /** * Create a serializer for the specified view inputs instance. * * @param results the view inputs to create a serializer for */ public ViewResultsSerializer(Results results) { ArgumentChecker.notNull(results, "results"); _viewInputs = results.getViewInputs(); _viewOutputs = ViewOutputs.builder() .columnNames(results.getColumnNames()) .nonPortfolioResults(results.getNonPortfolioResults()) .rows(results.getRows()) .build(); } /** * Serialize the view inputs to the specified output stream. * * @param outputStream the output stream to serialize to */ public void serializeViewInputs(OutputStream outputStream) { serialize(outputStream, _viewInputs); } /** * Serialize the view outputs to the specified output stream. * * @param outputStream the output stream to serialize to */ public void serializeViewOutputs(OutputStream outputStream) { serialize(outputStream, _viewOutputs); } private void serialize(OutputStream outputStream, Object object) { try (Writer writer = new OutputStreamWriter(outputStream)) { FudgeContext ctx = OpenGammaFudgeContext.getInstance(); FormattingXmlStreamWriter xmlStreamWriter = FormattingXmlStreamWriter.builder(writer) .indent(true) .build(); FudgeXMLStreamWriter streamWriter = new FudgeXMLStreamWriter(ctx, xmlStreamWriter); FudgeMsgWriter fudgeMsgWriter = new FudgeMsgWriter(streamWriter); MutableFudgeMsg msg = (new FudgeSerializer(ctx)).objectToFudgeMsg(object); FudgeSerializer.addClassHeader(msg, object.getClass()); fudgeMsgWriter.writeMessage(msg); fudgeMsgWriter.flush(); writer.close(); } catch (IOException e) { throw new OpenGammaRuntimeException("Error whilst serializing", e); } } }