blob: 83d1265587e3ee4295094b038acd737564ef8368 [file] [log] [blame]
/**
********************************************************************************
* Copyright (c) 2018-2019 Robert Bosch GmbH and others.
*
* 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.amalthea.model.builder;
import org.eclipse.app4mc.amalthea.model.AmaltheaFactory;
import org.eclipse.app4mc.amalthea.model.ISRAllocation;
import org.eclipse.app4mc.amalthea.model.MappingModel;
import org.eclipse.app4mc.amalthea.model.MemoryMapping;
import org.eclipse.app4mc.amalthea.model.PhysicalSectionMapping;
import org.eclipse.app4mc.amalthea.model.RunnableAllocation;
import org.eclipse.app4mc.amalthea.model.Scheduler;
import org.eclipse.app4mc.amalthea.model.SchedulerAllocation;
import org.eclipse.app4mc.amalthea.model.SchedulerDefinition;
import org.eclipse.app4mc.amalthea.model.SchedulingParameterDefinition;
import org.eclipse.app4mc.amalthea.model.TaskAllocation;
import org.eclipse.app4mc.amalthea.model.Value;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
public class MappingBuilder {
public MappingModel mappingModelRoot(final Procedure1<MappingModel> initializer) {
final MappingModel obj = AmaltheaFactory.eINSTANCE.createMappingModel();
initializer.apply(obj);
return obj;
}
// ********** Top level elements **********
public void isrAllocation(final MappingModel container, final Procedure1<ISRAllocation> initializer) {
final ISRAllocation obj = AmaltheaFactory.eINSTANCE.createISRAllocation();
container.getIsrAllocation().add(obj);
initializer.apply(obj);
}
public void taskAllocation(final MappingModel container, final Procedure1<TaskAllocation> initializer) {
final TaskAllocation obj = AmaltheaFactory.eINSTANCE.createTaskAllocation();
container.getTaskAllocation().add(obj);
initializer.apply(obj);
}
public void runnableAllocation(final MappingModel container, final Procedure1<RunnableAllocation> initializer) {
final RunnableAllocation obj = AmaltheaFactory.eINSTANCE.createRunnableAllocation();
container.getRunnableAllocation().add(obj);
initializer.apply(obj);
}
public void schedulerAllocation(final MappingModel container, final Procedure1<SchedulerAllocation> initializer) {
final SchedulerAllocation obj = AmaltheaFactory.eINSTANCE.createSchedulerAllocation();
container.getSchedulerAllocation().add(obj);
initializer.apply(obj);
}
public void memoryMapping(final MappingModel container, final Procedure1<MemoryMapping> initializer) {
final MemoryMapping obj = AmaltheaFactory.eINSTANCE.createMemoryMapping();
container.getMemoryMapping().add(obj);
initializer.apply(obj);
}
public void physicalSectionMapping(final MappingModel container, final Procedure1<PhysicalSectionMapping> initializer) {
final PhysicalSectionMapping obj = AmaltheaFactory.eINSTANCE.createPhysicalSectionMapping();
container.getPhysicalSectionMapping().add(obj);
initializer.apply(obj);
}
// ********** Parameters for task allocation **********
public void schedulingParameter(final TaskAllocation container, final String parameterName,
final Value parameterValue) {
Scheduler sched = container.getScheduler();
// TODO: get parameters from parent scheduler if current scheduler is grouping
final SchedulerDefinition sd = sched.getDefinition();
final SchedulingParameterDefinition spd = sd.getProcessParameters().stream().filter(
pad -> pad.getName().equals(parameterName)).findFirst().get();
container.getSchedulingParameters().put(spd, parameterValue);
}
}