Overview Version History Q & A Rating & Review
"displayName": "Drive3 Page Generator",
"description": "A Langium based extension to generate Drive3 pages from a .drv3 file.",
Drive Angular DSL
A domain-specific language (DSL) to automate the generation of Angular components and tables using custom patterns. Designed to streamline front-end development for teams working with repetitive data tables.
Features
Supports .drv3
files
Generates .ts
, .html
, .scss
files
Customizable table configurations
Optional submenu generation
Easy to extend for new patterns
How to Use
Create a .drv3
file with your component structure
Save the file — the Angular files will be generated automatically
Check the generatedDriveAngularFiles
folder (or your custom destination)
Grammar Fefinition
The input file must match the expected grammar syntax show below. Each file must start with the declaration of a DrivePage concept and each subsequent concept must follow the structure show in the grammar.
QualifiedName is a default type which is simply a unique string.
entry DrivePage:
'Page' name=QualifiedName '{'
'SubMenu:' submenu=SubMenu
mainContent=MainContent
'}'
;
SubMenu:
TabSubMenu | ViewsSubMenu
;
TabSubMenu:
'TabSubMenu' name=QualifiedName '{'
'Tabs:' tabs+=Tab+
submenuService=SubMenuService
'}'
;
ViewsSubMenu:
'ViewsSubMenu' name=QualifiedName '{'
'Views:' views+=View*
submenuService=SubMenuService
'}'
;
SubMenuService:
'SubMenuService' name=QualifiedName '{'
'}'
;
Tab:
'Tab' name=QualifiedName '{'
('Route:' route=STR)?
'}'
;
View:
'View' name=QualifiedName '{'
'Filters:' fitlters+=Filter*
'}'
;
MainContent:
'MainContent' '{'
'Tables:' table+=Table*
'}'
;
Table:
'Table' name=QualifiedName '{'
tableservice=TableService
tablecomponent=TableComponent
'}'
;
TableComponent:
'TableComponent' name=QualifiedName '{'
'Identifier:' identifier=STR
'Service:' tableservice=[TableService]
'Columns' '{' (columns+=Column)* '}'
'Filters' '{' (filters+=Filter)* '}'
'Variables' '{' (variables+=Variable)* '}'
'Conditions' '{' (conditions+=Condition)* '}'
'}'
;
TableService:
'TableService' name=QualifiedName '{'
'Fields' '{' fields+=Field* '}'
'}'
;
Field:
'Field' name=QualifiedName '{'
'Type:' type=DataType
'}'
;
Column:
ActionColumn | FieldBasedColumn | ComplexColum | CheckboxColumn;
FieldBasedColumn:
'FieldBasedColumn' name=QualifiedName '{'
'Type:' type=ColumnType
'Field:' field=[Field]
'Identifier:' Identifier=STR
'WidthPercentage:' WidthPercentage=INT
'}'
;
ComplexColum:
'ComplexColumn' name=QualifiedName '{'
'Type:' type=ColumnType
'Fields:' fields+=[Field]+
'FilterableField:' filterableField=[Field]
'Identifier:' Identifier=STR
'WidthPercentage:' WidthPercentage=INT
'}'
;
ActionColumn:
'ActionColumn' name=QualifiedName '{'
'Type:' type=ColumnType
'Identifier:' Identifier=STR
'Action:' action=Action
'Icon:' icon=STR
'WidthPercentage:' WidthPercentage=INT
'}'
;
CheckboxColumn:
'CheckboxColumn' name=QualifiedName '{'
'Type:' type=ColumnType
'Identifier:' Identifier=STR
'WidthPercentage:' WidthPercentage=INT
'}'
;
Action:
ListAction | UserDefinedAction;
ListAction:
'ListAction' name=QualifiedName '{'
'Type:' actionType=ActionType
'}'
;
UserDefinedAction:
'UserDefinedAction' name=QualifiedName '{'
'}'
;
Variable:
'Variable' name=QualifiedName '{'
'datatype:' dataType=DataType
'}'
;
Condition:
'Condition' name=QualifiedName '{'
'column:' column=[Column]
'variable:' variable=[Variable]
'}'
;
Filter:
'Filter' '{'
'Identifier:' Identifier=STR
'filterConfiguration' ':' filterconfigurationreference=FilterConfigurationReference
'}'
;
FilterConfigurationReference:
'FilterConfigurationReference' '{'
'Mode:' mode=FilterMode
'Type:' type=FilterType
'}'
;
BOOL = 'TRUE' | 'FALSE';
ColumnType = 'TEXT' | 'DATE' | 'ACTION' | 'RANGEDATE' | 'DROPDOWN' | 'DROPDOWNMULTI' | 'REORDERHANDLE' | 'CHECKBOX';
FilterMode = 'STARTS' | 'ENDS' | 'CONTAINS' | 'EQUALS' | 'BETWEENDATE' | 'STARTSAT' | 'ENDSAT';
FilterType = 'STRING' | 'DATE' | 'COMPLEXARRAY' | 'ARRAY' | 'COMPLEXDATE' | 'NUMBER' | 'DATEANDDAY';
DataType = 'NUMBER' | 'STRING' | 'BOOLEAN' | 'DATE' | 'NUMBER_ARRAY' | 'STRING_ARRAY' | 'USER_DEFINED';
ActionType = 'DELETE' | 'DETAIL' | 'ATTACHMENTS';
Example
Page Contracts {
SubMenu:
TabSubMenu contractsSubMenu {
Tabs:
Tab Summary {
}
Tab Edit {
}
SubMenuService contracts {
}
}
MainContent {
Tables:
Table Contracts {
TableService contracts {
Fields {
Field contractid {
Type: STRING
}
Field description {
Type: STRING
}
Field startDate {
Type: DATE
}
Field endDate {
Type: DATE
}
Field entity {
Type: USER_DEFINED
}
Field status {
Type: USER_DEFINED
}
Field contractInterlocutors {
Type: USER_DEFINED
}
}
}
TableComponent contractsTable {
Identifier: "WorkPlans-Contracts"
Service: contracts
Columns {
FieldBasedColumn contractid {
Type: TEXT
Field: contractid
Identifier: "ContractID"
WidthPercentage: 100
}
FieldBasedColumn description {
Type: TEXT
Field: description
Identifier: "Description"
WidthPercentage: 100
}
FieldBasedColumn startDate {
Type: DATE
Field: startDate
Identifier: "StartDate"
WidthPercentage: 100
}
FieldBasedColumn endDate {
Type: DATE
Field: endDate
Identifier: "EndDate"
WidthPercentage: 100
}
FieldBasedColumn entity {
Type: TEXT
Field: entity
Identifier: "Entity"
WidthPercentage: 100
}
FieldBasedColumn status {
Type: DROPDOWN
Field: status
Identifier: "Status"
WidthPercentage: 100
}
ActionColumn action {
Type: ACTION
Identifier: "Actions"
Action: ListAction details {
Type: DETAIL
}
Icon: "three-dots.jpg"
WidthPercentage: 100
}
}
Filters {
Filter {
Identifier: "contractid"
filterConfiguration: FilterConfigurationReference {
Mode: CONTAINS
Type: STRING
}
}
}
Variables {
Variable isEditMode {
datatype: BOOLEAN
}
}
Conditions {
Condition editModeColumns {
column: action
variable: isEditMode
}
}
}
}
}
}