/**
 *                                                                            
 *  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.action.ActionDSL with org.eclipse.osbp.xtext.oxtype.OXtype

import "http://osbp.eclipse.org/xtext/action/ActionDSL"

//import "http://osbp.eclipse.org/dsl/entity/v1" as entity
import "http://osbp.eclipse.org/xtext/functionlibrarydsl/FunctionLibraryDSL" as func
import "http://osbp.eclipse.org/xtext/messagedsl/MessageDSL" as msg
import "http://osbp.eclipse.org/xtext/datainterchange/DataDSL" as data
import "http://osbp.eclipse.org/dsl/common/types/v1" as types
import "http://www.eclipse.org/emf/2002/Ecore" as ecore 

ActionModel:
	importSection=XImportSection?
	packages+=ActionPackage*;

ActionPackage:
	{ActionPackage} 'package' name=QualifiedName (withouCommandProvider?='noCommandProvider')?
	('{' 
		(commands+=ActionCommand)*
		(toolbars+=ActionToolbar)* 
	'}')?;

ActionCommand:
	{ActionCommand} 'command' name=ID
	(hasDescription?='describedBy' description=TRANSLATABLESTRING)?
	(hasKeyBinding?='keyBinding' keyBinding=STRING)?
	('icon' iconURI=STRING)?
	actionType = ActionType;
	
ActionToolbar:
	{ActionToolbar} 'toolbar' name=ID (description?='describedBy' descriptionValue=TRANSLATABLESTRING)?
	('items' '{' (actions+=ActionToolbarItem)* '}')?;

ActionToolbarItem:
	ActionButton | ActionSpacer | ActionState | ActionInclude;

ActionSpacer:
	{ActionSpacer} 'spacer';
	
ActionButton:
	{ActionButton} 'item' name=TRANSLATABLEID (description?='describedBy' descriptionValue=TRANSLATABLESTRING)?
	'command' command=[ActionCommand];
	
ActionState:
	{ActionState} 'state';
	
ActionInclude:
	{ActionInclude } 'include' include=[ActionToolbar];
	
ActionType:
	ActionTask | ActionSelectWorkload | ActionDialog | ActionReport |ActionChart | ActionWorkflow | ActionFunction | ActionDatainterchange | ActionUI | ActionTable | ActionOrganization;
	
ActionTask:
	'taskAction' action=TaskActionEnum;

ActionSelectWorkload:
	'selectWorkloadAction' action=SelectWorkloadActionEnum;
	
ActionDialog:
	'dialogAction' action=DialogActionEnum;
	
ActionReport:
	'reportAction' action=ReportActionEnum;
	
ActionChart:
	'chartAction' action=ChartActionEnum;
	
ActionWorkflow:
	'workflowAction' action=WorkflowActionEnum;

ActionDatainterchange:
	'datainterchangeAction' action=DatainterchangeActionEnum 
	dataRef=[data::DataInterchange|FQN]
	(hasfilter?='filterOn')?;

ActionUI:
	'userinterfaceAction' action=UIActionEnum;

ActionTable:
	'tableAction' action=TableActionEnum;

ActionOrganization:
	'organizationAction' action=OrganizationActionEnum;

ActionFunction:
	'functionalAction' 
	'group' actionGroup=[func::FunctionLibraryActionGroup] 
	'canExecute' canExecute=[func::FunctionLibraryCanExecute]
	((hasExecuteImmediate?='executeImmediate' executeImmediate=[func::FunctionLibraryExecute] 
		(hasMessage?='messageCategory' messageCategory=[msg::MessageCategory] 
		'onFailMessage' onFailMessage=[msg::MessageItem] (hasSuccessMessage?='onSuccessMessage' onSuccessMessage=[msg::MessageItem])?)?
	)|
	(hasExecuteLater?='executeLater' executeLater=[func::FunctionLibraryExecute]
		(hasStartedMessage?='messageCategory' messageCategory=[msg::MessageCategory] 
		'onStartedMessage' onStartedMessage=[msg::MessageItem])?
	));

ActionParameter:
	{ActionParameter} 'parameter' parameter = [func::FunctionLibraryParameter];
	
TRANSLATABLEID:
	ID;
		
TRANSLATABLESTRING:
	STRING;
	
FQN:
	ID ('.' ID)*;

enum TaskActionEnum:
	TASK_ACTION_CLAIM='Claim' | TASK_ACTION_START='Start' | TASK_ACTION_STOP='Stop' | TASK_ACTION_RELEASE='Release' | TASK_ACTION_SUSPEND='Suspend' | 
	TASK_ACTION_RESUME='Resume' | TASK_ACTION_SKIP='Skip' | TASK_ACTION_COMPLETE='Complete' | TASK_ACTION_DELEGATE='Delegate' |
	TASK_ACTION_FORWARD='Forward' | TASK_ACTION_FAIL='Fail' | TASK_ACTION_REGISTER='Register' | TASK_ACTION_REMOVE='Remove' | 
	TASK_ACTION_ACTIVATE='Activate' | TASK_ACTION_EXIT='Exit';

enum SelectWorkloadActionEnum:
	WORKLOAD_SELECT_ACTION_REMOVE_ALL='RemoveAll' | WORKLOAD_SELECT_ACTION_ADD_ALL='AddAll';

enum DialogActionEnum:
	DIALOG_ACTION_NEW='New' | 
	DIALOG_ACTION_SAVE='Save' | 
	DIALOG_ACTION_DELETE='Delete' | 
	DIALOG_ACTION_CANCEL='Cancel' | 
	DIALOG_ACTION_SAVE_AND_NEW='SaveAndNew' |
	DIALOG_ACTION_SAVE_AS_NEW='SaveAsNew';

enum ReportActionEnum:
	REPORT_ACTION_PRINT_ON_SERVER_PDF='PrintOnServer' | REPORT_ACTION_DOWNLOAD_PDF='Download';

enum ChartActionEnum:
	CHART_ACTION_DOWNLOAD='Download';

enum WorkflowActionEnum:
	WORKFLOW_ACTION_START='Start';

enum DatainterchangeActionEnum:
	DATAINTERCHANGE_ACTION_IMPORT='Import' | DATAINTERCHANGE_ACTION_EXPORT='Export'; 

enum UIActionEnum:
	NEXT_PART = 'NextPart' |
	PREVIOUS_PART = 'PreviousPart' |
	NEXT_PERSPECTIVE = 'NextPerspective' |
	PREVIOUS_PERSPECTIVE = 'PreviousPerspective' |
	DATABASE_INFO='Info' |
	MDX_QUERY='MDXQuery';
	
enum TableActionEnum:
	EXPORT_EXCEL = 'ExportExcel' |
	EXPORT_CSV = 'ExportCsv' |
	EXPORT_PDF = 'ExportPDF';
	
enum OrganizationActionEnum:
	ZOOM = 'Zoom' |
	ZOOM_IN = 'ZoomIn' |
	ZOOM_OUT = 'ZoomOut' |
	ZOOM_ACTUAL = 'ZoomActual' |
	SAVE = 'Save' |
	PRINT = 'Print' |
	POSTER_PRINT = 'PosterPrint' /**/;
