blob: 731dc58eb90842fc8245bbbc934edfee7c703317 [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2017 - 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
*
*
* This copyright notice shows up in the generated Java code
*
*/
package org.eclipse.osbp.xtext.statemachine.jvmmodel
import com.vaadin.data.util.filter.And
import com.vaadin.data.util.filter.Between
import com.vaadin.data.util.filter.Compare
import com.vaadin.data.util.filter.IsNull
import com.vaadin.data.util.filter.Like
import com.vaadin.data.util.filter.Not
import com.vaadin.data.util.filter.Or
import com.vaadin.data.util.filter.SimpleStringFilter
import com.vaadin.ui.Notification
import java.lang.reflect.Constructor
import java.lang.reflect.InvocationTargetException
import java.util.HashMap
import java.util.List
import java.util.Locale
import java.util.Map
import java.util.ResourceBundle
import javax.inject.Inject
import jpos.BaseControl
import jpos.CashDrawer
import jpos.JposException
import jpos.LineDisplay
import jpos.LineDisplayConst
import jpos.POSPrinter
import jpos.POSPrinterConst
import jpos.config.JposEntry.Prop
import jpos.config.simple.SimpleEntry
import org.eclipse.emf.ecore.EObject
import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.osbp.abstractstatemachine.AbstractStateMachine
import org.eclipse.osbp.abstractstatemachine.POSServiceBinder
import org.eclipse.osbp.abstractstatemachine.TaskEventSource
import org.eclipse.osbp.ecview.core.^extension.model.^extension.YSuggestTextFieldEvents
import org.eclipse.osbp.runtime.common.filter.IDTOService
import org.eclipse.osbp.runtime.common.i18n.ITranslator
import org.eclipse.osbp.ui.api.message.MessageEvent
import org.eclipse.osbp.ui.api.statemachine.IStateMachine
import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType
import org.eclipse.osbp.xtext.basic.generator.BasicDslGeneratorUtils
import org.eclipse.osbp.xtext.i18n.I18NModelGenerator
import org.eclipse.osbp.xtext.statemachine.FSMPackage
import org.eclipse.xtext.common.types.JvmEnumerationLiteral
import org.eclipse.xtext.generator.IFileSystemAccess
import org.eclipse.xtext.xbase.compiler.GeneratorConfig
import org.eclipse.xtext.xbase.compiler.ImportManager
import org.eclipse.xtext.xbase.compiler.XbaseCompiler
import org.eclipse.xtext.xbase.compiler.output.ITreeAppendable
import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor
import org.eclipse.xtext.xbase.jvmmodel.JvmModelAssociator
import org.joda.time.DateTime
import org.osgi.service.useradmin.User
import org.eclipse.e4.core.contexts.IEclipseContext
import com.vaadin.ui.Panel
import org.eclipse.e4.ui.model.application.ui.basic.MPart
import javax.swing.Timer
class StatemachineDSLModelGenerator extends I18NModelGenerator {
@Inject extension BasicDslGeneratorUtils
@Inject extension JvmModelAssociator
@Inject XbaseCompiler compiler
var public static String pckgName = null
def void generatePckgName(FSMPackage pckg, IJvmDeclaredTypeAcceptor acceptor) {
pckgName = pckg.getName
}
override doGenerate(Resource input, IFileSystemAccess fsa) {
super.doGenerate(input, fsa)
}
override createAppendable(EObject context, ImportManager importManager, GeneratorConfig config) {
// required to initialize the needed builder to avoid deprecated methods
builder = context.eResource
// ---------
addImportFor(importManager, _typeReferenceBuilder
,User
,ResourceBundle
,Locale
,List
,ITranslator
,AbstractStateMachine
,IStateMachine
,MessageEvent
,MessageEvent.EventType
,TaskEventSource
,LineDisplayConst
,POSPrinterConst
,ThemeResourceType
,YSuggestTextFieldEvents
,DateTime
,Notification
,Notification.Type
,IDTOService
,LineDisplay
,POSPrinter
,CashDrawer
,SimpleEntry
,JposException
,Prop
,Constructor
,BaseControl
,POSServiceBinder
,InvocationTargetException
,Timer
,Compare.Greater
,Compare.GreaterOrEqual
,Compare.Less
,Compare.LessOrEqual
,Compare.Equal
,And
,Or
,Between
,IsNull
,Like
,Not
,SimpleStringFilter
,HashMap
,Map
,IEclipseContext
,Panel
,MPart
)
super.createAppendable(context, importManager, config)
}
def void generateInitialization(JvmEnumerationLiteral it, ITreeAppendable appendable, GeneratorConfig config) {
if (compilationStrategy != null) {
appendable.append(" { ")
appendable.increaseIndentation
appendable.newLine
compilationStrategy.apply(appendable)
appendable.decreaseIndentation
appendable.newLine
appendable.append("}")
} else {
val expression = associatedExpression
if (expression != null && config.generateExpressions) {
if(expression.hasErrors()) {
appendable.append(" /* Skipped initializer because of errors */")
} else {
appendable.append(" = ")
compiler.compileAsJavaExpression(expression, appendable, type)
}
}
}
}
override generateEnumLiteral(JvmEnumerationLiteral it, ITreeAppendable appendable, GeneratorConfig config) {
appendable.newLine
generateJavaDoc(appendable, config)
annotations.generateAnnotations(appendable, true, config)
appendable.append(simpleName)
generateInitialization(appendable, config)
}
}