blob: 03fbe2f811f56a08dd1cecf28a9448fecaacc649 [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2018 - 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.signal.SignalDSL with org.eclipse.osbp.xtext.oxtype.OXtype
import "http://osbp.eclipse.org/xtext/signal/SignalDSL"
import "http://osbp.eclipse.org/xtext/functionlibrarydsl/FunctionLibraryDSL" as func
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
SignalModel:
importSection=XImportSection?
packages=SignalPackage;
SignalPackage:
{SignalPackage} 'package' name=QualifiedName
('{'
(signals+=SignalDefinition)*
'}')?
;
SignalDefinition:
SignalWatcher | SignalScheduler
;
SignalWatcher:
{SignalWatcher}
'watcher' name=TRANSLATABLEID
( hasFileMask?='filemask' | 'filename' )
identifier=STRING
executiontype=SignalExecutionTypeEnum
'from' interchangegroup=[data::DataInterchangeGroup]
'{'
('applyon' defaultInterchange=[data::DataInterchange])?
(tasks+=SignalTask)*
'}'
;
SignalScheduler:
{SignalScheduler}
'scheduler' name=TRANSLATABLEID
schedulertype=SchedulerType
(executiontype=SignalExecutionTypeEnum)?
'from' interchangegroup=[data::DataInterchangeGroup]
'{'
(tasks+=SignalTask)*
'}'
;
SchedulerType:
CronScheduler | HourlyScheduler | DailyScheduler | WeeklyScheduler | MonthlyScheduler;
CronScheduler:
'cron' expression=STRING;
HourlyScheduler:
'hourlyat' minute=INT;
DailyScheduler:
'dailyat' hour=INT ':' minute=INT;
WeeklyScheduler:
'weeklyon' dayofweek=DayOfWeekEnum 'at' hour=INT ':' minute=INT;
MonthlyScheduler:
'monthlyon' dayofmonth=INT 'at' hour=INT ':' minute=INT;
SignalTask:
SignalDatainterchange | SignalFunction
;
SignalDatainterchange:
actionType=SignalActionTypeEnum
dataRef=[data::DataInterchange]
(baseinterchange?='applyon')?
;
SignalFunction:
'functionGroup' group=[func::FunctionLibraryActionGroup]
(
('execute' doExecuteFunction=[func::FunctionLibraryExecute]) |
(onImportFile?='executeOnImportFile' doExecuteFunction=[func::FunctionLibraryExecute] 'from' supportInterchange=[data::DataInterchange]) |
(onExportFile?='executeOnExportFile' doExecuteFunction=[func::FunctionLibraryExecute] 'from' supportInterchange=[data::DataInterchange])
)
;
enum SignalActionTypeEnum:
DATAIMPORT='import' |
DATAEXPORT='export'
;
enum SignalExecutionTypeEnum:
SEQ='sequential' |
NOSEQ='parallel'
;
enum DayOfWeekEnum:
SUNDAY='sunday' |
MONDAY='monday' |
TUESDAY='tuesday' |
WEDNESDAY='wednesday' |
THURSDAY='thursday' |
FRIDAY='friday' |
SATURDAY='saturday'
;
TRANSLATABLEID:
ID
;
TRANSLATABLESTRING:
STRING
;