/**
 * *******************************************************************************
 *  Copyright (c) 2017 Robert Bosch GmbH and others.
 *  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/
 *
 * Contributors:
 *     Robert Bosch GmbH - initial API and implementation
 *     Dortmund University of Applied Sciences and Arts - initial API and implementation
 *
 * *******************************************************************************
 */

// ********************************************************************************  
// name                 : Workflow/mapping
// script-type          : JavaScript
// description          : Runs the Mapping workflow
// ********************************************************************************  

//basic setup
loadModule('/System/Resources')
loadModule('/APP4MC/Workflow')

//Importing needed packages
importPackage(org.eclipse.app4mc.amalthea.workflow.component)
importPackage(org.eclipse.app4mc.amalthea.workflow.core)
importPackage(org.eclipse.app4mc.multicore.openmapping.workflow)

//Configure logging
addLoggerToConsole("org.eclipse.app4mc.multicore")
addLoggerToConsole("org.eclipse.app4mc.amalthea.workflow")


print("Starting Workflow ...")
//general setup
const BASE = "platform:/resource"
const PROJECT = BASE + "/app4mc.example.tool.mapping"
const MODEL_LOCATION1 = PROJECT + "/model/AMALTHEA_Democar_MappingExample.amxmi"
const MODEL_LOCATION2 = PROJECT + "/modelEnergyEfficient/IMX6.amxmi"

var ctx = new DefaultContext()

//Reader
var reader = new ModelReader()
reader.addFileName(MODEL_LOCATION1)
reader.addFileName(MODEL_LOCATION2)
reader.run(ctx)

//create tasks based on initial model
//result is saved in modelslot createtasks
var createTasks = new CreateTasks()
createTasks.run(ctx)

//Writer
var writer = new ModelWriter()
writer.setModelSlot("createtasks")
writer.setFileName("createtasks")
writer.setSingleFile(true)
writer.setOutputDir(PROJECT + "/workflow-output/imx6/create")
writer.run(ctx)

//generate mapping based on initial model
//result model is saved in modelslot mapping
var mappingDfg = new GenerateMapping()
mappingDfg.setModelSlot("createtasks")
mappingDfg.setMappingAlg("dfg")
mappingDfg.setEnableLog(true)
mappingDfg.run(ctx)

//Writer for Dfg
var writerDfg = new ModelWriter()
writerDfg.setModelSlot("mapping")
writerDfg.setFileName("mapping_dfg")
writerDfg.setSingleFile(true)
writerDfg.setOutputDir(PROJECT + "/workflow-output/imx6/dfg")
writerDfg.run(ctx)

//generate mapping based on initial model with ilp
//result model is saved in modelslot mappingilp
var mappingIlp = new GenerateMapping()
mappingIlp.setModelSlot("createtasks")
mappingIlp.setMappingAlg("ilp_lb")
mappingIlp.setEnableLog(true)
mappingIlp.setResultSlot("mappingilp")
mappingIlp.run(ctx)

//Writer for Ilp
var writerIlp = new ModelWriter()
writerIlp.setModelSlot("mappingilp")
writerIlp.setFileName("mapping_ilplb")
writerIlp.setSingleFile(true)
writerIlp.setOutputDir(PROJECT + "/workflow-output/imx6/ilp")
writerIlp.run(ctx)

//generate mapping based on initial model with GA
//result model is saved in modelslot mappingga
var mappingGa = new GenerateMapping()
mappingGa.setModelSlot("createtasks")
mappingGa.setMappingAlg("ga_lb")
mappingGa.setEnableLog(true)
mappingGa.setResultSlot("mappingga")
mappingGa.run(ctx)

//Writer for GA
var writerGa = new ModelWriter()
writerGa.setModelSlot("mappingga")
writerGa.setFileName("mapping_galb")
writerGa.setSingleFile(true)
writerGa.setOutputDir(PROJECT + "/workflow-output/imx6/ga_lb")
writerGa.run(ctx)

//generate mapping based on initial model with GA
//result model is saved in modelslot mappingga
var mappingGaCon = new GenerateMapping()
mappingGaCon.setModelSlot("createtasks")
mappingGaCon.setMappingAlg("ga_constraints")
mappingGaCon.setEnableLog(true)
mappingGaCon.setResultSlot("mappinggacon")
mappingGaCon.run(ctx)

//Writer for GA (Constrained)
var writerGaCon = new ModelWriter()
writerGaCon.setModelSlot("mappinggacon")
writerGaCon.setFileName("mapping_gacon")
writerGaCon.setSingleFile(true)
writerGaCon.setOutputDir(PROJECT + "/workflow-output/imx6/ga_con")
writerGaCon.run(ctx)

print("Finished Workflow")
ctx.clear()
endWorkflow()