/**
 * *******************************************************************************
 * Copyright (c) 2018-2019 Robert Bosch GmbH.
 * 
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 * 
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Contributors:
 *     Robert Bosch GmbH - initial API and implementation
 * *******************************************************************************
 */

package templates

import com.inchron.realtime.root.RootFactory
import com.inchron.realtime.root.model.Model
import com.inchron.realtime.root.model.ModelFactory
import com.inchron.realtime.root.model.memory.MemoryFactory
import com.inchron.realtime.root.model.stimulation.StimulationFactory
import org.eclipse.app4mc.amalthea.model.Amalthea
import org.eclipse.app4mc.amalthea.model.AmaltheaFactory
import org.eclipse.app4mc.transformation.extensions.base.templates.AbstractTransformer
import com.inchron.realtime.root.settings.SettingsFactory

abstract class AbstractAmaltheaInchronTransformer extends AbstractTransformer {

	public def Amalthea getAmaltheaRoot(){
		return (customObjsStore.getInstance(Amalthea) as Amalthea)
	}

	public def Model getInchronRoot(){
		return (customObjsStore.getInstance(Model) as Model)
	}
	
	/*- Factory initialization */
	public def getInchronRootFactory(){
		return RootFactory.eINSTANCE}
	
	public def getInchronSettingsFactory(){
		return SettingsFactory.eINSTANCE}

	public def getInchronModelFactory(){
		ModelFactory.eINSTANCE}

	public def getInchronMemoryFactory(){
		MemoryFactory.eINSTANCE}

	public def getInchronStimulationFactory(){
		StimulationFactory.eINSTANCE}

	public def getAmaltheaFactory(){
		AmaltheaFactory.eINSTANCE}
}
