| /** |
| * ******************************************************************************* |
| * Copyright (c) 2017 Timing-Architects Embedded Systems GmbH and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Timing-Architects Embedded Systems GmbH - initial API and implementation |
| * |
| * ******************************************************************************* |
| */ |
| package org.eclipse.app4mc.amalthea.generator.ui; |
| |
| import java.util.Arrays; |
| |
| import org.eclipse.app4mc.amalthea.generator.configuration.DoubleDistribution; |
| import org.eclipse.app4mc.amalthea.generator.configuration.Generation; |
| import org.eclipse.app4mc.amalthea.generator.configuration.IntegerDistribution; |
| import org.eclipse.app4mc.amalthea.generator.configuration.PercentageDistribution; |
| import org.eclipse.app4mc.amalthea.generator.configuration.PriorityDeterminationAlgorithm; |
| import org.eclipse.app4mc.amalthea.generator.configuration.ProcessMappingAlgorithms; |
| import org.eclipse.app4mc.amalthea.generator.configuration.RTMGC; |
| import org.eclipse.app4mc.amalthea.generator.configuration.RTMGCFactory; |
| import org.eclipse.app4mc.amalthea.generator.configuration.TaskProperties; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.custom.ScrolledComposite; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Combo; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.TabFolder; |
| import org.eclipse.swt.widgets.TabItem; |
| |
| public class TasksConfigurationHelper implements IConfigurationHelper { |
| |
| private IntegerDistributionGroup count; |
| private PercentageDistributionGroup load; |
| private IntegerDistributionGroup group; |
| private IntegerDistributionGroup mta; |
| private DoubleDistributionGroup deadline; |
| private IntegerDistributionGroup schedule; |
| private Combo mappingCombo; |
| private Combo priorityCombo; |
| |
| public void addTabItem(TabFolder parent) { |
| TabItem tab = new TabItem(parent, SWT.NONE); |
| tab.setText("Tasks"); |
| |
| ScrolledComposite sc = new ScrolledComposite(parent, SWT.BORDER | SWT.V_SCROLL); |
| |
| Composite container = new Composite(sc, SWT.NONE); |
| GridLayout gridLayout = new GridLayout(); |
| container.setLayout(gridLayout); |
| gridLayout.numColumns = 2; |
| |
| sc.setExpandVertical(true); |
| sc.setExpandHorizontal(true); |
| |
| // distributions |
| this.count = new IntegerDistributionGroup(container, "Number of Tasks to be generated", 9, 15, 22); |
| this.load = new PercentageDistributionGroup(container, "Load in Percentage for each Task", 1, 20); |
| this.group = new IntegerDistributionGroup(container, "Number of Tasks per Task Group", 1); |
| this.mta = new IntegerDistributionGroup(container, "Number of Concurrent Task Activations", 1, 5); |
| this.deadline = new DoubleDistributionGroup(container, "Factor of the Deadline Relative to the Recurrence of the Task", 1); |
| this.schedule = new IntegerDistributionGroup(container, "Number of Call Sequences between Schedule Points that are added", 1); |
| |
| // call graphs |
| |
| // mapping determination |
| Label label = new Label(container, SWT.NONE); |
| label.setText("Mapping Determination Algorithm"); |
| label.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); |
| mappingCombo = new Combo(container, SWT.READ_ONLY); |
| mappingCombo.setItems(Arrays.stream(ProcessMappingAlgorithms.values()).map(Enum::name).toArray(String[]::new)); |
| mappingCombo.select(0); |
| |
| // priority determination |
| label = new Label(container, SWT.NONE); |
| label.setText("Priority Determination Algorithm"); |
| label.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false)); |
| priorityCombo = new Combo(container, SWT.READ_ONLY); |
| priorityCombo.setItems(Arrays.stream(PriorityDeterminationAlgorithm.values()).map(Enum::name).toArray(String[]::new)); |
| priorityCombo.select(0); |
| |
| |
| sc.setContent(container); |
| sc.setMinSize(container.computeSize(SWT.DEFAULT, SWT.DEFAULT)); |
| tab.setControl(sc); |
| } |
| |
| @Override |
| public void loadConfiguration(RTMGC rtmgc) { |
| if(null != rtmgc) { |
| Generation generation = rtmgc.getGeneration(); |
| if(null != generation) { |
| TaskProperties tasks = generation.getTasks(); |
| if(null != tasks) { |
| IntegerDistribution count = tasks.getCount(); |
| this.count.set(count); |
| PercentageDistribution load = tasks.getLoad(); |
| this.load.set(load); |
| IntegerDistribution group = tasks.getPerTaskGroup(); |
| this.group.set(group); |
| IntegerDistribution mta = tasks.getMta(); |
| this.mta.set(mta); |
| DoubleDistribution deadline = tasks.getDeadlineFactor(); |
| this.deadline.set(deadline); |
| IntegerDistribution schedule = tasks.getCallSequencesBetweenSchedulePoints(); |
| this.schedule.set(schedule); |
| |
| this.mappingCombo.select(tasks.getMappingDetermination().getValue()); |
| this.priorityCombo.select(tasks.getPriorityDetermination().getValue()); |
| } |
| } |
| } |
| } |
| |
| @Override |
| public void updateConfiguration(RTMGC rtmgc) { |
| if(null != rtmgc) { |
| Generation generation = rtmgc.getGeneration(); |
| if(null == generation) { |
| generation = RTMGCFactory.eINSTANCE.createGeneration(); |
| rtmgc.setGeneration(generation); |
| } |
| TaskProperties tasks = generation.getTasks(); |
| if(null == tasks) { |
| tasks = RTMGCFactory.eINSTANCE.createTaskProperties(); |
| generation.setTasks(tasks); |
| } |
| IntegerDistribution count = this.count.get(); |
| tasks.setCount(count); |
| PercentageDistribution load = this.load.get(); |
| tasks.setLoad(load); |
| IntegerDistribution group = this.group.get(); |
| tasks.setPerTaskGroup(group); |
| IntegerDistribution mta = this.mta.get(); |
| tasks.setMta(mta); |
| DoubleDistribution deadline = this.deadline.get(); |
| tasks.setDeadlineFactor(deadline); |
| IntegerDistribution schedule = this.schedule.get(); |
| tasks.setCallSequencesBetweenSchedulePoints(schedule); |
| |
| tasks.setMappingDetermination(ProcessMappingAlgorithms.get(this.mappingCombo.getSelectionIndex())); |
| tasks.setPriorityDetermination(PriorityDeterminationAlgorithm.get(this.priorityCombo.getSelectionIndex())); |
| } |
| } |
| |
| @Override |
| public boolean isValid() { |
| return true; |
| } |
| } |