Skip to content
Snippets Groups Projects
contentProcess.js 5.93 KiB
import("KeywordRegistry_basic");
import("system.vars");
import("Sql_lib")
import("system.result");
import("system.db");

var fixedContextName = vars.get("$param.ContextName_param");
var fixedID = vars.get("$param.ID_param");

let resArray = [];

var cond = new SqlCondition();
// Query root element
var root = queryRootElement(fixedContextName, fixedID, true);

if (root !== null) {
    // Push root element
    resArray.push(root);

    // Query children of root
    var children = queryChildrenElements(fixedContextName, fixedID);
    
    if (children !== null) {
     
       // Push each children
       resArray = resArray.concat(children);
       result.object(resArray);
    }
}

/**
 * Queries the children of the given parent element.
 * This function will recursively go through each level of children.
 * 
 * @param pContextName Context name of the parent element.
 * @param pID ID of the parent element.
 */
function queryChildrenElements (pContextName, pID) {
    
    var taskResult = db.table(SqlCondition.begin()
    .andPrepare("TASK.PARENT_ID", pID)
    .andPrepare("TASK.PARENT_CONTEXT", pContextName)
    .andPrepare("TASK.TYPE", $KeywordRegistry.taskType$task())
    .buildSql("select TASKID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TASK"));
    
    
     var ticketResult = db.table(SqlCondition.begin()
    .andPrepare("TASK.PARENT_ID", pID)
    .andPrepare("TASK.PARENT_CONTEXT", pContextName)
    .buildSql("select TICKETID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TICKET left join TASK on TASK_ID = TASKID"));
    
    var activityResult = db.table(SqlCondition.begin()
    .andPrepare("ACTIVITY.PARENT_ID", pID)
    .andPrepare("ACTIVITY.PARENT_CONTEXT", pContextName)
    .buildSql("select ACTIVITYID, PARENT_ID, PARENT_CONTEXT, SUBJECT, INFO from ACTIVITY"));
    
    var res = []
  
    for (let i = 0; i < taskResult.length; i++) {
        // Augment data
        taskResult[i] = augmentData(taskResult[i], "Task");
        res.push(taskResult[i]);
        
        // Query children
        let children = queryChildrenElements("Task", taskResult[i][0]);
        res = res.concat(children);
    }
    
    for (let i = 0; i < activityResult.length; i++) {
        // Augment data
        activityResult[i] = augmentData(activityResult[i], "Activity");
        res.push(activityResult[i]);
        
        // Query children
        let children = queryChildrenElements("Activity", activityResult[i][0]);
        res = res.concat(children);
    }
    
    for (let i = 0; i < ticketResult.length; i++) {
        // Augment data
        ticketResult[i] = augmentData(ticketResult[i], "SupportTicket");
        res.push(ticketResult[i]);
        
        // Query children
        let children = queryChildrenElements("SupportTicket", ticketResult[i][0]);
        res = res.concat(children);
    }
      
    return res;
}

/**
 * Queries the root element.
 * 
 * @param pContextName Context name of the root element.
 * @param pID ID of the root element.
 * @param pGetFirst start from the first element
 */
function queryRootElement (pContextName, pID, pGetFirst) {
    var resultArray;
    if (pContextName === "Task") {
        resultArray = db.array(db.ROW, "select TASKID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TASK where TASKID = '" + pID + "'");
        if (resultArray.length === 0) {
            return null;
        }
        if (pGetFirst && resultArray[1] && resultArray[2])
            return queryRootElement(resultArray[2], resultArray[1], pGetFirst);
        if (pGetFirst)
        {
            fixedContextName = "Task";
            fixedID = resultArray[0];
        }
        return augmentData(resultArray, "Task");
    } else if (pContextName === "Activity") {
        resultArray = db.array(db.ROW, "select ACTIVITYID, PARENT_ID, PARENT_CONTEXT, SUBJECT, INFO from ACTIVITY where ACTIVITYID = '" + pID +"'");
        if (resultArray.length === 0) {
            return null;
        }
        if (pGetFirst && resultArray[1] && resultArray[2])
            return queryRootElement(resultArray[2], resultArray[1], pGetFirst);
        if (pGetFirst)
        {
            fixedContextName = "Activity";
            fixedID = resultArray[0];
        }
        return augmentData(resultArray, "Activity");
    }
    else if (pContextName === "SupportTicket") {
        resultArray = db.array(db.ROW, "select TICKETID, PARENT_ID, PARENT_CONTEXT, SUBJECT, DESCRIPTION from TICKET left join TASK on TASK_ID = TASKID where TICKETID = '" + pID +"'");
        if (resultArray.length === 0) {
            return null;
        }
        if (pGetFirst && resultArray[1] && resultArray[2])
            return queryRootElement(resultArray[2], resultArray[1], pGetFirst);
        if (pGetFirst)
        {
            fixedContextName = "SupportTicket";
            fixedID = resultArray[0];
        }
        return augmentData(resultArray, "SupportTicket");}
    else {
        return null;
    }
}

/**
 * Augments the given row to match the required result signature.
 * 
 * @param pDataRow Requires the following format:
 *                 UID, PARENT_ID, PARENT_CONTEXT, TITLE, DESCRIPTION
 * @param pType The type of the row which needs adjustment.
 * @return Returns the following format:
 *         UID, TYPE, PARENT_ID, PARENT_CONTEX, TITL, DESCRIPTION, ICON
 * 
 */
function augmentData (pDataRow, pType) {
    if (pDataRow === null || pDataRow === undefined)
        return null;
    
    if (pDataRow.length === 0)
        return null;
    
    if (pType !== "Task" && pType !== "Activity" && pType !="SupportTicket")
        return null;
    
    // PARENT_ID check
    if (pDataRow[2] === "")
        pDataRow[2] = null;
    
    // PARENT_CONTEXT check
    if (pDataRow[3] === "")
        pDataRow[3] = null;
    
    // Insert type
    pDataRow.splice(1, 0, pType);
    
    // Insert icon
    pDataRow.splice(6, 0, pType === "Task" ? "VAADIN:TASKS" : pType === "Activity" ? "VAADIN:HOURGLASS_END": pType==="SupportTicket" ? "VAADIN:QUESTION": null);
    
    return pDataRow;
}