//@include lib_Class.js
//@include lib_sol.common.Config.js
//@include lib_sol.common.ix.DynKwlFindChildrenIterator.js
//@include lib_sol.contract.mixins.Configuration.js
//@include lib_sol.common.Injection.js

sol.define("sol.contract.ix.dynkwl.Clauses", {
  extend: "sol.common.ix.DynKwlSearchIterator",
  mixins: ["sol.contract.mixins.Configuration", "sol.common.mixins.Inject"],

  inject: {
    clausesConfig: { config: "contract", prop: "clauses" }
  },

  tableTitle: "Contract clauses",
  tableHeaders: ["Name", null],
  tableKeyNames: ["IX_MAP_CLAUSE_NAME{i}", "IX_MAP_CLAUSE_ID{i}"],
  searchParams: [{ name: "IX_MAP_CLAUSE_NAME{i}", searchName: "NAME" }, { name: "CONTRACT_CATEGORY", searchName: "CONTRACT_CATEGORIES" }, { name: "CONTRACT_TYPE", searchName: "CONTRACT_TYPES" }],

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

  getRowData: function (sord) {
    var clauseId;
    clauseId = sol.common.SordUtils.getObjKeyValue(sord, "CLAUSE_ID");
    return [sord.name, clauseId];
  },

  /**
   * @private
   * Implements a find by type search that is filtered by ObjKeys.
   * Used for the 'DynKwlSearchIterator'.
   * @param {String[]} filterList
   * @return {de.elo.ix.client.FindInfo}
   */
  getFindInfo: function (filterList) {
    var me = this,
        findInfo, findByIndex, okeys, okey, i, param, filter;

    me.log.enter("getFindInfo");

    findInfo = new FindInfo();
    findByIndex = new FindByIndex();
    okeys = [];

    if (filterList && filterList.length > 0) {
      for (i = 0; i < filterList.length; i++) {
        param = me.searchParams[i];
        filter = filterList[i];
        if (param.name) {
          if (param.searchName == "NAME") {
            findByIndex.name = filter;
          } else {
            okey = new ObjKey();
            okey.name = param.searchName || param.name;
            filter = (filter) ? "\"" + filter + "\" or \"ALL\"" : "ALL";
            okey.data = [filter];
            okeys.push(okey);
          }
        }
      }
    }

    findByIndex.maskId = me.clausesConfig.maskName;
    findByIndex.objKeys = okeys;
    findInfo.findByIndex = findByIndex;

    me.log.exit("getFindInfo");
    return findInfo;
  }
});

function getDataIterator() {
  var iterator;
  iterator = sol.create("sol.contract.ix.dynkwl.Clauses", {});
  return new DynamicKeywordDataProvider(iterator);
}