importPackage(Packages.de.elo.ix.client);
importPackage(Packages.de.elo.ix.jscript);
importPackage(Packages.de.elo.ix.scripting);
//@include lib_Class.js
//@include lib_sol.common.ix.DynKwlSearchIterator.js
/**
* Child Search Iterator used by dynamic keyword lists. This class provides an abstract layer that simplifies the usage
* of keywording information from all children of a given parent.
*
* This is used for example if a folder in ELO contains several templates that should be selected in keywording forms or
* ELOwf forms.
*
* # Example implementation
*
* sol.define('sol.pubsec.ix.dynkwl.generators.NameFile', {
* extend: 'sol.common.ix.DynKwlFindChildrenIterator',
*
* tableTitle: 'Generators - File Name',
* tableKeyNames: ["FILE_NAME_GEN", null],
* parentId: '123'
* });
*
* function getDataIterator() {
* var iterator;
* iterator = sol.create('sol.pubsec.ix.dynkwl.generators.NameFile', { });
* return new DynamicKeywordDataProvider(iterator);
* }
*
* @author Nils Mosbach, ELO Digital Office GmbH
* @version 1.0
*
* @requires sol.Logger
* @requires sol.common.ix.DynKwlSearchIterator
*/
sol.define("sol.common.ix.DynKwlFindChildrenIterator", {
extend: "sol.common.ix.DynKwlSearchIterator",
* @cfg
* @inheritdoc
*/
tableHeaders: ["Name", "Description"],
/**
* @cfg
* Parent id that is used by the FindChildren search.
*/
parentId: null,
/**
* @cfg
* @inheritdoc
*/
searchParams: [{ mode: "STARTS_WITH" }],
initialize: function (config) {
this.log = sol.create("sol.Logger", { scope: this.$className || "sol.common.ix.SearchIterator" });
this.log.enter("initialize", config);
config = config || {};
if ((!this.parentId && !config.parentId)) {
this.log.error("Dynamic keyword list: parentId must be set.");
}
this.parentId = config.parentId || this.parentId;
this.$super("sol.common.ix.DynKwlSearchIterator", "initialize", arguments);
this.log.exit("initialize");
},
/**
* Implements a find children search that is filtered by name.
* @param {Array} filterList
* @return {de.elo.ix.client.FindInfo}
*/
getFindInfo: function (filterList) {
this.log.enter("getFindInfo");
var findInfo,
findChildren, findByIndex;
findInfo = new FindInfo();
findChildren = new FindChildren();
findChildren.parentId = this.parentId;
findInfo.findChildren = findChildren;
if (filterList && filterList.length > 0) {
findByIndex = new FindByIndex();
findByIndex.name = filterList[0];
findInfo.findByIndex = findByIndex;
}
this.log.exit("getFindInfo");
return findInfo;
},
/**
* @private
* Retrieves a list of search results based on the given FindInfo object. Result list is limited to 100 items.
* @return {de.elo.ix.client.Sord[]}
*/
getSearchResults: function () {
this.log.enter("getSearchResults", this._findInfo);
var findResult, sords;
findResult = ixConnect.ix().findFirstSords(this._findInfo, this.searchCount, this.searchSordZ);
sords = findResult.sords || [];
sords = this.filterDynamicFolderResultByName(sords);
ixConnect.ix().findClose(findResult.searchId);
this.log.info("found sords: " + sords.length);
this.log.exit("getSearchResults");
return sords;
},
/**
* @private
* Filter dynamic folder result by name
* The IX does not filter by names at dynamic folders. Therefore this is done afterwards.
*/
filterDynamicFolderResultByName: function (sords) {
var me = this,
filteredSords = [],
parentSord, parentSordDesc, i, sord, sordName;
parentSord = ixConnect.ix().checkoutSord(me._findInfo.findChildren.parentId, new SordZ(SordC.mbDesc), LockC.NO);
parentSordDesc = parentSord.desc + "";
if ((parentSordDesc.indexOf("!") != 0) || !me.focusValue) {
return sords;
}
for (i = 0; i < sords.length; i++) {
sord = sords[i];
sordName = sord.name + "";
if (sordName.toLowerCase().indexOf(me.focusValue.toLowerCase()) > -1) {
filteredSords.push(sord);
}
}
return filteredSords;
},
/**
* Basic implementation for search results.
* This returns the sord name and sord description (notes).
* @param {de.elo.ix.client.Sord} sord
* @return {Object}
*/
getRowData: function (sord) {
return [sord.name, sord.desc];
}
});