/**
 *                                                                            
 *  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.ecview.core.common.context.IViewContext
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.ui.api.useraccess.AbstractAuthorization.Action
import org.eclipse.osbp.ui.api.useraccess.AbstractAuthorization.Group
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
import org.eclipse.e4.ui.model.application.ui.menu.MToolControl
import org.eclipse.osbp.xtext.action.common.DialogStateHandler

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
        	, Action
        	, Group
			, Event
			, EventUtils
			, MToolBar
			, MenuFactoryImpl
			, ItemType
			, VerticalLayout
			, Panel
			, CssLayout
			, Component
			, AbstractLayout
			, MHandledToolItem
			, MToolBarSeparator
			, MContext
			, MTrimmedWindow
			, MPerspectiveStack
			, MPerspective
			, MPart
			, MToolControl
			, Method
			, EventBrokerMsg
			, FrameworkUtil
			, UI
			, Locale
			, TranslationService
			, IThemeResourceService
			, ThemeResourceType
			, EnumCssClass
			, IPersistenceService
			, IViewContext
			, 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)
	}
}
