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

//@include lib_Class.js
//@include lib_sol.common.Config.js
//@include lib_sol.common.SordUtils.js
//@include lib_sol.common.TranslateTerms.js
//@include lib_sol.common.ix.DynKwlSearchIterator.js

/**
 * Dynamic keyword list that returns the sord content of unittests selected by typeNames
 *
 * @author JHR, ELO Digital Office GmbH
 * @version 1.0
 *
 * @requires sol.Logger
 * @requires sol.common.Config
 * @requires sol.common.SordUtils
 * @requires sol.common.TranslateTerms
 * @requires sol.common.ix.DynKwlSearchIterator
 */
sol.define("sol.dev.ix.dynkwl.FindUnitTestIterator", {
  extend: "sol.common.ix.DynKwlSearchIterator",

  /**
   * @cfg
   * @inheritdoc
   */
  tableHeaders: null,

  /**
   * @cfg
   * @inheritdoc
   */
  tableTitle: null,

  /**
   * @cfg
   * @inheritdoc
   */
  tableKeyNames: null,

  /**
   * @cfg
   * Array of typeNames that are used by the FindByType search.
   */
  typeNames: null,

  /**
   * @cfg
   * Array of datafields used by the search results.
   */
  rowDataFields: null,

  /**
   * @cfg
   * @inheritdoc
   */
  searchParams: [{ mode: "STARTS_WITH" }],

  initialize: function (config) {
    var me = this,
        i;

    /*
    me.devConfig = sol.create("sol.common.Config", {load: "ARCPATH:/Administration/Business Solutions/development/Configuration/sol.dev.Config"}).config;
    me.tableTitle = me.devConfig.dynkwl.contact.tableTitle;
    me.tableHeaders = me.devConfig.dynkwl.contact.tableHeaders;
    me.tableKeyNames = me.devConfig.dynkwl.contact.tableKeyNames;
    me.typeNames = me.devConfig.dynkwl.contact.typeNames;
    me.maskId = me.devConfig.dynkwl.contact.maskId;
    me.rowDataFields = me.devConfig.dynkwl.contact.rowDataFields;
    */
    me.tableTitle = "FindUnitTest";
    me.tableHeaders = ["Status3", "Status4"];
    me.tableKeyNames = ["UNITTEST_STATUS3", "UNITTEST_STATUS4"];
    me.typeNames = ["UnitTest"];
    me.maskId = "UnitTest";
    me.rowDataFields = ["UNITTEST_STATUS3", "UNITTEST_STATUS4"];

    for (i = 0; i < me.tableHeaders.length; i++) {
      me.tableHeaders[i] = sol.common.TranslateTerms.translate(me.tableHeaders[i]);
    }
    me.tableTitle = sol.common.TranslateTerms.translate(me.tableTitle);

    me.$super("sol.common.ix.DynKwlSearchIterator", "initialize", [config]);
  },

  /**
   * Implements a find by type search that is filtered by name.
   * @param {String[]} filterList
   * @return {Object} findInfo
   */
  getFindInfo: function (filterList) {
    this.log.enter("getFindInfo");
    var findInfo,
        findByType, findByIndex, typeNames;

    findInfo = new FindInfo();
    findByType = new FindByType();
    typeNames = this.typeNames;
    findByType.typeNames = typeNames;
    findInfo.findByType = findByType;

    if (filterList && filterList.length > 0) {
      findByIndex = new FindByIndex();
      findByIndex.maskId = this.maskId;
      findByIndex.name = filterList[0];
      findInfo.findByIndex = findByIndex;
    }

    this.log.exit("getFindInfo");
    return findInfo;
  },

  /**
   * Basic implementation for search results.
   * This returns the content of the sord index fields.
   * @param {Object} sord
   * @return {Object[]}
   */
  getRowData: function (sord) {
    var me = this,
        data = [],
        i;

    for (i = 0; i < me.rowDataFields.length; i++) {
      data.push(sol.common.SordUtils.getObjKeyValue(sord, me.rowDataFields[i]));
    }

    return data;
  }
});

/**
 * Implements a DynamicKeywordDataProvider for this keyword list that can be used by checkoutKeywordsDynamic.
 * @static
 * @member sol.dev.ix.dynkwl.FindUnitTestIterator
 * @return {DynamicKeywordDataProvider}
 */
function getDataIterator() {
  var log = sol.create("sol.Logger", { scope: "sol.dev.ix.dynkwl.FindUnitTestIterator" }),
      iterator;
  try {
    log.info("DynamicKeywordList (");
    iterator = sol.create("sol.dev.ix.dynkwl.FindUnitTestIterator", {});
    return new DynamicKeywordDataProvider(iterator);
  } finally {
    log.info(")getDataIterator");
  }
}