/**
 *                                                                            
 *  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/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)?
	actionType = ActionType;
	
ActionToolbar:
	{ActionToolbar} 'toolbar' name=ID (description?='describedBy' descriptionValue=TRANSLATABLESTRING)?
	('items' '{' (actions+=ActionToolbarItem)* '}')?;

ActionToolbarItem:
	ActionButton | ActionSpacer
;

ActionSpacer:
	{ActionSpacer} 'spacer'
;
	
ActionButton:
	{ActionButton} 'item' name=TRANSLATABLEID (description?='describedBy' descriptionValue=TRANSLATABLESTRING)?
	'command' command=[ActionCommand]
	('icon' iconURI=STRING)?;
	
ActionType:
	ActionTask | ActionSelectWorkload | ActionDialog | ActionReport |ActionChart | ActionWorkflow | ActionFunction | ActionDatainterchange | ActionUI;
	
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];

ActionUI:
	'userinterfaceAction' action=UIActionEnum;

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;

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' |
	DATABASE_INFO='Info' |
	MDX_QUERY='MDXQuery';
	