Skip to content
Snippets Groups Projects
Commit aa379585 authored by Tom Lutzenberger's avatar Tom Lutzenberger Committed by Johannes Goderbauer
Browse files

#1048996: Implement views, consumers and additional processes

parent 28bf565a
No related branches found
No related tags found
No related merge requests found
Showing
with 286 additions and 19 deletions
......@@ -12,7 +12,7 @@
<column name="SORTINGBY" type="INTEGER">
<constraints nullable="false"/>
</column>
<column name="SORTINGDIRECTION" type="INTEGER">
<column name="SORTINGDIRECTION" type="VARCHAR(4)">
<constraints nullable="false"/>
</column>
</createTable>
......
......@@ -3,4 +3,5 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
<include relativeToChangelogFile="true" file="add_keywordCategory.xml"/>
<include relativeToChangelogFile="true" file="update_keywordEntry.xml"/>
<include relativeToChangelogFile="true" file="update_keywordAttribute.xml"/>
</databaseChangeLog>
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
<changeSet author="t.lutzenberger" id="a3c9ffe8-f7e0-4924-856a-73ecea202750">
<addColumn tableName="AB_KEYWORD_ATTRIBUTE">
<column name="AB_KEYWORD_CATEGORY_ID" type="CHAR(36)" />
</addColumn>
</changeSet>
</databaseChangeLog>
......@@ -86,6 +86,21 @@
<name>#PROVIDER_AGGREGATES</name>
<useAggregates v="true" />
</entityProvider>
<entityField>
<name>AB_KEYWORD_CATEGORY_ID</name>
<title>Container new</title>
<consumer>KeywordCategoryConsumer</consumer>
<mandatory v="true" />
<displayValueProcess>%aditoprj%/entity/KeywordAttribute_entity/entityfields/ab_keyword_category_id/displayValueProcess.js</displayValueProcess>
</entityField>
<entityConsumer>
<name>KeywordCategoryConsumer</name>
<dependency>
<name>dependency</name>
<entityName>KeywordCategory_entity</entityName>
<fieldName>AllKeywordCategoryProvider</fieldName>
</dependency>
</entityConsumer>
</entityFields>
<recordContainers>
<dbRecordContainer>
......@@ -130,6 +145,10 @@
<name>TYPE.displayValue</name>
<expression>%aditoprj%/entity/KeywordAttribute_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js</expression>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>AB_KEYWORD_CATEGORY_ID.value</name>
<recordfield>AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID</recordfield>
</dbRecordFieldMapping>
</recordFieldMappings>
</dbRecordContainer>
</recordContainers>
......
import("system.result");
import("system.vars");
import("Keyword_lib");
var containerName = KeywordUtils.getCategoryNameById(vars.get("$field.AB_KEYWORD_CATEGORY_ID"));
result.string(containerName);
......@@ -54,6 +54,46 @@
</entityDependency>
</dependencies>
</entityProvider>
<entityConsumer>
<name>OrderedByNameFieldKeywordsConsumer</name>
<stateProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/orderedbynamefieldkeywordsconsumer/stateProcess.js</stateProcess>
<dependency>
<name>dependency</name>
<entityName>KeywordEntry_entity</entityName>
<fieldName>OrderedByNameFieldKeywords</fieldName>
</dependency>
<children>
<entityParameter>
<name>ContainerName_param</name>
<valueProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/orderedbynamefieldkeywordsconsumer/children/containername_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
</entityConsumer>
<entityConsumer>
<name>OrderedBySortingFieldKeywordsConsumer</name>
<stateProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/orderedbysortingfieldkeywordsconsumer/stateProcess.js</stateProcess>
<dependency>
<name>dependency</name>
<entityName>KeywordEntry_entity</entityName>
<fieldName>OrderedBySortingFieldKeywords</fieldName>
</dependency>
<children>
<entityParameter>
<name>ContainerName_param</name>
<valueProcess>%aditoprj%/entity/KeywordCategory_entity/entityfields/orderedbysortingfieldkeywordsconsumer/children/containername_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
</entityConsumer>
<entityField>
<name>OrderedByNameFieldKeywords</name>
<consumer>OrderedByNameFieldKeywordsConsumer</consumer>
<state>AUTO</state>
</entityField>
<entityField>
<name>OrderedBySortingFieldKeywords</name>
<consumer>OrderedBySortingFieldKeywordsConsumer</consumer>
<state>AUTO</state>
</entityField>
</entityFields>
<recordContainers>
<dbRecordContainer>
......
import("system.logging");
import("system.result");
import("system.vars");
logging.log("Consumer 'by name', Name = " + vars.get("$field.NAME"));
result.string(vars.get("$field.NAME"));
import("system.neon");
import("system.vars");
import("system.result");
if (vars.get("$field.SORTINGBY") === "0")
result.string(neon.COMPONENTSTATE_INVISIBLE);
else
result.string(neon.COMPONENTSTATE_EDITABLE);
import("system.logging");
import("system.result");
import("system.vars");
logging.log("Consumer 'by sorting', Name = " + vars.get("$field.NAME"));
result.string(vars.get("$field.NAME"));
import("system.neon");
import("system.vars");
import("system.result");
if (vars.get("$field.SORTINGBY") === "0")
result.string(neon.COMPONENTSTATE_EDITABLE);
else
result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
......@@ -3,6 +3,7 @@ import("system.translate");
result.object([
["0", translate.text("by name")],
["1", translate.text("by sorting")]
["0", translate.text("by sorting")],
["1", translate.text("by name")],
["2", translate.text("by translated name")],
]);
\ No newline at end of file
......@@ -3,6 +3,6 @@ import("system.translate");
result.object([
["0", translate.text("ascending")],
["1", translate.text("descending")]
["ASC", translate.text("ascending")],
["DESC", translate.text("descending")]
]);
\ No newline at end of file
......@@ -5,5 +5,5 @@ import("system.vars");
if(vars.get("$this.value") == null && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
{
result.string("0");
result.string("ASC");
}
\ No newline at end of file
......@@ -100,7 +100,7 @@
<entityProvider>
<name>SpecificContainerKeywords</name>
<lookupIdfield>KEYID</lookupIdfield>
<recordContainer>db</recordContainer>
<recordContainer>jDito</recordContainer>
<dependencies>
<entityDependency>
<name>bb48a3ee-f340-4fd4-8c80-ef73b765ab58</name>
......@@ -675,6 +675,50 @@
<fieldName>AllKeywordCategoryProvider</fieldName>
</dependency>
</entityConsumer>
<entityField>
<name>UID</name>
<documentation>%aditoprj%/entity/KeywordEntry_entity/entityfields/uid/documentation.adoc</documentation>
<valueProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/uid/valueProcess.js</valueProcess>
</entityField>
<entityProvider>
<name>OrderedBySortingFieldKeywords</name>
<lookupIdfield>AB_KEYWORD_ENTRYID</lookupIdfield>
<sortingField>SORTING</sortingField>
<recordContainer>db</recordContainer>
<dependencies>
<entityDependency>
<name>f677c429-246a-4550-afc7-73dac953bfbf</name>
<entityName>KeywordCategory_entity</entityName>
<fieldName>OrderedBySortingFieldKeywordsConsumer</fieldName>
<isConsumer v="false" />
</entityDependency>
</dependencies>
<children>
<entityParameter>
<name>ContainerName_param</name>
<expose v="true" />
</entityParameter>
</children>
</entityProvider>
<entityProvider>
<name>OrderedByNameFieldKeywords</name>
<lookupIdfield>AB_KEYWORD_ENTRYID</lookupIdfield>
<recordContainer>jDito</recordContainer>
<dependencies>
<entityDependency>
<name>63218865-e3ef-4fb6-9f0a-3fef321ce30c</name>
<entityName>KeywordCategory_entity</entityName>
<fieldName>OrderedByNameFieldKeywordsConsumer</fieldName>
<isConsumer v="false" />
</entityDependency>
</dependencies>
<children>
<entityParameter>
<name>ContainerName_param</name>
<expose v="true" />
</entityParameter>
</children>
</entityProvider>
</entityFields>
<recordContainers>
<dbRecordContainer>
......@@ -738,5 +782,22 @@
</dbRecordFieldMapping>
</recordFieldMappings>
</dbRecordContainer>
<jDitoRecordContainer>
<name>jDito</name>
<jDitoRecordAlias>Data_alias</jDitoRecordAlias>
<isSortable v="true" />
<contentProcess>%aditoprj%/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
<recordFieldMappings>
<jDitoRecordFieldMapping>
<name>KEYID.value</name>
</jDitoRecordFieldMapping>
<jDitoRecordFieldMapping>
<name>TITLE.value</name>
</jDitoRecordFieldMapping>
<jDitoRecordFieldMapping>
<name>UID.value</name>
</jDitoRecordFieldMapping>
</recordFieldMappings>
</jDitoRecordContainer>
</recordContainers>
</entity>
import("system.result");
import("system.vars");
import("Sql_lib");
import("Keyword_lib");
var containerId = vars.get("$field.AB_KEYWORD_CATEGORY_ID");
var containerName = KeywordUtils.getCategoryNameById(vars.get("$field.AB_KEYWORD_CATEGORY_ID"));
if(containerId == "") {
result.string("<unknown>");
} else {
var containerName = newSelect("AB_KEYWORD_CATEGORY.NAME")
.from("AB_KEYWORD_CATEGORY")
.where("AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID", containerId)
.cell();
result.string(containerName);
}
\ No newline at end of file
result.string(containerName);
Dummy UID field to make jDito RecordContainer work.
It simply returns the value of AB_KEYWORD_ENTRYID, which is the actual UID.
\ No newline at end of file
import("system.result")
import("system.vars")
result.string(vars.get("$field.AB_KEYWORD_ENTRYID"));
import("system.db");
import("system.logging");
import("system.result");
import("system.translate");
import("system.util");
import("system.vars");
import("Sql_lib");
var ENTRY_RESULT_INDEX_KEYID = 0;
var ENTRY_RESULT_INDEX_TITLE = 1;
var ENTRY_RESULT_INDEX_UID = 2;
var CATEGORY_RESULT_INDEX_UID = 0;
var CATEGORY_RESULT_INDEX_NAME = 1;
var CATEGORY_RESULT_INDEX_SORTINGBY = 2;
var CATEGORY_RESULT_INDEX_SORTINGDIR = 3;
var resultSet = [];
var keywordStatement = newSelect("AB_KEYWORD_ENTRY.KEYID, AB_KEYWORD_ENTRY.TITLE, AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID as UID")
.from("AB_KEYWORD_ENTRY")
.join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID = AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID")
;
if(vars.exists("$param.ContainerName_param"))
{
var containerParam = vars.get("$param.ContainerName_param");
logging.log("Keyword jDito, using container = " + containerParam);
var category = newSelect("AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID, AB_KEYWORD_CATEGORY.NAME, AB_KEYWORD_CATEGORY.SORTINGBY, AB_KEYWORD_CATEGORY.SORTINGDIRECTION")
.from("AB_KEYWORD_CATEGORY")
.where("AB_KEYWORD_CATEGORY.NAME", containerParam)
.arrayRow();
var sortingDirection = category[CATEGORY_RESULT_INDEX_SORTINGDIR];
var isSortingAsc = sortingDirection === "ASC";
var sortingField = "";
var isSortingByTranslatedTitle = false;
switch(category[CATEGORY_RESULT_INDEX_SORTINGBY])
{
case "1":
sortingField = "AB_KEYWORD_ENTRY.TITLE";
break;
case "2":
sortingField = "AB_KEYWORD_ENTRY.TITLE";
isSortingByTranslatedTitle = true;
break;
case "0":
default:
sortingField = "AB_KEYWORD_ENTRY.SORTING";
break;
}
resultSet = keywordStatement
.where("AB_KEYWORD_CATEGORY.NAME", containerParam)
.orderBy(sortingField + " " + sortingDirection)
.table()
;
// If sorting is set to translated title (="2"), it must be done separately after DB query because translation can't be done in a query
if(isSortingByTranslatedTitle)
{
resultSet.sort(function(pFirst, pSecond) {
var titleA = translate.text(pFirst[CATEGORY_RESULT_INDEX_NAME]).toUpperCase();
var titleB = translate.text(pSecond[CATEGORY_RESULT_INDEX_NAME]).toUpperCase();
if (titleA < titleB) {
return isSortingAsc ? -1 : 1;
}
if (titleA > titleB) {
return isSortingAsc ? 1 : -1;
}
return 0; // Titles are equal
});
}
}
else
{
resultSet = keywordStatement.orderBy("AB_KEYWORD_ENTRY.SORTING asc").table();
}
logging.log(JSON.stringify(resultSet));
result.object(resultSet);
......@@ -21,5 +21,13 @@
<name>9bb352b9-5a8c-41ac-9c42-7f4f7f4827f3</name>
<view>KeywordEntryPreview_view</view>
</neonViewReference>
<neonViewReference>
<name>e2b889cf-1159-429b-978e-c005d0306156</name>
<view>KeywordEntryMultiEdit_view</view>
</neonViewReference>
<neonViewReference>
<name>71a850a4-1ec3-4a3f-abc0-f0b6eba2e514</name>
<view>KeywordEntryList_view</view>
</neonViewReference>
</references>
</neonContext>
......@@ -15,6 +15,10 @@
<editMode v="true" />
<entityField>#ENTITY</entityField>
<fields>
<entityFieldLink>
<name>69049ecf-c6be-4b19-bb5c-1ba1f065446b</name>
<entityField>AB_KEYWORD_CATEGORY_ID</entityField>
</entityFieldLink>
<entityFieldLink>
<name>88fcd6c8-8dfc-4a1d-96d9-33412768feb9</name>
<entityField>CONTAINER</entityField>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment