blob: 16f1808603ce5ef6f0e6c16e1ed4893b97eafee3 [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*
*/
grammar org.eclipse.osbp.xtext.datainterchange.DataDSL with org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations
import "http://osbp.eclipse.org/xtext/datainterchange/DataDSL"
import "http://osbp.eclipse.org/dsl/common/types/v1" as types
import "http://osbp.eclipse.org/dsl/entity/v1" as entity
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
DataInterchangeModel:
packages+=DataInterchangePackage*;
DataInterchangePackage:
{DataInterchangePackage} 'package' name=QualifiedName 'title' title=TRANSLATABLESTRING
('{' (imports+=DataInterchangeImport)* (datInts+=DataInterchange)* '}' )?;
DataInterchange:
{DataInterchange} 'interchange' name=TRANSLATABLEID
(description?='described by' descriptionValue=TRANSLATABLESTRING)?
(createReport?='create report')?
('averageElementSize' elementSize=INT)?
('progressBarStyle' progressBarStyle=ProgressBarStylesEnum)?
(refreshEnabled?='refreshViewWhenFinished' refresh=STRING)?
'file' fileEndpoint=DataInterchangeFile 'beans' '{' (path+=DataInterchangeBean)* '}';
DataInterchangeFile:
DataInterchangeFileXML | DataInterchangeFileCSV | DataInterchangeFileEDI;
DataInterchangeFileXML:
{DataInterchangeFileXML} 'XML' fileURL=STRING;
DataInterchangeFileCSV:
{DataInterchangeFileCSV} 'CSV' fileURL=STRING
(
('delimiter' delimiter=STRING)? & ('quoteCharacter' quoteCharacter=STRING)? & ('skipLines' skipLines=INT)? &
(indent?='indent')? & (strict?='strict')? & (validateHeader?='validateHeader')? & ('encoding' encoding=STRING)?
);
DataInterchangeFileEDI:
{DataInterchangeFileEDI} 'EDI' fileURL=STRING 'mappingModel' mappingModel=STRING (validate?='validate')?;
DataInterchangeBean:
{DataInterchangeBean}
'entity' entity=[entity::LEntity|LFQN]
('createOn' elementMap=STRING)?
(markLatest?='marker' latestProperty=[entity::LEntityAttribute])?
((recordElement?='recordElement') |
(recordList?='recordList'))?
('expression' '{' (expression+=DataInterchangeExpression)* '}')?
('lookup' '{' (lookup+=DataInterchangeLookup)* '}')?
('format' '{' (format+=DataInterchangeFormat)* '}')?
('mapping' '{' (mappings+=DataInterchangeMapping)* '}')?
;
DataInterchangeLookup:
{DataInterchangeLookup}
'for' targetProperty=[entity::LEntityReference]
'on' entity=[entity::LEntity]
('createOn' elementMap=STRING)?
'with' queryProperty=[entity::LEntityAttribute]
(cached?='cacheSize' cacheSize=INT)?
('mapTo' dataMap=STRING)?
(
(allowNoResult?='allowNoResult')? &
(allowNonuniqueResult?='allowNonuniqueResult')? &
(markerPath=DataInterchangeMarkerPath)?
);
DataInterchangeMarkerPath:
{DataInterchangeMarkerPath}
'markerPath' '{' (path+=DataInterchangeMarkerEntity)* '}';
DataInterchangeMarkerEntity:
{DataInterchangeMarkerEntity}
'markerEntity' markerEntity=[entity::LEntity|LFQN]
(markLatest?='markedBy' markerProperty=[entity::LEntityAttribute])?;
DataInterchangeFormat:
{DataInterchangeFormat} 'for' targetProperty=[entity::LEntityAttribute] 'coding' format=STRING ('locale' locale=STRING)?;
DataInterchangeExpression:
DataInterchangeEntityExpression | DataInterchangePredefinedExpression;
DataInterchangeEntityExpression:
{DataInterchangeEntityExpression} 'copy' targetProperty=[entity::LEntityAttribute] 'from' entity=[entity::LEntity|LFQN] 'property' property=[entity::LEntityAttribute];
DataInterchangePredefinedExpression:
{DataInterchangePredefinedExpression} 'assign' targetProperty=[entity::LEntityAttribute] 'with' bean=PredefinedBeanEnum 'as' beanType=PredefinedBeanTypeEnum;
DataInterchangeMapping:
{DataInterchangeMapping} 'map' property=[entity::LEntityAttribute] 'to' data=STRING;
DataInterchangeImport returns types::LImport:
'import' importedNamespace=DataInterchangeQualifiedNameWithWildCard;
DataInterchangeQualifiedNameWithWildCard:
QualifiedName ('.' '*')?;
QualifiedName:
ValidID (=>'.' ValidID)*;
ValidID:
ID;
LFQN:
ID ('.' ID)*;
TRANSLATABLESTRING:
STRING;
TRANSLATABLEID:
ID;
enum PredefinedBeanEnum:
now = 'NowDate'|
start = 'StartDate'|
UUID = 'UniversallyUniqueIdentifier';
enum PredefinedBeanTypeEnum:
Date = 'Date'|
Millis = 'Milliseconds'|
Nanos = 'Nanoseconds'|
random = 'Random'|
execContext = 'ExecuteContext';
enum ProgressBarStylesEnum:
none = 'none'|
normal = 'normal'|
important = 'important';