| /** |
| * |
| * 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 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: |
| * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation |
| * |
| */ |
| |
| grammar org.eclipse.osbp.xtext.datainterchange.DataDSL with org.eclipse.osbp.xtext.oxtype.OXtype |
| |
| 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: |
| importSection=XImportSection? |
| packages+=DataInterchangePackage*; |
| |
| DataInterchangePackage: |
| {DataInterchangePackage} 'package' name=QualifiedName |
| ('{' (groups+=DataInterchangeGroup)* '}' )?; |
| |
| DataInterchangeGroup: |
| {DataInterchangeGroup} 'group' name=TRANSLATABLEID |
| ('{' (datInts+=DataInterchange)* '}' )?; |
| |
| DataInterchange: |
| {DataInterchange} 'interchange' name=TRANSLATABLEID |
| (description?='describedBy' descriptionValue=TRANSLATABLESTRING)? |
| mode=EntityManagerMode |
| (hasVectorName?='vectorName' vectorName=STRING)? |
| (createReport?='report')? |
| ('elementSize' elementSize=INT)? |
| (deleteFileAfterImport?='deleteFileAfterImport')? |
| 'file' fileEndpoint=DataInterchangeFile 'path' '{' (path+=DataInterchangeBean)* '}'; |
| |
| DataInterchangeFile: |
| DataInterchangeFileXML | DataInterchangeFileCSV | DataInterchangeFileEDI; |
| |
| DataInterchangeFileXML: |
| {DataInterchangeFileXML} 'XML' fileURL=STRING ((byAttribute?='mapByAttribute')? & ('encoding' encoding=STRING)? & ('locale' locale=STRING)?); |
| |
| DataInterchangeFileCSV: |
| {DataInterchangeFileCSV} 'CSV' fileURL=STRING |
| ( |
| ('delimiter' delimiter=STRING)? & ('quoteCharacter' quoteCharacter=STRING)? & ('skipLines' skipLines=INT)? & |
| (indent?='indent')? & ('encoding' encoding=STRING)? & ('locale' locale=STRING)? |
| ); |
| |
| DataInterchangeFileEDI: |
| {DataInterchangeFileEDI} 'EDI' fileURL=STRING (('encoding' encoding=STRING)? & ('locale' locale=STRING)?) 'mappingModel' mappingModel=STRING (validate?='validate')?; |
| |
| DataInterchangeBean: |
| {DataInterchangeBean} |
| 'entity' entity=[entity::LEntity|LFQN] |
| ('nodeName' nodeName=STRING)? |
| ('createOn' elementMap=STRING)? |
| (markLatestImport?='latestImport' latestProperty=[entity::LEntityAttribute])? |
| (markLatestExport?='latestExport' latestExpProperty=[entity::LEntityAttribute])? |
| ('expression' '{' (expression+=DataInterchangeExpression)* '}')? |
| ('lookup' '{' (lookup+=DataInterchangeLookup)* '}')? |
| ('format' '{' (format+=DataInterchangeFormat)* '}')? |
| ('expose' '{' (exportExposes+=DataInterchangeExpose)* '}')? |
| ('mapping' '{' (mappings+=DataInterchangeMapping)* '}')? |
| ('keys' '{' (lookupKeys+=DataInterchangeKey)* '}')? |
| ('exportFilter' '{' exportFilter=DataInterchangeExportFilter '}')? |
| ; |
| |
| DataInterchangeKey: |
| {DataInterchangeKey} 'key' property=[entity::LEntityAttribute]; |
| |
| 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; |
| |
| DataInterchangeExpression: |
| DataInterchangeEntityExpression | DataInterchangePredefinedExpression; |
| |
| DataInterchangeEntityExpression: |
| {DataInterchangeEntityExpression} 'copy' targetProperty=[entity::LEntityAttribute] 'from' entity=[entity::LEntity|LFQN] 'property' property=[entity::LEntityAttribute]; |
| |
| |
| DataInterchangeExpose: |
| {DataInterchangeExpose} |
| 'ref' refEntity=[entity::LEntityReference] ('on' refProperty=[entity::LEntityAttribute] | 'expose' '{' subExpose=DataInterchangeExpose '}') |
| ; |
| |
| DataInterchangeExportFilter: |
| {DataInterchangeExportFilter} |
| ('where' '{' condition=DataInterchangeFilterCondition'}')? |
| ('hide' hiddenproperties+=DataInterchangeExportHide*)? |
| ; |
| DataInterchangeFilterCondition: |
| refProperty=[entity::LEntityFeature] operator=ConditionAndOperator1 |
| (value=STRING)? |
| (operator2=ConditionAndOperator2 subcondition=DataInterchangeFilterCondition )? |
| ; |
| |
| DataInterchangeExportHide: |
| {DataInterchangeExportHide} property=[entity::LEntityFeature] |
| ; |
| |
| DataInterchangePredefinedExpression: |
| {DataInterchangePredefinedExpression} 'assign' targetProperty=[entity::LEntityAttribute] 'with' bean=PredefinedBeanEnum 'as' beanType=PredefinedBeanTypeEnum; |
| |
| DataInterchangeMapping: |
| DataInterchangeValueMapping | DataInterchangeBlobMapping; |
| |
| DataInterchangeValueMapping: |
| {DataInterchangeValueMapping} 'map' property=[entity::LEntityAttribute] 'to' data=STRING; |
| |
| DataInterchangeBlobMapping: |
| {DataInterchangeBlobMapping} 'mapBlob' property=[entity::LEntityAttribute] |
| 'to' data=STRING ('extension' blobFileExtension=STRING)? ('path' blobPath=STRING)? |
| 'mimeType' mimeType=PredefinedBlobMimeTypeEnum ; // it would be better if the mime type can be optional and deduced from extension |
| |
| |
| LFQN: |
| ID ('.' ID)*; |
| |
| TRANSLATABLESTRING: |
| STRING; |
| |
| TRANSLATABLEID: |
| ID; |
| |
| enum PredefinedBlobMimeTypeEnum: |
| plain = "plain"| |
| jpg = "jpg"| |
| png = "png"| |
| mpeg = "mpeg"| |
| octetstream = "octet-stream"| |
| pdf = "pdf"; |
| |
| enum PredefinedBeanEnum: |
| now = 'NowDate'| |
| start = 'StartDate'| |
| UUID = 'UniversallyUniqueIdentifier'; |
| |
| enum PredefinedBeanTypeEnum: |
| Date = 'Date'| |
| Millis = 'Milliseconds'| |
| Nanos = 'Nanoseconds'| |
| random = 'Random'| |
| execContext = 'ExecuteContext'; |
| |
| enum EntityManagerMode: |
| persist = 'persist'| |
| merge = 'merge'| |
| remove = 'remove'; |
| |
| |
| enum ConditionAndOperator1: |
| equals = '=' | |
| notequals = '!=' | |
| greaterthen = '>' | |
| greaterthenorequalto = '>=' | |
| lessthen = '<' | |
| lessthenorequalto = '<=' | |
| isnull = 'isnull' | |
| isnotnull = 'isnotnull' |
| // in = 'in' | |
| // between = 'between'| |
| // exists = 'exists' | |
| // not = 'not |
| // like = 'like' |
| ; |
| |
| enum ConditionAndOperator2: |
| and = 'and'| |
| or = 'or'; |