/*******************************************************************************
 * Copyright (c) 2018 Robert Bosch GmbH.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     Robert Bosch GmbH - initial API and implementation
 *******************************************************************************/

package templates

import org.eclipse.app4mc.amalthea.model.Amalthea
import org.eclipse.app4mc.amalthea.model.RunnableCall
import org.eclipse.app4mc.amalthea.model.Task
import org.eclipse.app4mc.amalthea.model.util.ModelUtil
import org.eclipse.app4mc.amalthea.model.util.SoftwareUtil
import org.eclipse.app4mc.transformation.extensions.base.templates.AbstractTransformer

class M2T_Output_Transformer extends AbstractTransformer {

	/**
	 * Creates output with a "template only" style (like Xpand/Xtend).
	 */
	def String generateOutput1(Amalthea amalthea) '''
		«var swModel=amalthea.swModel»
		
		// generating info about tasks and runnables (in execution order)
		
		«FOR task : swModel.tasks»
		-----------------------------------------------
		Task: «task.name»
		
			«var graphEntries=task.activityGraph.items»
			«FOR graphEntry: graphEntries»
				«IF graphEntry instanceof RunnableCall»
							Associated Runnable: «(graphEntry as  RunnableCall).runnable.name»
				«ENDIF»
			«ENDFOR»
		«ENDFOR»
		-----------------------------------------------
	'''


	/**
	 * Creates output with a combination of template and functions.
	 * This allows a more flexible use of utility functions and lambdas.
	 */
	def String generateOutput2(Amalthea amalthea) '''
		
		// generating info about tasks and runnables (in alphabetic order)
		
		«FOR task : ModelUtil.getOrCreateSwModel(amalthea).tasks»
		-----------------------------------------------
		Task: «task.name»
		
			«FOR name: runnableNamesOf(task)»
				Associated Runnable: «name»
			«ENDFOR»
		«ENDFOR»
		-----------------------------------------------
	'''
		
	def runnableNamesOf(Task task) {
		SoftwareUtil.collectActivityGraphItems(task.activityGraph, null, [e | e instanceof RunnableCall])
			.map[e | (e as RunnableCall).runnable.name]
			.sort
	}
	
}
