/**
 * *******************************************************************************
 * Copyright (c) 2020 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 org.eclipse.app4mc.slg.linux.transformers

import com.google.inject.Inject
import com.google.inject.Singleton
import java.util.List
import java.util.Properties
import org.eclipse.app4mc.amalthea.model.Stimulus
import org.eclipse.app4mc.slg.linux.generators.LinuxStimulusTranslationUnit
import org.eclipse.app4mc.transformation.util.OutputBuffer

@Singleton
class LinuxStimulusTransformer extends LinuxBaseTransformer {

	@Inject OutputBuffer outputBuffer;
	@Inject Properties properties;
	
	def create new LinuxStimulusTranslationUnit(outputBuffer, properties, stimuli) transform(List<Stimulus> stimuli) {
	}

}
