importPackage(Packages.de.elo.ix.client);

//@include lib_Class.js
//@include lib_sol.common.Template.js
//@include lib_sol.common.ix.RfUtils.js
//@include lib_sol.common.ix.FunctionBase.js

var logger = sol.create("sol.Logger", { scope: "sol.dev.ix.functions.ResolveTemplate" });


/**
 * Resolve a Template String with provided context data
 *
 * # Using templates from a string
 *
 *     {
 *         source: 'Hello {{name}}.',
 *         context: {
 *            name: "Max"
 *         }
 *     }
 *
 *
 * @author ELO Digital Office GmbH
 * @version 1.0
 *
 * @eloix
 * @requires sol.common.Template
 * 
 * @requires sol.common.ix.FunctionBase
 *
 */
sol.define("sol.dev.ix.functions.ResolveTemplate", {
  extend: "sol.common.ix.FunctionBase",

  requiredConfig: ["source", "context"],


  /**
   * @cfg {String} source (required)
   */

  /**
   * @cfg {Object[]} context(required)
   *
   */

  /**
   */
  process: function () {
    var me = this, template, result;

    template = sol.create("sol.common.Template", {
      source: me.source
    });
    result = template.apply(me.context);
    return result;
  }
});


/**
 * @member sol.dev.ix.functions.ResolveTemplate
 * @method RF_sol_function_ResolveTemplate
 * @static
 * @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName
 */
function RF_sol_dev_function_ResolveTemplate(ec, args) {
  var params, module;

  params = sol.common.ix.RfUtils.parseAndCheckParams(ec, arguments.callee.name, args, "source", "context");
  module = sol.create("sol.dev.ix.functions.ResolveTemplate", params);
  return JSON.stringify(module.process());
}