From 03002963aa280746c729ecd4729e38a2d4815c61 Mon Sep 17 00:00:00 2001 From: "S.Listl" <S.Listl@SLISTL.aditosoftware.local> Date: Fri, 8 Mar 2019 15:20:57 +0100 Subject: [PATCH] Attribute_lib changes --- entity/Attribute_entity/Attribute_entity.aod | 5 - .../createliquibasescript/onActionProcess.js | 71 ---------- .../AttributeFilter_view.aod | 4 +- process/Attribute_lib/process.js | 125 +++++++++--------- 4 files changed, 64 insertions(+), 141 deletions(-) delete mode 100644 entity/Attribute_entity/entityfields/createliquibasescript/onActionProcess.js diff --git a/entity/Attribute_entity/Attribute_entity.aod b/entity/Attribute_entity/Attribute_entity.aod index a1fed07f49..bbd6bd8fab 100644 --- a/entity/Attribute_entity/Attribute_entity.aod +++ b/entity/Attribute_entity/Attribute_entity.aod @@ -135,11 +135,6 @@ <state>AUTO</state> <stateProcess>%aditoprj%/entity/Attribute_entity/entityfields/keyword_container/stateProcess.js</stateProcess> </entityField> - <entityActionField> - <name>createLiquibaseScript</name> - <fieldType>ACTION</fieldType> - <onActionProcess>%aditoprj%/entity/Attribute_entity/entityfields/createliquibasescript/onActionProcess.js</onActionProcess> - </entityActionField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Attribute_entity/entityfields/createliquibasescript/onActionProcess.js b/entity/Attribute_entity/entityfields/createliquibasescript/onActionProcess.js deleted file mode 100644 index 179ac87d08..0000000000 --- a/entity/Attribute_entity/entityfields/createliquibasescript/onActionProcess.js +++ /dev/null @@ -1,71 +0,0 @@ -import("system.logging"); -import("system.text"); -import("system.question"); - -var attributeJson = question.askUpload("yeet", "yeet", "yeet"); -attributeJson = text.parseDocument(attributeJson); - -var attributeObj = JSON.parse(attributeJson); - -var attributes = attributeObj.AB_ATTRIBUTE; -var attributeUsages = attributeObj.AB_ATTRIBUTEUSAGE; - -var inserts = ""; -var rollbacks = ""; - -var sqlAttrObj = {}; -var levelObj = {}; - -for (let i = 0; i < attributes.length; i++) -{ - if (attributes[i].ATTRIBUTE_TYPE == "COMBO") - levelObj[attributes[i].AB_ATTRIBUTEID] = attributes[i].ATTRIBUTE_PARENT_ID != ""; -} - -for (let i = 0; i < attributes.length; i++) -{ - if (attributes[i].ATTRIBUTE_TYPE != "SQLCOMBO") - { - var sort = attributes[i].ATTRIBUTE_SORT != "" ? attributes[i].ATTRIBUTE_SORT - 1 : ""; - var level = 0; - if (attributes[i].ATTRIBUTE_PARENT_ID != "") - { - level++; - if (levelObj[attributes[i].ATTRIBUTE_PARENT_ID]) - level++; - } - inserts += "<insert tableName=\"AB_ATTRIBUTE\">\n\ -\t<column name=\"AB_ATTRIBUTEID\" value=\"" + attributes[i].AB_ATTRIBUTEID + "\"/>\n\ -\t<column name=\"ATTRIBUTE_NAME\" value=\"" + attributes[i].ATTRIBUTE_NAME + "\"/>\n\ -\t<column name=\"ATTRIBUTE_TYPE\" value=\"" + attributes[i].ATTRIBUTE_TYPE + "\"/>\n\ -\t<column name=\"ATTRIBUTE_PARENT_ID\" value=\"" + attributes[i].ATTRIBUTE_PARENT_ID + "\"/>\n\ -\t<column name=\"SORTING\" valueNumeric=\"" + sort + "\"/>\n\ -\t<column name=\"ATTRIBUTE_ACTIVE\" valueNumeric=\"1\"/>\n\ -\t<column name=\"ATTRIBUTE_LEVEL\" valueNumeric=\"" + level + "\"/>\n\ -</insert>\n"; - - } - else - sqlAttrObj[attributes[i].AB_ATTRIBUTEID] = true; - -} - -for (let i = 0; i < attributeUsages.length; i++) -{ - if (!sqlAttrObj[attributeUsages[i].AB_ATTRIBUTE_ID]) - { - inserts += "<insert tableName=\"AB_ATTRIBUTEUSAGE\">\n\ -\t<column name=\"AB_ATTRIBUTEUSAGEID\" value=\"" + attributeUsages[i].AB_ATTRIBUTEUSAGEID + "\"/>\n\ -\t<column name=\"OBJECT_TYPE\" value=\"" + attributeUsages[i].ATTRIBUTE_NAME + "\"/>\n\ -\t<column name=\"AB_ATTRIBUTE_ID\" value=\"" + attributeUsages[i].ATTRIBUTE_TYPE + "\"/>\n\ -\t<column name=\"MIN_COUNT\" valueNumeric=\"" + attributeUsages.MINCOUNT + "\"/>\n\ -\t<column name=\"MAX_COUNT\" valueNumeric=\"" + attributeUsages.MAXCOUNT + "\"/>\n\ -</insert>\n"; - - } - else - sqlAttrObj[attributes[i].AB_ATTRIBUTEID] = true; - -} - -logging.log(inserts) \ No newline at end of file diff --git a/neonView/AttributeFilter_view/AttributeFilter_view.aod b/neonView/AttributeFilter_view/AttributeFilter_view.aod index 25407224ad..dcfb1f1c36 100644 --- a/neonView/AttributeFilter_view/AttributeFilter_view.aod +++ b/neonView/AttributeFilter_view/AttributeFilter_view.aod @@ -5,9 +5,9 @@ <majorModelMode>DISTRIBUTED</majorModelMode> <filterable v="true" /> <layout> - <boxLayout> + <groupLayout> <name>layout</name> - </boxLayout> + </groupLayout> </layout> <children> <treetableViewTemplate> diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js index 9a4eb24c50..7ff090a79c 100644 --- a/process/Attribute_lib/process.js +++ b/process/Attribute_lib/process.js @@ -139,18 +139,29 @@ function AttributeRelationUtils () {} /** * gets the value of an attributeRelation for one dataset (e. g. a person) + * + * @param {String} pAttributeId attribute-id + * @param {String} pObjectRowId row-id of the dataset + * @param {String} [pObjectType=null] object-type + * + * @return {String|null} the value of the attribute */ AttributeRelationUtils.getAttribute = function (pAttributeId, pObjectRowId, pObjectType) { - var attrCond = SqlCondition().begin() + var attrCond = SqlCondition.begin() .andPrepare("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", pAttributeId) .andPrepare("AB_ATTRIBUTERELATION.OBJECT_ROWID", pObjectRowId); if (pObjectType != null) attrCond.andPrepare("AB_ATTRIBUTERELATION.OBJECT_TYPE", pAttributeId); - var attrSql = AttributeRelationUtils.getSqlUtil(); - var attributeValues = db.array(db.ROW, attrCond.buildSql(attrSql.sqlSelect)); - return attrSql.getFieldFromType(attributeValues); + var attributeSql = attrCond.buildSql("select ATTRIBUTE_TYPE, " + AttributeTypeUtil.getAllDatabaseFields() + + " from AB_ATTRIBUTERELATION join AB_ATTRIBUTE on AB_ATTRIBUTE_ID = AB_ATTRIBUTEID"); + var attributeValues = db.array(db.ROW, attributeSql); + if (attributeValues.length == 0) + return null; + + var valueIndex = AttributeTypeUtil.getTypeColumnIndex(attributeValues[0]) + 1; + return attributeValues[valueIndex]; } AttributeRelationUtils.getAttributes = function () @@ -166,59 +177,6 @@ AttributeRelationUtils.setAttribute = function () //TODO: implement } -/** - * Builds an object for the work with the values of attributeRelations. This should make - * the attribute type definition more flexible, the returned object has the following properties - * and methods: - * - * columns = array of all database columns in AB_ATTRIBUTERELATION that hold attribute values - * typeColMap = object with the attribute type as key and the index in the columns-array with the column holding - * the value for that attribute type as value - * sqlSelect = an sql-select string where the columns are the type of the attribute plus the value columns - * getFieldFromType = a method that takes a one-dimensional array that has been created with a query using the 'sqlSelect' property - * and returns the value at the right position of that array depending on the type. For example: - * //type, values - * vals = ["TEXT", "abcdef", "", "", "", ""]; - * the method would return "abcdef", because it looks at the first position where the type is, e. g. "TEXT" - * and then it gets the value at, for example, index 1 because the typeColMap object says that the value for type "TEXT" - * is at position 1. - * - */ -AttributeRelationUtils.getSqlUtil = function () -{ - var sqlMap = { - columns : [], - typeColMap : {} - }; - for (let type in $AttributeTypes) - { - type = $AttributeTypes[type]; - if (type.databaseField) - { - var typeKey = type.toString(); - var colIndex = sqlMap.columns.indexOf(type.databaseField); - if (colIndex == -1) - { - colIndex = sqlMap.columns.length; - sqlMap.columns.push(type.databaseField); - } - sqlMap.typeColMap[typeKey] = colIndex; - } - } - - sqlMap.sqlSelect = "select ATTRIBUTE_TYPE, " + sqlMap.columns.join(", ") + " from AB_ATTRIBUTERELATION " - + " join AB_ATTRIBUTE on AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID "; - - sqlMap.getFieldFromType = function (pTypeAndValues) - { - if (pTypeAndValues.length > 0) - return pTypeAndValues[this.typeColMap[pTypeAndValues[0]] + 1]; - return null; - } - - return sqlMap; -} - /*********************************************************************************************************************/ /** @@ -269,7 +227,7 @@ AttributeHandler.prototype.getAttributeType = function () //TODO: maybe the type */ AttributeHandler.prototype.getAttributeField = function () { - return $AttributeTypes.getEntityField(this.getAttributeType()); + return AttributeTypeUtil.getEntityField(this.getAttributeType()); } /** @@ -279,7 +237,7 @@ AttributeHandler.prototype.getAttributeField = function () */ AttributeHandler.prototype.getAttributeContentType = function () { - return $AttributeTypes.getContentType(this.getAttributeType()); + return AttributeTypeUtil.getContentType(this.getAttributeType()); } /** @@ -377,6 +335,10 @@ $AttributeTypes.MEMO = { entityField : "MEMO_VALUE" }; + + +function AttributeTypeUtil () {} + /** * returns the required contentType for the given attribute type * @@ -384,7 +346,7 @@ $AttributeTypes.MEMO = { * (use the values of the AttributeTypes object, e. g. AttributeTypes.TEXT) * @return {String} the contentType for the attribute */ -$AttributeTypes.getContentType = function (pAttributeType) +AttributeTypeUtil.getContentType = function (pAttributeType) { if (pAttributeType in $AttributeTypes) return $AttributeTypes[pAttributeType].contentType; @@ -398,7 +360,7 @@ $AttributeTypes.getContentType = function (pAttributeType) * (use the values of the AttributeTypes object, e. g. AttributeTypes.TEXT) * @return {String} the field for the attribute */ -$AttributeTypes.getEntityField = function (pAttributeType) +AttributeTypeUtil.getEntityField = function (pAttributeType) { if (pAttributeType in $AttributeTypes) return $AttributeTypes[pAttributeType].entityField; @@ -412,7 +374,7 @@ $AttributeTypes.getEntityField = function (pAttributeType) * (use the values of the AttributeTypes object, e. g. AttributeTypes.TEXT) * @return {String} the database field for the attribute */ -$AttributeTypes.getDatabaseField = function (pAttributeType) +AttributeTypeUtil.getDatabaseField = function (pAttributeType) { if (pAttributeType in $AttributeTypes) return $AttributeTypes[pAttributeType].databaseField; @@ -426,9 +388,46 @@ $AttributeTypes.getDatabaseField = function (pAttributeType) * (use the values of the AttributeTypes object, e. g. AttributeTypes.TEXT) * @return {String} the name the attribute */ -$AttributeTypes.getName = function (pAttributeType) +AttributeTypeUtil.getName = function (pAttributeType) { if (pAttributeType in $AttributeTypes) return translate.text($AttributeTypes[pAttributeType].displayName); return null; } + +AttributeTypeUtil._initTypeColumnData = function () +{ + columns = []; + typeColumnMap = {}; + for (let type in $AttributeTypes) + { + type = $AttributeTypes[type]; + if (type.databaseField) + { + var typeKey = type.toString(); + var colIndex = columns.indexOf(type.databaseField); + if (colIndex == -1) + { + colIndex = columns.length; + columns.push(type.databaseField); + } + typeColumnMap[typeKey] = colIndex; + } + } + this._allDBColumns = columns; + this._typeColumnMap = typeColumnMap; +} + +AttributeTypeUtil.getAllDatabaseFields = function () +{ + if (this._allDBColumns == undefined) + AttributeTypeUtil._initTypeColumnData(); + return this._allDBColumns; +} + +AttributeTypeUtil.getTypeColumnIndex = function (pAttributeType) +{ + if (this._typeColumnMap == undefined) + AttributeTypeUtil._initTypeColumnData(); + return this._typeColumnMap[pAttributeType.trim()]; +} -- GitLab