/**
 * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf), Loetz GmbH&Co.KG (Heidelberg)
 * 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
 */
grammar org.eclipse.osbp.dsl.services.xtext.ServicesGrammar with org.eclipse.osbp.dsl.common.xtext.CommonGrammar

import "http://osbp.eclipse.org/dsl/dto/v1" as dto 
import "http://osbp.eclipse.org/dsl/services/v1" as service
import "http://osbp.eclipse.org/dsl/common/types/v1" as common
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

LServiceModel returns service::LServiceModel:
	importSection=XImportSection?
	packages+=TypedPackage*;
 
Class returns service::LDTOService:
	{service::LDTOService} annotations+=AnnotationDef*
	{service::LDTOService.annotationInfo=current}
	'dtoservice' name=ValidIDWithKeywords 'provides' dto=[dto::LDto|TYPE_CROSS_REFERENCE]
	'{'
	((mutablePersistenceId?='mutable')? 'persistenceUnit' persistenceId=QualifiedName )?
	
	injectedServices=InjectedServices
	
	operations+=Operation*
	
	'}';

InjectedServices returns service::LInjectedServices:
	{service::LInjectedServices}
	(services+=InjectedService)*;

InjectedService returns service::LInjectedService:
	{service::LInjectedService}
	'injectService' (cardinality=Cardinality)? service=JvmTypeReference attributeName=ID ;

FilterableAttributes returns service::LFilterableAttributes:
	'filterable' '{'
	filterableFeatures+=[dto::LDtoFeature|LFQN] (',' filterableFeatures+=[dto::LDtoFeature|LFQN])* 
	'}';

SortableAttributes returns service::LSortableAttributes:
	'sortable' '{'
	sortableFeatures+=[dto::LDtoFeature|LFQN] (',' sortableFeatures+=[dto::LDtoFeature|LFQN])* 
	'}';
	 
Operation returns service::LServiceOperation:
	{service::LServiceOperation} annotations+=AnnotationDef*
	('def' type=JvmTypeReference name=ID
	'(' (params+=FullJvmFormalParameter (',' params+=FullJvmFormalParameter)*)? ')'
	body=XExpression)
;

enum Cardinality returns service::LCardinality:
	ZERO_TO_ONE="optional" | ONE_TO_ONE="mandatory" | ZERO_TO_MANY="zeroToMany" | ONE_TO_MANY="oneToMany";