/**
 *                                                                            
 *  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';