@GenModel(fileExtensions="signal")
@GenModel(modelName="SignalDSL")
@GenModel(prefix="SignalDSL")
// force bigModel == false
@GenModel(loadInitialization="false")
@GenModel(literalsInterface="true")

@GenModel(copyrightText="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
 
 generated from SignalDSL.xcore

 ")
@GenModel(updateClasspath="false")
@Ecore(nsURI="http://osbp.eclipse.org/xtext/signal/SignalDSL")
@Ecore(nsPrefix="signaldsl")
@Ecore(rootPackage="signaldsl")
package org.eclipse.osbp.xtext.signal

import org.eclipse.emf.ecore.EObject
import org.eclipse.emf.ecore.InternalEObject
import org.eclipse.osbp.dsl.semantic.common.types.LPackage
import org.eclipse.osbp.xtext.datainterchange.DataInterchangeGroup
import org.eclipse.osbp.xtext.oxtype.resource.EcoreUtil3
import org.eclipse.xtext.xtype.XImportSection
import org.eclipse.osbp.xtext.datainterchange.DataInterchange

class SignalModel{
	contains XImportSection importSection
	contains SignalPackage packages
}

type InternalEObject wraps InternalEObject

class SignalLazyResolver {
	op EObject eResolveProxy(InternalEObject proxy) {
		return EcoreUtil3.resolve(proxy, this.eResource().resourceSet);
	}
}

class SignalPackage extends LPackage {
	contains SignalDefinition[] signals
}

class SignalDefinition extends SignalLazyResolver{
	String name
}

class SignalWatcher extends SignalDefinition {
	contains WatcherDefinition definition
}

class WatcherDefinition {
	refers DataInterchangeGroup interchangegroup
	SignalExecutionTypeEnum executiontype
}

class WatcherWithFileMask extends WatcherDefinition{
	String filemask
	contains SignalDatainterchange interchange
}
class WatcherWithFileName extends WatcherDefinition {
	String filename
	contains SignalDatainterchange[] interchanges
}

class SchedulerType extends SignalLazyResolver {
}

class SignalScheduler extends SignalDefinition {
	refers DataInterchangeGroup interchangegroup
	SignalExecutionTypeEnum executiontype
	contains SchedulerType schedulertype
	contains SignalDatainterchange[] interchanges
}

class CronScheduler extends SchedulerType {
	String expression
}
class HourlyScheduler extends SchedulerType {
	int minute
}
class DailyScheduler extends SchedulerType {
	int hour
	int minute
}
class WeeklyScheduler extends SchedulerType {
	DayOfWeekEnum dayofweek
	int hour
	int minute
}
class MonthlyScheduler extends SchedulerType {
	int dayofmonth
	int hour
	int minute
}

interface SignalProcessor extends SignalLazyResolver {}

class SignalDatainterchange extends SignalProcessor {
	SignalActionEnum dataAction
	refers DataInterchange dataRef
	boolean baseinterchange
}

enum SignalActionEnum {
	DATAIMPORT as 'import'
	DATAEXPORT as 'export'
	NONE as 'none'
}

enum SignalExecutionTypeEnum {
	SEQ as 'sequential'
	NOSEQ as 'parallel'
}

enum DayOfWeekEnum{
	SUNDAY as 'sunday'
	MONDAY as 'monday'
	TUESDAY as 'tuesday'
	WEDNESDAY as 'wednesday'
	THURSDAY as 'thursday'
	FRIDAY as 'friday'
	SATURDAY as 'saturday'
}