blob: 8434ef6e85e1d99338ebe1979d2c94177337fcef [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/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
definition=WatcherDefinition
;
WatcherDefinition:
WatcherWithFileMask | WatcherWithFileName
;
WatcherWithFileMask:
{WatcherWithFileMask}
'filemask' filemask=STRING
executiontype=SignalExecutionTypeEnum
'from' interchangegroup=[data::DataInterchangeGroup]
'{'
interchange=SignalDatainterchange
'}'
;
WatcherWithFileName:
{WatcherWithFileName}
'filename' filename=STRING
executiontype=SignalExecutionTypeEnum
'from' interchangegroup=[data::DataInterchangeGroup]
'{'
interchanges+=SignalDatainterchange*
'}'
;
SignalScheduler:
{SignalScheduler}
'scheduler' name=TRANSLATABLEID
schedulertype=SchedulerType
(executiontype=SignalExecutionTypeEnum)?
'from' interchangegroup=[data::DataInterchangeGroup]
'{'
interchanges+=SignalDatainterchange*
'}'
;
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;
SignalDatainterchange:
dataAction=SignalActionEnum
dataRef=[data::DataInterchange]
(baseinterchange?='applyon')?
;
enum SignalActionEnum:
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
;