The UI part and minor things are added

1. `APP4RTA.java` UI is added.
2. `SingleTCs.amxmi` model is added for simple UI demonstration
3. a path to `SingleTCs.amxmi` is added to `SharedConsts.java`
4. automatically generated file directory `/xtend-gen/` is added to
`.gitignore`

Change-Id: Icaee5ab1ae42ec2d61a2085cf178edd25f0c1b72
Signed-off-by: Junhyung Ki <kijoonh91@gmail.com>
diff --git a/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/.gitignore b/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/.gitignore
index ae3c172..b33f6af 100644
--- a/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/.gitignore
+++ b/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/.gitignore
@@ -1 +1,2 @@
 /bin/
+/xtend-gen/
diff --git a/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/model-input/SingleTCs/SingleTCs.amxmi b/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/model-input/SingleTCs/SingleTCs.amxmi
new file mode 100644
index 0000000..c714b75
--- /dev/null
+++ b/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/model-input/SingleTCs/SingleTCs.amxmi
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<am:Amalthea xmlns:am="http://app4mc.eclipse.org/amalthea/0.9.8" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmi:version="2.0">
+  <swModel>
+    <tasks xmi:id="Task0?type=Task" name="Task0" stimuli="periodic_03s?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+      <activityGraph>
+        <items xsi:type="am:RunnableCall" runnable="Run0?type=Runnable" />
+      </activityGraph>
+    </tasks>
+    <tasks xmi:id="Task1?type=Task" name="Task1" stimuli="periodic_05s?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+      <activityGraph>
+        <items xsi:type="am:RunnableCall" runnable="Run1?type=Runnable" />
+      </activityGraph>
+    </tasks>
+    <tasks xmi:id="Task2?type=Task" name="Task2" stimuli="periodic_06s?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+      <activityGraph>
+        <items xsi:type="am:RunnableCall" runnable="Run2?type=Runnable" />
+      </activityGraph>
+    </tasks>
+    <tasks xmi:id="Task3?type=Task" name="Task3" stimuli="periodic_10s?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+      <activityGraph>
+        <items xsi:type="am:RunnableCall" runnable="Run3?type=Runnable" />
+      </activityGraph>
+    </tasks>
+    <runnables xmi:id="Run0?type=Runnable" name="Run0" callback="false" service="false">
+      <activityGraph>
+        <items xsi:type="am:Ticks">
+          <default xsi:type="am:DiscreteValueConstant" value="1" />
+        </items>
+      </activityGraph>
+    </runnables>
+    <runnables xmi:id="Run1?type=Runnable" name="Run1" callback="false" service="false">
+      <activityGraph>
+        <items xsi:type="am:Ticks">
+          <default xsi:type="am:DiscreteValueConstant" value="1" />
+        </items>
+      </activityGraph>
+    </runnables>
+    <runnables xmi:id="Run2?type=Runnable" name="Run2" callback="false" service="false">
+      <activityGraph>
+        <items xsi:type="am:Ticks">
+          <default xsi:type="am:DiscreteValueConstant" value="1" />
+        </items>
+      </activityGraph>
+    </runnables>
+    <runnables xmi:id="Run3?type=Runnable" name="Run3" callback="false" service="false">
+      <activityGraph>
+        <items xsi:type="am:Ticks">
+          <default xsi:type="am:DiscreteValueConstant" value="2" />
+        </items>
+      </activityGraph>
+    </runnables>
+  </swModel>
+  <hwModel>
+    <definitions xsi:type="am:ProcessingUnitDefinition" xmi:id="A57?type=ProcessingUnitDefinition" name="A57" puType="CPU">
+      <customProperties key="baseline">
+        <value xsi:type="am:Time" value="20" unit="ns" />
+      </customProperties>
+      <customProperties key="k">
+        <value xsi:type="am:Time" value="20" unit="ns" />
+      </customProperties>
+      <customProperties key="sGPU">
+        <value xsi:type="am:Time" value="100" unit="ns" />
+      </customProperties>
+    </definitions>
+    <definitions xsi:type="am:ProcessingUnitDefinition" xmi:id="Denver?type=ProcessingUnitDefinition" name="Denver" puType="CPU">
+      <customProperties key="baseline">
+        <value xsi:type="am:Time" value="8" unit="ns" />
+      </customProperties>
+      <customProperties key="k">
+        <value xsi:type="am:Time" value="2" unit="ns" />
+      </customProperties>
+      <customProperties key="sGPU">
+        <value xsi:type="am:Time" value="20" unit="ns" />
+      </customProperties>
+    </definitions>
+    <definitions xsi:type="am:ProcessingUnitDefinition" xmi:id="GPU_def?type=ProcessingUnitDefinition" name="GPU_def" puType="GPU">
+      <customProperties key="baseline">
+        <value xsi:type="am:Time" value="3" unit="ns" />
+      </customProperties>
+    </definitions>
+    <definitions xsi:type="am:MemoryDefinition" xmi:id="LPDDR4?type=MemoryDefinition" name="LPDDR4" memoryType="DRAM">
+      <size value="8" unit="GB" />
+      <accessLatency xsi:type="am:DiscreteValueConstant" value="0" />
+    </definitions>
+    <definitions xsi:type="am:ConnectionHandlerDefinition" xmi:id="Interconnect?type=ConnectionHandlerDefinition" name="Interconnect" policy="RoundRobin" maxBurstSize="4" maxConcurrentTransfers="1" />
+    <definitions xsi:type="am:CacheDefinition" xmi:id="CPU_L2?type=CacheDefinition" name="CPU_L2" cacheType="unified" writeStrategy="writeback" nWays="4" coherency="false" exclusive="false" hitRate="0.0">
+      <size value="2" unit="MB" />
+      <lineSize value="64" unit="B" />
+    </definitions>
+    <definitions xsi:type="am:CacheDefinition" xmi:id="GPU_L2?type=CacheDefinition" name="GPU_L2" cacheType="data" writeStrategy="writeback" nWays="4" coherency="false" exclusive="false" hitRate="0.0">
+      <size value="512" unit="kB" />
+      <lineSize value="64" unit="B" />
+    </definitions>
+    <structures xmi:id="JetsonTX2?type=HwStructure" name="JetsonTX2" structureType="System">
+      <structures xmi:id="ARM+island?type=HwStructure" name="ARM island" structureType="Cluster">
+        <modules xsi:type="am:ProcessingUnit" xmi:id="Core0?type=ProcessingUnit" name="Core0" frequencyDomain="A57_Domain?type=FrequencyDomain" definition="A57?type=ProcessingUnitDefinition">
+          <accessElements name="C2toDRAM">
+            <readLatency xsi:type="am:DiscreteValueConstant" value="40" />
+            <writeLatency xsi:type="am:DiscreteValueConstant" value="40" />
+            <dataRate value="4500" unit="MBPerSecond" />
+          </accessElements>
+        </modules>
+      </structures>
+    </structures>
+    <domains xsi:type="am:FrequencyDomain" xmi:id="A57_Domain?type=FrequencyDomain" name="A57_Domain" clockGating="false">
+      <defaultValue value="1.0" unit="Hz" />
+    </domains>
+  </hwModel>
+  <stimuliModel>
+    <stimuli xsi:type="am:PeriodicStimulus" xmi:id="periodic_03s?type=PeriodicStimulus" name="periodic_03s">
+      <recurrence value="3" unit="s" />
+    </stimuli>
+    <stimuli xsi:type="am:PeriodicStimulus" xmi:id="periodic_05s?type=PeriodicStimulus" name="periodic_05s">
+      <recurrence value="5" unit="s" />
+    </stimuli>
+    <stimuli xsi:type="am:PeriodicStimulus" xmi:id="periodic_06s?type=PeriodicStimulus" name="periodic_06s">
+      <recurrence value="6" unit="s" />
+    </stimuli>
+    <stimuli xsi:type="am:PeriodicStimulus" xmi:id="periodic_10s?type=PeriodicStimulus" name="periodic_10s">
+      <recurrence value="10" unit="s" />
+    </stimuli>
+  </stimuliModel>
+  <eventModel>
+    <events xsi:type="am:ProcessEvent" xmi:id="Task0+event?type=ProcessEvent" name="Task0 event" description="" entity="Task0?type=Task" />
+    <events xsi:type="am:ProcessEvent" xmi:id="Task1+event?type=ProcessEvent" name="Task1 event" entity="Task1?type=Task" />
+    <events xsi:type="am:ProcessEvent" xmi:id="Task2+event?type=ProcessEvent" name="Task2 event" entity="Task2?type=Task" />
+    <events xsi:type="am:ProcessEvent" xmi:id="Task3+event?type=ProcessEvent" name="Task3 event" description="" entity="Task3?type=Task" />
+  </eventModel>
+  <constraintsModel>
+    <eventChains xmi:id="EC_3-5-6-10?type=EventChain" name="EC_3-5-6-10" itemType="sequence" minItemsCompleted="1">
+      <items xsi:type="am:EventChainContainer">
+        <eventChain name="" stimulus="Task0+event?type=ProcessEvent" response="Task1+event?type=ProcessEvent" minItemsCompleted="1" />
+      </items>
+      <items xsi:type="am:EventChainContainer">
+        <eventChain name="" stimulus="Task1+event?type=ProcessEvent" response="Task2+event?type=ProcessEvent" minItemsCompleted="1" />
+      </items>
+      <items xsi:type="am:EventChainContainer">
+        <eventChain name="" stimulus="Task2+event?type=ProcessEvent" response="Task3+event?type=ProcessEvent" minItemsCompleted="1" />
+      </items>
+    </eventChains>
+    <eventChains xmi:id="EC_3-6-5-10?type=EventChain" name="EC_3-6-5-10" itemType="sequence" minItemsCompleted="1">
+      <items xsi:type="am:EventChainContainer">
+        <eventChain name="" stimulus="Task0+event?type=ProcessEvent" response="Task2+event?type=ProcessEvent" minItemsCompleted="1" />
+      </items>
+      <items xsi:type="am:EventChainContainer">
+        <eventChain name="" stimulus="Task2+event?type=ProcessEvent" response="Task1+event?type=ProcessEvent" minItemsCompleted="1" />
+      </items>
+      <items xsi:type="am:EventChainContainer">
+        <eventChain name="" stimulus="Task1+event?type=ProcessEvent" response="Task3+event?type=ProcessEvent" minItemsCompleted="1" />
+      </items>
+    </eventChains>
+    <eventChains xmi:id="EC_10-5-6-3?type=EventChain" name="EC_10-5-6-3" itemType="sequence" minItemsCompleted="1">
+      <items xsi:type="am:EventChainContainer">
+        <eventChain name="" stimulus="Task3+event?type=ProcessEvent" response="Task1+event?type=ProcessEvent" minItemsCompleted="1" />
+      </items>
+      <items xsi:type="am:EventChainContainer">
+        <eventChain name="" stimulus="Task1+event?type=ProcessEvent" response="Task2+event?type=ProcessEvent" minItemsCompleted="1" />
+      </items>
+      <items xsi:type="am:EventChainContainer">
+        <eventChain name="" stimulus="Task2+event?type=ProcessEvent" response="Task0+event?type=ProcessEvent" minItemsCompleted="1" />
+      </items>
+    </eventChains>
+    <eventChains xmi:id="EC_10-6-5-3?type=EventChain" name="EC_10-6-5-3" itemType="sequence" minItemsCompleted="1">
+      <items xsi:type="am:EventChainContainer">
+        <eventChain name="" stimulus="Task3+event?type=ProcessEvent" response="Task2+event?type=ProcessEvent" minItemsCompleted="1" />
+      </items>
+      <items xsi:type="am:EventChainContainer">
+        <eventChain name="" stimulus="Task2+event?type=ProcessEvent" response="Task1+event?type=ProcessEvent" minItemsCompleted="1" />
+      </items>
+      <items xsi:type="am:EventChainContainer">
+        <eventChain name="" stimulus="Task1+event?type=ProcessEvent" response="Task0+event?type=ProcessEvent" minItemsCompleted="1" />
+      </items>
+    </eventChains>
+  </constraintsModel>
+</am:Amalthea>
diff --git a/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/src/org/eclipse/app4mc/gsoc_rta/SharedConsts.java b/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/src/org/eclipse/app4mc/gsoc_rta/SharedConsts.java
index 43e3d8a..ed04559 100644
--- a/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/src/org/eclipse/app4mc/gsoc_rta/SharedConsts.java
+++ b/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/src/org/eclipse/app4mc/gsoc_rta/SharedConsts.java
@@ -18,7 +18,8 @@
 public class SharedConsts {
 
 	public static int RUNTIMESEC = 2 * 60 * 60;
-
+	public static final String SINGLE_CORE_MODEL = "model-input/SingleTCs/SingleTCs.amxmi";
+	
 	/*-----------Measurement Configuration--------------–*/
 	public static TimeType timeType = TimeType.WCET;
 	public static boolean onlyWrittenLabelsCE = true;
diff --git a/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/src/org/eclipse/app4mc/gsoc_rta/ui/APP4RTA.java b/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/src/org/eclipse/app4mc/gsoc_rta/ui/APP4RTA.java
new file mode 100644
index 0000000..8704d73
--- /dev/null
+++ b/eclipse-tools/responseTime-analyzer/plugins/org.eclipse.app4mc.gsoc_rta/src/org/eclipse/app4mc/gsoc_rta/ui/APP4RTA.java
@@ -0,0 +1,1151 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts.
+ *
+ * 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/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors: Junhyung Ki - initial API and implementation
+ * 
+ *******************************************************************************/
+package org.eclipse.app4mc.gsoc_rta.ui;
+
+import java.awt.Color;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.List;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.math.BigInteger;
+import java.util.HashMap;
+import java.util.stream.Collectors;
+
+import javax.swing.ButtonGroup;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.AmaltheaServices;
+import org.eclipse.app4mc.amalthea.model.EventChain;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
+import org.eclipse.app4mc.amalthea.model.PuType;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.amalthea.model.Time;
+import org.eclipse.app4mc.amalthea.model.TimeUnit;
+import org.eclipse.app4mc.amalthea.model.io.AmaltheaLoader;
+import org.eclipse.app4mc.amalthea.model.util.FactoryUtil;
+import org.eclipse.app4mc.amalthea.model.util.RuntimeUtil.TimeType;
+import org.eclipse.app4mc.gsoc_rta.*;
+import org.eclipse.app4mc.gsoc_rta.E2ELatency.SinglecoreLatCase;
+import org.eclipse.emf.common.util.EList;
+import javax.swing.SwingConstants;
+import javax.swing.filechooser.FileNameExtensionFilter;
+import javax.swing.JSeparator;
+
+/**
+ * Date: May 04, 2020
+ * @version 2.0
+ *					The purpose of this class is to provide users a better visual and increase usability of Response Time Analysis.
+ */
+@SuppressWarnings("serial")
+public class APP4RTA extends JFrame {
+	private static JComboBox<String> ecComboBox = new JComboBox<String>();
+	
+	private CPURta cpurta = new CPURta(false, AmaltheaLoader.loadFromFile(new File(SharedConsts.SINGLE_CORE_MODEL)), new int[] { 4, 1, 1, 3, 4, 0, 1, 3, 3, 0, 6, 2, 5, 6 });
+	private E2ELatency e2e = new E2ELatency();
+	private Amalthea currentModel = null;
+	private java.util.List<ProcessingUnit> currentPUList = null;
+	private int[] currentIA = null;
+	private EList<Task> allTaskList = null;
+	private EList<EventChain> currentECList = null;
+	private EventChain currentEC = null;
+	private java.util.List<Task> currentTaskChain = null;
+	private File currentFile = null;
+	
+	private HashMap<Integer, java.util.List<Task>> puTaskListHM;
+	private JFrame frame;
+	private int selectedECIndex = -1;
+	private boolean schedulability_flag = false;
+	JFileChooser fileChooser;
+	JTextField selectedModelLbl;
+	
+	private JLabel jl0, jl1, jl2, jl3, jl4, jl5, jl6, jl7, jl8, jl9, jl10, 
+		jl11, jl12, jl13, jl14, jl15, jl16, jl17, jl18, jl19;
+	private JTextField tf0, tf1, tf2, tf3, tf4, tf5, tf6, tf7, tf8, tf9, 
+		tf10, tf11, tf12, tf13, tf14, tf15, tf16, tf17, tf18, tf19;
+	private JLabel[] jLabelArray = {
+			jl0, jl1, jl2, jl3, jl4, jl5, jl6, jl7, jl8, jl9, jl10, 
+			jl11, jl12, jl13, jl14, jl15, jl16, jl17, jl18, jl19
+	};
+	private JTextField[] jTextFieldArray= {
+			tf0, tf1, tf2, tf3, tf4, tf5, tf6, tf7, tf8, tf9, 
+			tf10, tf11, tf12, tf13, tf14, tf15, tf16, tf17, tf18, tf19
+	};
+	
+	private JLabel jl_0, jl_1, jl_2, jl_3, jl_4, jl_5, jl_6, jl_7;
+	private JLabel jl_a, jl_b, jl_c, jl_d, jl_e, jl_f, jl_g, jl_h;
+	private List l0, l1, l2, l3, l4, l5, l6, l7;
+	private List rtL0, rtL1, rtL2, rtL3, rtL4, rtL5, rtL6, rtL7;
+	private JLabel[] puLabelArray = {
+			jl_0, jl_1, jl_2, jl_3, jl_4, jl_5, jl_6, jl_7
+	};
+	private JLabel[] rtListLabelArray = {
+			jl_a, jl_b, jl_c, jl_d, jl_e, jl_f, jl_g, jl_h
+	};
+	private List[] puListArray = {
+			l0, l1, l2, l3, l4, l5, l6, l7
+	};
+	private List[] rtListArray = {
+			rtL0, rtL1, rtL2, rtL3, rtL4, rtL5, rtL6, rtL7
+	};
+	
+	private JLabel ecL0, ecL1, ecL2, ecL3, ecL4, ecL5, ecL6, 
+		ecL7, ecL8, ecL9, ecL10, ecL11, ecL12, ecL13;
+	private JTextField jtf0, jtf1, jtf2, jtf3, jtf4, jtf5, jtf6,
+		jtf7, jtf8, jtf9, jtf10, jtf11, jtf12, jtf13;
+	private JLabel[] ecLabelArray = {
+			ecL0, ecL1, ecL2, ecL3, ecL4, ecL5, ecL6,
+			ecL7, ecL8, ecL9, ecL10, ecL11, ecL12, ecL13
+	};
+	private JTextField[] ecJTPArray = {
+			jtf0, jtf1, jtf2, jtf3, jtf4, jtf5, jtf6,
+			jtf7, jtf8, jtf9, jtf10, jtf11, jtf12, jtf13
+	};
+
+	public static void main(String[] args) {
+		EventQueue.invokeLater(new Runnable() {
+			public void run() {
+				org.apache.log4j.BasicConfigurator.configure();
+				Logger.getRootLogger().setLevel(Level.ERROR);
+				final APP4RTA window = new APP4RTA();
+				window.frame.setVisible(true);
+				window.frame.setTitle("APP4RTA");
+			}
+		});
+	}
+
+	public APP4RTA() {
+		initialize();
+	}
+	
+	private void initialize() {
+		frame = new JFrame();
+		frame.getContentPane().setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		frame.setBounds(0, 31, 1200, 1027);
+		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		frame.getContentPane().setLayout(null);
+		
+		JLabel lblSelectTheModel = new JLabel("Amalthea Model");
+		lblSelectTheModel.setFont(new Font("Stencil BT", Font.PLAIN, 13));
+		lblSelectTheModel.setBounds(10, 13, 120, 22);
+		frame.getContentPane().add(lblSelectTheModel);
+		
+		JLabel lblTaskName = new JLabel("Task Name");
+		lblTaskName.setForeground(new Color(139, 0, 0));
+		lblTaskName.setFont(new Font("Sitka Heading", Font.BOLD, 12));
+		lblTaskName.setHorizontalAlignment(SwingConstants.CENTER);
+		lblTaskName.setBounds(15, 43, 70, 16);
+		frame.getContentPane().add(lblTaskName);
+		
+		JLabel lblPuNum = new JLabel("PU Num");
+		lblPuNum.setForeground(new Color(0, 0, 255));
+		lblPuNum.setHorizontalAlignment(SwingConstants.CENTER);
+		lblPuNum.setFont(new Font("Sitka Heading", Font.BOLD, 12));
+		lblPuNum.setBounds(92, 43, 70, 16);
+		frame.getContentPane().add(lblPuNum);
+		
+		JButton btnDefualtIa = new JButton("Default IA");
+		btnDefualtIa.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				if (cpurta.getModel() == null) {
+					JOptionPane.showMessageDialog(frame, "ERROR: A model is not loaded.");
+					return ;
+				} else if (cpurta.getTRT() == null) {
+					JOptionPane.showMessageDialog(frame, "ERROR: TRT HashMap is not loaded.");
+					return ;
+				} else if (cpurta.getPUl().size() == 0) {
+					JOptionPane.showMessageDialog(frame, "ERROR: Processing Unit List is not loaded.");
+					return ;
+				}
+				/* This is only for 'ChallengeModel_TCs.amxmi' */
+				/*
+				final int[] defaultIA = SharedConsts.defaultIAMapping;
+				if (cpurta.getModel().getSwModel().getTasks().size() == defaultIA.length) {
+					for (int i = 0; i < defaultIA.length; i++) {
+						jTextFieldArray[i].setText("" + defaultIA[i]);
+					}
+					return ;
+				}
+				String str = "";
+				for (int i = 0; i < currentPUList.size(); i++) {
+					if (i == currentPUList.size() - 1) {
+						str = str + i; 
+						break;
+					}
+					str = str + i + ", ";
+				}
+				JOptionPane.showMessageDialog(frame, "ERROR: The length of the default integer array does not match with\n"
+						+ "the number of tasks in the target model.\n\n" + "Please assign the number(s) manually.\n" 
+						+ "Available PU number(s): " + str); 
+				*/
+				if (currentPUList.size() < 1) {
+					JOptionPane.showMessageDialog(frame, "ERROR: There is no processing unit in this model.\n"
+							+ "Please choose another model."); 
+				} else if (currentPUList.size() == 1) {
+					final int numOfTasks = cpurta.getModel().getSwModel().getTasks().size();
+					for (int i = 0; i < numOfTasks; i++) {
+						jTextFieldArray[i].setText("0");
+					}
+					return ;
+				} else {
+					final int numOfTasks = cpurta.getModel().getSwModel().getTasks().size();
+					final int numOfPUs = currentPUList.size();
+					int x = 0;
+					for (int i = 0; i < numOfTasks; i++) {
+						if (x < numOfPUs) {
+							jTextFieldArray[i].setText("" + x);
+						} else {
+							x = 0;
+							jTextFieldArray[i].setText("" + x);
+						}
+						x++;
+					}
+				}
+			}
+		});
+		
+		JButton btnEnterIA = new JButton("Enter IA");
+		btnEnterIA.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				currentIA = new int[cpurta.getModel().getSwModel().getTasks().size()];
+				for (int i = 0; i < allTaskList.size(); i++) {
+					if (jTextFieldArray[i].getText().length() == 0) {
+						JOptionPane.showMessageDialog(frame, "ERROR: Fill the rest of the array!");
+						return ;
+					} else if (jTextFieldArray[i].getText().charAt(0) < 48 || jTextFieldArray[i].getText().charAt(0) > 54) {
+						JOptionPane.showMessageDialog(frame, "ERROR: Wrong array value!");
+						return ;
+					} else if (i >= 0 && i <= 9 && Integer.parseInt(jTextFieldArray[i].getText()) == 6) {
+						JOptionPane.showMessageDialog(frame, "ERROR: CPU Tasks should not be mapped to GPU! \n\n"
+								+ "Please assign different IA value for " + "(" + allTaskList.get(i).getName() + ")");
+						return ;
+					} else if (i == jTextFieldArray.length-1 && Integer.parseInt(jTextFieldArray[i].getText()) != 6) {
+						JOptionPane.showMessageDialog(frame, "ERROR: 'Detection' task can not be mapped to CPU!");
+						return ;
+					}
+					currentIA[i] = Integer.parseInt(jTextFieldArray[i].getText());
+				}
+				cpurta.setIA(currentIA);
+				cpurta.setContention(currentIA, currentModel);
+				puTaskListHM = cpurta.getPUTaskListHashMap(currentModel);
+				for (int i = 0; i < puTaskListHM.size(); i++) {
+					if (puListArray[i].getItemCount() == 0) {
+						for (int j = 0; j < puTaskListHM.get(i).size(); j++) {	
+							puListArray[i].add((puTaskListHM.get(i).get(j)).getName());
+						}
+					}
+				}
+			}
+		});
+		
+		JRadioButton rdbtnSynchronous = new JRadioButton("Synchronous");
+		rdbtnSynchronous.setForeground(new Color(139, 0, 0));
+		rdbtnSynchronous.setFont(new Font("Sitka Heading", Font.BOLD, 13));
+		
+		JRadioButton rdbtnAsynchronous = new JRadioButton("Asynchronous");
+		rdbtnAsynchronous.setForeground(new Color(0, 0, 255));
+		rdbtnAsynchronous.setFont(new Font("Sitka Heading", Font.BOLD, 13));
+		
+		ButtonGroup offloadingMode = new ButtonGroup();
+		offloadingMode.add(rdbtnSynchronous);
+		offloadingMode.add(rdbtnAsynchronous);
+		
+		JRadioButton rdbtnWorstCase = new JRadioButton("Worst-Case");
+		rdbtnWorstCase.setFont(new Font("Sitka Heading", Font.BOLD, 13));
+		rdbtnWorstCase.setForeground(Color.DARK_GRAY);
+		
+		JRadioButton rdbtnAverageCase = new JRadioButton("Average-Case");
+		rdbtnAverageCase.setFont(new Font("Sitka Heading", Font.BOLD, 13));
+		rdbtnAverageCase.setForeground(Color.DARK_GRAY);
+		
+		JRadioButton rdbtnBestCase = new JRadioButton("Best-Case");
+		rdbtnBestCase.setFont(new Font("Sitka Heading", Font.BOLD, 13));
+		rdbtnBestCase.setForeground(Color.DARK_GRAY);
+
+		ButtonGroup executionMode = new ButtonGroup();
+		executionMode.add(rdbtnWorstCase);
+		executionMode.add(rdbtnAverageCase);
+		executionMode.add(rdbtnBestCase);
+		
+		JLabel lblSchedulability = new JLabel("Schedulability");
+		JTextField schedulability = new JTextField();
+		schedulability.setHorizontalAlignment(SwingConstants.RIGHT);
+		schedulability.setEditable(false);
+		
+		JLabel lblMemAccCost = new JLabel("Cumulated Memory-Access Cost");
+		JTextField memAccCost = new JTextField();
+		memAccCost.setHorizontalAlignment(SwingConstants.RIGHT);
+		memAccCost.setEditable(false);
+		
+		JLabel lblCumulContention = new JLabel("Cumulated Contention");
+		JTextField cumulContention = new JTextField();
+		cumulContention.setHorizontalAlignment(SwingConstants.RIGHT);
+		cumulContention.setEditable(false);
+		
+		JLabel lblComputation = new JLabel("Computation");
+		JTextField computation = new JTextField();
+		computation.setHorizontalAlignment(SwingConstants.RIGHT);
+		computation.setEditable(false);
+		
+		JLabel lblResponseTimeSum = new JLabel("Response Time Sum");
+		JTextField rtSum = new JTextField();
+		rtSum.setHorizontalAlignment(SwingConstants.RIGHT);
+		rtSum.setEditable(false);
+		
+		JButton btnCalculate = new JButton("Calculate");
+		btnCalculate.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				for (int i = 0; i < allTaskList.size(); i++) {
+					if (jTextFieldArray[i].getText().length() == 0) {
+						JOptionPane.showMessageDialog(frame, "ERROR: Fill the array first!");
+						return ;
+					}
+				}				
+				if (rdbtnSynchronous.isSelected()) {
+					SharedConsts.synchronousOffloading = true;
+				} else if (rdbtnAsynchronous.isSelected()) {
+					SharedConsts.synchronousOffloading = false;
+				} else {
+					JOptionPane.showMessageDialog(frame, "ERROR: You should choose an offloading mode! (Sync / Async)");
+					return ;
+				}
+				if (rdbtnWorstCase.isSelected()) {
+					SharedConsts.timeType = TimeType.WCET;
+				} else if (rdbtnAverageCase.isSelected()) {
+					SharedConsts.timeType = TimeType.ACET;
+				} else if (rdbtnBestCase.isSelected()) {
+					SharedConsts.timeType = TimeType.BCET;
+				} else {
+					JOptionPane.showMessageDialog(frame, "ERROR: You should choose an execution case! (Worst Case / Average Case / Best Case)");
+					return ;
+				}
+				if (currentIA == null || puTaskListHM.size() == 0) {
+					JOptionPane.showMessageDialog(frame, "ERROR: Click the 'Enter IA' button.");
+					return ;
+				}
+				schedulability_flag = true;
+				Time pRtSum = FactoryUtil.createTime(BigInteger.ZERO, TimeUnit.PS);
+				for (int i = 0; i < puTaskListHM.size(); i++) {
+					final ProcessingUnit pu = cpurta.getPUl().get(i);
+					final java.util.List<Task> thisPUTaskList = puTaskListHM.get(i);
+					Time thisRT = FactoryUtil.createTime(BigInteger.ZERO, TimeUnit.PS);
+					if (rtListArray[i].getItemCount() == 0) {
+						if (pu.getDefinition().getPuType().equals(PuType.CPU)) {
+							for (Task t : thisPUTaskList) {
+								thisRT = cpurta.preciseTestCPURT(t, thisPUTaskList, SharedConsts.timeType, pu);
+								final Time thisPeriod = CommonUtils.getStimInTime(t);
+								final BigInteger period = AmaltheaServices.convertToPicoSeconds(thisPeriod);
+								if (AmaltheaServices.convertToPicoSeconds(thisRT).compareTo(period) > 0) {
+									rtListArray[i].add("Not Scheduleable! => MAX Value");
+									schedulability_flag = false;
+								} else if (AmaltheaServices.convertToPicoSeconds(thisRT).equals(BigInteger.ZERO)) {
+									rtListArray[i].add("0 ps (GPU Task on CPU)");
+								} else {
+									rtListArray[i].add(thisRT.toString());
+								}
+								pRtSum = pRtSum.add(thisRT);
+							}
+						} else {
+							for (Task t : thisPUTaskList) {
+								thisRT = cpurta.getTRT().get(t);
+								rtListArray[i].add(thisRT.toString());
+								pRtSum = pRtSum.add(thisRT);
+							}
+						}
+					}
+				}
+				if (schedulability_flag) {
+					schedulability.setText("Scheduleable! :)");
+					memAccCost.setText("" + cpurta.getCumulatedMemAccCosts());
+					cumulContention.setText("" + cpurta.getCumulatedContention());
+					computation.setText("" + (pRtSum.subtract(cpurta.getCumulatedMemAccCosts())).subtract(cpurta.getCumulatedContention()));
+					rtSum.setText(pRtSum.toString());
+				} else {
+					schedulability.setText("Non Scheduleable! :(");
+					memAccCost.setText("Not Available.");
+					cumulContention.setText("Not Available.");
+					computation.setText("Not Available.");
+					rtSum.setText("Not Available.");
+					JOptionPane.showMessageDialog(frame, "ERROR: This mapping is not schedulable.\n"
+							+ "Please change the mapping.");
+				}
+			}
+		});
+		
+		JButton btnReset = new JButton("Reset");
+		btnReset.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				currentIA = null;
+				cpurta.setIA(currentIA);
+				cpurta.setContention(currentIA, currentModel);
+				/* latency time initializing */
+				cpurta.initCumulatedMemAccCosts();
+				cpurta.initCumulatedContention();
+				for (int i = 0; i < allTaskList.size(); i++) {
+					jTextFieldArray[i].setText("");
+				}
+				for (int i = 0; i < currentPUList.size(); i++) {
+					puListArray[i].removeAll();
+				}
+				for (int i = 0; i < currentPUList.size(); i++) {
+					rtListArray[i].removeAll();
+				}
+				offloadingMode.setSelected(null, false);
+				executionMode.setSelected(null, false);
+				schedulability.setText(null);
+				memAccCost.setText(null);
+				cumulContention.setText(null);
+				computation.setText(null);
+				rtSum.setText(null);
+				currentIA = null;
+				puTaskListHM = null;
+				frame.revalidate();
+				frame.repaint();
+			}
+		});
+
+		selectedModelLbl = new JTextField();
+		selectedModelLbl.setEditable(false);
+		selectedModelLbl.setBounds(142, 13, 206, 22);
+		frame.getContentPane().add(selectedModelLbl);
+		selectedModelLbl.setColumns(10);
+		
+		JButton amaltheaSchBtn = new JButton("Search Amalthea");
+		amaltheaSchBtn.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				final String userDirLocation = System.getProperty("user.dir");
+				File userDir = new File(userDirLocation);
+				fileChooser = new JFileChooser(userDir);
+				fileChooser.setAcceptAllFileFilterUsed(false);
+		        FileNameExtensionFilter filter = new FileNameExtensionFilter("Amalthea models", "amxmi");
+		        fileChooser.addChoosableFileFilter(filter);
+		        fileChooser.setDialogTitle("Open File");
+		        int result = fileChooser.showOpenDialog(null);
+		        if (result == JFileChooser.APPROVE_OPTION) {
+		        	final Amalthea loadedModel = AmaltheaLoader.loadFromFile(fileChooser.getSelectedFile());
+		        	if (loadedModel.getVersion().compareTo("0.9.8") != 0) {
+		        		JOptionPane.showMessageDialog(frame, "Error: This model should be migrated to the version 0.9.8");
+		        		return ;
+		        	}
+		        	/* Something was selected before */
+		        	if (currentFile != null) {
+		        		/* The selected file is equal to the previous file => Do nothing */
+		        		if (fileChooser.getSelectedFile().equals(currentFile)) {
+		        			JOptionPane.showMessageDialog(frame, "Same Model");
+		        			return ;
+		        		}
+		        		/* If the selected file is different to the previous one => Remove and Do Normal. */
+		        		else {
+		        			schedulability.setText(null);
+		    				memAccCost.setText(null);
+		    				cumulContention.setText(null);
+		    				computation.setText(null);
+		    				rtSum.setText(null);
+		        			for (int i = 0; i < allTaskList.size(); i++) {
+								frame.remove(jLabelArray[i]);
+								frame.remove(jTextFieldArray[i]);
+							}
+							frame.remove(btnDefualtIa);
+							frame.remove(btnEnterIA);
+							frame.remove(rdbtnSynchronous);
+							frame.remove(rdbtnAsynchronous);
+							frame.remove(rdbtnWorstCase);
+							frame.remove(rdbtnAverageCase);
+							frame.remove(rdbtnBestCase);
+							frame.remove(btnCalculate);
+							frame.remove(btnReset);
+							frame.remove(lblSchedulability);
+							frame.remove(schedulability);
+							frame.remove(lblMemAccCost);
+							frame.remove(memAccCost);
+							frame.remove(lblCumulContention);
+							frame.remove(cumulContention);
+							frame.remove(lblComputation);
+							frame.remove(computation);
+							frame.remove(lblResponseTimeSum);
+							frame.remove(rtSum);
+							for (int i = 0; i < currentPUList.size(); i++) {
+								frame.remove(puLabelArray[i]);
+								frame.remove(rtListLabelArray[i]);
+								frame.remove(puListArray[i]);
+								frame.remove(rtListArray[i]);
+							}
+							frame.remove(ecComboBox);
+		        		}
+		        	}
+		        	/* Something was not selected before => Do normal */
+		        	currentFile = fileChooser.getSelectedFile();
+		        	selectedModelLbl.setText(currentFile.getName());
+		        	currentModel = loadedModel;
+					currentPUList = CommonUtils.getPUs(currentModel);
+					if (currentPUList.get(0).getAccessElements().size() == 0) {
+						JOptionPane.showMessageDialog(frame, "The selected model's processing unit(s) does(do) not have 'read & write Latency' values.\n\n"
+								+ "Therefore, the default value of 30 will be assigned for them.\n"
+								+ "This will affect the response time results.");
+					}
+					cpurta.setModel(currentModel);
+					cpurta.setTRT(cpurta.getDefaultTRT(currentModel));
+					cpurta.setPUl(currentPUList);
+					allTaskList = currentModel.getSwModel().getTasks();
+					if (allTaskList.size() > 20) {
+						JOptionPane.showMessageDialog(frame, "ERROR: The selected model has " + allTaskList.size() + " Tasks. (Limit: 20)\n" 
+								+ "Please choose a different model.");
+						return ;
+					} else if (currentPUList.size() > 8) {
+						JOptionPane.showMessageDialog(frame, "ERROR: The selected model has " + currentPUList.size() + " Processing Units. (Limit: 8)\n"
+								+ "Please choose a different model.");
+						return ;
+					}
+					/* Task Indices */
+					for (int i = 0; i < allTaskList.size(); i++) {
+						jLabelArray[i] = new JLabel(allTaskList.get(i).getName());
+						jLabelArray[i].setBounds(12, (60+(i*24)), 97, 16);
+						frame.getContentPane().add(jLabelArray[i]);
+						jTextFieldArray[i] = new JTextField();
+						jTextFieldArray[i].setColumns(10);
+						jTextFieldArray[i].setBounds(118, (60+(i*24)), 22, 22);
+						frame.getContentPane().add(jTextFieldArray[i]);
+					}
+					/* DefaultIA Button */
+					btnDefualtIa.setBounds(155, 60, 97, 25);
+					frame.getContentPane().add(btnDefualtIa);
+					/* EnterIA Button */
+					btnEnterIA.setBounds(155, 90, 97, 25);
+					frame.getContentPane().add(btnEnterIA);
+					/* Sync Radio Button */
+					rdbtnSynchronous.setBounds(152, 125, 126, 25);
+					frame.getContentPane().add(rdbtnSynchronous);
+					/* Async Radio Button */
+					rdbtnAsynchronous.setBounds(152, 145, 126, 25);
+					frame.getContentPane().add(rdbtnAsynchronous);
+					/* WorstCase Radio Button */
+					rdbtnWorstCase.setBounds(152, 175, 107, 25);
+					frame.getContentPane().add(rdbtnWorstCase);
+					/* AverageCase Radio Button */
+					rdbtnAverageCase.setBounds(152, 195, 107, 25);
+					frame.getContentPane().add(rdbtnAverageCase);
+					/* BestCase Radio Button */
+					rdbtnBestCase.setBounds(152, 215, 107, 25);
+					frame.getContentPane().add(rdbtnBestCase);
+					/* Calculate Button */
+					btnCalculate.setBounds(155, 252, 97, 25);
+					frame.getContentPane().add(btnCalculate);
+					/* Reset Button */
+					btnReset.setBounds(155, 282, 97, 25);
+					frame.getContentPane().add(btnReset);
+					/* Schedulability Label & TextField */
+					lblSchedulability.setBounds(157, 323, 200, 16);
+					frame.getContentPane().add(lblSchedulability);
+					schedulability.setBounds(155, 343, 200, 22);
+					frame.getContentPane().add(schedulability);
+					/* MemAccCost Label & TextField */
+					lblMemAccCost.setBounds(157, 368, 200, 16);
+					frame.getContentPane().add(lblMemAccCost);
+					memAccCost.setBounds(155, 388, 200, 22);
+					frame.getContentPane().add(memAccCost);
+					/* CumulContention Label & TextField */
+					lblCumulContention.setBounds(157, 413, 200, 16);
+					frame.getContentPane().add(lblCumulContention);
+					cumulContention.setBounds(155, 433, 200, 22);
+					frame.getContentPane().add(cumulContention);
+					/* Computation */
+					lblComputation.setBounds(157, 458, 200, 16);
+					frame.getContentPane().add(lblComputation);
+					computation.setBounds(155, 478, 200, 22);
+					frame.getContentPane().add(computation);
+					/* ResponseTime Sum Label & TextField */
+					lblResponseTimeSum.setBounds(157, 503, 200, 16);
+					frame.getContentPane().add(lblResponseTimeSum);
+					rtSum.setBounds(155, 523, 200, 22);
+					frame.getContentPane().add(rtSum);
+					/* PU & RT Lists */
+					for (int i = 0; i < currentPUList.size(); i++) {
+						puLabelArray[i] = new JLabel(i +": " + currentPUList.get(i).getDefinition().getName());
+						rtListLabelArray[i] = new JLabel("Response Time");
+						puListArray[i] = new List();
+						rtListArray[i] = new List();
+						if (i >= 0 && i < 4) {
+							puLabelArray[i].setBounds((387+(i*200)), 50, 87, 22);
+							rtListLabelArray[i].setBounds((474+(i*200)), 50, 88, 22);
+							puListArray[i].setBounds((385+(i*200)), 75, 87, 145);
+							rtListArray[i].setBounds((475+(i*200)), 75, 87, 145);
+						} else if (i >= 4) {
+							puLabelArray[i].setBounds((387+((i-4)*200)), 225, 87, 22);
+							rtListLabelArray[i].setBounds((474+((i-4)*200)), 225, 88, 22);
+							puListArray[i].setBounds((385+((i-4)*200)), 250, 87, 145);
+							rtListArray[i].setBounds((475+((i-4)*200)), 250, 87, 145);
+						}
+						frame.getContentPane().add(puLabelArray[i]);
+						frame.getContentPane().add(rtListLabelArray[i]);
+						frame.getContentPane().add(puListArray[i]);
+						frame.getContentPane().add(rtListArray[i]);
+					}
+					/* E2ELatency Part */
+					currentECList = currentModel.getConstraintsModel().getEventChains();
+					if (currentECList.size() != 0) {
+						final String[] ecComboArray = new String[currentECList.size()];
+						for (int i = 0; i < currentECList.size(); i++) {
+							ecComboArray[i] = currentECList.get(i).getName();
+						}
+						ecComboBox = new JComboBox<String>(ecComboArray);
+						ecComboBox.setBounds(150, 570, 206, 22);
+						frame.getContentPane().add(ecComboBox);
+						ecComboBox.setSelectedItem(null);
+					} else {
+						JOptionPane.showMessageDialog(frame, "WARNING: The selected model has no Event-Chain.\n"
+								+ "End-to-End Event-Chain Latency Calculation is impossible with this model.");
+						// TODO: Something needs to be done here to prevent E2ELatency calculation.
+					}
+					frame.revalidate();
+					frame.repaint();
+		        }
+			}
+		});
+		amaltheaSchBtn.setBounds(348, 12, 133, 24);
+		frame.getContentPane().add(amaltheaSchBtn);
+
+		JLabel lblEventChainModel = new JLabel("EVENT CHAIN MODEL");
+		lblEventChainModel.setFont(new Font("Stencil BT", Font.PLAIN, 13));
+		lblEventChainModel.setBounds(10, 570, 136, 22);
+		frame.getContentPane().add(lblEventChainModel);
+		
+		JLabel lblRI = new JLabel("Reaction (Implicit)");
+		lblRI.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13));
+		lblRI.setBounds(105, 605, 293, 16);
+		frame.getContentPane().add(lblRI);
+		
+		JLabel lblBCRI = new JLabel("Best-Case");
+		lblBCRI.setHorizontalAlignment(SwingConstants.CENTER);
+		lblBCRI.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblBCRI.setBounds(10, 627, 90, 16);
+		frame.getContentPane().add(lblBCRI);
+		
+		JTextField txtField0 = new JTextField();
+		txtField0.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField0.setBounds(103, 625, 200, 22);
+		txtField0.setEditable(false);
+		frame.getContentPane().add(txtField0);
+		
+		JLabel lblWCRI = new JLabel("Worst-Case");
+		lblWCRI.setHorizontalAlignment(SwingConstants.CENTER);
+		lblWCRI.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblWCRI.setBounds(10, 656, 90, 16);
+		frame.getContentPane().add(lblWCRI);
+		
+		JTextField txtField1 = new JTextField();
+		txtField1.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField1.setBounds(103, 654, 200, 22);
+		txtField1.setEditable(false);
+		frame.getContentPane().add(txtField1);
+		
+		JLabel lblIRI = new JLabel("Initial Reaction (Implicit)");
+		lblIRI.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13));
+		lblIRI.setBounds(105, 688, 193, 16);
+		frame.getContentPane().add(lblIRI);
+		
+		JLabel lblBCIRI = new JLabel("Best-Case");
+		lblBCIRI.setHorizontalAlignment(SwingConstants.CENTER);
+		lblBCIRI.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblBCIRI.setBounds(10, 710, 90, 16);
+		frame.getContentPane().add(lblBCIRI);
+		
+		JTextField txtField2 = new JTextField();
+		txtField2.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField2.setBounds(103, 708, 200, 22);
+		txtField2.setEditable(false);
+		frame.getContentPane().add(txtField2);
+		
+		JLabel lblWCIRI = new JLabel("Worst-Case");
+		lblWCIRI.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblWCIRI.setHorizontalAlignment(SwingConstants.CENTER);
+		lblWCIRI.setBounds(10, 739, 90, 16);
+		frame.getContentPane().add(lblWCIRI);
+		
+		JTextField txtField3 = new JTextField();
+		txtField3.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField3.setBounds(103, 737, 200, 22);
+		txtField3.setEditable(false);
+		frame.getContentPane().add(txtField3);
+		
+		JLabel lblRL = new JLabel("Reaction (LET)");
+		lblRL.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13));
+		lblRL.setBounds(415, 605, 222, 16);
+		frame.getContentPane().add(lblRL);
+		
+		JLabel lblBCRL = new JLabel("Best-Case");
+		lblBCRL.setHorizontalAlignment(SwingConstants.CENTER);
+		lblBCRL.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblBCRL.setBounds(320, 627, 90, 16);
+		frame.getContentPane().add(lblBCRL);
+		
+		JTextField txtField4 = new JTextField();
+		txtField4.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField4.setBounds(413, 625, 200, 22);
+		txtField4.setEditable(false);
+		frame.getContentPane().add(txtField4);
+		
+		JLabel lblWCRL = new JLabel("Worst-Case");
+		lblWCRL.setHorizontalAlignment(SwingConstants.CENTER);
+		lblWCRL.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblWCRL.setBounds(320, 656, 90, 16);
+		frame.getContentPane().add(lblWCRL);
+		
+		JTextField txtField5 = new JTextField();
+		txtField5.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField5.setBounds(413, 654, 200, 22);
+		txtField5.setEditable(false);
+		frame.getContentPane().add(txtField5);
+		
+		JLabel lblIRL = new JLabel("Initial Reaction (LET)");
+		lblIRL.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13));
+		lblIRL.setBounds(415, 688, 232, 16);
+		frame.getContentPane().add(lblIRL);
+		
+		JLabel lblBCIRL = new JLabel("Best-Case");
+		lblBCIRL.setHorizontalAlignment(SwingConstants.CENTER);
+		lblBCIRL.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblBCIRL.setBounds(320, 710, 90, 16);
+		frame.getContentPane().add(lblBCIRL);
+		
+		JTextField txtField6 = new JTextField();
+		txtField6.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField6.setBounds(413, 708, 200, 22);
+		txtField6.setEditable(false);
+		frame.getContentPane().add(txtField6);
+		
+		JLabel lblWCIRL = new JLabel("Worst-Case");
+		lblWCIRL.setHorizontalAlignment(SwingConstants.CENTER);
+		lblWCIRL.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblWCIRL.setBounds(320, 739, 90, 16);
+		frame.getContentPane().add(lblWCIRL);
+		
+		JTextField txtField7 = new JTextField();
+		txtField7.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField7.setBounds(413, 737, 200, 22);
+		txtField7.setEditable(false);
+		frame.getContentPane().add(txtField7);
+		
+		JLabel lblAI = new JLabel("Age (Implicit)");
+		lblAI.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13));
+		lblAI.setBounds(105, 771, 293, 16);
+		frame.getContentPane().add(lblAI);
+		
+		JLabel lblBCAI = new JLabel("Best-Case");
+		lblBCAI.setHorizontalAlignment(SwingConstants.CENTER);
+		lblBCAI.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblBCAI.setBounds(10, 793, 90, 16);
+		frame.getContentPane().add(lblBCAI);
+		
+		JTextField txtField8 = new JTextField();
+		txtField8.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField8.setBounds(103, 791, 200, 22);
+		txtField8.setEditable(false);
+		frame.getContentPane().add(txtField8);
+		
+		JLabel lblWCAI = new JLabel("Worst-Case");
+		lblWCAI.setHorizontalAlignment(SwingConstants.CENTER);
+		lblWCAI.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblWCAI.setBounds(10, 822, 90, 16);
+		frame.getContentPane().add(lblWCAI);
+		
+		JTextField txtField9 = new JTextField();
+		txtField9.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField9.setBounds(103, 820, 200, 22);
+		txtField9.setEditable(false);
+		frame.getContentPane().add(txtField9);
+		
+		JLabel lblAL = new JLabel("Age (LET)");
+		lblAL.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13));
+		lblAL.setBounds(415, 771, 232, 16);
+		frame.getContentPane().add(lblAL);
+		
+		JLabel lblBCAL = new JLabel("Best-Case");
+		lblBCAL.setHorizontalAlignment(SwingConstants.CENTER);
+		lblBCAL.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblBCAL.setBounds(320, 793, 90, 16);
+		frame.getContentPane().add(lblBCAL);
+		
+		JTextField txtField10 = new JTextField();
+		txtField10.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField10.setBounds(413, 791, 200, 22);
+		txtField10.setEditable(false);
+		frame.getContentPane().add(txtField10);
+		
+		JLabel lblWCAL = new JLabel("Worst-Case");
+		lblWCAL.setHorizontalAlignment(SwingConstants.CENTER);
+		lblWCAL.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblWCAL.setBounds(320, 822, 90, 16);
+		frame.getContentPane().add(lblWCAL);
+		
+		JTextField txtField11 = new JTextField();
+		txtField11.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField11.setBounds(413, 820, 200, 22);
+		txtField11.setEditable(false);
+		frame.getContentPane().add(txtField11);
+		
+		JLabel lblSIR = new JLabel("Single-core Initial Reaction");
+		lblSIR.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13));
+		lblSIR.setBounds(105, 865, 293, 16);
+		frame.getContentPane().add(lblSIR);
+		
+		JLabel lblCRSIR = new JLabel("Critical-Case");
+		lblCRSIR.setHorizontalAlignment(SwingConstants.CENTER);
+		lblCRSIR.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblCRSIR.setBounds(10, 887, 90, 16);
+		frame.getContentPane().add(lblCRSIR);
+		
+		JTextField txtField12 = new JTextField();
+		txtField12.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField12.setBounds(103, 885, 200, 22);
+		txtField12.setEditable(false);
+		frame.getContentPane().add(txtField12);
+		
+		JLabel lblBCSIR = new JLabel("Best-Case");
+		lblBCSIR.setHorizontalAlignment(SwingConstants.CENTER);
+		lblBCSIR.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblBCSIR.setBounds(10, 916, 90, 16);
+		frame.getContentPane().add(lblBCSIR);
+		
+		JTextField txtField13 = new JTextField();
+		txtField13.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField13.setBounds(103, 914, 200, 22);
+		txtField13.setEditable(false);
+		frame.getContentPane().add(txtField13);
+		
+		JLabel lblWCSIR = new JLabel("Worst-Case");
+		lblWCSIR.setHorizontalAlignment(SwingConstants.CENTER);
+		lblWCSIR.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblWCSIR.setBounds(10, 945, 90, 16);
+		frame.getContentPane().add(lblWCSIR);
+		
+		JTextField txtField14 = new JTextField();
+		txtField14.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField14.setBounds(103, 943, 200, 22);
+		txtField14.setEditable(false);
+		frame.getContentPane().add(txtField14);
+
+		JLabel lblSWCR = new JLabel("Single-core Worst-case Reaction");
+		lblSWCR.setFont(new Font("Sitka Text", Font.BOLD | Font.ITALIC, 13));
+		lblSWCR.setBounds(415, 865, 293, 16);
+		frame.getContentPane().add(lblSWCR);
+		
+		JLabel lblCRSWCR = new JLabel("Critical-Case");
+		lblCRSWCR.setHorizontalAlignment(SwingConstants.CENTER);
+		lblCRSWCR.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblCRSWCR.setBounds(320, 887, 90, 16);
+		frame.getContentPane().add(lblCRSWCR);
+		
+		JTextField txtField15 = new JTextField();
+		txtField15.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField15.setBounds(413, 885, 200, 22);
+		txtField15.setEditable(false);
+		frame.getContentPane().add(txtField15);
+		
+		JLabel lblBCSWCR = new JLabel("Best-Case");
+		lblBCSWCR.setHorizontalAlignment(SwingConstants.CENTER);
+		lblBCSWCR.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblBCSWCR.setBounds(320, 916, 90, 16);
+		frame.getContentPane().add(lblBCSWCR);
+		
+		JTextField txtField16 = new JTextField();
+		txtField16.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField16.setBounds(413, 914, 200, 22);
+		txtField16.setEditable(false);
+		frame.getContentPane().add(txtField16);
+		
+		JLabel lblWCSWCR = new JLabel("Worst-Case");
+		lblWCSWCR.setHorizontalAlignment(SwingConstants.CENTER);
+		lblWCSWCR.setFont(new Font("Sitka Small", Font.PLAIN, 13));
+		lblWCSWCR.setBounds(320, 945, 90, 16);
+		frame.getContentPane().add(lblWCSWCR);
+		
+		JTextField txtField17 = new JTextField();
+		txtField17.setHorizontalAlignment(SwingConstants.RIGHT);
+		txtField17.setBounds(413, 943, 200, 22);
+		txtField17.setEditable(false);
+		frame.getContentPane().add(txtField17);
+		
+		JButton ecSelect = new JButton("Calculate");
+		ecSelect.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				if (currentModel == null) {
+					JOptionPane.showMessageDialog(frame, "ERROR: Select an AMALTHEA model first.");
+					return ;
+				} else if (currentECList == null) {
+					JOptionPane.showMessageDialog(frame, "ERROR: Event-Chain List is empty somehow.");
+					return ;
+				} else if (currentECList.size() == 0) {
+					JOptionPane.showMessageDialog(frame, "ERROR: There is no Event-Chain in this model.");
+					return ;
+				} else if (ecComboBox.getSelectedItem() == null) {
+					JOptionPane.showMessageDialog(frame, "ERROR: Select an Event-Chain.");
+					return ;
+				} else if (puTaskListHM == null) {
+					JOptionPane.showMessageDialog(frame, "ERROR: IA(Integer Array) has not been assigned.");
+					return ;
+				} else if (offloadingMode.getSelection() == null) {
+					JOptionPane.showMessageDialog(frame, "ERROR: Choose an offloading mode. (Sync / Async)");
+					return ;
+				} else if (schedulability_flag == false) {
+					String offMode = null;
+					if (SharedConsts.synchronousOffloading == true) {
+						offMode = "Sync";
+					} else if (SharedConsts.synchronousOffloading == false) {
+						offMode = "Aync";
+					}
+					String tType = null;
+					if (SharedConsts.timeType.equals(TimeType.WCET)) {
+						tType = "WC";
+					} else if (SharedConsts.timeType.equals(TimeType.ACET)) {
+						tType = "AC";
+					} else if (SharedConsts.timeType.equals(TimeType.BCET)) {
+						tType = "BC";
+					}
+					String iaFeedback = "";
+					for (int i = 0; i < currentIA.length; i++) {
+						if (i == currentIA.length - 1) {
+							iaFeedback = iaFeedback + currentIA[i];
+						} else {
+							iaFeedback = iaFeedback + currentIA[i] + ", ";
+						}
+					}
+					JOptionPane.showMessageDialog(frame, "ERROR: The entered IA value is not schedulable with the current configuration.\n\n"
+							+ "Current Integer Arrary: { " + iaFeedback + " }\n\n"
+							+ "Current Configuration: Offloading Mode(" + offMode + "), ExecutionCase(" + tType + ")");
+					return ;
+				}
+				
+				/* If cpurta has only one core > single core mode, else > multicore mode (01/05/2020) */
+				final int thisIndex = ecComboBox.getSelectedIndex();
+				/* Something was selected before */
+				if (selectedECIndex != -1) {
+					/* If the selected Event-Chain is the same as before => Do Nothing */
+					if (selectedECIndex == thisIndex) {
+						return ;
+					}
+					/* If the selected Event-Chain is different to the previous one => Remove and Do Normal. */
+					if (selectedECIndex != thisIndex) {
+						for (int i = 0; i < currentTaskChain.size(); i++) {
+							frame.remove(ecLabelArray[i]);
+							frame.remove(ecJTPArray[i]);
+						}
+						selectedECIndex = thisIndex;
+					}
+				}
+				selectedECIndex = thisIndex;
+				currentEC = currentECList.get(thisIndex);
+				currentTaskChain = e2e.getECTaskList(currentEC);
+				if (currentTaskChain.size() == 0 ) {
+					JOptionPane.showMessageDialog(frame, "ERROR: The selected Event-Chain has no chain-element.");
+					txtField0.setText("Not Available.");
+					txtField1.setText("Not Available.");
+					txtField2.setText("Not Available.");
+					txtField3.setText("Not Available.");
+					txtField4.setText("Not Available.");
+					txtField5.setText("Not Available.");
+					txtField6.setText("Not Available.");
+					txtField7.setText("Not Available.");
+					return ;
+				}
+				else if (currentTaskChain.size() > 14) {
+					JOptionPane.showMessageDialog(frame, "ERROR: The selected Event-Chain has more than " + currentTaskChain.size() + " elements. (Limit: 14)\n");
+					txtField0.setText("Not Available.");
+					txtField1.setText("Not Available.");
+					txtField2.setText("Not Available.");
+					txtField3.setText("Not Available.");
+					txtField4.setText("Not Available.");
+					txtField5.setText("Not Available.");
+					txtField6.setText("Not Available.");
+					txtField7.setText("Not Available.");
+					return ;
+				}
+				for (int i = 0; i < currentTaskChain.size(); i++) {
+					final Task task = currentTaskChain.get(i);
+					for (int j = 0; j < puTaskListHM.size(); j++) {
+						java.util.List<Task> puTaskList = puTaskListHM.get(j);
+						if (puTaskList.stream().filter(s -> s.equals(task)).collect(Collectors.toList()).size() != 0) {
+							final ProcessingUnit pu = currentPUList.get(j);
+							ecLabelArray[i] = new JLabel((i+1) + ": " + pu.getName() + " (" + pu.getDefinition().getName() + ")");
+							ecJTPArray[i] = new JTextField();
+							ecJTPArray[i].setText(task.getName());
+							ecJTPArray[i].setEditable(false);
+							if (i < 7) {
+								ecLabelArray[i].setBounds(750, (604+(50*i)), 187, 16);
+								ecJTPArray[i].setBounds(750, (624+(50*i)), 187, 22);
+							} else {
+								ecLabelArray[i].setBounds(950, (604+(50*(i-7))), 187, 16);
+								ecJTPArray[i].setBounds(950, (624+(50*(i-7))), 187, 22);
+							}
+							frame.getContentPane().add(ecLabelArray[i]);
+							frame.getContentPane().add(ecJTPArray[i]);
+							break;
+						}
+					}
+				}
+				
+				/* Calculation Part */
+				if (currentModel == null) {
+					JOptionPane.showMessageDialog(frame, "ERROR: Select an AMALTHEA model first.");
+					return ;
+				} else if (ecComboBox.getSelectedItem() == null) {
+					JOptionPane.showMessageDialog(frame, "ERROR: Select an Event-Chain.");
+					return ;
+				} else if (currentIA == null) {
+					JOptionPane.showMessageDialog(frame, "ERROR: IA(Integer Array) has not been entered.");
+					return ;
+				}
+				
+				/* To find out how many processing units are used by tasks */
+				ProcessingUnit pu = null;
+				int puCount = 0;
+				for (int i = 0; i < puTaskListHM.size(); i++) {
+					final java.util.List<Task> tasks = puTaskListHM.get(i);
+					if (tasks.size() > 0) {
+						pu = currentPUList.get(i);
+						puCount++;
+					}
+				}
+				
+				if (puCount > 1) {
+					final Time bcRctIm = e2e.getBCReactionImplicit(currentEC, cpurta);
+					final Time wcRctIm = e2e.getWCReactionImplicit(currentEC, cpurta);
+					final Time bcInitRctIm = e2e.getBCInitialRctImplicit(currentEC, cpurta);
+					final Time wcInitRctIm = e2e.getWCInitialRctImplicit(currentEC, cpurta);
+					final Time bcRctLET = e2e.getBCReactionLET(currentEC, cpurta);
+					final Time wcRctLET = e2e.getWCReactionLET(currentEC, cpurta);
+					final Time bcInitRctLET = e2e.getBCInitialRctLET(currentEC, cpurta);
+					final Time wcInitRctLET = e2e.getWCInitialRctLET(currentEC, cpurta);
+					final Time bcAgeIm = e2e.getBCAgeImplicit(currentEC, cpurta);
+					final Time wcAgeIm = e2e.getWCAgeImplicit(currentEC, cpurta);
+					final Time bcAgeLET = e2e.getBCAgeLET(currentEC, cpurta);
+					final Time wcAgeLET = e2e.getWCAgeLET(currentEC, cpurta);
+					
+					txtField0.setText("" + bcRctIm);
+					txtField1.setText("" + wcRctIm);
+					txtField2.setText("" + bcInitRctIm);
+					txtField3.setText("" + wcInitRctIm);
+					txtField4.setText("" + bcRctLET);
+					txtField5.setText("" + wcRctLET);
+					txtField6.setText("" + bcInitRctLET);
+					txtField7.setText("" + wcInitRctLET);
+					txtField8.setText("" + bcAgeIm);
+					txtField9.setText("" + wcAgeIm);
+					txtField10.setText("" + bcAgeLET);
+					txtField11.setText("" + wcAgeLET);
+					
+					txtField12.setText("Not Single-Core.");
+					txtField13.setText("Not Single-Core.");
+					txtField14.setText("Not Single-Core.");
+					txtField15.setText("Not Single-Core.");
+					txtField16.setText("Not Single-Core.");
+					txtField17.setText("Not Single-Core.");
+				} else {
+					final Time crSingleInitRct = e2e.getSingleCoreInitialRct(currentEC, pu, SinglecoreLatCase.CriInitRct, cpurta);
+					final Time bcSingleInitRct = e2e.getSingleCoreInitialRct(currentEC, pu, SinglecoreLatCase.BCInitRct, cpurta);;
+					final Time wcSingleInitRct = e2e.getSingleCoreInitialRct(currentEC, pu, SinglecoreLatCase.WCInitRct, cpurta);;
+					final Time crSingleWCRct = e2e.getSingleCoreWCRct(currentEC, pu, SinglecoreLatCase.CriWCRct, cpurta);;
+					final Time bcSingleWCRct = e2e.getSingleCoreWCRct(currentEC, pu, SinglecoreLatCase.BCWCRct, cpurta);;
+					final Time wcSingleWCRct = e2e.getSingleCoreWCRct(currentEC, pu, SinglecoreLatCase.WCWCRct, cpurta);;
+					
+					txtField0.setText("Not Multi-Core.");
+					txtField1.setText("Not Multi-Core.");
+					txtField2.setText("Not Multi-Core.");
+					txtField3.setText("Not Multi-Core.");
+					txtField4.setText("Not Multi-Core.");
+					txtField5.setText("Not Multi-Core.");
+					txtField6.setText("Not Multi-Core.");
+					txtField7.setText("Not Multi-Core.");
+					txtField8.setText("Not Multi-Core.");
+					txtField9.setText("Not Multi-Core.");
+					txtField10.setText("Not Multi-Core.");
+					txtField11.setText("Not Multi-Core.");
+					
+					txtField12.setText("" + crSingleInitRct);
+					txtField13.setText("" + bcSingleInitRct);
+					txtField14.setText("" + wcSingleInitRct);
+					txtField15.setText("" + crSingleWCRct);
+					txtField16.setText("" + bcSingleWCRct);
+					txtField17.setText("" + wcSingleWCRct);
+				}
+				
+				frame.revalidate();
+				frame.repaint();
+			}
+		});
+		ecSelect.setBounds(356, 569, 90, 25);
+		frame.getContentPane().add(ecSelect);
+		
+		JButton btnNewButton_1 = new JButton("Reset");
+		btnNewButton_1.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				for (int i = 0; i < currentTaskChain.size(); i++) {
+					ecLabelArray[i].setText(null);
+					frame.remove(ecLabelArray[i]);
+					ecJTPArray[i].setText(null);
+					frame.remove(ecJTPArray[i]);
+				}
+				selectedECIndex = -1;
+				txtField0.setText("");
+				txtField1.setText("");
+				txtField2.setText("");
+				txtField3.setText("");
+				txtField4.setText("");
+				txtField5.setText("");
+				txtField6.setText("");
+				txtField7.setText("");
+				txtField8.setText("");
+				txtField9.setText("");
+				txtField10.setText("");
+				txtField11.setText("");
+				txtField12.setText("");
+				txtField13.setText("");
+				txtField14.setText("");
+				txtField15.setText("");
+				txtField16.setText("");
+				txtField17.setText("");
+				
+				frame.revalidate();
+				frame.repaint();
+			}
+		});
+		btnNewButton_1.setBounds(445, 569, 70, 25);
+		frame.getContentPane().add(btnNewButton_1);
+		
+		JLabel lblTaskChain_1 = new JLabel("Task Chain >");
+		lblTaskChain_1.setFont(new Font("Segoe UI Emoji", Font.BOLD, 13));
+		lblTaskChain_1.setBounds(646, 605, 90, 16);
+		frame.getContentPane().add(lblTaskChain_1);
+		
+		JLabel lblApprta = new JLabel("APP4RTA");
+		lblApprta.setForeground(Color.DARK_GRAY);
+		lblApprta.setFont(new Font("Snap ITC", Font.ITALIC, 20));
+		lblApprta.setBounds(1050, 1, 120, 34);
+		frame.getContentPane().add(lblApprta);
+		
+		JSeparator separator = new JSeparator();
+		separator.setBounds(10, 557, 1160, 2);
+		frame.getContentPane().add(separator);
+	}
+}
diff --git a/eclipse-tools/sca2amalthea/plugins/org.eclipse.app4mc.sca2amalthea.utils/META-INF/MANIFEST.MF b/eclipse-tools/sca2amalthea/plugins/org.eclipse.app4mc.sca2amalthea.utils/META-INF/MANIFEST.MF
index 6f5ddc4..7a85084 100644
--- a/eclipse-tools/sca2amalthea/plugins/org.eclipse.app4mc.sca2amalthea.utils/META-INF/MANIFEST.MF
+++ b/eclipse-tools/sca2amalthea/plugins/org.eclipse.app4mc.sca2amalthea.utils/META-INF/MANIFEST.MF
@@ -1,14 +1,14 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Utils
-Bundle-SymbolicName: org.eclipse.app4mc.sca2amalthea.utils
-Bundle-Version: 1.0.0.qualifier
-Bundle-Activator: org.eclipse.app4mc.sca2amalthea.utils.Activator
-Bundle-Vendor: Eclipse.org
+Manifest-Version: 1.0

+Bundle-ManifestVersion: 2

+Bundle-Name: Utils

+Bundle-SymbolicName: org.eclipse.app4mc.sca2amalthea.utils

+Bundle-Version: 1.0.0.qualifier

+Bundle-Activator: org.eclipse.app4mc.sca2amalthea.utils.Activator

+Bundle-Vendor: Eclipse.org

 Require-Bundle: org.eclipse.ui,

- org.eclipse.core.runtime
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.app4mc.sca2amalthea.utils,
- org.eclipse.app4mc.sca2amalthea.utils.constants
-
+ org.eclipse.core.runtime

+Bundle-RequiredExecutionEnvironment: JavaSE-1.8

+Bundle-ActivationPolicy: lazy

+Export-Package: org.eclipse.app4mc.sca2amalthea.utils,

+ org.eclipse.app4mc.sca2amalthea.utils.constants

+