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

//@include lib_Class.js
//@include lib_sol.common.ObjectUtils.js
//@include lib_sol.common.UserUtils.js
//@include lib_sol.common.ix.ServiceBase.js
//@include lib_sol.common.ix.GenericDynKwl.js


/**
 *
 * @author PZ, ELO Digital Office GmbH
 * @version 1.03.000
 *
 * @eloix
 *
 * @requires sol.common.ix.ServiceBase
 *
 */
sol.define("sol.common.ix.services.TestGenericDynKwl", {
  extend: "sol.common.ix.ServiceBase",

  initialize: function (config) {
    var me = this;
    me.$super("sol.common.ix.ServiceBase", "initialize", [config]);
  },

  test: function () {
    var me = this,
        result = {},
        resultData = [],
        provider, sord, objKeys, inputFieldName;

    try {
      provider = sol.create("sol.common.ix.GenericDynKwl", me.providerConfig).getProvider();

      sord = ixConnect.ix().createSord("0", "0", SordC.mbAllIndex);
      objKeys = me.buildFilter();

      if (me.providerConfig && me.providerConfig.input) {
        inputFieldName = (me.providerConfig && me.providerConfig.input) ? me.providerConfig.input.name : "";
        objKeys.push(me.createObjKey(inputFieldName, me.providerConfig.input.value));
      }

      sord.objKeys = objKeys;

      provider.open(me.ec, sord, inputFieldName);

      if (provider.getMessage()) {
        result.message = provider.getMessage();
        return result;
      }

      while (provider.hasMoreRows()) {
        resultData.push(provider.getNextRow());
      }

      result.data = resultData;

    } catch (ex) {
      result.error = String(ex);
    } finally {
      if (provider && (sol.common.ObjectUtils.isFunction(provider.close))) {
        provider.close();
      }
    }

    return result;

  },

  buildFilter: function () {
    var me = this,
        objKeys = [];
    if (me.providerConfig && me.providerConfig.filter && (me.providerConfig.filter.length > 0)) {
      me.providerConfig.filter.forEach(function (param) {
        if (param.name && param.value) {
          objKeys.push(me.createObjKey(param.name, param.value));
        }
      });
    }
    return objKeys;
  },

  createObjKey: function (name, value) {
    var objKey = new ObjKey();
    objKey.name = name;
    objKey.data = [value];
    return objKey;
  }

});


/**
 * @member sol.common.ix.services.TestGenericDynKwl
 * @method RF_sol_service_TestGenericDynKwl
 * @static
 * @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName
 */
function RF_sol_service_TestGenericDynKwl(ec, args) {
  var params = {},
      service;

  params.providerConfig = sol.common.ix.RfUtils.parseAndCheckParams(ec, arguments.callee.name, args);
  params.ec = ec;

  sol.common.ix.RfUtils.checkMainAdminRights(ec.user, params);

  service = sol.create("sol.common.ix.services.TestGenericDynKwl", params);

  return sol.common.ix.RfUtils.stringify(service.test());
}