From 6f0f36b4a7f49cc5f4774b84f69ef90b18e2ed22 Mon Sep 17 00:00:00 2001
From: Johannes Hoermann <j.hoermann@adito.de>
Date: Fri, 11 Oct 2019 14:32:12 +0200
Subject: [PATCH] use SqlBuilder in basic

---
 .../attribute_type/stateProcess.js            |   1 +
 .../recordcontainers/jdito/onInsert.js        |  10 -
 process/Attribute_lib/process.js              | 222 +++++++++---------
 3 files changed, 118 insertions(+), 115 deletions(-)

diff --git a/entity/Attribute_entity/entityfields/attribute_type/stateProcess.js b/entity/Attribute_entity/entityfields/attribute_type/stateProcess.js
index 1ebb324006..e33bb1bcb1 100644
--- a/entity/Attribute_entity/entityfields/attribute_type/stateProcess.js
+++ b/entity/Attribute_entity/entityfields/attribute_type/stateProcess.js
@@ -1,3 +1,4 @@
+import("system.logging");
 import("system.db");
 import("system.neon");
 import("system.result");
diff --git a/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js b/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js
index 841267137b..5f2bbf6be7 100644
--- a/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js
@@ -1,12 +1,9 @@
-import("system.logging");
 import("Contact_lib");
 import("system.util");
 import("ObjectRelation_lib");
 import("system.vars");
 import("system.db");
 
-logging.log(JSON.stringify(["hasdf"], null, "\t"))
-
 selectedObjectRelationTypeId = vars.get("$field.OBJECTRELATIONTYPEID");
 if (selectedObjectRelationTypeId)
 {
@@ -32,13 +29,6 @@ if (selectedObjectRelationTypeId)
             objectId1 = vars.get("$field.PARENT_ID");
             objectId2 = vars.get("$field.TARGET_ID");
         }
-        
-        logging.log(JSON.stringify([side,
-            vars.get("$field.TARGET_ID"),
-            vars.get("$field.PARENT_ID"),
-            objectId1,
-            objectId2
-        ], null, "\t"))
 
         db.insertData("AB_OBJECTRELATION", [
             "AB_OBJECTRELATIONID",
diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js
index 8172a5948b..a05e631dba 100644
--- a/process/Attribute_lib/process.js
+++ b/process/Attribute_lib/process.js
@@ -1,3 +1,4 @@
+import("system.logging");
 import("Employee_lib");
 import("KeywordData_lib");
 import("Context_lib");
@@ -129,15 +130,17 @@ AttributeUtil.getPossibleListValues = function (pAttributeId, pAttributeType, pI
     var onlyActives = (pIncludeInactives == undefined ? false : pIncludeInactives);
     if (attrType == $AttributeTypes.COMBO.toString())
     {
-        var valueSql = SqlCondition.begin()
-            .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", attributeId)
-            .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE);
-        
+        var valuesSelect = newSelect("AB_ATTRIBUTEID, ATTRIBUTE_NAME")
+                                .from("AB_ATTRIBUTE")
+                                .where("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", attributeId)
+                                .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE);
+                                
         if (onlyActives)
-            valueSql.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_ACTIVE", "1");
+            valuesSelect.and("AB_ATTRIBUTE.ATTRIBUTE_ACTIVE", "1");
         
-        valueSql = valueSql.buildSql("select AB_ATTRIBUTEID, ATTRIBUTE_NAME from AB_ATTRIBUTE", "1=2", "order by SORTING asc");
-        var valueList = db.table(valueSql);
+        var valueList = valuesSelect.orderBy("SORTING asc")
+                                    .table();
+            
         for (let i = 0; i < valueList.length; i++)
         {
             valueList[i][1] = translate.text(valueList[i][1]);
@@ -153,20 +156,20 @@ AttributeUtil.getPossibleListValues = function (pAttributeId, pAttributeType, pI
     }
     else if (attrType == $AttributeTypes.KEYWORD.toString())
     {
-        var attrKeywordSelect = "select DROPDOWNDEFINITION from AB_ATTRIBUTE";
-        attrKeywordSelect = SqlCondition.begin()
-            .andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", attributeId)
-            .buildSql(attrKeywordSelect);
-        var attrKeyword = db.cell(attrKeywordSelect);
+        var attrKeyword = newSelect("DROPDOWNDEFINITION")
+                                .from("AB_ATTRIBUTE")
+                                .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", attributeId)
+                                .cell();
+            
         var keywords = KeywordData.getSimpleData(attrKeyword, null, onlyActives);
         return keywords;
     }
     else if (attrType == $AttributeTypes.OBJECTSELECTION)
     {
-        var [module, filter] = db.array(db.ROW, SqlCondition.begin()
-            .andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", attributeId)
-            .buildSql("select DROPDOWNDEFINITION, DROPDOWNFILTER from AB_ATTRIBUTE")
-            );
+        var [module, filter] = newSelect("DROPDOWNDEFINITION, DROPDOWNFILTER")
+                                    .from("AB_ATTRIBUTE")
+                                    .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", attributeId)
+                                    .arrayRow();
         var objects = [];
         if (module)
         {
@@ -217,13 +220,12 @@ AttributeUtil.getFullAttributeName = function (pAttributeId, pSimpleName, pTrans
     var attributeNames = [];
     var attribute;
     do {
-        attribute = db.array(db.ROW, SqlCondition.begin()
-            .andPrepare(["AB_ATTRIBUTE", "AB_ATTRIBUTEID", "ATTRIBUTE"], pAttributeId)
-            .buildSql("select ATTRIBUTE.ATTRIBUTE_NAME, PARENT1.ATTRIBUTE_NAME, PARENT2.ATTRIBUTE_NAME, PARENT2.ATTRIBUTE_PARENT_ID \n\
-                from AB_ATTRIBUTE ATTRIBUTE \n\
-                left join AB_ATTRIBUTE PARENT1 on ATTRIBUTE.ATTRIBUTE_PARENT_ID = PARENT1.AB_ATTRIBUTEID \n\
-                left join AB_ATTRIBUTE PARENT2 on PARENT1.ATTRIBUTE_PARENT_ID = PARENT2.AB_ATTRIBUTEID")
-        );
+        attribute = newSelect("ATTRIBUTE.ATTRIBUTE_NAME, PARENT1.ATTRIBUTE_NAME, PARENT2.ATTRIBUTE_NAME, PARENT2.ATTRIBUTE_PARENT_ID")
+                        .from("AB_ATTRIBUTE ATTRIBUTE")
+                        .leftJoin("AB_ATTRIBUTE PARENT1", "ATTRIBUTE.ATTRIBUTE_PARENT_ID = PARENT1.AB_ATTRIBUTEID")
+                        .leftJoin("AB_ATTRIBUTE PARENT2", "PARENT1.ATTRIBUTE_PARENT_ID = PARENT2.AB_ATTRIBUTEID")
+                        .where(["AB_ATTRIBUTE", "AB_ATTRIBUTEID", "ATTRIBUTE"], pAttributeId)
+
         if (attribute.length > 0)
         {
             attributeNames.push(attribute[0]);
@@ -257,10 +259,10 @@ AttributeUtil.getFullAttributeName = function (pAttributeId, pSimpleName, pTrans
  */
 AttributeUtil.getSimpleAttributeName = function (pAttributeId, pTranslate) 
 {
-    var attributeName = db.cell(SqlCondition.begin()
-        .andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeId)
-        .buildSql("select ATTRIBUTE_NAME from AB_ATTRIBUTE")
-    );
+    var attributeName = newSelect("ATTRIBUTE_NAME")
+                            .from("AB_ATTRIBUTE")
+                            .whereIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeId)
+                            .cell(true, "");
     if (pTranslate)
         attributeName = translate.text(attributeName);
     return attributeName;
@@ -281,10 +283,11 @@ AttributeUtil.getAllChildren = function (pAttributeIds)
         
     while (pAttributeIds.length > 0)
     {
-        pAttributeIds = db.array(db.COLUMN, SqlCondition.begin()
-            .andIn("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", pAttributeIds)
-            .buildSql("select AB_ATTRIBUTEID from AB_ATTRIBUTE")
-        );
+        pAttributeIds = newSelect("AB_ATTRIBUTEID")
+                            .from("AB_ATTRIBUTE")
+                            .where("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", pAttributeIds, SqlBuilder.IN())
+                            .arrayColumn();
+
         if (pAttributeIds.length > 0)
             childIds = childIds.concat(pAttributeIds);
     }
@@ -302,12 +305,10 @@ AttributeUtil.hasRelations = function (pAttributeId)
 {
     if (!pAttributeId)
         return false;
-    return db.cell(SqlCondition.begin()
-        .andPrepare("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", pAttributeId)
-        .buildSql(
-            "select count(*) from AB_ATTRIBUTERELATION", "1=2" //TODO: is there a way exists could be used?
-        )
-    ) != "0";
+    return newSelect("count(*)")
+                .from("AB_ATTRIBUTERELATION")
+                .where("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", pAttributeId)
+                .cell() != "0"; //TODO: is there a way exists could be used?
 }
 
 /**
@@ -321,27 +322,26 @@ AttributeUtil.getAttributeType = function (pAttributeId)
 {
     if (!pAttributeId)
         return "";
-    var attrTypeSelect = "select ATTRIBUTE_TYPE from AB_ATTRIBUTE";
-    attrTypeSelect = SqlCondition.begin()
-        .andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeId)
-        .buildSql(attrTypeSelect);
-    return db.cell(attrTypeSelect).trim();
+
+    return newSelect("ATTRIBUTE_TYPE")
+                .from("AB_ATTRIBUTE")
+                .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeId)
+                .cell()
+                .trim();
 }
 
 AttributeUtil.hasAttributes = function (pObjectType)
 {
     if (!pObjectType)
         return false;
-    return db.cell(SqlCondition.begin()
-        .andPrepare("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType)
-        .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_ACTIVE", "1")
-        .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE, "# != ?")
-        .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.GROUP, "# != ?")
-        .buildSql(
-            "select count(*) from AB_ATTRIBUTEUSAGE \n\
-            join AB_ATTRIBUTE on AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID", "1=2"
-        )
-    ) != "0"; //TODO: is there a way exists could be used?
+    return newSelect("count(*)")
+                .from("AB_ATTRIBUTEUSAGE")
+                .join("AB_ATTRIBUTE", "AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID")
+                .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType)
+                .and("AB_ATTRIBUTE.ATTRIBUTE_ACTIVE", "1")
+                .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE, "# != ?")
+                .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.GROUP, "# != ?")
+                .cell() != "0"; //TODO: is there a way exists could be used?
 }
 
 /*********************************************************************************************************************/
@@ -367,12 +367,6 @@ function AttributeRelationUtils () {}
  */
 AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObjectType, pGetViewValue, pGetAttrname)
 {
-    var attrCond = SqlCondition.begin()
-        .andPrepare("AB_ATTRIBUTERELATION.OBJECT_ROWID", pObjectRowId)
-        .andPrepare("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", pAttributeId);
-    if (pObjectType != null)
-        attrCond.andPrepare("AB_ATTRIBUTERELATION.OBJECT_TYPE", pObjectType);
-    
     var defaultFields = [
         "AB_ATTRIBUTE.ATTRIBUTE_TYPE", 
         "AB_ATTRIBUTE.DROPDOWNDEFINITION", 
@@ -383,11 +377,11 @@ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObj
         defaultFields.push("AB_ATTRIBUTE.ATTRIBUTE_NAME");    
     
     var valueFields = AttributeTypeUtil.getAllDatabaseFields();
-    var attributeSql = attrCond.buildSql("select " + defaultFields.join(", ") + ", " + valueFields.join(", ")
-        + " from AB_ATTRIBUTERELATION join AB_ATTRIBUTE on AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID"
-        + " left join AB_ATTRIBUTE COMBOVAL on " + $AttributeTypes.COMBO.databaseField + " = COMBOVAL.AB_ATTRIBUTEID");
-    
-    var attributeValues = db.array(db.ROW, attributeSql);
+
+    var attributeValues = AttributeRelationUtils.getAttributeSqlBuilder(defaultFields.concat(valueFields), pObjectRowId, pObjectType)
+                                                .and("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", pAttributeId)
+                                                .arrayRow();
+        
     if (!attributeValues.length)
         return null;
     
@@ -403,6 +397,27 @@ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObj
     return value;
 }
 
+/**
+ * Get a SqlBuilder already containing the full select for attributes.
+ * @param {String[]} pFields array of all fields which should be selected
+ * @param {String} pObjectRowId object rowid
+ * @param {String} [pObjectType=null] object-type
+ * 
+ * @return {SqlBuilder} a already filled SqlBuilder
+ */
+AttributeRelationUtils.getAttributeSqlBuilder = function (pFields, pObjectRowId, pObjectType)
+{
+    if (!pObjectType)
+        pObjectType = null;
+    
+    return newSelect(pFields)
+                .from("AB_ATTRIBUTERELATION")
+                .join("AB_ATTRIBUTE", "AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID")
+                .leftJoin("AB_ATTRIBUTE COMBOVAL", $AttributeTypes.COMBO.databaseField + " = COMBOVAL.AB_ATTRIBUTEID")
+                .where("AB_ATTRIBUTERELATION.OBJECT_ROWID", pObjectRowId)
+                .andIfSet("AB_ATTRIBUTERELATION.OBJECT_TYPE", pObjectType);
+}
+
 /**
  * gets all attributes for a dataset
  * 
@@ -416,12 +431,7 @@ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObj
  * @return {String[][]} two-dimensional array a row is [attributeId|attributeName, value] (or [attributeId, attributeName, value])
  */
 AttributeRelationUtils.getAllAttributes = function (pObjectRowId, pObjectType, pUseAttributeIds, pUseIdValues)
-{
-    var attrCond = SqlCondition.begin()
-        .andPrepare("AB_ATTRIBUTERELATION.OBJECT_ROWID", pObjectRowId);
-    if (pObjectType != null)
-        attrCond.andPrepare("AB_ATTRIBUTERELATION.OBJECT_TYPE", pObjectType);
-    
+{    
     var defaultFields = [
         "AB_ATTRIBUTE_ID", 
         "AB_ATTRIBUTE.ATTRIBUTE_TYPE", 
@@ -429,12 +439,13 @@ AttributeRelationUtils.getAllAttributes = function (pObjectRowId, pObjectType, p
         "COMBOVAL.ATTRIBUTE_NAME"
     ];
     var valueFields = AttributeTypeUtil.getAllDatabaseFields();
-    var attributeSql = attrCond.buildSql("select " + defaultFields.join(", ") + ", " + valueFields.join(", ")
-        + " from AB_ATTRIBUTERELATION join AB_ATTRIBUTE on AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID"
-        + " left join AB_ATTRIBUTE COMBOVAL on " + $AttributeTypes.COMBO.databaseField + " = COMBOVAL.AB_ATTRIBUTEID");
     
     var attributeNameMap = {};
-    var attributeValues = db.table(attributeSql).map(function (row) 
+    
+    var attributeValues = AttributeRelationUtils.getAttributeSqlBuilder(defaultFields.concat(valueFields), pObjectRowId, pObjectType)
+                                                .arrayRow();
+    
+    attributeValues = attributeValues.map(function (row) 
     {
         let attribute = row[0];
         let attrname;
@@ -485,11 +496,11 @@ AttributeRelationUtils.getAllAttributes = function (pObjectRowId, pObjectType, p
  */
 AttributeRelationUtils.selectAttributeValue = function (pAttributeId, pValueMap, pGetViewValue)
 {
-    var sqlSelect = "select ATTRIBUTE_TYPE, DROPDOWNDEFINITION from AB_ATTRIBUTE";
-    var type = db.array(db.ROW, SqlCondition.begin()
-        .andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeId)
-        .buildSql(sqlSelect)
-    );
+    var type = newSelect("ATTRIBUTE_TYPE, DROPDOWNDEFINITION")
+                    .from("AB_ATTRIBUTE")
+                    .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeId)
+                    .arrayRow();
+                    
     if (!type.length)
         return null;
     
@@ -498,10 +509,10 @@ AttributeRelationUtils.selectAttributeValue = function (pAttributeId, pValueMap,
     var value = pValueMap[field];
     if (pGetViewValue && type[0] == $AttributeTypes.COMBO)
     {
-        value = db.cell(SqlCondition.begin()
-            .andPrepare("AB_ATTRIBUTE.AB_ATTRIBUTEID", value)
-            .buildSql("select ATTRIBUTE_NAME from AB_ATTRIBUTE")
-        );
+        value = newSelect("ATTRIBUTE_NAME")
+                    .from("AB_ATTRIBUTE")
+                    .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", value)
+                    .cell();
     }
     else if (pGetViewValue)
         value = AttributeTypeUtil.getAttributeViewValue(type[0], value, type[1]);
@@ -550,16 +561,16 @@ AttributeRelationUtils.insertAttribute = function (pRowId, pObjectType, pAttribu
  */
 AttributeRelationUtils.presetMandatoryAttributes = function (pObjectType, pConsumer)
 {
-    var mandatoryAttributes = db.table(
-        SqlCondition.begin()
-            .andPrepare("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType)
-            .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE, "# <> ?")
-            .andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.GROUP, "# <> ?")
-            .and("ATTRIBUTE_ACTIVE = 1")
-            .and("MIN_COUNT > 0")
-            .buildSql("select AB_ATTRIBUTE_ID, MIN_COUNT from AB_ATTRIBUTEUSAGE "
-                + "join AB_ATTRIBUTE on AB_ATTRIBUTE_ID = AB_ATTRIBUTEID")
-    );
+    var mandatoryAttributes = newSelect("AB_ATTRIBUTE_ID, MIN_COUNT")
+                                    .from("AB_ATTRIBUTEUSAGE")
+                                    .join("AB_ATTRIBUTE", "AB_ATTRIBUTE_ID = AB_ATTRIBUTEID")
+                                    .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType)
+                                    .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE, "# <> ?")
+                                    .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.GROUP, "# <> ?")
+                                    .and("ATTRIBUTE_ACTIVE = 1")
+                                    .and("MIN_COUNT > 0")
+                                    .table();
+                                    
     mandatoryAttributes.forEach(function (usage)
     {
         //adding an attribute more than 20 times would be too much (having a min_count > 20 is very unlikely)
@@ -615,21 +626,21 @@ AttributeRelationUtils.validateAttributeCount = function (pRowId, pObjectType, p
             this[row.AB_ATTRIBUTE_ID] = (this[row.AB_ATTRIBUTE_ID] || 0) + 1;
         }, countObj);
     }
-    var attributeCondition = SqlCondition.begin();
-    AttributeUtil.getPossibleAttributes(pObjectType, undefined, pFilteredAttributeIds).forEach(function (attributeId)
-    {
-        this.orPrepare("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", attributeId);
-    }, attributeCondition);
     
-    var usageCondition = SqlCondition.begin()
-        .andPrepare("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType)
-        .andSqlCondition(attributeCondition, "1=2");
+    var possibleAttributes = AttributeUtil.getPossibleAttributes(pObjectType, undefined, pFilteredAttributeIds);
+    var minMaxCounts = [];
     
-    //retrieve all min/max counts of the possible attributes
-    var minMaxCounts = db.table(usageCondition.buildSql(
-          "select AB_ATTRIBUTEID, ATTRIBUTE_NAME, MIN_COUNT, MAX_COUNT from AB_ATTRIBUTEUSAGE \
-           join AB_ATTRIBUTE on AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID", "1=2"
-    ));
+    if (possibleAttributes.length > 0)
+    {
+        var minMaxCountsSelect = newSelect("AB_ATTRIBUTEID, ATTRIBUTE_NAME, MIN_COUNT, MAX_COUNT")
+                                    .from("AB_ATTRIBUTEUSAGE")
+                                    .join("AB_ATTRIBUTE", "AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID")
+                                    .and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", possibleAttributes, SqlBuilder.IN())
+                                    .andPrepare("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType)
+
+        //retrieve all min/max counts of the possible attributes
+        minMaxCounts = minMaxCountsSelect.table();
+    }
         
     var validationMessage = [];
     minMaxCounts.forEach(function ([attributeId, name, minCount, maxCount])
@@ -914,6 +925,7 @@ AttributeTypeUtil.getContentType = function (pAttributeType)
  */
 AttributeTypeUtil.isGroupType = function (pAttributeType)
 {
+    logging.log(JSON.stringify([pAttributeType], null, "\t"))
     if (pAttributeType)
     {
         pAttributeType = pAttributeType.trim();
-- 
GitLab