/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.sesame.function; import java.util.Set; import com.opengamma.DataNotFoundException; import com.opengamma.sesame.OutputName; /** * */ public interface AvailableOutputs { // for when the user is configuring a column with a default output name. this shows which types it can handle Set<Class<?>> getInputTypes(OutputName outputName); // all types accepted as inputs by registered functions Set<Class<?>> getInputTypes(); // for when the user is configuring a column Set<OutputName> getAvailableOutputs(Class<?> inputType); // for when the user is configuring outputs that aren't derived from the portfolio Set<OutputName> getAvailableOutputs(); /** * Returns metadata for the function that provides an output for an input type. * An output is provided by a method annotated with {@link Output}. * @param outputName The output name * @param inputType The type of the input * @return The function that can provide the output * @throws DataNotFoundException If nothing can provide the requested output for the target type * TODO should this return multiple functions? */ FunctionMetadata getOutputFunction(OutputName outputName, Class<?> inputType); /** * Returns metadata for a functions that provide an output that isn't calculated for items in the portfolio. * e.g. curves, surfaces or other intermediate values * @param outputName The output name * @return The function that can provide the output * TODO should this return multiple functions? */ FunctionMetadata getOutputFunction(OutputName outputName); /** * Registers functions that can produce outputs from methods annotated with {@link Output}. * @param functionInterfaces The function types to register */ void register(Class<?>... functionInterfaces); }