grammar org.eclipse.emf.parsley.dsl.EmfParsleyDsl with
    org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations

import "http://www.eclipse.org/xtext/common/JavaVMTypes" as types

generate model "http://www.eclipse.org/emf/parsley/dsl/EmfParsleyDsl"

Model:
	importSection=XImportSection?
	module = Module;

// if you add another element, please make sure that you update inheritance
// relations (see, e.g., WithExtendsClause rule) and also the
// label provider
Module:
	'module' name=QualifiedName (extendsClause=ExtendsClause)? '{'
		(
			(bindingsSpecification = BindingsSpecification)?
			&
			(labelProvider = LabelProvider)?
			&
			(tableLabelProvider = TableLabelProvider)?
			&
			(featureCaptionProvider = FeatureCaptionProvider)?
			&
			(formFeatureCaptionProvider = FormFeatureCaptionProvider)?
			&
			(dialogFeatureCaptionProvider = DialogFeatureCaptionProvider)?
			&
			(featuresProvider = FeaturesProvider)?
			&
			(tableFeaturesProvider = TableFeaturesProvider)?
			&
			(formControlFactory = FormControlFactory)?
			&
			(dialogControlFactory = DialogControlFactory)?
			&
			(proposalCreator = ProposalCreator)?
			&
			(menuBuilder = MenuBuilder)?
			&
			(configurator = Configurator)?
			&
			(viewerContentProvider = ViewerContentProvider)?
			&
			(tableViewerContentProvider = TableViewerContentProvider)?
			&
			(partsSpecifications = PartsSpecifications)?
			&
			(resourceManager = ResourceManager)?
		)
	'}'
;

ExtendsClause: 'extends' superType=JvmTypeReference;

BindingsSpecification:
	{BindingsSpecification} 'bindings' '{'
		bindings += Binding*
	'}'
;

Binding:
	{TypeBinding} 'type' typeToBind=JvmTypeReference '->' to=XExpression |
	{ProviderBinding} 'provide' type=JvmTypeReference '->' to=XExpression |
	{ValueBinding} 'value' typeDecl=JvmTypeReference id=ValidID '->' to=XExpression
;

LabelProvider:
	{LabelProvider} 'labelProvider' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*
	
		(
			(texts=Texts)?
			&
			(images=Images)?
			&
			(fonts=Fonts)?
			&
			(foregrounds=Foregrounds)?
			&
			(backgrounds=Backgrounds)?
		)
	'}'
;

FieldSpecification:
	annotations+=XAnnotation*
	(writeable?='var'|'val') 
	(
		extension?='extension' type=JvmTypeReference
		|
		type=JvmTypeReference?
	) 
	name=ValidID ('=' right=XExpression)? ';'?
;

Texts:
	{Texts} 'text' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

Images:
	{Images} 'image' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

Fonts:
	{Fonts} 'font' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

Foregrounds:
	{Foregrounds} 'foreground' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

Backgrounds:
	{Backgrounds} 'background' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

TableLabelProvider:
	{TableLabelProvider} 'tableLabelProvider' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*
		(
			(featureTexts=FeatureTexts)?
			&
			(featureImages=FeatureImages)?
			&
			(featureFonts=FeatureFonts)?
			&
			(featureForegrounds=FeatureForegrounds)?
			&
			(featureBackgrounds=FeatureBackgrounds)?
			&
			(rowFonts=RowFonts)?
			&
			(rowForegrounds=RowForegrounds)?
			&
			(rowBackgrounds=RowBackgrounds)?
		)
	'}'
;

PolymorphicSpecification:
	parameterType=JvmTypeReference (name=ValidID)?
	'->'
	expression = XExpression
;


FeatureCaptionProvider:
	{FeatureCaptionProvider} 'featureCaptionProvider' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*

		(featureTexts=FeatureTexts)?
	'}'
;

FormFeatureCaptionProvider:
	{FormFeatureCaptionProvider} 'formFeatureCaptionProvider' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*

		(
			(featureTexts=FeatureTexts)?
			&
			(featureLabels=FeatureLabels)?
		)
	'}'
;

DialogFeatureCaptionProvider:
	{DialogFeatureCaptionProvider} 'dialogFeatureCaptionProvider' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*
		
		(
			(featureTexts=FeatureTexts)?
			&
			(featureLabels=FeatureLabels)?
		)
	'}'
;

FeatureTexts:
	{FeatureTexts} 'text' '{'
		specifications+=FeatureAssociatedExpression*
	'}'
;

FeatureImages:
	{FeatureImages} 'image' '{'
		specifications+=FeatureAssociatedExpression*
	'}'
;

FeatureFonts:
	{FeatureFonts} 'font' '{'
		specifications+=FeatureAssociatedExpression*
	'}'
;

FeatureForegrounds:
	{FeatureForegrounds} 'foreground' '{'
		specifications+=FeatureAssociatedExpression*
	'}'
;

FeatureBackgrounds:
	{FeatureBackgrounds} 'background' '{'
		specifications+=FeatureAssociatedExpression*
	'}'
;

FeatureLabels:
	{FeatureLabels} 'label' '{'
		specifications+=FeatureAssociatedExpression*
	'}'
;

WithFeatureAssociatedExpressions:
	FeatureTexts | FeatureImages | FeatureFonts | FeatureForegrounds | FeatureBackgrounds | FeatureLabels
;

RowFonts:
	{RowFonts} 'rowFont' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

RowForegrounds:
	{RowForegrounds} 'rowForeground' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

RowBackgrounds:
	{RowBackgrounds} 'rowBackground' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

WithExpressions:
	RowFonts | RowForegrounds | RowBackgrounds | Menus | EmfMenus |
	ConfiguratorResourceURI | ConfiguratorEClass |
	ContentProviderElements | ContentProviderChildren |
	Texts | Images | Fonts | Foregrounds | Backgrounds
;

/**
 * Specify an XExpression associated to an EStructuralFeature
 * (actually we associated to the Java get method in the generated code, which
 * corresponds to the original EStructuralFeature).
 */
FeatureAssociatedExpression:
	parameterType=JvmTypeReference ':' feature=[types::JvmMember]
	'->'
	expression = XExpression
;

FeaturesProvider:
	{FeaturesProvider} 'featuresProvider' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*
		
		(features=FeatureSpecifications)?
	'}'
;


TableFeaturesProvider:
	{TableFeaturesProvider} 'tableFeaturesProvider' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*
		
		(features=FeatureSpecifications)?
	'}'
;

FeatureSpecifications:
	{FeatureSpecifications} 'features' '{'
		featureSpecifications+=FeatureSpecification*
	'}'
;

FeatureSpecification:
	parameterType=JvmTypeReference
	'->'
	features += [types::JvmMember] (',' features += [types::JvmMember])*
;

FormControlFactory:
	{FormControlFactory} 'formControlFactory' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*
		
		(controls=ControlFactorySpecifications)?
	'}'
;

DialogControlFactory:
	{DialogControlFactory} 'dialogControlFactory' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*
		
		(controls=ControlFactorySpecifications)?
	'}'
;

ControlFactorySpecifications:
	{ControlFactorySpecifications} 'control' '{'
		specifications+=ControlFactorySpecification*
	'}'
;

ControlFactorySpecification:
	parameterType=JvmTypeReference ':' feature=[types::JvmMember]
	'->'
	expression = XExpression
	('target' target = XExpression)?
;

ProposalCreator:
	{ProposalCreator} 'proposals' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*

		proposalsSpecifications+=FeatureAssociatedExpression*
	'}'
;

MenuBuilder:
	{MenuBuilder} 'menuBuilder' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*
	
		(
			(menus=Menus)?
			&
			(emfMenus=EmfMenus)?
		)
	'}'
;

Menus:
	{Menus} 'menus' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

EmfMenus:
	{EmfMenus} 'emfMenus' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

Configurator:
	{Configurator} 'configurator' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*
	
		(
			(resourceURI=ConfiguratorResourceURI)?
			&
			(eClassSpec=ConfiguratorEClass)?
		)
	'}'
;

ConfiguratorResourceURI:
	{ConfiguratorResourceURI} 'resourceURI' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

ConfiguratorEClass:
	{ConfiguratorEClass} 'eClass' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

ViewerContentProvider:
	{ViewerContentProvider} 'viewerContentProvider' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*
		
		(
			(elements=ContentProviderElements)?
			&
			(children=ContentProviderChildren)?
		)
	'}'
;

TableViewerContentProvider:
	{TableViewerContentProvider} 'tableViewerContentProvider' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*
		
		(elements=ContentProviderElements)?
	'}'
;

ContentProviderChildren:
	{ContentProviderChildren} 'children' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

ContentProviderElements:
	{ContentProviderElements} 'elements' '{'
		specifications+=PolymorphicSpecification*
	'}'
;

ResourceManager:
	{ResourceManager} 'resourceManager' (extendsClause=ExtendsClause)? '{'
		fields += FieldSpecification*
	
		((
		'initializeResource' initializeBody=SimpleMethodSpecification
		)?
		&
		(
		'saveResource' saveBody=SimpleMethodSpecification
		)?)
	'}'
;

SimpleMethodSpecification:
	body=XBlockExpression
;

// a utility base class for rules which access features of an EClass
// IMPORTANT: update EmfParsleyDslExpectedSuperTypes if you add another element
EmfFeatureAccess:
	FeatureAssociatedExpression |
	FeatureSpecification |
	ControlFactorySpecification
;

// IMPORTANT: update EmfParsleyDslExpectedSuperTypes if you add another element
AbstractFeatureCaptionProviderWithLabel:
	FormFeatureCaptionProvider | DialogFeatureCaptionProvider
;

// IMPORTANT: update EmfParsleyDslExpectedSuperTypes if you add another element
AbstractFeatureProvider:
	FeaturesProvider | TableFeaturesProvider
;

// IMPORTANT: update EmfParsleyDslExpectedSuperTypes if you add another element
AbstractControlFactory:
	FormControlFactory | DialogControlFactory
;

// a utility base class for rules with 'extends' clause
// IMPORTANT: update EmfParsleyDslExpectedSuperTypes if you add another element
WithExtendsClause:
	Module | WithFields
;

// IMPORTANT: update EmfParsleyDslExpectedSuperTypes if you add another element
WithFields:
	LabelProvider | TableLabelProvider | FeatureCaptionProvider | AbstractFeatureCaptionProviderWithLabel |
	AbstractFeatureProvider | AbstractControlFactory | ProposalCreator |
	ViewerContentProvider | TableViewerContentProvider |
	MenuBuilder | Configurator | ResourceManager
;

PartsSpecifications:
	{PartsSpecifications} 'parts' '{'
		parts += PartSpecification*
	'}'
;

PartSpecification: ViewSpecification;

ViewSpecification:
	{ViewSpecification} 'viewpart' id=QualifiedName '{'
		'viewname' viewName=STRING
		'viewclass' type=JvmTypeReference
		('viewcategory' category=QualifiedName)?
	'}'
;
