/*******************************************************************************
 * Copyright (c) 2014 Bosch Software Innovations GmbH and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompany this distribution.
 *
 * The Eclipse Public License is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * The Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 * Bosch Software Innovations GmbH - Please refer to git log
 *
 *******************************************************************************/
 
grammar org.eclipse.vorto.fbeditor.Functionblock with org.eclipse.xtext.common.Terminals

import "http://www.eclipse.org/vorto/metamodel/Functionblock"

FunctionblockModel:
	'functionblock' name= ID '{'
		functionblock = FunctionBlock
	'}'	
	(elements += Entity)*
	(enums+=Enum)* ;

FunctionBlock:
	'displayname' displayname=STRING
	('description' description=STRING)?
	'vendor' vendor=VENDOR
	'category' category=CATEGORY
	'version' version=VERSION
	('configuration' '{' 
		configuration = FBFeature
	'}')?
	('status' '{' 
		status = FBFeature
	'}')?
	('fault' '{'
		fault = FBFeature 
	'}')?
	
	('events' '{'
		(events+=Event)*
	'}')?
		
	('operations' '{'
		(features += Operation)*
	'}')?
			
;

Event :
	 name = ID '{'
		feature = FBFeature
	'}'
;

terminal VERSION : ('0'..'9')* '.' ('0'..'9')* '.' ('0'..'9')*('-'ID)?;

terminal VENDOR : ('a'..'z')+ "." ('a'..'z')+ ("." ('a'..'z')+)?;

CATEGORY : ID ('/' ID)*;
  	
FBFeature:
	(properties += Property)*	
;

enum PrimitiveType: string = 'string' | int = 'int' | float =  'float' | boolean =  'boolean' | datetime = 'dateTime' | double = 'double' | long = 'long' | short = 'short' | base64Binary ='base64Binary' | byte = 'byte';

ObjectType:
    Entity | Enum
;

Property:
	PrimitiveProperty | ObjectProperty
;

  	
Entity:
  'entity' name = ID ('extends' superType = [Entity])? '{' 
  	 properties = FBFeature 
   '}'
;

Presence:
	mandatory = 'mandatory' | optional = 'optional'	
;
 
PrimitiveProperty:
	presence = Presence (multiplicity = 'multiple')? propName = ID 'as' type = PrimitiveType 
	('<' Constraints += Constraint ("," Constraints += Constraint)*  '>')?
	(description=STRING)?
;

ObjectProperty:
	presence = Presence (multiplicity = 'multiple')? propName = ID 'as' type = [ObjectType]
	(description=STRING)?
;

enum ConstraintIntervalType: min = 'MIN' | max = 'MAX' | strlen = 'STRLEN' | regex = 'REGEX' ;

terminal FLOAT: ('-')?('0'..'9')*'.'('0'..'9')*;

terminal DATE: 
	('0'..'9')('0'..'9')('0'..'9')('0'..'9')('-')('0'..'9')('0'..'9')('-')('0'..'9')('0'..'9')
;

terminal TIME: 
	('0'..'9')('0'..'9')(':')('0'..'9')('0'..'9')(':')('0'..'9')('0'..'9')(TIMEZONE)?
;

terminal fragment TIMEZONE: 
	'Z'|(('+'|'-')('0'..'9')('0'..'9')(':')('0'..'9')('0'..'9'))
;

terminal DATETIME: 
	DATE('T')TIME
;

terminal SIGNEDINT :
	'-'INT
;

IntervalType:
	INT | SIGNEDINT | FLOAT | DATETIME | STRING
;

Constraint:
	type = ConstraintIntervalType constraintValues = IntervalType
;

Operation :
	 methodName=ID '(' (params += Parameter (',' params+=Parameter)*)?')' ('returns'  returnType = ReturnType)? (description=STRING)?
;

ReturnType :
	ReturnObjectType | ReturnPrimitiveType
;

ReturnObjectType :
	 (multiplicity = 'multiple')? returnType = [ObjectType]
;

ReturnPrimitiveType :
	 (multiplicity = 'multiple')? returnType = PrimitiveType
;

Parameter:
	PrimitiveParam | ObjectParam
;

ObjectParam : 
	(multiplicity = 'multiple')? paramName = ID 'as' paramType = [ObjectType]
;

PrimitiveParam : 
	(multiplicity = 'multiple')? paramName = ID 'as' paramType = PrimitiveType
;

Enum:
	'enum' name = ID '{'
		( enums += EnumLiteral (',' enums += EnumLiteral)* )?
	'}'
;

EnumLiteral:
	literal = ID
;