// (c) 2019, Questetra, Inc. (the MIT License)
/*
input tsv
A1 B1 C1 D1 E1
A2 B2 C2 D2 E2
column id list
0,1,3,0
output tsv
A1 B1 D1 A1
A2 B2 D2 A2
*/
//////// START "main()" ////////
main();
function main(){
//// == Config Retrieving / 工程コンフィグの参照 ==
const dataIdA = configs.get( "conf_DataIdA" ) + ""; // config required
const columns = configs.get( "conf_Columns" ) + ""; // config required
const dataIdC = configs.get( "conf_DataIdC" ) + ""; // config required
// 'java.lang.String' to javascript primitive 'string' by ""
// Design-time Config Format Check
engine.log( " AutomatedTask Config: Column ID List " + columns );
if ( columns.match(/^[0-9][0-9,]*$/) === null ){
throw new Error( "\n AutomatedTask UnexpectedConfigError:" +
" Config {Column ID List} allows only numbers and commas. \n" );
}
const arrColumns = columns.split(",");
//// == Data Retrieving / ワークフローデータの参照 ==
// Run-time Data Format Check
if( engine.findDataByNumber( dataIdA ) === null ){
throw new Error( "\n AutomatedTask UnexpectedStringError:" +
" String {A} as TSV is null \n" );
}
const inputText = (engine.findDataByNumber( dataIdA ) + "").trim();
if( inputText === "" ){
throw new Error( "\n AutomatedTask UnexpectedStringError:" +
" String {A} as TSV is empty \n" );
}
//// == Calculating / 演算 ==
let outputText = "";
const arrInputText = inputText.split("\n");
engine.log( " AutomatedTask MultilineString:" +
" String {A} as TSV, number of lines " + arrInputText.length );
for( let i = 0; i < arrInputText.length; i++ ){
let arrCellValues = arrInputText[i].split("\t");
for( let j = 0; j < arrColumns.length; j++ ){
if ( arrColumns[j] === "" ){
throw new Error( "\n AutomatedTask ConfigError:" +
" Config {Column ID List} must be CSV format \n" );
}
outputText += arrCellValues[ (arrColumns[j] - 0) ];
if( j !== arrColumns.length - 1 ){
outputText += "\t";
}
}
if( i !== arrInputText.length - 1 ){
outputText += "\n";
}
}
//// == Data Updating / ワークフローデータへの代入 ==
engine.setDataByNumber( dataIdC, outputText );
} //////// END "main()" ////////