/**
 *                                                                            
 *  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
 * 
 * 
 *  This copyright notice shows up in the generated Java code
 *
 */
 
package org.eclipse.osbp.xtext.action.jvmmodel

import com.vaadin.ui.AbstractLayout
import com.vaadin.ui.Component
import com.vaadin.ui.CssLayout
import com.vaadin.ui.Notification
import com.vaadin.ui.Panel
import com.vaadin.ui.UI
import com.vaadin.ui.VerticalLayout
import java.io.File
import java.io.FileInputStream
import java.io.IOException
import java.io.PrintWriter
import java.io.StringWriter
import java.lang.reflect.Method
import java.util.HashMap
import java.util.Locale
import java.util.Map
import java.util.Properties
import java.util.UUID
import javax.inject.Inject
import org.eclipse.e4.core.contexts.ContextInjectionFactory
import org.eclipse.e4.core.di.extensions.EventUtils
import org.eclipse.e4.core.services.translation.TranslationService
import org.eclipse.e4.ui.di.Focus
import org.eclipse.e4.ui.model.application.MApplication
import org.eclipse.e4.ui.model.application.commands.MBindingContext
import org.eclipse.e4.ui.model.application.commands.MBindingTable
import org.eclipse.e4.ui.model.application.commands.MCommand
import org.eclipse.e4.ui.model.application.commands.MHandler
import org.eclipse.e4.ui.model.application.commands.MKeyBinding
import org.eclipse.e4.ui.model.application.commands.impl.CommandsFactoryImpl
import org.eclipse.e4.ui.model.application.ui.MContext
import org.eclipse.e4.ui.model.application.ui.MUIElement
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspectiveStack
import org.eclipse.e4.ui.model.application.ui.basic.MPart
import org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow
import org.eclipse.e4.ui.model.application.ui.menu.ItemType
import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem
import org.eclipse.e4.ui.model.application.ui.menu.MToolBar
import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl
import org.eclipse.emf.ecore.EObject
import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.osbp.core.api.persistence.IPersistenceService
import org.eclipse.osbp.eventbroker.EventBrokerMsg
import org.eclipse.osbp.preferences.ProductConfiguration
import org.eclipse.osbp.runtime.common.annotations.IsDirty
import org.eclipse.osbp.runtime.common.annotations.IsNew
import org.eclipse.osbp.runtime.common.annotations.IsPositioned
import org.eclipse.osbp.runtime.common.annotations.IsValid
import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent
import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherCommand
import org.eclipse.osbp.runtime.common.event.EventDispatcherEvent.EventDispatcherDataTag
import org.eclipse.osbp.ui.api.contextfunction.ICommandsProvider
import org.eclipse.osbp.ui.api.e4.IE4Dialog
import org.eclipse.osbp.ui.api.e4.IE4Focusable
import org.eclipse.osbp.ui.api.e4.IE4Table
import org.eclipse.osbp.ui.api.themes.EnumCssClass
import org.eclipse.osbp.ui.api.themes.IThemeResourceService
import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType
import org.eclipse.osbp.vaaclipse.api.VaadinExecutorService
import org.eclipse.osbp.xtext.action.ChartActionEnum
import org.eclipse.osbp.xtext.action.DatainterchangeActionEnum
import org.eclipse.osbp.xtext.action.DialogActionEnum
import org.eclipse.osbp.xtext.action.ReportActionEnum
import org.eclipse.osbp.xtext.action.SelectWorkloadActionEnum
import org.eclipse.osbp.xtext.action.TaskActionEnum
import org.eclipse.osbp.xtext.action.UIActionEnum
import org.eclipse.osbp.xtext.action.WorkflowActionEnum
import org.eclipse.osbp.xtext.action.common.E4Helper
import org.eclipse.osbp.xtext.action.common.TaskHelper
import org.eclipse.osbp.xtext.basic.generator.BasicDslGeneratorUtils
import org.eclipse.osbp.xtext.datainterchange.common.WorkerThreadRunnable
import org.eclipse.osbp.xtext.i18n.I18NModelGenerator
import org.eclipse.xtext.generator.IFileSystemAccess
import org.eclipse.xtext.xbase.compiler.GeneratorConfig
import org.eclipse.xtext.xbase.compiler.ImportManager
import org.osgi.framework.FrameworkUtil
import org.osgi.service.event.Event
import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator
import org.eclipse.osbp.utils.vaadin.MDXDialog

class ActionModelGenerator extends I18NModelGenerator {
	@Inject extension BasicDslGeneratorUtils
	
	override createAppendable(EObject context, ImportManager importManager, GeneratorConfig config) {
		// required to initialize the needed builder to avoid deprecated methods
		builder = context.eResource
		// ---------
        addImportFor(importManager, _typeReferenceBuilder
			, Event
			, EventUtils
			, MToolBar
			, MenuFactoryImpl
			, ItemType
			, VerticalLayout
			, Panel
			, CssLayout
			, Component
			, AbstractLayout
			, MHandledToolItem
			, MToolBarSeparator
			, MContext
			, MTrimmedWindow
			, MPerspectiveStack
			, MPerspective
			, MPart
			, Method
			, EventBrokerMsg
			, FrameworkUtil
			, UI
			, Locale
			, TranslationService
			, IThemeResourceService
			, ThemeResourceType
			, EnumCssClass
			, IPersistenceService
			, WorkerThreadRunnable
			, EventDispatcherEvent
			, EventDispatcherCommand
			, EventDispatcherDataTag
			, DialogActionEnum
			, ReportActionEnum
			, TaskActionEnum
			, SelectWorkloadActionEnum
			, ChartActionEnum
			, WorkflowActionEnum
			, DatainterchangeActionEnum
			, UIActionEnum
			, IOException
			, File
			, FileInputStream
			, Properties
			, ProductConfiguration
			, PrintWriter
			, StringWriter
			, ContextInjectionFactory
			, IsValid
			, IsNew
			, IsDirty
			, IsPositioned
			, IE4Dialog
			, IE4Table
			, IE4Focusable
			, Focus
			, MUIElement
			, CommandsFactoryImpl
			, MApplication
			, MBindingTable
			, MBindingContext
			, MKeyBinding
			, MCommand
			, MHandler
			, UUID
			, ICommandsProvider
			, HashMap
			, Map
			, TaskHelper
			, E4Helper
			, Notification
			, Notification.Type
			, VaadinExecutorService
			, MDXDialog
		)
		super.createAppendable(context, importManager, config)
	}
	
	override doGenerate(Resource input, IFileSystemAccess fsa) {
		super.doGenerate(input, fsa)
	}
}
