blob: 19bc37e107662f69b6539518603f5e2ca168e9ef [file] [log] [blame]
/**
* Copyright (c) 2011, 2014 - Lunifera GmbH (Gross Enzersdorf), Loetz GmbH&Co.KG (Heidelberg), Robert Handschmann (Vienna)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Florian Pirchner - Initial implementation
* Robert Handschmann - V2
*/
grammar org.eclipse.osbp.dsl.entity.xtext.EntityGrammar with org.eclipse.osbp.dsl.common.xtext.CommonGrammar
import "http://osbp.eclipse.org/dsl/common/types/v1"
import "http://osbp.eclipse.org/dsl/entity/v1" as entity
import "http://www.eclipse.org/xtext/xbase/Xbase" as xbase
import "http://www.eclipse.org/xtext/xbase/Xtype" as xtype
import "http://www.eclipse.org/Xtext/Xbase/XAnnotations" as xannotation
import "http://www.eclipse.org/xtext/common/JavaVMTypes" as types
EntityModel returns entity::LEntityModel:
importSection=XImportSection?
packages+=TypedPackage*;
Class returns LClass:
{LClass} annotations+=AnnotationDef*
({entity::LEntity.annotationInfo=current}
((abstract?='abstract')? &
((historized?='historized')
|
(timedependent?='timedependent' ('(' timedependentDateType=LHistorizedDateType ')')?))? &
(cacheable?="cacheable")?)
'entity' name=TRANSLATABLEID ('extends' superType=[entity::LEntity|TYPE_CROSS_REFERENCE])?
'{'
(persistenceInfo=EntityPersistenceInfo)
(inheritanceStrategy=EntityInheritanceStrategy)?
('persistenceUnit' persistenceUnit=STRING)?
features+=EntityFeature*
((indexes+=Index)
|
(superIndex+=EntitySuperIndex))*
'}'
|
{entity::LEntity.annotationInfo=current}
((historized?='historized')
|
(timedependent?='timedependent'))? mappedSuperclass?='mappedSuperclass' ('extends' superType=[entity::LEntity|TYPE_CROSS_REFERENCE])?
name=ValidIDWithKeywords
'{'
('persistenceUnit' persistenceUnit=STRING)?
features+=EntityFeature*
'}'
|
{entity::LBean.annotationInfo=current}
'bean' name=TRANSLATABLEID ('extends' superType=[entity::LBean|TYPE_CROSS_REFERENCE])?
(beanOnTab?='onTab')?
'{'
features+=BeanFeature*
'}');
Index returns entity::LIndex:
(unique?='unique')? 'index' name=ID '{'
features+=[entity::LEntityFeature] (',' features+=[entity::LEntityFeature])*
'}';
EntityPersistenceInfo returns entity::LEntityPersistenceInfo:
{entity::LEntityPersistenceInfo}
(('schemaName' schemaName=ValidIDWithKeywords)? &
('tableName' tableName=ValidIDWithKeywords)?);
ColumnPersistenceInfo returns entity::LEntityColumnPersistenceInfo:
{entity::LEntityColumnPersistenceInfo}
'(' columnName=ValidIDWithKeywords ')';
EntityFeature returns entity::LEntityFeature:
{entity::LEntityFeature}
annotations+=AnnotationDef*
(({entity::LEntityReference.annotationInfo=current}
('ref' (cascadeMergePersist?='cascadeMergePersist')? (cascadeRemove?='cascadeRemove')? (cascadeRefresh?='cascadeRefresh')? ('filterDepth' filterDepth=INT)? type=[entity::LEntity|TYPE_CROSS_REFERENCE]
multiplicity=Multiplicity? ('[' constraints+=AllConstraints* ']')? name=TRANSLATABLEID
(persistenceInfo=ColumnPersistenceInfo)?
('opposite' opposite=[entity::LEntityReference|LFQN] (asGrid?='asGrid'|asTable?='asTable')?)?
((sideKick?='sideKick')?|((referenceHidden?='hidden')|(referenceReadOnly?='readOnly'))?)
(isGrouped?='group' groupName=TRANSLATABLEID)?
('properties' '(' properties+=KeyAndValue (',' properties+=KeyAndValue)* ')')?
(resultFilters=ResultFilters?)))
|
({entity::LEntityAttribute.annotationInfo=current}
((transient?='transient' ((attributeHidden?='hidden')|(attributeReadOnly?='readOnly'))? type=[LScalarType|TYPE_CROSS_REFERENCE] ('[' constraints+=AllConstraints* ']')?
name=TRANSLATABLEID
((isGrouped?='group' groupName=TRANSLATABLEID)? &
('extraStyle' extraStyle=STRING)? &
('properties' '(' properties+=KeyAndValue (',' properties+=KeyAndValue)* ')')?))
|
(derived?='derived' (domainDescription?='domainDescription')? ((attributeHidden?='hidden')|(attributeReadOnly?='readOnly'))? type=[LScalarType|TYPE_CROSS_REFERENCE]
name=TRANSLATABLEID
((isGrouped?='group' groupName=TRANSLATABLEID)? &
('extraStyle' extraStyle=STRING)? &
('properties' '(' properties+=KeyAndValue (',' properties+=KeyAndValue)* ')')?)
derivedGetterExpression=XBlockExpression)
|
(('var' | id?='id' | uuid?='uuid' | version?='version' | domainDescription?='domainDescription' |
domainKey?='domainKey')
(
(uniqueEntry?='unique')? & (filtering?='filter' | rangeFiltering?='range')? & ((attributeHidden?='hidden')|(attributeReadOnly?='readOnly'))?
)
type=[LScalarType|TYPE_CROSS_REFERENCE] multiplicity=Multiplicity? ('[' constraints+=AllConstraints* ']')?
name=TRANSLATABLEID (onKanbanCard?='onKanbanCard' (onKanbanCardStates=KanbanStateDetail))? (asKanbanState?='asKanbanState' )? (asKanbanOrdering?='asKanbanOrdering'
(decentKanbanOrder?='decentOrder')?)? (persistenceInfo=ColumnPersistenceInfo)?
('opposite' opposite=[entity::LBeanReference|LFQN])?
((isGrouped?='group' groupName=TRANSLATABLEID)? &
('extraStyle' extraStyle=STRING)? &
('properties' '(' properties+=KeyAndValue (',' properties+=KeyAndValue)* ')')?))))
|
({entity::LOperation.annotationInfo=current}
('def' type=JvmTypeReference name=ValidIDWithKeywords
'(' (params+=FullJvmFormalParameter (',' params+=FullJvmFormalParameter)*)? ')'
body=XExpression)))
;
KanbanStateDetail returns entity::LKanbanStateDetail:
{entity::LKanbanStateDetail}
'states' '('
(infos+=KanbanEnumInfo (',' infos+=KanbanEnumInfo)*)?
')';
KanbanEnumInfo returns entity::LKanbanEnumInfo:
literal=[LEnumLiteral] ('=' i18nKey=STRING)?
;
BeanFeature returns entity::LBeanFeature:
{entity::LBeanFeature}
annotations+=AnnotationDef*
(({entity::LBeanReference.annotationInfo=current}
('ref' (cascadeMergePersist?='cascadeMergePersist')? (cascadeRemove?='cascadeRemove')? type=[LType|TYPE_CROSS_REFERENCE] multiplicity=Multiplicity? ('['
constraints+=AllConstraints* ']')? name=TRANSLATABLEID
('opposite' opposite=[LReference|LFQN] (asGrid?='asGrid'|asTable?='asTable')?)?
(sideKick?='sideKick')?
(isGrouped?='group' groupName=TRANSLATABLEID)?
('properties' '(' properties+=KeyAndValue (',' properties+=KeyAndValue)*')')?
(resultFilters=ResultFilters?)))
|
({entity::LBeanAttribute.annotationInfo=current}
((transient?='transient' type=[LScalarType|TYPE_CROSS_REFERENCE] ('[' constraints+=AllConstraints* ']')?
name=TRANSLATABLEID
(isGrouped?='group' groupName=TRANSLATABLEID)?
('properties' '(' properties+=KeyAndValue (',' properties+=KeyAndValue)* ')')?)
|
(('var' | id?='id' | version?="version") (filtering?='filter' | rangeFiltering?='range')?
type=[LScalarType|TYPE_CROSS_REFERENCE] multiplicity=Multiplicity? ('[' constraints+=AllConstraints* ']')?
name=TRANSLATABLEID
(isGrouped?='group' groupName=TRANSLATABLEID)?
('properties' '(' properties+=KeyAndValue (',' properties+=KeyAndValue)* ')')?)))
|
({entity::LOperation.annotationInfo=current}
('def' type=JvmTypeReference name=ValidIDWithKeywords
'(' (params+=FullJvmFormalParameter (',' params+=FullJvmFormalParameter)*)? ')'
body=XExpression)));
EntitySuperIndex returns entity::LEntitySuperIndex:
'superIndex' name=TRANSLATABLEID '{'
attributes+=EntitySuperIndexAttribute*
'}';
EntitySuperIndexAttribute returns entity::LNestedFeature:
'ref' feature=[LFeature] (tail=EntityFeaturePathSegment)?;
EntityFeaturePathSegment returns entity::LNestedFeature:
{entity::LNestedFeature}
'.' feature=[LFeature] (tail=EntityFeaturePathSegment)?;
EntityInheritanceStrategy returns entity::LEntityInheritanceStrategy:
TablePerClassStrategy | TablePerSubclassStrategy;
TablePerClassStrategy returns entity::LTablePerClassStrategy:
{entity::LTablePerClassStrategy}
'inheritancePerClass' '{'
(('discriminatorColumn' discriminatorColumn=ValidIDWithKeywords)? & ('discriminatorType'
discriminatorType=DiscriminatorType)? & ('discriminatorValue'
discriminatorValue=ValidIDWithKeywords)?) '}';
TablePerSubclassStrategy returns entity::LTablePerSubclassStrategy:
{entity::LTablePerSubclassStrategy} 'inheritancePerSubclass' '{'
(('discriminatorColumn' discriminatorColumn=ValidIDWithKeywords)? & ('discriminatorType'
discriminatorType=DiscriminatorType)? & ('discriminatorValue'
discriminatorValue=ValidIDWithKeywords)?) '}';
enum DiscriminatorType returns entity::LDiscriminatorType:
INHERIT="INHERIT" | STRING="STRING" | CHAR="CHAR" | INTEGER="INT";
enum LHistorizedDateType returns LDateType:
DATE="DATE" | TIMESTAMP="TIMESTAMP";
TRANSLATABLEID:
ValidIDWithKeywords;