blob: 0f327b1df2b044d2d196fd02f6e620a4f28c0db6 [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.InterruptController;
import org.eclipse.app4mc.amalthea.model.LabelAccess;
import org.eclipse.app4mc.amalthea.model.OSModel;
import org.eclipse.app4mc.amalthea.model.OperatingSystem;
import org.eclipse.app4mc.amalthea.model.OsAPIOverhead;
import org.eclipse.app4mc.amalthea.model.OsDataConsistency;
import org.eclipse.app4mc.amalthea.model.OsISROverhead;
import org.eclipse.app4mc.amalthea.model.OsOverhead;
import org.eclipse.app4mc.amalthea.model.Scheduler;
import org.eclipse.app4mc.amalthea.model.SchedulerAssociation;
import org.eclipse.app4mc.amalthea.model.SchedulerDefinition;
import org.eclipse.app4mc.amalthea.model.SchedulingParameterDefinition;
import org.eclipse.app4mc.amalthea.model.Semaphore;
import org.eclipse.app4mc.amalthea.model.TaskScheduler;
import org.eclipse.app4mc.amalthea.model.Value;
import org.eclipse.app4mc.amalthea.model.VendorOperatingSystem;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
public class OperatingSystemBuilder {
public OSModel osModelRoot(final Procedure1<OSModel> initializer) {
final OSModel obj = AmaltheaFactory.eINSTANCE.createOSModel();
initializer.apply(obj);
return obj;
}
// ********** Top level elements **********
public void operatingSystem(final OSModel container, final Procedure1<OperatingSystem> initializer) {
final OperatingSystem obj = AmaltheaFactory.eINSTANCE.createOperatingSystem();
container.getOperatingSystems().add(obj);
initializer.apply(obj);
}
//@SuppressWarnings("java:S100") // domain specific builder language
public void operatingSystem_Vendor(final OSModel container, final Procedure1<VendorOperatingSystem> initializer) {
final VendorOperatingSystem obj = AmaltheaFactory.eINSTANCE.createVendorOperatingSystem();
container.getOperatingSystems().add(obj);
initializer.apply(obj);
}
public void semaphore(final OSModel container, final Procedure1<Semaphore> initializer) {
final Semaphore obj = AmaltheaFactory.eINSTANCE.createSemaphore();
container.getSemaphores().add(obj);
initializer.apply(obj);
}
public void osOverhead(final OSModel container, final Procedure1<OsOverhead> initializer) {
final OsOverhead obj = AmaltheaFactory.eINSTANCE.createOsOverhead();
container.getOsOverheads().add(obj);
initializer.apply(obj);
}
public void schedulerDefinition(final OSModel container, final Procedure1<SchedulerDefinition> initializer) {
final SchedulerDefinition obj = AmaltheaFactory.eINSTANCE.createSchedulerDefinition();
container.getSchedulerDefinitions().add(obj);
initializer.apply(obj);
}
public void parameterDefinition(final OSModel container, final Procedure1<SchedulingParameterDefinition> initializer) {
final SchedulingParameterDefinition obj = AmaltheaFactory.eINSTANCE.createSchedulingParameterDefinition();
container.getSchedulingParameterDefinitions().add(obj);
initializer.apply(obj);
}
// ********** Operating system **********
public void taskScheduler(final OperatingSystem container, final Procedure1<TaskScheduler> initializer) {
final TaskScheduler obj = AmaltheaFactory.eINSTANCE.createTaskScheduler();
container.getTaskSchedulers().add(obj);
initializer.apply(obj);
}
public void schedulingParameter(final Scheduler container, final String parameterName, final Value parameterValue) {
final SchedulerDefinition sd = container.getDefinition();
sd.getAlgorithmParameters().stream().filter(pad -> pad.getName().equals(parameterName)).findFirst()
.ifPresent(spd -> container.getSchedulingParameters().put(spd, parameterValue));
}
public void interruptController(final OperatingSystem container,
final Procedure1<InterruptController> initializer) {
final InterruptController obj = AmaltheaFactory.eINSTANCE.createInterruptController();
container.getInterruptControllers().add(obj);
initializer.apply(obj);
}
public void dataConsistency(final OperatingSystem container, final Procedure1<OsDataConsistency> initializer) {
final OsDataConsistency obj = AmaltheaFactory.eINSTANCE.createOsDataConsistency();
container.setOsDataConsistency(obj);
initializer.apply(obj);
}
public void labelAccess(final Scheduler container, final Procedure1<LabelAccess> initializer) {
final LabelAccess obj = AmaltheaFactory.eINSTANCE.createLabelAccess();
container.getComputationItems().add(obj);
initializer.apply(obj);
}
public void parentAssociation(final TaskScheduler container, final Procedure1<SchedulerAssociation> initializer) {
final SchedulerAssociation obj = AmaltheaFactory.eINSTANCE.createSchedulerAssociation();
container.setParentAssociation(obj);
initializer.apply(obj);
}
public void schedulingParameter(final SchedulerAssociation container, final String parameterName,
final Value parameterValue) {
Scheduler sched = container.getParent();
final SchedulerDefinition sd = sched.getDefinition();
sd.getProcessParameters().stream().filter(pad -> pad.getName().equals(parameterName)).findFirst()
.ifPresent(spd -> container.getSchedulingParameters().put(spd, parameterValue));
}
// ********** OS instructions (overhead) **********
public void apiOverhead(final OsOverhead container, final Procedure1<OsAPIOverhead> initializer) {
final OsAPIOverhead obj = AmaltheaFactory.eINSTANCE.createOsAPIOverhead();
container.setApiOverhead(obj);
initializer.apply(obj);
}
public void isrOverheadCat1(final OsOverhead container, final Procedure1<OsISROverhead> initializer) {
final OsISROverhead obj = AmaltheaFactory.eINSTANCE.createOsISROverhead();
container.setIsrCategory1Overhead(obj);
initializer.apply(obj);
}
public void isrOverheadCat2(final OsOverhead container, final Procedure1<OsISROverhead> initializer) {
final OsISROverhead obj = AmaltheaFactory.eINSTANCE.createOsISROverhead();
container.setIsrCategory2Overhead(obj);
initializer.apply(obj);
}
}