blob: 45046096616c1be2ad748fecf3dc5bb241ac664c [file] [log] [blame]
/**
********************************************************************************
* Copyright (c) 2020 Eclipse APP4MC contributors.
*
* 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
*
********************************************************************************
*/
package org.eclipse.app4mc.amalthea._import.atdb;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.app4mc.amalthea.model.ActivityGraph;
import org.eclipse.app4mc.amalthea.model.Amalthea;
import org.eclipse.app4mc.amalthea.model.AmaltheaPackage;
import org.eclipse.app4mc.amalthea.model.ISR;
import org.eclipse.app4mc.amalthea.model.Process;
import org.eclipse.app4mc.amalthea.model.Runnable;
import org.eclipse.app4mc.amalthea.model.RunnableCall;
import org.eclipse.app4mc.amalthea.model.SWModel;
import org.eclipse.app4mc.amalthea.model.Stimulus;
import org.eclipse.app4mc.amalthea.model.Task;
import org.eclipse.app4mc.amalthea.model.util.ModelUtil;
import org.eclipse.app4mc.atdb.ATDBConnection;
public class ProcessConverter extends AConverter {
public ProcessConverter(final Amalthea model, final ATDBConnection con) {
super(model, con, "processes");
}
@Override
protected void execute() throws SQLException {
final SWModel swModel = ModelUtil.getOrCreateSwModel(model);
final List<Process> processes = new ArrayList<>();
con.getAllTasks().forEach(taskName -> processes.add(AmaltheaModelUtil.getOrAddNew(swModel, AmaltheaPackage.eINSTANCE.getSWModel_Tasks(),
taskName, Task.class)));
con.getAllISRs().forEach(isrName -> processes.add(AmaltheaModelUtil.getOrAddNew(swModel, AmaltheaPackage.eINSTANCE.getSWModel_Isrs(),
isrName, ISR.class)));
for(final Process proc:processes) {
// fill activity graph
final ActivityGraph ag = ModelUtil.getOrCreateActivityGraph(proc);
con.getRunnablesOfProcess(proc.getName()).forEach(runnableName ->
AmaltheaModelUtil.getOrAddNewWithContainer(ag,
AmaltheaPackage.eINSTANCE.getIActivityGraphItemContainer_Items(), RunnableCall.class,
AmaltheaPackage.eINSTANCE.getRunnableCall(),
AmaltheaPackage.eINSTANCE.getRunnableCall_Runnable(), Runnable.class,
AmaltheaPackage.eINSTANCE.getRunnable(), runnableName).getKey());
// connect stimuli
con.getStimuliOfProcess(proc.getName()).forEach(stimulusName ->
AmaltheaModelUtil.getOrAddNew(proc, AmaltheaPackage.eINSTANCE.getProcess_Stimuli(), stimulusName, Stimulus.class));
}
}
}