diff --git a/src/main/java/tmltranslator/patternhandling/AttributeTaskJsonFile.java b/src/main/java/tmltranslator/patternhandling/AttributeTaskJsonFile.java index 158688d5e2fb9b1b4a547e96162032c28675c9e2..bd9f992b59f12720e673a15f0f793fda649aa13d 100644 --- a/src/main/java/tmltranslator/patternhandling/AttributeTaskJsonFile.java +++ b/src/main/java/tmltranslator/patternhandling/AttributeTaskJsonFile.java @@ -8,7 +8,6 @@ package tmltranslator.patternhandling; * @version 1.0 28/08/2023 */ -import myutil.TraceManager; import tmltranslator.*; diff --git a/src/main/java/tmltranslator/patternhandling/MappingPatternChannel.java b/src/main/java/tmltranslator/patternhandling/MappingPatternChannel.java index e04822314d64d40889d3b4a80941e6af9a0ab753..8b9b18c66a1d13148f2808ae087d6b6850655749 100644 --- a/src/main/java/tmltranslator/patternhandling/MappingPatternChannel.java +++ b/src/main/java/tmltranslator/patternhandling/MappingPatternChannel.java @@ -1,6 +1,6 @@ package tmltranslator.patternhandling; /** - * Class MappingPatternTask + * Class MappingPatternChannel * * Creation: 25/10/2023 * @@ -8,23 +8,35 @@ package tmltranslator.patternhandling; * @version 1.0 25/10/2023 */ -import myutil.TraceManager; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; + import tmltranslator.*; public class MappingPatternChannel { + + public final static String TASK_CHANNEL_SEPARATOR = "::"; + public final static String MAP_CHANNEL_IN_SAME_MEMORY_SEPARATOR = " mapped in the same Memory as "; + public final static String MAP_CHANNEL_IN_NEW_MEMORY_SEPARATOR = " mapped in a new memory linked to "; + public final static int ORIGIN_PATTERN = 0; + public final static int ORIGIN_CLONE = 1; + public final static int ORIGIN_MODEL = 2; + String taskOfChannelToMap; String channelToMapName; + int origin; String taskOfChannelInSameMem; String channelInSameMemAs; + int sameMemAsOrigin; String busNameForNewMem; + - public MappingPatternChannel(String taskOfChannelToMap, String channelToMapName, String taskOfChannelInSameMem, String channelInSameMemAs, String busNameForNewMem) { + public MappingPatternChannel(String taskOfChannelToMap, String channelToMapName, int origin) { this.taskOfChannelToMap = taskOfChannelToMap; this.channelToMapName = channelToMapName; - this.taskOfChannelInSameMem = taskOfChannelInSameMem; - this.channelInSameMemAs = channelInSameMemAs; - this.busNameForNewMem = busNameForNewMem; + this.origin = origin; } public String getTaskOfChannelToMap() { @@ -47,6 +59,13 @@ public class MappingPatternChannel { return busNameForNewMem; } + public int getOrigin() { + return origin; + } + + public int getSameMemAsOrigin() { + return sameMemAsOrigin; + } public void setTaskOfChannelToMap(String _taskOfChannelToMap) { taskOfChannelToMap = _taskOfChannelToMap; @@ -56,17 +75,93 @@ public class MappingPatternChannel { channelToMapName = _channelToMapName; } - public void setTaskOfChannelInSameMem(String _taskOfChannelInSameMem) { + public void setTaskAndChannelInSameMem(String _taskOfChannelInSameMem, String _channelInSameMemAs, int _sameMemAsOrigin) { taskOfChannelInSameMem = _taskOfChannelInSameMem; - } - - public void setChannelInSameMemAs(String _channelInSameMemAs) { channelInSameMemAs = _channelInSameMemAs; + sameMemAsOrigin = _sameMemAsOrigin; + busNameForNewMem = null; } public void setBusNameForNewMem(String _busNameForNewMem) { busNameForNewMem = _busNameForNewMem; + channelInSameMemAs = null; + taskOfChannelInSameMem = null; } - + public String getStringDisplay() { + if (channelInSameMemAs != null) { + return (taskOfChannelToMap + TASK_CHANNEL_SEPARATOR + channelToMapName + MAP_CHANNEL_IN_SAME_MEMORY_SEPARATOR + taskOfChannelInSameMem + TASK_CHANNEL_SEPARATOR + channelInSameMemAs); + } else { + return (taskOfChannelToMap + TASK_CHANNEL_SEPARATOR + channelToMapName + MAP_CHANNEL_IN_NEW_MEMORY_SEPARATOR + busNameForNewMem); + } + } + + public void setOrigin(int _origin) { + origin = _origin; + } + + public String getTaskChannelToMap() { + return (taskOfChannelToMap + TASK_CHANNEL_SEPARATOR + channelToMapName); + } + + public String getTaskChannelInSameMem() { + return (taskOfChannelInSameMem + TASK_CHANNEL_SEPARATOR + channelInSameMemAs); + } + + public static String getTaskChannel(String task, String channel) { + return (task + TASK_CHANNEL_SEPARATOR + channel); + } + + public static String[] seperateTaskAndChannel(String st) { + String[] split = st.split(TASK_CHANNEL_SEPARATOR); + String task, channel; + if (split.length == 2) { + task = split[0]; + channel = split[1]; + return new String[]{task, channel}; + } else { + return null; + } + } + + public static List<MappingPatternChannel> getChannelsToMap(List<PatternConnection> patternConnectionList, LinkedHashMap<String, TaskPattern> patternTasks, List<PatternCloneTask> patternCloneTasks) { + List<MappingPatternChannel> mappingPatternChannels = new ArrayList<MappingPatternChannel>(); + List<String> clonedTasks = new ArrayList<String>(); + for (PatternCloneTask clonedTask: patternCloneTasks) { + clonedTasks.add(clonedTask.getClonedTask()); + } + for (PatternConnection patternConnection: patternConnectionList) { + if (!patternConnection.isNewPort() && clonedTasks.contains(patternConnection.getModelTaskName())) { + MappingPatternChannel mappingPatternChannel = new MappingPatternChannel(patternConnection.getModelTaskName(), patternConnection.getModelChannelName(), ORIGIN_CLONE); + if (!mappingPatternChannels.contains(mappingPatternChannel)) { + mappingPatternChannels.add(mappingPatternChannel); + } + } + if (patternConnection.isANewChannelRequired(patternConnectionList, patternTasks, patternCloneTasks)) { + if (!patternConnection.isNewPort() && clonedTasks.contains(patternConnection.getModelTaskName())) { + } else { + for (PortTaskJsonFile portTaskJsonFile : patternTasks.get(patternConnection.getPatternTaskName()).getExternalPorts()) { + if (portTaskJsonFile.getType().equals(PatternCreation.CHANNEL) && patternConnection.getPatternChannel().equals(portTaskJsonFile.getName())) { + MappingPatternChannel mappingPatternChannel = new MappingPatternChannel(patternConnection.getPatternTaskName(), patternConnection.getPatternChannel(), ORIGIN_PATTERN); + if (!mappingPatternChannels.contains(mappingPatternChannel)) { + mappingPatternChannels.add(mappingPatternChannel); + } + } + } + } + } + } + for (String st : patternTasks.keySet()) { + for (PortTaskJsonFile portTaskJsonFile : patternTasks.get(st).getInternalPorts()) { + if (portTaskJsonFile.getType().equals(PatternCreation.CHANNEL) && portTaskJsonFile.getMode().equals(PatternCreation.MODE_OUTPUT)) { + MappingPatternChannel mappingPatternChannel = new MappingPatternChannel(st, portTaskJsonFile.getName(), ORIGIN_PATTERN); + if (!mappingPatternChannels.contains(mappingPatternChannel)) { + mappingPatternChannels.add(mappingPatternChannel); + } + } + } + } + + return mappingPatternChannels; + } } diff --git a/src/main/java/tmltranslator/patternhandling/MappingPatternTask.java b/src/main/java/tmltranslator/patternhandling/MappingPatternTask.java index b21910d89e52e2b87b78ff3966def9db6aae7390..96570ef84ab3b71434a3f424aec9915a5c90bc56 100644 --- a/src/main/java/tmltranslator/patternhandling/MappingPatternTask.java +++ b/src/main/java/tmltranslator/patternhandling/MappingPatternTask.java @@ -8,19 +8,26 @@ package tmltranslator.patternhandling; * @version 1.0 25/10/2023 */ -import myutil.TraceManager; import tmltranslator.*; public class MappingPatternTask { + + public final static String MAP_TASK_IN_SAME_HW_SEPARATOR = " mapped in the same HW as "; + public final static String MAP_TASK_IN_NEW_HW_SEPARATOR = " mapped in a new HW linked to "; + public final static int ORIGIN_PATTERN = 0; + public final static int ORIGIN_CLONE = 1; + public final static int ORIGIN_MODEL = 2; + String taskToMapName; String sameHwAs; + int sameHwAsOrigin; String busNameForNewHw; + int origin; - public MappingPatternTask(String taskToMapName, String sameHwAs, String busNameForNewHw) { + public MappingPatternTask(String taskToMapName, int origin) { this.taskToMapName = taskToMapName; - this.sameHwAs = sameHwAs; - this.busNameForNewHw = busNameForNewHw; + this.origin = origin; } public String getTaskToMapName() { @@ -35,18 +42,40 @@ public class MappingPatternTask { return busNameForNewHw; } + public int getOrigin() { + return origin; + } + + public int getSameHwAsOrigin() { + return sameHwAsOrigin; + } public void setTaskToMapName(String _taskToMapName) { taskToMapName = _taskToMapName; } - public void setSameHwAs(String _sameHwAs) { + public void setSameHwAs(String _sameHwAs, int _sameHwAsOrigin) { sameHwAs = _sameHwAs; + sameHwAsOrigin = _sameHwAsOrigin; + busNameForNewHw = null; } public void setBusNameForNewHw(String _busNameForNewHw) { busNameForNewHw = _busNameForNewHw; + sameHwAs = null; + sameHwAsOrigin = -1; + } + + public void setOrigin(int _origin) { + origin = _origin; } + public String getStringDisplay() { + if (sameHwAs != null) { + return (taskToMapName + MAP_TASK_IN_SAME_HW_SEPARATOR + sameHwAs); + } else { + return (taskToMapName + MAP_TASK_IN_NEW_HW_SEPARATOR + busNameForNewHw); + } + } } diff --git a/src/main/java/tmltranslator/patternhandling/PatternAttributeUpdate.java b/src/main/java/tmltranslator/patternhandling/PatternAttributeUpdate.java index fdb34ca84e713d4d0ed514ceca23ecdeda6c01a2..7d48b72c34187621cf50f0f3043f312af6f5b46d 100644 --- a/src/main/java/tmltranslator/patternhandling/PatternAttributeUpdate.java +++ b/src/main/java/tmltranslator/patternhandling/PatternAttributeUpdate.java @@ -1,6 +1,6 @@ package tmltranslator.patternhandling; /** - * Class MappingPatternTask + * Class PatternAttributeUpdate * * Creation: 25/10/2023 * @@ -8,7 +8,6 @@ package tmltranslator.patternhandling; * @version 1.0 25/10/2023 */ -import myutil.TraceManager; import tmltranslator.*; diff --git a/src/main/java/tmltranslator/patternhandling/PatternChannelWithSecurity.java b/src/main/java/tmltranslator/patternhandling/PatternChannelWithSecurity.java new file mode 100644 index 0000000000000000000000000000000000000000..846f23d9eb7daa58046913b05388f5eba3d9b8c7 --- /dev/null +++ b/src/main/java/tmltranslator/patternhandling/PatternChannelWithSecurity.java @@ -0,0 +1,72 @@ +package tmltranslator.patternhandling; +/** + * Class PatternChannelWithSecurity + * + * Creation: 25/10/2023 + * + * @author Jawher JERRAY + * @version 1.0 25/10/2023 + */ + +import tmltranslator.*; + + +public class PatternChannelWithSecurity { + public static final int NO_AUTHENTICITY = 0; + public static final int WEAK_AUTHENTICITY = 1; + public static final int STRONG_AUTHENTICITY = 2; + + String channelTaskName; + String channelName; + String channelMode; + Boolean isConf; + int auth; + + public PatternChannelWithSecurity(String channelTaskName, String channelName, String channelMode) { + this.channelTaskName = channelTaskName; + this.channelName = channelName; + this.channelMode = channelMode; + } + + public String getChannelTaskName() { + return channelTaskName; + } + + public String getChannelName() { + return channelName; + } + + public String getChannelMode() { + return channelMode; + } + + public Boolean isConfidential() { + return isConf; + } + + public int getAuthenticity() { + return auth; + } + + public void setChannelTaskName(String _channelTaskName) { + channelTaskName = _channelTaskName; + } + + public void setChannelName(String _channelName) { + channelName = _channelName; + } + + public void setChannelMode(String _channelMode) { + channelMode = _channelMode; + } + + public void setIsConfidential(Boolean _isConf) { + isConf = _isConf; + } + + public void setAuthenticity(int _auth) { + auth = _auth; + } + + +} diff --git a/src/main/java/tmltranslator/patternhandling/PatternCloneTask.java b/src/main/java/tmltranslator/patternhandling/PatternCloneTask.java index 786e1ffda9e905791b8e719d3156a4219f13f265..340c2bb021ca7a36768397014fcd3d1d7d2c6cc4 100644 --- a/src/main/java/tmltranslator/patternhandling/PatternCloneTask.java +++ b/src/main/java/tmltranslator/patternhandling/PatternCloneTask.java @@ -8,11 +8,12 @@ package tmltranslator.patternhandling; * @version 1.0 25/10/2023 */ -import myutil.TraceManager; import tmltranslator.*; public class PatternCloneTask { + public final static String CLONE_TASK_SEPARATOR = " clone of "; + String clonedTask; String taskToClone; @@ -25,7 +26,7 @@ public class PatternCloneTask { return clonedTask; } - public String getSameHwAs() { + public String getTaskToClone() { return taskToClone; } @@ -37,5 +38,10 @@ public class PatternCloneTask { public void setTaskToClone(String _taskToClone) { taskToClone = _taskToClone; } + + public String getStringDisplay() { + return (clonedTask + CLONE_TASK_SEPARATOR + taskToClone); + + } } diff --git a/src/main/java/tmltranslator/patternhandling/PatternConfig2Json.java b/src/main/java/tmltranslator/patternhandling/PatternConfig2Json.java index 5749691e849c26eb4d4ebfa13b8d6697c6949686..3a0eabb1af88aa3618d771f8758cb4363b67b173 100644 --- a/src/main/java/tmltranslator/patternhandling/PatternConfig2Json.java +++ b/src/main/java/tmltranslator/patternhandling/PatternConfig2Json.java @@ -8,42 +8,41 @@ package tmltranslator.patternhandling; * @version 1.0 05/09/2023 */ -import myutil.FileUtils; -import myutil.TraceManager; -import rationals.properties.isNormalized; import tmltranslator.*; -import ui.window.JDialogPatternHandling; -import ui.window.TraceData; -import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.*; -import java.util.Map.Entry; -import javax.swing.JDialog; - -import org.apache.batik.anim.timing.Trace; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class PatternConfig2Json { + public final static String TASK_MAPPING_ORIGIN = "Origin"; + public final static String TASK_MAPPING_ORIGIN_PATTERN = "Pattern"; + public final static String TASK_MAPPING_ORIGIN_CLONE = "Clone"; + public final static String TASK_MAPPING_ORIGIN_MODEL = "Model"; public final static String TASK_MAPPING = "Task_Mapping"; public final static String TASK_TO_MAP = "Task_To_Map"; public final static String TASK_MAPPED_IN_SAME_HW_AS = "Task_Mapped_In_Same_HW_As"; + public final static String TASK_MAPPED_IN_SAME_HW_AS_ORIGIN = "Origin_Task_Mapped_In_Same_HW_As"; public final static String TASK_MAPPED_IN_NEW_HW_CONNECTED_TO_BUS = "Task_Mapped_In_New_HW"; + public final static String CHANNEL_MAPPING_ORIGIN = "Origin"; + public final static String CHANNEL_MAPPING_ORIGIN_PATTERN = "Pattern"; + public final static String CHANNEL_MAPPING_ORIGIN_CLONE = "Clone"; + public final static String CHANNEL_MAPPING_ORIGIN_MODEL = "Model"; public final static String CHANNEL_MAPPING = "Channel_Mapping"; public final static String TASK_OF_CHANNEL_TO_MAP = "Task_Of_Channel_To_Map"; public final static String CHANNEL_TO_MAP = "Channel_To_Map"; public final static String CHANNEL_MAPPED_IN_SAME_MEM_AS = "Channel_Mapped_In_Same_Mem_As"; public final static String TASK_OF_CHANNEL_SAME_MEM = "Task_Of_Channel_Same_Mem_As"; + public final static String CHANNEL_MAPPED_IN_SAME_MEM_AS_ORIGIN = "Origin_Channel_Mapped_In_Same_Mem_As"; public final static String CHANNEL_MAPPED_IN_NEW_MEM_CONNECTED_TO_BUS = "Channel_Mapped_In_New_Mem"; public final static String CHANNEL_CONFIG = "Channel_Configuration"; @@ -136,13 +135,13 @@ public class PatternConfig2Json { } - JSONArray addClonedTasksInJsonFile(LinkedHashMap<String, String> _clonedTasks) { + JSONArray addClonedTasksInJsonFile(List<PatternCloneTask> _clonedTasks) { JSONArray ja = new JSONArray(); try { - for (String clone : _clonedTasks.keySet()) { + for (PatternCloneTask cloneTask : _clonedTasks) { JSONObject jo = new JSONObject(); - jo.put(CLONE_OF_TASK, clone); - jo.put(CLONED_TASK, _clonedTasks.get(clone)); + jo.put(CLONE_OF_TASK, cloneTask.getTaskToClone()); + jo.put(CLONED_TASK, cloneTask.getClonedTask()); ja.put(jo); } } catch (JSONException e) { @@ -151,32 +150,30 @@ public class PatternConfig2Json { return ja; } - LinkedHashMap<String, String> getClonedTasksFromJsonFile(JSONArray ja) { - LinkedHashMap<String, String> _clonedTasks = new LinkedHashMap<String, String>(); - + List<PatternCloneTask> getClonedTasksFromJsonFile(JSONArray ja) { + List<PatternCloneTask> _clonedTasks = new ArrayList<PatternCloneTask>(); for (int j = 0; j < ja.length(); j++) { String cloneOfTask = ja.getJSONObject(j).getString(CLONE_OF_TASK); String clonedTask = ja.getJSONObject(j).getString(CLONED_TASK); - _clonedTasks.put(cloneOfTask, clonedTask); + PatternCloneTask cloneTask = new PatternCloneTask(clonedTask, cloneOfTask); + _clonedTasks.add(cloneTask); } return _clonedTasks; } - JSONArray addPortsConfigurationInJsonFile(LinkedHashMap<String, List<Entry<String, String>>> _portsConfig) { + JSONArray addPortsConfigurationInJsonFile(List<PatternPortsConfig> _portsConfig) { JSONArray ja = new JSONArray(); try { - for (String task : _portsConfig.keySet()) { - for (Entry<String, String> portConf : _portsConfig.get(task)) { - JSONObject jo = new JSONObject(); - jo.put(CHANNEL_TO_CONFIG, portConf.getKey()); - jo.put(TASK_OF_CHANNEL_TO_CONFIG, task); - if (portConf.getValue().equals("")) { - jo.put(CHANNEL_TO_REMOVE, "true"); - } else { - jo.put(CHANNEL_TO_REMOVE, portConf.getValue()); - } - ja.put(jo); - } + for (PatternPortsConfig portConfig : _portsConfig) { + JSONObject jo = new JSONObject(); + jo.put(CHANNEL_TO_CONFIG, portConfig.getChannelToConfig()); + jo.put(TASK_OF_CHANNEL_TO_CONFIG, portConfig.getTaskOfChannelToConfig()); + if (portConfig.isChannelToRemove()) { + jo.put(CHANNEL_TO_REMOVE, "true"); + } else { + jo.put(CHANNEL_TO_MERGE_WITH, portConfig.getMergeWith()); + } + ja.put(jo); } } catch (JSONException e) { e.printStackTrace(); @@ -184,56 +181,51 @@ public class PatternConfig2Json { return ja; } - LinkedHashMap<String, List<Entry<String, String>>> getPortsConfigurationFromJsonFile(JSONArray ja) { - LinkedHashMap<String, List<Entry<String, String>>> _portsConfig = new LinkedHashMap<String, List<Entry<String, String>>>(); + List<PatternPortsConfig> getPortsConfigurationFromJsonFile(JSONArray ja) { + List<PatternPortsConfig> _portsConfig = new ArrayList<PatternPortsConfig>(); for (int j = 0; j < ja.length(); j++) { String taskOfChToConfig = ja.getJSONObject(j).getString(TASK_OF_CHANNEL_TO_CONFIG); String chToConfig = ja.getJSONObject(j).getString(CHANNEL_TO_CONFIG); - String chToMergeWith = ""; + PatternPortsConfig portConfig = new PatternPortsConfig(taskOfChToConfig, chToConfig); if (ja.getJSONObject(j).has(CHANNEL_TO_MERGE_WITH)) { - chToMergeWith = ja.getJSONObject(j).getString(CHANNEL_TO_MERGE_WITH); - } - String chToRemove = ""; - if (ja.getJSONObject(j).has(CHANNEL_TO_REMOVE)) { - chToRemove = ja.getJSONObject(j).getString(CHANNEL_TO_REMOVE); - } - if (_portsConfig.containsKey(taskOfChToConfig)) { - if (chToMergeWith != "") { - _portsConfig.get(taskOfChToConfig).add(new AbstractMap.SimpleEntry<String, String>(chToConfig, chToMergeWith)); - } else if (chToRemove != "") { - _portsConfig.get(taskOfChToConfig).add(new AbstractMap.SimpleEntry<String, String>(chToConfig, "")); - } - } else { - List<Entry<String, String>> portConf = new ArrayList<Entry<String, String>>(); - if (chToMergeWith != "") { - portConf.add(new AbstractMap.SimpleEntry<String, String>(chToConfig, chToMergeWith)); - } else if (chToRemove != "") { - portConf.add(new AbstractMap.SimpleEntry<String, String>(chToConfig, "")); - } - _portsConfig.put(taskOfChToConfig, portConf); + portConfig.setMergeWith(ja.getJSONObject(j).getString(CHANNEL_TO_MERGE_WITH)); + }else if (ja.getJSONObject(j).has(CHANNEL_TO_REMOVE)) { + portConfig.setIsChannelToRemove(true); } + _portsConfig.add(portConfig); } return _portsConfig; } - JSONArray addChannelsMappingInJsonFile(LinkedHashMap<String, List<String[]>> _channelsMapping) { + JSONArray addChannelsMappingInJsonFile(List<MappingPatternChannel> _channelsMapping) { JSONArray ja = new JSONArray(); try { - for (String task : _channelsMapping.keySet()) { - for (String[] chMapping : _channelsMapping.get(task)) { - JSONObject jo = new JSONObject(); - jo.put(CHANNEL_TO_MAP, chMapping[1]); - jo.put(TASK_OF_CHANNEL_TO_MAP, task); - if (chMapping[0].equals(JDialogPatternHandling.SAME_MEMORY)) { - jo.put(CHANNEL_MAPPED_IN_SAME_MEM_AS,chMapping[3]); - jo.put(TASK_OF_CHANNEL_SAME_MEM, chMapping[2]); - } - if (chMapping[0].equals(JDialogPatternHandling.NEW_MEMORY)) { - jo.put(CHANNEL_MAPPED_IN_NEW_MEM_CONNECTED_TO_BUS,chMapping[2]); + for (MappingPatternChannel channelMapping : _channelsMapping) { + JSONObject jo = new JSONObject(); + jo.put(CHANNEL_TO_MAP, channelMapping.getChannelToMapName()); + jo.put(TASK_OF_CHANNEL_TO_MAP, channelMapping.getTaskOfChannelToMap()); + if (channelMapping.getOrigin() == MappingPatternChannel.ORIGIN_CLONE) { + jo.put(CHANNEL_MAPPING_ORIGIN, CHANNEL_MAPPING_ORIGIN_CLONE); + } else if (channelMapping.getOrigin() == MappingPatternChannel.ORIGIN_PATTERN) { + jo.put(CHANNEL_MAPPING_ORIGIN, CHANNEL_MAPPING_ORIGIN_PATTERN); + } else if (channelMapping.getOrigin() == MappingPatternChannel.ORIGIN_MODEL) { + jo.put(CHANNEL_MAPPING_ORIGIN, CHANNEL_MAPPING_ORIGIN_MODEL); + } + if (channelMapping.getChannelInSameMemAs() != null && channelMapping.getTaskOfChannelInSameMem() != null) { + jo.put(CHANNEL_MAPPED_IN_SAME_MEM_AS, channelMapping.getChannelInSameMemAs()); + jo.put(TASK_OF_CHANNEL_SAME_MEM, channelMapping.getTaskOfChannelInSameMem()); + if (channelMapping.getSameMemAsOrigin() == MappingPatternChannel.ORIGIN_CLONE) { + jo.put(CHANNEL_MAPPED_IN_SAME_MEM_AS_ORIGIN, CHANNEL_MAPPING_ORIGIN_CLONE); + } else if (channelMapping.getSameMemAsOrigin() == MappingPatternChannel.ORIGIN_PATTERN) { + jo.put(CHANNEL_MAPPED_IN_SAME_MEM_AS_ORIGIN, CHANNEL_MAPPING_ORIGIN_PATTERN); + } else if (channelMapping.getSameMemAsOrigin() == MappingPatternChannel.ORIGIN_MODEL) { + jo.put(CHANNEL_MAPPED_IN_SAME_MEM_AS_ORIGIN, CHANNEL_MAPPING_ORIGIN_MODEL); } - ja.put(jo); } - + if (channelMapping.getBusNameForNewMem() != null) { + jo.put(CHANNEL_MAPPED_IN_NEW_MEM_CONNECTED_TO_BUS, channelMapping.getBusNameForNewMem()); + } + ja.put(jo); } } catch (JSONException e) { e.printStackTrace(); @@ -260,20 +252,27 @@ public class PatternConfig2Json { return ja; } - JSONArray addChannelsWithSecurityInJsonFile(LinkedHashMap<String, List<PortTaskJsonFile>> _channelsWithSec) { + JSONArray addChannelsWithSecurityInJsonFile(List<PatternChannelWithSecurity> _channelsWithSec) { JSONArray ja = new JSONArray(); try { - for (String task : _channelsWithSec.keySet()) { - for (PortTaskJsonFile portTask : _channelsWithSec.get(task)) { - JSONObject jo = new JSONObject(); - jo.put(TASK_CHANNEL_WITH_SECURITY_NAME, task); - jo.put(PatternCreation.NAME, portTask.getName()); - jo.put(PatternCreation.TYPE, portTask.getType()); - jo.put(PatternCreation.MODE, portTask.getMode()); - jo.put(PatternCreation.CONFIDENTIALITY, portTask.getConfidentiality()); - jo.put(PatternCreation.AUTHENTICITY, portTask.getAuthenticity()); - ja.put(jo); + for (PatternChannelWithSecurity channelWithSec : _channelsWithSec) { + JSONObject jo = new JSONObject(); + jo.put(TASK_CHANNEL_WITH_SECURITY_NAME, channelWithSec.getChannelTaskName()); + jo.put(PatternCreation.NAME, channelWithSec.getChannelName()); + jo.put(PatternCreation.MODE, channelWithSec.getChannelMode()); + if (channelWithSec.isConfidential()) { + jo.put(PatternCreation.CONFIDENTIALITY, PatternCreation.WITH_CONFIDENTIALITY); + } else { + jo.put(PatternCreation.CONFIDENTIALITY, PatternCreation.WITHOUT_CONFIDENTIALITY); + } + if (channelWithSec.getAuthenticity() == PatternChannelWithSecurity.NO_AUTHENTICITY) { + jo.put(PatternCreation.AUTHENTICITY, PatternCreation.WITHOUT_AUTHENTICITY); + } else if (channelWithSec.getAuthenticity() == PatternChannelWithSecurity.WEAK_AUTHENTICITY) { + jo.put(PatternCreation.AUTHENTICITY, PatternCreation.WEAK_AUTHENTICITY); + } else if (channelWithSec.getAuthenticity() == PatternChannelWithSecurity.STRONG_AUTHENTICITY) { + jo.put(PatternCreation.AUTHENTICITY, PatternCreation.STRONG_AUTHENTICITY); } + ja.put(jo); } } catch (JSONException e) { e.printStackTrace(); @@ -281,28 +280,29 @@ public class PatternConfig2Json { return ja; } - LinkedHashMap<String, List<PortTaskJsonFile>> getChannelsWithSecurityFromJsonFile(JSONArray ja) { - LinkedHashMap<String, List<PortTaskJsonFile>> _channelsWithSec = new LinkedHashMap<String, List<PortTaskJsonFile>>(); + List<PatternChannelWithSecurity> getChannelsWithSecurityFromJsonFile(JSONArray ja) { + List<PatternChannelWithSecurity> _channelsWithSec = new ArrayList<PatternChannelWithSecurity>(); for (int j = 0; j < ja.length(); j++) { String taskName = ja.getJSONObject(j).getString(TASK_CHANNEL_WITH_SECURITY_NAME); String channelName = ja.getJSONObject(j).getString(PatternCreation.NAME); - String channelType = ja.getJSONObject(j).getString(PatternCreation.TYPE); String channelMode = ja.getJSONObject(j).getString(PatternCreation.MODE); String channelConf = ja.getJSONObject(j).getString(PatternCreation.CONFIDENTIALITY); String channelAuth = ja.getJSONObject(j).getString(PatternCreation.AUTHENTICITY); - if (_channelsWithSec.containsKey(taskName)) { - PortTaskJsonFile portTask = new PortTaskJsonFile(channelName, channelType, channelMode); - portTask.setConfidentiality(channelConf); - portTask.setAuthenticity(channelAuth); - _channelsWithSec.get(taskName).add(portTask); - } else { - List<PortTaskJsonFile> listPortTask = new ArrayList<PortTaskJsonFile>(); - PortTaskJsonFile portTask = new PortTaskJsonFile(channelName, channelType, channelMode); - portTask.setConfidentiality(channelConf); - portTask.setAuthenticity(channelAuth); - listPortTask.add(portTask); - _channelsWithSec.put(taskName, listPortTask); + PatternChannelWithSecurity channelWithSecurity = new PatternChannelWithSecurity(taskName, channelName, channelMode); + if (channelConf.toLowerCase().equals(PatternCreation.WITHOUT_CONFIDENTIALITY.toLowerCase())) { + channelWithSecurity.setIsConfidential(false); + } else if (channelConf.toLowerCase().equals(PatternCreation.WITH_CONFIDENTIALITY.toLowerCase())) { + channelWithSecurity.setIsConfidential(true); + } + if (channelAuth.toLowerCase().equals(PatternCreation.WITHOUT_AUTHENTICITY.toLowerCase())) { + channelWithSecurity.setAuthenticity(PatternChannelWithSecurity.NO_AUTHENTICITY); + } else if (channelAuth.toLowerCase().equals(PatternCreation.WEAK_AUTHENTICITY.toLowerCase())) { + channelWithSecurity.setAuthenticity(PatternChannelWithSecurity.WEAK_AUTHENTICITY); + } else if (channelAuth.toLowerCase().equals(PatternCreation.STRONG_AUTHENTICITY.toLowerCase())) { + channelWithSecurity.setAuthenticity(PatternChannelWithSecurity.STRONG_AUTHENTICITY); } + + _channelsWithSec.add(channelWithSecurity); } return _channelsWithSec; } @@ -327,71 +327,65 @@ public class PatternConfig2Json { return _updatedPatternAttributes; } - LinkedHashMap<String, List<String[]>> getChannelsMappingFromJsonFile(JSONArray ja) { - LinkedHashMap<String, List<String[]>> _channelsMapping = new LinkedHashMap<String, List<String[]>>(); + List<MappingPatternChannel> getChannelsMappingFromJsonFile(JSONArray ja) { + List<MappingPatternChannel> _channelsMapping = new ArrayList<MappingPatternChannel>(); for (int j = 0; j < ja.length(); j++) { String channelToMap = ja.getJSONObject(j).getString(CHANNEL_TO_MAP); String taskOfChannelToMap = ja.getJSONObject(j).getString(TASK_OF_CHANNEL_TO_MAP); - String channelMappedInSameMem = ""; - if (ja.getJSONObject(j).has(CHANNEL_MAPPED_IN_SAME_MEM_AS)) { - channelMappedInSameMem = ja.getJSONObject(j).getString(CHANNEL_MAPPED_IN_SAME_MEM_AS); - } - String taskOfChannelSameMem = ""; - if (ja.getJSONObject(j).has(TASK_OF_CHANNEL_SAME_MEM)) { - taskOfChannelSameMem = ja.getJSONObject(j).getString(TASK_OF_CHANNEL_SAME_MEM); - } - String channelMappedInNewMem = ""; - if (ja.getJSONObject(j).has(CHANNEL_MAPPED_IN_NEW_MEM_CONNECTED_TO_BUS)) { - channelMappedInNewMem = ja.getJSONObject(j).getString(CHANNEL_MAPPED_IN_NEW_MEM_CONNECTED_TO_BUS); + int originChannel = -1; + String channelToMapOrigin = ja.getJSONObject(j).getString(CHANNEL_MAPPING_ORIGIN); + if (channelToMapOrigin.equals(CHANNEL_MAPPING_ORIGIN_CLONE)) { + originChannel = MappingPatternChannel.ORIGIN_CLONE; + } else if (channelToMapOrigin.equals(CHANNEL_MAPPING_ORIGIN_PATTERN)) { + originChannel = MappingPatternChannel.ORIGIN_PATTERN; + } else if (channelToMapOrigin.equals(CHANNEL_MAPPING_ORIGIN_MODEL)) { + originChannel = MappingPatternChannel.ORIGIN_MODEL; } - if (_channelsMapping.containsKey(taskOfChannelToMap)) { - if (channelMappedInSameMem != "") { - String[] channelMap = new String[4]; - channelMap[0] = JDialogPatternHandling.SAME_MEMORY; - channelMap[1] = channelToMap; - channelMap[2] = taskOfChannelSameMem; - channelMap[3] = channelMappedInSameMem; - _channelsMapping.get(taskOfChannelToMap).add(channelMap); - } else if (channelMappedInNewMem != "") { - String[] channelMap = new String[3]; - channelMap[0] = JDialogPatternHandling.NEW_MEMORY; - channelMap[1] = channelToMap; - channelMap[2] = channelMappedInNewMem; - _channelsMapping.get(taskOfChannelToMap).add(channelMap); + MappingPatternChannel mappingPatternChannel = new MappingPatternChannel(taskOfChannelToMap, channelToMap, originChannel); + + if (ja.getJSONObject(j).has(CHANNEL_MAPPED_IN_SAME_MEM_AS) && ja.getJSONObject(j).has(TASK_OF_CHANNEL_SAME_MEM)) { + int sameMemAsOrigin = -1; + String sameChannelMemAsOrigin = ja.getJSONObject(j).getString(CHANNEL_MAPPED_IN_SAME_MEM_AS_ORIGIN); + if (sameChannelMemAsOrigin.equals(CHANNEL_MAPPING_ORIGIN_CLONE)) { + sameMemAsOrigin = MappingPatternChannel.ORIGIN_CLONE; + } else if (sameChannelMemAsOrigin.equals(TASK_MAPPING_ORIGIN_PATTERN)) { + sameMemAsOrigin = MappingPatternChannel.ORIGIN_PATTERN; + } else if (sameChannelMemAsOrigin.equals(TASK_MAPPING_ORIGIN_MODEL)) { + sameMemAsOrigin = MappingPatternChannel.ORIGIN_MODEL; } - } else { - List<String[]> channelMapList = new ArrayList<String[]>(); - if (channelMappedInSameMem != "") { - String[] channelMap = new String[4]; - channelMap[0] = JDialogPatternHandling.SAME_MEMORY; - channelMap[1] = channelToMap; - channelMap[2] = taskOfChannelSameMem; - channelMap[3] = channelMappedInSameMem; - channelMapList.add(channelMap); - } else if (channelMappedInNewMem != "") { - String[] channelMap = new String[3]; - channelMap[0] = JDialogPatternHandling.NEW_MEMORY; - channelMap[1] = channelToMap; - channelMap[2] = channelMappedInNewMem; - channelMapList.add(channelMap); - } - _channelsMapping.put(taskOfChannelToMap, channelMapList); + mappingPatternChannel.setTaskAndChannelInSameMem(ja.getJSONObject(j).getString(TASK_OF_CHANNEL_SAME_MEM), ja.getJSONObject(j).getString(CHANNEL_MAPPED_IN_SAME_MEM_AS), sameMemAsOrigin); + }else if (ja.getJSONObject(j).has(CHANNEL_MAPPED_IN_NEW_MEM_CONNECTED_TO_BUS)) { + mappingPatternChannel.setBusNameForNewMem(ja.getJSONObject(j).getString(CHANNEL_MAPPED_IN_NEW_MEM_CONNECTED_TO_BUS)); } + _channelsMapping.add(mappingPatternChannel); + } return _channelsMapping; } - JSONArray addTasksMappingInJsonFile(LinkedHashMap<String, Entry<String, String>> _tasksMapping) { + JSONArray addTasksMappingInJsonFile(List<MappingPatternTask> _tasksMapping) { JSONArray ja = new JSONArray(); try { - for (String task : _tasksMapping.keySet()) { + for (MappingPatternTask taskMapping : _tasksMapping) { JSONObject jo = new JSONObject(); - jo.put(TASK_TO_MAP, task); - if (_tasksMapping.get(task).getKey().equals(JDialogPatternHandling.SAME_HW)) { - jo.put(TASK_MAPPED_IN_SAME_HW_AS, _tasksMapping.get(task).getValue()); + jo.put(TASK_TO_MAP, taskMapping.getTaskToMapName()); + if (taskMapping.getOrigin() == MappingPatternTask.ORIGIN_CLONE) { + jo.put(TASK_MAPPING_ORIGIN, TASK_MAPPING_ORIGIN_CLONE); + } else if (taskMapping.getOrigin() == MappingPatternTask.ORIGIN_PATTERN) { + jo.put(TASK_MAPPING_ORIGIN, TASK_MAPPING_ORIGIN_PATTERN); } - if (_tasksMapping.get(task).getKey().equals(JDialogPatternHandling.NEW_HW)) { - jo.put(TASK_MAPPED_IN_NEW_HW_CONNECTED_TO_BUS, _tasksMapping.get(task).getValue()); + if (taskMapping.getSameHwAs() != null) { + jo.put(TASK_MAPPED_IN_SAME_HW_AS, taskMapping.getSameHwAs()); + if (taskMapping.getSameHwAsOrigin() == MappingPatternTask.ORIGIN_CLONE) { + jo.put(TASK_MAPPED_IN_SAME_HW_AS_ORIGIN, TASK_MAPPING_ORIGIN_CLONE); + } else if (taskMapping.getSameHwAsOrigin() == MappingPatternTask.ORIGIN_PATTERN) { + jo.put(TASK_MAPPED_IN_SAME_HW_AS_ORIGIN, TASK_MAPPING_ORIGIN_PATTERN); + } else if (taskMapping.getSameHwAsOrigin() == MappingPatternTask.ORIGIN_MODEL) { + jo.put(TASK_MAPPED_IN_SAME_HW_AS_ORIGIN, TASK_MAPPING_ORIGIN_MODEL); + } + + } else if (taskMapping.getBusNameForNewHw() != null) { + jo.put(TASK_MAPPED_IN_NEW_HW_CONNECTED_TO_BUS, taskMapping.getBusNameForNewHw()); } ja.put(jo); } @@ -401,43 +395,53 @@ public class PatternConfig2Json { return ja; } - LinkedHashMap<String, Entry<String, String>> getTasksMappingFromJsonFile(JSONArray ja) { - LinkedHashMap<String, Entry<String, String>> _tasksMapping = new LinkedHashMap<String, Entry<String, String>>(); + List<MappingPatternTask> getTasksMappingFromJsonFile(JSONArray ja) { + List<MappingPatternTask> _tasksMapping = new ArrayList<MappingPatternTask>(); for (int j = 0; j < ja.length(); j++) { String taskToMap = ja.getJSONObject(j).getString(TASK_TO_MAP); - String taskMappedInNewHw = ""; - if (ja.getJSONObject(j).has(TASK_MAPPED_IN_NEW_HW_CONNECTED_TO_BUS)) { - taskMappedInNewHw = ja.getJSONObject(j).getString(TASK_MAPPED_IN_NEW_HW_CONNECTED_TO_BUS); + String taskToMapOrigin = ja.getJSONObject(j).getString(TASK_MAPPING_ORIGIN); + int origin = -1; + if (taskToMapOrigin.equals(TASK_MAPPING_ORIGIN_CLONE)) { + origin = MappingPatternTask.ORIGIN_CLONE; + } else if (taskToMapOrigin.equals(TASK_MAPPING_ORIGIN_PATTERN)) { + origin = MappingPatternTask.ORIGIN_PATTERN; } - String taskMappedInSameHw = ""; - if (ja.getJSONObject(j).has(TASK_MAPPED_IN_SAME_HW_AS)) { - taskMappedInSameHw = ja.getJSONObject(j).getString(TASK_MAPPED_IN_SAME_HW_AS); - } - if (taskMappedInSameHw != "") { - _tasksMapping.put(taskToMap, new AbstractMap.SimpleEntry<String, String>(JDialogPatternHandling.SAME_HW, taskMappedInSameHw)); - } else if (taskMappedInNewHw != "") { - _tasksMapping.put(taskToMap, new AbstractMap.SimpleEntry<String, String>(JDialogPatternHandling.NEW_HW, taskMappedInNewHw)); + MappingPatternTask mappingPatternTask = new MappingPatternTask(taskToMap, origin); + if (ja.getJSONObject(j).has(TASK_MAPPED_IN_NEW_HW_CONNECTED_TO_BUS)) { + mappingPatternTask.setBusNameForNewHw(ja.getJSONObject(j).getString(TASK_MAPPED_IN_NEW_HW_CONNECTED_TO_BUS)); + } else if (ja.getJSONObject(j).has(TASK_MAPPED_IN_SAME_HW_AS)) { + int sameHwAsOrigin = -1; + String sameTaskHwAsOrigin = ja.getJSONObject(j).getString(TASK_MAPPED_IN_SAME_HW_AS_ORIGIN); + if (sameTaskHwAsOrigin.equals(TASK_MAPPING_ORIGIN_CLONE)) { + sameHwAsOrigin = MappingPatternTask.ORIGIN_CLONE; + } else if (sameTaskHwAsOrigin.equals(TASK_MAPPING_ORIGIN_PATTERN)) { + sameHwAsOrigin = MappingPatternTask.ORIGIN_PATTERN; + } else if (sameTaskHwAsOrigin.equals(TASK_MAPPING_ORIGIN_MODEL)) { + sameHwAsOrigin = MappingPatternTask.ORIGIN_MODEL; + } + mappingPatternTask.setSameHwAs(ja.getJSONObject(j).getString(TASK_MAPPED_IN_SAME_HW_AS), sameHwAsOrigin); } + _tasksMapping.add(mappingPatternTask); } return _tasksMapping; } - JSONArray addConnectionInJsonFile(LinkedHashMap<String,List<String[]>> _portsConnection) { + JSONArray addConnectionInJsonFile(List<PatternConnection> _portsConnection) { JSONArray ja = new JSONArray(); try { - for (String taskPattern : _portsConnection.keySet()) { - for (String[] conn : _portsConnection.get(taskPattern)) { - JSONObject jo = new JSONObject(); - jo.put(PATTERN_TASK, taskPattern); - jo.put(PATTERN_PORT, conn[0]); - jo.put(MODEL_TASK, conn[1]); - jo.put(MODEL_PORT, conn[2]); - - if (conn.length>=4 && conn[3].equals(JDialogPatternHandling.NEW_PORT_OPTION)) { - jo.put(NEW_PORT, "true"); - } - ja.put(jo); + for (PatternConnection portsConnection : _portsConnection) { + JSONObject jo = new JSONObject(); + jo.put(PATTERN_TASK, portsConnection.getPatternTaskName()); + jo.put(PATTERN_PORT, portsConnection.getPatternChannel()); + jo.put(MODEL_TASK, portsConnection.getModelTaskName()); + jo.put(MODEL_PORT, portsConnection.getModelChannelName()); + + if (portsConnection.isNewPort()) { + jo.put(NEW_PORT, "true"); + } else { + jo.put(NEW_PORT, "false"); } + ja.put(jo); } } catch (JSONException e) { @@ -446,50 +450,17 @@ public class PatternConfig2Json { return ja; } - LinkedHashMap<String, List<String[]>> getConnectionFromJsonFile(JSONArray ja) { - LinkedHashMap<String, List<String[]>> _portsConnection = new LinkedHashMap<String, List<String[]>>(); + List<PatternConnection> getConnectionFromJsonFile(JSONArray ja) { + List<PatternConnection> _portsConnection = new ArrayList<PatternConnection>(); for (int j = 0; j < ja.length(); j++) { String patternTask = ja.getJSONObject(j).getString(PATTERN_TASK); String patternPort = ja.getJSONObject(j).getString(PATTERN_PORT); String modelTask = ja.getJSONObject(j).getString(MODEL_TASK); String modelPort = ja.getJSONObject(j).getString(MODEL_PORT); - String newPort = ""; - if (ja.getJSONObject(j).has(NEW_PORT)) { - newPort = ja.getJSONObject(j).getString(NEW_PORT); - } - if (_portsConnection.containsKey(patternTask)) { - if (newPort != "") { - String[] conn = new String[4]; - conn[0] = patternPort; - conn[1] = modelTask; - conn[2] = modelPort; - conn[3] = newPort; - _portsConnection.get(patternTask).add(conn); - } else { - String[] conn = new String[3]; - conn[0] = patternPort; - conn[1] = modelTask; - conn[2] = modelPort; - _portsConnection.get(patternTask).add(conn); - } - } else { - List<String[]> portConnec = new ArrayList<String[]>(); - if (newPort != "") { - String[] conn = new String[4]; - conn[0] = patternPort; - conn[1] = modelTask; - conn[2] = modelPort; - conn[3] = newPort; - portConnec.add(conn); - } else { - String[] conn = new String[3]; - conn[0] = patternPort; - conn[1] = modelTask; - conn[2] = modelPort; - portConnec.add(conn); - } - _portsConnection.put(patternTask, portConnec); - } + String newPort = ja.getJSONObject(j).getString(NEW_PORT); + boolean isNewPort = Boolean.parseBoolean(newPort); + PatternConnection patternConnection = new PatternConnection(patternTask, patternPort, modelTask, modelPort, isNewPort); + _portsConnection.add(patternConnection); } return _portsConnection; } diff --git a/src/main/java/tmltranslator/patternhandling/PatternConfiguration.java b/src/main/java/tmltranslator/patternhandling/PatternConfiguration.java index defc67f56c5edbf16cb7c8266bcc0a24e91cc250..1d293e5b88265fa6006b093b9122acf33f03f118 100644 --- a/src/main/java/tmltranslator/patternhandling/PatternConfiguration.java +++ b/src/main/java/tmltranslator/patternhandling/PatternConfiguration.java @@ -9,23 +9,21 @@ package tmltranslator.patternhandling; */ import java.util.*; -import java.util.Map.Entry; import myutil.TraceManager; -import ui.window.JDialogPatternHandling; public class PatternConfiguration { - LinkedHashMap<String, List<String[]>> portsConnection; - LinkedHashMap<String, String> clonedTasks; - LinkedHashMap<String, List<Entry<String, String>>> portsConfig; - LinkedHashMap<String, Entry<String, String>> tasksMapping; - LinkedHashMap<String, List<String[]>> channelsMapping; + List<PatternConnection> portsConnection; + List<PatternCloneTask> clonedTasks; + List<PatternPortsConfig> portsConfig; + List<MappingPatternTask> tasksMapping; + List<MappingPatternChannel> channelsMapping; LinkedHashMap<String, List<AttributeTaskJsonFile>> updatedPatternAttributes; - LinkedHashMap<String, List<PortTaskJsonFile>> channelsWithSecurity; + List<PatternChannelWithSecurity> channelsWithSecurity; - public PatternConfiguration(LinkedHashMap<String, List<String[]>> portsConnection, LinkedHashMap<String, String> clonedTasks, LinkedHashMap<String, List<Entry<String, String>>> portsConfig, LinkedHashMap<String, Entry<String, String>> tasksMapping, LinkedHashMap<String,List<String[]>> channelsMapping, LinkedHashMap<String, List<AttributeTaskJsonFile>> updatedPatternAttributes, LinkedHashMap<String, List<PortTaskJsonFile>> channelsWithSecurity) { + public PatternConfiguration(List<PatternConnection> portsConnection, List<PatternCloneTask> clonedTasks, List<PatternPortsConfig> portsConfig, List<MappingPatternTask> tasksMapping, List<MappingPatternChannel> channelsMapping, LinkedHashMap<String, List<AttributeTaskJsonFile>> updatedPatternAttributes, List<PatternChannelWithSecurity> channelsWithSecurity) { this.portsConnection = portsConnection; this.clonedTasks = clonedTasks; this.portsConfig = portsConfig; @@ -36,32 +34,32 @@ public class PatternConfiguration { } public PatternConfiguration() { - this.portsConnection = new LinkedHashMap<String, List<String[]>>(); - this.clonedTasks = new LinkedHashMap<String, String>(); - this.portsConfig = new LinkedHashMap<String, List<Entry<String, String>>>(); - this.tasksMapping = new LinkedHashMap<String, Entry<String, String>>(); - this.channelsMapping = new LinkedHashMap<String, List<String[]>>(); + this.portsConnection = new ArrayList<PatternConnection>(); + this.clonedTasks = new ArrayList<PatternCloneTask>(); + this.portsConfig = new ArrayList<PatternPortsConfig>(); + this.tasksMapping = new ArrayList<MappingPatternTask>(); + this.channelsMapping = new ArrayList<MappingPatternChannel>(); this.updatedPatternAttributes = new LinkedHashMap<String, List<AttributeTaskJsonFile>>(); - this.channelsWithSecurity = new LinkedHashMap<String, List<PortTaskJsonFile>>(); + this.channelsWithSecurity = new ArrayList<PatternChannelWithSecurity>(); } - public LinkedHashMap<String,List<String[]>> getPortsConnection() { + public List<PatternConnection> getPortsConnection() { return portsConnection; } - public LinkedHashMap<String, String> getClonedTasks() { + public List<PatternCloneTask> getClonedTasks() { return clonedTasks; } - public LinkedHashMap<String, List<Entry<String, String>>> getPortsConfig() { + public List<PatternPortsConfig> getPortsConfig() { return portsConfig; } - public LinkedHashMap<String, Entry<String, String>> getTasksMapping() { + public List<MappingPatternTask> getTasksMapping() { return tasksMapping; } - public LinkedHashMap<String,List<String[]>> getChannelsMapping() { + public List<MappingPatternChannel> getChannelsMapping() { return channelsMapping; } @@ -69,27 +67,27 @@ public class PatternConfiguration { return updatedPatternAttributes; } - public LinkedHashMap<String, List<PortTaskJsonFile>> getChannelsWithSecurity() { + public List<PatternChannelWithSecurity> getChannelsWithSecurity() { return channelsWithSecurity; } - public void setPortsConnection(LinkedHashMap<String,List<String[]>> _portsConnection) { + public void setPortsConnection(List<PatternConnection> _portsConnection) { portsConnection = _portsConnection; } - public void setClonedTasks(LinkedHashMap<String, String> _clonedTasks) { + public void setClonedTasks(List<PatternCloneTask> _clonedTasks) { clonedTasks = _clonedTasks; } - public void setPortsConfig(LinkedHashMap<String, List<Entry<String, String>>> _portsConfig) { + public void setPortsConfig(List<PatternPortsConfig> _portsConfig) { portsConfig = _portsConfig; } - public void setTasksMapping(LinkedHashMap<String, Entry<String, String>> _tasksMapping) { + public void setTasksMapping(List<MappingPatternTask> _tasksMapping) { tasksMapping = _tasksMapping; } - public void setChannelsMapping(LinkedHashMap<String,List<String[]>> _channelsMapping) { + public void setChannelsMapping(List<MappingPatternChannel> _channelsMapping) { channelsMapping = _channelsMapping; } @@ -97,11 +95,31 @@ public class PatternConfiguration { updatedPatternAttributes = _updatedPatternAttributes; } - public void setChannelsWithSecurity(LinkedHashMap<String, List<PortTaskJsonFile>> _channelsWithSecurity) { + public void addPortsConnection(PatternConnection _portsConnection) { + portsConnection.add(_portsConnection); + } + + public void addClonedTasks(PatternCloneTask _clonedTasks) { + clonedTasks.add(_clonedTasks); + } + + public void addPortsConfig(PatternPortsConfig _portsConfig) { + portsConfig.add(_portsConfig); + } + + public void addTasksMapping(MappingPatternTask _tasksMapping) { + tasksMapping.add(_tasksMapping); + } + + public void addChannelsMapping(MappingPatternChannel _channelsMapping) { + channelsMapping.add(_channelsMapping); + } + + public void setChannelsWithSecurity(List<PatternChannelWithSecurity> _channelsWithSecurity) { channelsWithSecurity = _channelsWithSecurity; } - public void loadConnectedPorts(Vector<String> connectedPortsFull) { + /*public void loadConnectedPorts(Vector<String> connectedPortsFull) { for (String connectedPort : connectedPortsFull) { String[] splitO = connectedPort.split(JDialogPatternHandling.TASK_CHANNEL_SEPARATOR, 2); String patternTaskName = splitO[0]; @@ -240,5 +258,5 @@ public class PatternConfiguration { clonedTasks.put(clonedTaskSplit[0], clonedTaskSplit[1]); } } - } + }*/ } diff --git a/src/main/java/tmltranslator/patternhandling/PatternConnection.java b/src/main/java/tmltranslator/patternhandling/PatternConnection.java index 143b2b4f322e3c069b46dac3816f46df16d1918f..74112de5de7568c2d8afd46b1f5689d9dae1064c 100644 --- a/src/main/java/tmltranslator/patternhandling/PatternConnection.java +++ b/src/main/java/tmltranslator/patternhandling/PatternConnection.java @@ -8,27 +8,41 @@ package tmltranslator.patternhandling; * @version 1.0 25/10/2023 */ -import myutil.TraceManager; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; + import tmltranslator.*; public class PatternConnection { - String patternTaskname; + //public static final int NO_AUTHENTICITY = 0; + //public static final int WEAK_AUTHENTICITY = 1; + //public static final int STRONG_AUTHENTICITY = 2; + public final static String PORT_CONNECTION_SEPARATOR = " <-> "; + public final static String NEW_PORT_OPTION = " New port"; + public final static String TASK_CHANNEL_SEPARATOR = "::"; + + String patternTaskName; String patternChannel; String modelTaskName; String modelChannelName; Boolean isNewPort; + String newNameOfTaskInModel; + String newNameOfChannelInModel; + //Boolean isConf; + //int auth; - public PatternConnection(String patternTaskname, String patternChannel, String modelTaskName, String modelChannelName, Boolean isNewPort) { - this.patternTaskname = patternTaskname; + public PatternConnection(String patternTaskName, String patternChannel, String modelTaskName, String modelChannelName, Boolean isNewPort) { + this.patternTaskName = patternTaskName; this.patternChannel = patternChannel; this.modelTaskName = modelTaskName; this.modelChannelName = modelChannelName; this.isNewPort = isNewPort; } - public String getPatternTaskname() { - return patternTaskname; + public String getPatternTaskName() { + return patternTaskName; } public String getPatternChannel() { @@ -47,8 +61,24 @@ public class PatternConnection { return isNewPort; } - public void setPatternTaskname(String _patternTaskname) { - patternTaskname = _patternTaskname; + public String getNewNameOfTaskInModel() { + return newNameOfTaskInModel; + } + + public String getNewNameOfChannelInModel() { + return newNameOfChannelInModel; + } + + /*public Boolean isConfidential() { + return isConf; + } + + public int getAuthenticity() { + return auth; + }*/ + + public void setPatternTaskName(String _patternTaskName) { + patternTaskName = _patternTaskName; } public void setPatternChannel(String _patternChannel) { @@ -66,5 +96,58 @@ public class PatternConnection { public void setIsNewPort(Boolean _isNewPort) { isNewPort = _isNewPort; } + + public void setNewNameOfTaskInModel(String _newNameOfTaskInModel) { + newNameOfTaskInModel = _newNameOfTaskInModel; + } + + public void setNewNameOfChannelInModel(String _newNameOfChannelInModel) { + newNameOfChannelInModel = _newNameOfChannelInModel; + } + + /*public void setIsConfidential(Boolean _isConf) { + isConf = _isConf; + } + + public void setAuthenticity(int _auth) { + auth = _auth; + }*/ + + + public String getStringDisplay() { + if (isNewPort) { + return (patternTaskName + TASK_CHANNEL_SEPARATOR + patternChannel + PORT_CONNECTION_SEPARATOR + modelTaskName + TASK_CHANNEL_SEPARATOR+ modelChannelName + NEW_PORT_OPTION); + } else { + return (patternTaskName + TASK_CHANNEL_SEPARATOR + patternChannel + PORT_CONNECTION_SEPARATOR + modelTaskName + TASK_CHANNEL_SEPARATOR+ modelChannelName); + } + + } + public boolean isANewChannelRequired(List<PatternConnection> patternConnectionList, LinkedHashMap<String, TaskPattern> patternTasks, List<PatternCloneTask> patternCloneTasks) { + if (this.isNewPort()) { + return true; + } else { + List<String> similarTasks = new ArrayList<String>(); + for (PatternCloneTask patternCloneTask : patternCloneTasks) { + if (patternCloneTask.getClonedTask().equals(this.getModelTaskName())) { + for (PatternCloneTask patternCloneTask0 : patternCloneTasks) { + if (patternCloneTask.getTaskToClone().equals(patternCloneTask0.getTaskToClone())) { + similarTasks.add(patternCloneTask0.getClonedTask()); + } + } + similarTasks.add(patternCloneTask.getTaskToClone()); + } + } + for (PatternConnection patternConnection: patternConnectionList) { + if (patternConnection != this && this.getModelChannelName().equals(patternConnection.getModelChannelName()) && !this.getModelTaskName().equals(patternConnection.getModelTaskName()) && !patternConnection.isNewPort() && !similarTasks.contains(patternConnection.getModelTaskName())) { + for (PortTaskJsonFile portTaskJsonFile : patternTasks.get(this.getPatternTaskName()).getExternalPorts()) { + if (this.getPatternChannel().equals(portTaskJsonFile.getName()) && portTaskJsonFile.getMode().equals(PatternCreation.MODE_OUTPUT)) { + return true; + } + } + } + } + } + return false; + } } diff --git a/src/main/java/tmltranslator/patternhandling/PatternIntegration.java b/src/main/java/tmltranslator/patternhandling/PatternIntegration.java index c62a19369014d58df35f49e3cf92b39d80928954..736fc44d73ffcb07b7c152f5b670a9145e7c0064 100644 --- a/src/main/java/tmltranslator/patternhandling/PatternIntegration.java +++ b/src/main/java/tmltranslator/patternhandling/PatternIntegration.java @@ -10,23 +10,12 @@ package tmltranslator.patternhandling; import myutil.FileUtils; import myutil.TraceManager; -import rationals.properties.isNormalized; import tmltranslator.*; -import ui.window.JDialogPatternHandling; -import ui.window.TraceData; import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; import java.util.*; import java.util.Map.Entry; -import javax.swing.JDialog; - -import org.apache.batik.anim.timing.Trace; - public class PatternIntegration implements Runnable { String patternPath; @@ -36,9 +25,16 @@ public class PatternIntegration implements Runnable { TMLMapping<?> tmapModel; TMLMapping<?> tmapPattern; - HashMap<String, String> renamedChannels = new HashMap<String, String>(); - List<TMLChannel> channelsFromPatternToMap = new ArrayList<TMLChannel>(); - List<TMLChannel> channelsFromClonedToMap = new ArrayList<TMLChannel>(); + HashMap<String, String> tasksClonedIntoModel = new HashMap<String, String>(); + HashMap<Entry<String, String>, String> channelsClonedIntoModel = new HashMap<Entry<String, String>, String>(); + + HashMap<String, String> tasksOfPatternIntoModel = new HashMap<String, String>(); + HashMap<Entry<String, String>, String> channelsOfPatternIntoModel = new HashMap<Entry<String, String>, String>(); + + HashMap<Entry<String, String>, String> renamedModelChannels = new HashMap<Entry<String, String>, String>(); + HashMap<TMLTask, List<TMLActivityElement>> clonedTasksToRemElems = new HashMap<TMLTask, List<TMLActivityElement>>(); + //List<TMLChannel> channelsFromPatternToMap = new ArrayList<TMLChannel>(); + //List<TMLChannel> channelsFromClonedToMap = new ArrayList<TMLChannel>(); public PatternIntegration(String _patternPath, String _patternName, PatternConfiguration _patternConfiguration, LinkedHashMap<String, TaskPattern> _patternTasks, TMLMapping<?> _tmapModel) { this.patternPath = _patternPath; @@ -65,11 +61,12 @@ public class PatternIntegration implements Runnable { if (tmapModel == null) { return; } + String appTab = ""; TMLModeling<?> tmlmNew = tmapModel.getTMLModeling(); for (TMLTask task : tmlmNew.getTasks()) { String[] taskNameSplit = task.getName().split("__"); - TraceManager.addDev("task.getName()==" + task.getName()); task.setName(taskNameSplit[taskNameSplit.length-1]); + appTab = taskNameSplit[0]; } for (TMLChannel ch : tmlmNew.getChannels()) { String[] channelNameSplit = ch.getName().split("__"); @@ -102,150 +99,231 @@ public class PatternIntegration implements Runnable { req.setName(requestNameSplit[requestNameSplit.length-1]); } - TraceManager.addDev("Model elems init :"); - for (TMLChannel ch : tmlmNew.getChannels()) { - TraceManager.addDev("ch=" + ch.getName() + ", Origin Task: " + ch.getNameOfOriginTasks() + ", Destination Task: " + ch.getNameOfDestinationTasks() + ", Origin port: " + ch.getOriginPort().getName()+ ", Destination port: " + ch.getDestinationPort().getName()); - } - for (TMLEvent evt : tmlmNew.getEvents()) { - TraceManager.addDev("evt=" + evt.getName() + ", Origin Task: " + evt.getOriginTask().getName() + ", Destination Task: " + evt.getDestinationTask().getName() + ", Origin port: " + evt.getOriginPort().getName()+ ", Destination port: " + evt.getDestinationPort().getName()); - } - - for (TMLTask task : tmlmNew.getTasks()) { - TraceManager.addDev("task=" + task.getName()); - for (TMLWriteChannel wr : task.getWriteChannels()) { - TraceManager.addDev("task wr=" + wr.getName() + ", ch=" + wr.getChannel(0).getName()); - } - for (TMLReadChannel rd : task.getReadChannels()) { - TraceManager.addDev("task rd=" + rd.getName() + ", ch=" + rd.getChannel(0).getName()); - } - for (TMLSendEvent sd : task.getSendEvents()) { - TraceManager.addDev("task sd=" + sd.getName() + ", evt=" + sd.getEvent().getName()); - } - for (TMLWaitEvent wt : task.getWaitEvents()) { - TraceManager.addDev("task wt=" + wt.getName() + ", evt=" + wt.getEvent().getName()); - } - - for (TMLChannel wr : task.getWriteTMLChannels()) { - TraceManager.addDev("task write=" + wr.getName()); - } - for (TMLChannel rd : task.getReadTMLChannels()) { - TraceManager.addDev("task read=" + rd.getName()); - } - for (TMLChannel ch : task.getChannelSet()) { - TraceManager.addDev("task ch=" + ch.getName()); - } - for (TMLEvent evt : task.getTMLEvents()) { - TraceManager.addDev("task evt=" + evt.getName()); - } + tmapModel = addClonedTask(tmapModel, patternConfiguration); + renamePatternTasksName(); + renamePatternChannelsName(); + TraceManager.addDev("%% tasksClonedIntoModel:"); + for (String tas : tasksClonedIntoModel.keySet()) { + TraceManager.addDev("Clone task name in config:" + tas + " Clone task name in Model:" + tasksClonedIntoModel.get(tas)); } - - - TraceManager.addDev("PATTERN elems init :"); - for (TMLChannel ch : tmlmPattern.getChannels()) { - TraceManager.addDev("ch=" + ch.getName() + ", Origin Task: " + ch.getNameOfOriginTasks() + ", Destination Task: " + ch.getNameOfDestinationTasks() + ", Origin port: " + ch.getOriginPort().getName()+ ", Destination port: " + ch.getDestinationPort().getName()); + TraceManager.addDev("%% tasksOfPatternIntoModel:"); + for (String tas : tasksOfPatternIntoModel.keySet()) { + TraceManager.addDev("Pattern task name in config:" + tas + " Pattern task name in Model:" + tasksOfPatternIntoModel.get(tas)); } - for (TMLEvent evt : tmlmPattern.getEvents()) { - TraceManager.addDev("evt=" + evt.getName() + ", Origin Task: " + evt.getOriginTask().getName() + ", Destination Task: " + evt.getDestinationTask().getName()); + TraceManager.addDev("%% channelsClonedIntoModel:"); + for (Entry<String, String> chT : channelsClonedIntoModel.keySet()) { + TraceManager.addDev("channel name in config:" + chT.getValue() + " of task: " + chT.getKey() + " Clone channel name in Model:" + channelsClonedIntoModel.get(chT)); } - - for (TMLTask task : tmlmPattern.getTasks()) { - TraceManager.addDev("task=" + task.getName()); - for (TMLWriteChannel wr : task.getWriteChannels()) { - TraceManager.addDev("task wr=" + wr.getName() + ", ch=" + wr.getChannel(0).getName()); - } - for (TMLReadChannel rd : task.getReadChannels()) { - TraceManager.addDev("task rd=" + rd.getName() + ", ch=" + rd.getChannel(0).getName()); - } - for (TMLSendEvent sd : task.getSendEvents()) { - TraceManager.addDev("task sd=" + sd.getName() + ", evt=" + sd.getEvent().getName()); - } - for (TMLWaitEvent wt : task.getWaitEvents()) { - TraceManager.addDev("task wt=" + wt.getName() + ", evt=" + wt.getEvent().getName()); - } - - for (TMLChannel wr : task.getWriteTMLChannels()) { - TraceManager.addDev("task write=" + wr.getName()); - } - for (TMLChannel rd : task.getReadTMLChannels()) { - TraceManager.addDev("task read=" + rd.getName()); - } - for (TMLChannel ch : task.getChannelSet()) { - TraceManager.addDev("task ch=" + ch.getName()); - } - for (TMLEvent evt : task.getTMLEvents()) { - TraceManager.addDev("task evt=" + evt.getName()); - } + TraceManager.addDev("%% channelsOfPatternIntoModel:"); + for (Entry<String, String> chT : channelsOfPatternIntoModel.keySet()) { + TraceManager.addDev("channel Of pattern name in config:" + chT.getValue() + " of task: " + chT.getKey() + " Pattern channel name in Model:" + channelsOfPatternIntoModel.get(chT)); } - - tmapModel = addClonedTask(tmapModel, patternConfiguration); - renamePatternTasksName(); - renamePatternChannelsName(); tmapPattern = updatePatternTasksAttributes(tmapPattern, patternConfiguration.getUpdatedPatternAttributes()); tmapModel = addPatternTasksInModel(tmapModel, tmapPattern, patternTasks); tmapModel = addPatternInternalChannelsInModel(tmapModel, tmapPattern, patternTasks); //tmapModel = addNewPortToTasks(tmapModel, patternConfiguration.getPortsConnection(), patternTasks); - tmapModel = makeConnectionBetweenPatternAndModel(tmapModel, tmapPattern, patternConfiguration.getPortsConnection(), patternTasks); - tmapModel = configDisconnectedChannels(tmapModel, patternConfiguration.getPortsConfig(), renamedChannels); + tmapModel = makeConnectionBetweenPatternAndModel(tmapModel, tmapPattern, patternConfiguration.getPortsConnection(), patternTasks, patternConfiguration.getClonedTasks()); + tmapModel = configDisconnectedChannels(tmapModel, patternConfiguration.getPortsConfig()); + tmapModel = removeNotUsedChannelsInClonedTask(tmapModel, clonedTasksToRemElems); tmapModel = mapTasksInArch(tmapModel, patternConfiguration.getTasksMapping()); - tmapModel = mapTasksInArchAuto(tmapModel, tmapPattern, patternConfiguration.getTasksMapping().keySet(), patternConfiguration, patternTasks); + tmapModel = mapTasksInArchAuto(tmapModel, tmapPattern, patternConfiguration.getTasksMapping(), patternConfiguration, patternTasks); tmapModel = mapChannelsInArch(tmapModel, patternConfiguration.getChannelsMapping()); - tmapModel = mapChannelsInArchAuto(tmapModel, tmapPattern, patternConfiguration.getTasksMapping().keySet(), patternConfiguration.getChannelsMapping().keySet(), patternConfiguration, patternTasks); + tmapModel = mapChannelsInArchAuto(tmapModel, tmapPattern, patternConfiguration.getTasksMapping(), patternConfiguration.getChannelsMapping(), patternConfiguration, patternTasks); + tmapModel = generateSecurityForChannels(tmapModel, tmapPattern, patternConfiguration, patternTasks, appTab); + } - TraceManager.addDev("Model elems result :"); + public TMLMapping<?> addClonedTask(TMLMapping<?> _tmapModel, PatternConfiguration _patternConfiguration) { + TMLModeling<?> _tmlmModel = _tmapModel.getTMLModeling(); + for (PatternCloneTask patternCloneTask : _patternConfiguration.getClonedTasks()) { + try { + String clonedTask = patternCloneTask.getClonedTask(); + String taskToClone = patternCloneTask.getTaskToClone(); + TMLModeling<?> _tmlmModelClone = _tmlmModel.deepClone(); + TMLTask taskClone = _tmlmModelClone.getTMLTaskByName(taskToClone); + + if (taskClone != null) { + taskClone.setName(clonedTask); + if (_tmlmModel.getTMLTaskByName(taskClone.getName()) != null || tasksClonedIntoModel.containsValue(taskClone.getName()) || tasksOfPatternIntoModel.containsValue(taskClone.getName())) { + int indexTask = 0; + String taskNameWithIndex = taskClone.getName() + indexTask; + while (_tmlmModel.getTMLTaskByName(taskNameWithIndex) != null || tasksClonedIntoModel.containsValue(taskNameWithIndex) || tasksOfPatternIntoModel.containsValue(taskNameWithIndex)) { + indexTask += 1; + taskNameWithIndex= taskClone.getName() + indexTask; + } + taskClone.setName(taskNameWithIndex); + tasksClonedIntoModel.put(clonedTask, taskNameWithIndex); + } else { + tasksClonedIntoModel.put(clonedTask, clonedTask); + } + //List<String> usedChannelsOfClonedTask = new ArrayList<String>(); + //Map<String, String> oldNewChannelsClonedTaskName = new HashMap<String, String>(); + //Map<String, String> oldNewEventsClonedTaskName = new HashMap<String, String>(); + List<TMLActivityElement> aeElemsToRemove = new ArrayList<TMLActivityElement>(); + for (PatternConnection patternConnection : _patternConfiguration.getPortsConnection()) { + if (patternConnection.getModelTaskName().equals(clonedTask) && !patternConnection.isNewPort()) { + String modelChannelName = patternConnection.getModelChannelName(); + if (_tmlmModel.getChannelByName(modelChannelName) != null) { + int indexChannel = 0; + String channelNameWithIndex = modelChannelName + indexChannel; + while (_tmlmModel.getChannelByName(channelNameWithIndex) != null || channelsClonedIntoModel.containsValue(channelNameWithIndex) || channelsOfPatternIntoModel.containsValue(channelNameWithIndex)) { + indexChannel += 1; + channelNameWithIndex = modelChannelName + indexChannel; + } + //oldNewChannelsClonedTaskName.put(modelChannelName, channelNameWithIndex); + TraceManager.addDev("Channel : old =" + modelChannelName + " New=" + channelNameWithIndex); + //patternConnection.setModelChannelName(channelNameWithIndex); + channelsClonedIntoModel.put(Map.entry(clonedTask, modelChannelName), channelNameWithIndex); + } else if (_tmlmModel.getEventByName(modelChannelName) != null) { + int indexEvent = 0; + String eventNameWithIndex = modelChannelName + indexEvent; + while (_tmlmModel.getEventByName(eventNameWithIndex) != null || channelsClonedIntoModel.containsValue(eventNameWithIndex) || channelsOfPatternIntoModel.containsValue(eventNameWithIndex)) { + indexEvent += 1; + eventNameWithIndex = modelChannelName + indexEvent; + } + //oldNewEventsClonedTaskName.put(modelChannelName, eventNameWithIndex); + //patternConnection.setModelChannelName(eventNameWithIndex); + channelsClonedIntoModel.put(Map.entry(clonedTask, modelChannelName), eventNameWithIndex); + } else if (channelsClonedIntoModel.containsValue(modelChannelName) || channelsOfPatternIntoModel.containsValue(modelChannelName)){ + int index = 0; + String nameWithIndex = modelChannelName + index; + while (channelsClonedIntoModel.containsValue(nameWithIndex) || channelsOfPatternIntoModel.containsValue(nameWithIndex)) { + index += 1; + nameWithIndex = modelChannelName + index; + } + channelsClonedIntoModel.put(Map.entry(clonedTask, modelChannelName), nameWithIndex); + } else { + channelsClonedIntoModel.put(Map.entry(clonedTask, modelChannelName), modelChannelName); + } + } else if (patternConnection.getModelTaskName().equals(clonedTask) && patternConnection.isNewPort()) { + + } + } + /*for (MappingPatternChannel mappingPatternChannel : _patternConfiguration.getChannelsMapping()) { + //for (String[] st : _patternConfiguration.getChannelsMapping().get(taskOfChannelToMap)) { + if (mappingPatternChannel.getTaskOfChannelToMap().equals(clonedTask)) { + if (oldNewChannelsClonedTaskName.keySet().contains(st[1])) { + st[1] = oldNewChannelsClonedTaskName.get(st[1]); + } else if (oldNewEventsClonedTaskName.keySet().contains(st[1])) { + st[1] = oldNewEventsClonedTaskName.get(st[1]); + } + } + if (st.length == 4) { + if (st[2].equals(clonedTask)) { + if (oldNewChannelsClonedTaskName.keySet().contains(st[3])) { + st[3] = oldNewChannelsClonedTaskName.get(st[3]); + } else if (oldNewEventsClonedTaskName.keySet().contains(st[3])) { + st[3] = oldNewEventsClonedTaskName.get(st[3]); + } + } + } + //} + }*/ + for (TMLActivityElement ae : taskClone.getActivityDiagram().getElements()) { + if (ae instanceof TMLActivityElementChannel) { + TMLActivityElementChannel aeChannel = (TMLActivityElementChannel) ae; + for (int i=0; i < aeChannel.getNbOfChannels(); i++) { + if (channelsClonedIntoModel.get(Map.entry(taskClone.getName(), aeChannel.getChannel(i).getName())) == null) { + //TMLActivityElement prevElem = taskClone.getActivityDiagram().getPrevious(ae); + //prevElem.setNewNext(ae, ae.getNextElement(0)); + aeElemsToRemove.add(ae); + } else { + + for (TMLPort port : aeChannel.getChannel(i).getOriginPorts()) { + port.setName(channelsClonedIntoModel.get(Map.entry(taskClone.getName(), aeChannel.getChannel(i).getName()))); + } + for (TMLPort port : aeChannel.getChannel(i).getDestinationPorts()) { + port.setName(channelsClonedIntoModel.get(Map.entry(taskClone.getName(), aeChannel.getChannel(i).getName()))); + } + if (aeChannel.getChannel(i).getOriginPort() != null) { + aeChannel.getChannel(i).getOriginPort().setName(channelsClonedIntoModel.get(Map.entry(taskClone.getName(), aeChannel.getChannel(i).getName()))); + TraceManager.addDev("Port Origin New Name = " + aeChannel.getChannel(i).getOriginPort().getName()); + } + if (aeChannel.getChannel(i).getDestinationPort() != null) { + aeChannel.getChannel(i).getDestinationPort().setName(channelsClonedIntoModel.get(Map.entry(taskClone.getName(), aeChannel.getChannel(i).getName()))); + } + TraceManager.addDev("Name Channel Clone Before =" + aeChannel.getChannel(i).getName()); + aeChannel.getChannel(i).setName(channelsClonedIntoModel.get(Map.entry(taskClone.getName(), aeChannel.getChannel(i).getName()))); + TraceManager.addDev("Name Channel Clone After =" + aeChannel.getChannel(i).getName()); + if (_tmlmModel.getChannelByName(aeChannel.getChannel(i).getName()) == null) { + _tmlmModel.addChannel(aeChannel.getChannel(i)); + //channelsFromClonedToMap.add(aeChannel.getChannel(i)); + } + } + } + } else if (ae instanceof TMLActivityElementEvent) { + TMLActivityElementEvent aeEvent = (TMLActivityElementEvent) ae; + //if (!oldNewEventsClonedTaskName.keySet().contains(aeEvent.getEvent().getName())) { + if (channelsClonedIntoModel.get(Map.entry(taskClone.getName(), aeEvent.getEvent().getName())) == null) { + //TMLActivityElement prevElem = taskClone.getActivityDiagram().getPrevious(ae); + //prevElem.setNewNext(ae, ae.getNextElement(0)); + aeElemsToRemove.add(ae); + } else { + + for (TMLPort port : aeEvent.getEvent().getOriginPorts()) { + port.setName(channelsClonedIntoModel.get(Map.entry(taskClone.getName(), aeEvent.getEvent().getName()))); + } + for (TMLPort port : aeEvent.getEvent().getDestinationPorts()) { + port.setName(channelsClonedIntoModel.get(Map.entry(taskClone.getName(), aeEvent.getEvent().getName()))); + } + if (aeEvent.getEvent().getOriginPort() != null) { + aeEvent.getEvent().getOriginPort().setName(channelsClonedIntoModel.get(Map.entry(taskClone.getName(), aeEvent.getEvent().getName()))); + } + if (aeEvent.getEvent().getDestinationPort() != null) { + aeEvent.getEvent().getDestinationPort().setName(channelsClonedIntoModel.get(Map.entry(taskClone.getName(), aeEvent.getEvent().getName()))); + } + aeEvent.getEvent().setName(channelsClonedIntoModel.get(Map.entry(taskClone.getName(), aeEvent.getEvent().getName()))); + if (_tmlmModel.getEventByName(aeEvent.getEvent().getName()) == null) { + _tmlmModel.addEvent(aeEvent.getEvent()); + } + } + } + } + /*for (TMLActivityElement ae : aeElemsToRemove) { + taskClone.getActivityDiagram().removeElement(ae); + }*/ + clonedTasksToRemElems.put(taskClone, aeElemsToRemove); + _tmlmModel.addTask(taskClone); + } + } catch (TMLCheckingError err) { - for (TMLChannel ch : tmlmNew.getChannels()) { - TraceManager.addDev("ch=" + ch.getName() + ", Origin Task: " + ch.getNameOfOriginTasks() + ", Destination Task: " + ch.getNameOfDestinationTasks() + ", Origin port: " + ch.getOriginPort().getName()+ ", Destination port: " + ch.getDestinationPort().getName()); - } - for (TMLEvent evt : tmlmNew.getEvents()) { - TraceManager.addDev("evt=" + evt.getName() + ", Origin Task: " + evt.getOriginTask().getName() + ", Destination Task: " + evt.getDestinationTask().getName()); - } - for (TMLTask task : tmlmNew.getTasks()) { - TraceManager.addDev("task=" + task.getName()); - for (TMLWriteChannel wr : task.getWriteChannels()) { - TraceManager.addDev("task wr=" + wr.getName() + ", ch=" + wr.getChannel(0).getName()); - } - for (TMLReadChannel rd : task.getReadChannels()) { - TraceManager.addDev("task rd=" + rd.getName() + ", ch=" + rd.getChannel(0).getName()); - } - for (TMLSendEvent sd : task.getSendEvents()) { - TraceManager.addDev("task sd=" + sd.getName() + ", evt=" + sd.getEvent().getName()); - } - for (TMLWaitEvent wt : task.getWaitEvents()) { - TraceManager.addDev("task wt=" + wt.getName() + ", evt=" + wt.getEvent().getName()); } + } + return _tmapModel; + } - for (TMLChannel wr : task.getWriteTMLChannels()) { - TraceManager.addDev("task write=" + wr.getName()); + public TMLMapping<?> removeNotUsedChannelsInClonedTask(TMLMapping<?> _tmapModel, HashMap<TMLTask, List<TMLActivityElement>> _clonedTaskToRemoveElems) { + for (TMLTask taskClone : _clonedTaskToRemoveElems.keySet()) { + TraceManager.addDev("removeNotUsed: taskClone=" + taskClone.getName()); + List<TMLActivityElement> _aeElemsToRemove = _clonedTaskToRemoveElems.get(taskClone); + for (TMLActivityElement ae : _aeElemsToRemove) { + TMLActivityElement prevElem = taskClone.getActivityDiagram().getPrevious(ae); + prevElem.setNewNext(ae, ae.getNextElement(0)); } - for (TMLChannel rd : task.getReadTMLChannels()) { - TraceManager.addDev("task read=" + rd.getName()); - } - for (TMLChannel ch : task.getChannelSet()) { - TraceManager.addDev("task ch=" + ch.getName()); - } - for (TMLEvent evt : task.getTMLEvents()) { - TraceManager.addDev("task evt=" + evt.getName()); + for (TMLActivityElement ae : _aeElemsToRemove) { + taskClone.getActivityDiagram().removeElement(ae); } } - } + return _tmapModel; + } public void renamePatternTasksName() { TMLModeling<?> tmlmModel = tmapModel.getTMLModeling(); - TMLModeling<?> tmlmPattern = tmapPattern.getTMLModeling(); + //TMLModeling<?> tmlmPattern = tmapPattern.getTMLModeling(); String[] patternTasksKeys = patternTasks.keySet().toArray(new String[patternTasks.keySet().size()]); - List<String> newTasksNames = new ArrayList<String>(); - for (int i = 0; i < patternTasks.keySet().size(); i++) { - String taskName = patternTasksKeys[i]; - if (tmlmModel.getTMLTaskByName(taskName) != null || newTasksNames.contains(taskName)) { + //List<String> newTasksNames = new ArrayList<String>(); + //for (int i = 0; i < patternTasks.keySet().size(); i++) { + for (String taskName : patternTasksKeys) { + //String taskName = patternTasksKeys[i]; + if (tmlmModel.getTMLTaskByName(taskName) != null || tasksOfPatternIntoModel.containsValue(taskName) || tasksClonedIntoModel.containsValue(taskName)) { int indexTask = 0; String taskNameWithIndex = taskName + indexTask; - while (tmlmModel.getTMLTaskByName(taskNameWithIndex) != null || newTasksNames.contains(taskNameWithIndex)) { + while (tmlmModel.getTMLTaskByName(taskNameWithIndex) != null || tasksOfPatternIntoModel.containsValue(taskNameWithIndex) || tasksClonedIntoModel.containsValue(taskNameWithIndex)) { indexTask += 1; taskNameWithIndex= taskName + indexTask; } - TMLTask taskPattern = tmlmPattern.getTMLTaskByName(taskName); + tasksOfPatternIntoModel.put(taskName, taskNameWithIndex); + /*TMLTask taskPattern = tmlmPattern.getTMLTaskByName(taskName); taskPattern.setName(taskNameWithIndex); - newTasksNames.add(taskNameWithIndex); if (patternConfiguration.getPortsConnection().containsKey(taskName)) { patternConfiguration.getPortsConnection().put(taskNameWithIndex, patternConfiguration.getPortsConnection().remove(taskName)); } @@ -263,7 +341,10 @@ public class PatternIntegration implements Runnable { } if (patternTasks.containsKey(taskName)) { patternTasks.put(taskNameWithIndex, patternTasks.remove(taskName)); - } + }*/ + + } else { + tasksOfPatternIntoModel.put(taskName, taskName); } } } @@ -271,175 +352,21 @@ public class PatternIntegration implements Runnable { public void renamePatternChannelsName() { TMLModeling<?> tmlmModel = tmapModel.getTMLModeling(); TMLModeling<?> tmlmPattern = tmapPattern.getTMLModeling(); - Map<String, String> oldNewChannelName = new HashMap<String,String>(); - Map<String, String> oldNewEventName = new HashMap<String,String>(); + //Map<String, String> oldNewChannelName = new HashMap<String,String>(); + //Map<String, String> oldNewEventName = new HashMap<String,String>(); for (String taskName : patternTasks.keySet()) { TaskPattern tp = patternTasks.get(taskName); - for (int i = 0 ; i < tp.getExternalPorts().size() ; i++) { - PortTaskJsonFile extPort = tp.getExternalPorts().get(i); - if (tmlmModel.getChannelByName(extPort.name) != null || oldNewChannelName.values().contains(extPort.name)) { - if (oldNewChannelName.containsKey(extPort.name)) { - TMLChannel channelPattern = tmlmPattern.getChannelByName(extPort.name); - channelPattern.setName(oldNewChannelName.get(extPort.name)); - if (patternConfiguration.getPortsConnection().containsKey(taskName)) { - for (String[] pc : patternConfiguration.getPortsConnection().get(taskName)) { - if (pc[0].equals(extPort.name)) { - pc[0] = oldNewChannelName.get(extPort.name); - } - } - } - - if (patternConfiguration.getChannelsMapping().containsKey(taskName)) { - for (String[] cm : patternConfiguration.getChannelsMapping().get(taskName)) { - if (cm[0].equals(extPort.name)) { - cm[0] = oldNewChannelName.get(extPort.name); - } - } - } - if (patternConfiguration.getChannelsWithSecurity().containsKey(taskName)) { - for (PortTaskJsonFile portTask : patternConfiguration.getChannelsWithSecurity().get(taskName)) { - if (portTask.getName().equals(extPort.name)) { - portTask.name = oldNewChannelName.get(extPort.name); - } - } - } - extPort.name = oldNewChannelName.get(extPort.name); - TraceManager.addDev("renamePatternChannelsName-0 : extPort.name= " + extPort.name); - } else { - boolean toRename = true; - if (patternConfiguration.getPortsConnection().containsKey(taskName)) { - for (String[] portConnection : patternConfiguration.getPortsConnection().get(taskName)) { - - TraceManager.addDev("renamePatternChannelsName-1 : extPort.name= " + extPort.name); - TraceManager.addDev("renamePatternChannelsName-1 : portConnection[0]= " + portConnection[0]); - TraceManager.addDev("renamePatternChannelsName-1 : portConnection[1]= " + portConnection[1]); - TraceManager.addDev("renamePatternChannelsName-1 : portConnection[2]= " + portConnection[2]); - if (portConnection[0].equals(extPort.getName()) && portConnection[2].equals(extPort.getName()) && portConnection.length == 3) { - if (tmlmModel.getChannelByName(extPort.name).getOriginTask().getName().equals(portConnection[1]) && extPort.mode.equals(PatternCreation.MODE_INPUT)) { - toRename = false; - break; - } - if (tmlmModel.getChannelByName(extPort.name).getDestinationTask().getName().equals(portConnection[1]) && extPort.mode.equals(PatternCreation.MODE_OUTPUT)) { - toRename = false; - break; - } - } - } - } - if (toRename) { - int indexChannel = 0; - String channelNameWithIndex = extPort.name + indexChannel; - while (tmlmModel.getChannelByName(channelNameWithIndex) != null || oldNewChannelName.values().contains(extPort.name)) { - indexChannel += 1; - channelNameWithIndex= extPort.name + indexChannel; - } - TMLChannel channelPattern = tmlmPattern.getChannelByName(extPort.name); - oldNewChannelName.put(extPort.name, channelNameWithIndex); - channelPattern.setName(channelNameWithIndex); - if (patternConfiguration.getPortsConnection().containsKey(taskName)) { - for (String[] pc : patternConfiguration.getPortsConnection().get(taskName)) { - if (pc[0].equals(extPort.name)) { - pc[0] = channelNameWithIndex; - } - } - } - - if (patternConfiguration.getChannelsMapping().containsKey(taskName)) { - for (String[] cm : patternConfiguration.getChannelsMapping().get(taskName)) { - if (cm[0].equals(extPort.name)) { - cm[0] = channelNameWithIndex; - } - } - } - if (patternConfiguration.getChannelsWithSecurity().containsKey(taskName)) { - for (PortTaskJsonFile portTask : patternConfiguration.getChannelsWithSecurity().get(taskName)) { - if (portTask.getName().equals(extPort.name)) { - portTask.name = channelNameWithIndex; - } - } - } - extPort.name = channelNameWithIndex; - TraceManager.addDev("renamePatternChannelsName-2 : extPort.name= " + extPort.name); - } - } - } else if (tmlmModel.getEventByName(extPort.name) != null || oldNewEventName.values().contains(extPort.name)) { - if (oldNewEventName.containsKey(extPort.name)) { - if (patternConfiguration.getPortsConnection().containsKey(taskName)) { - for (String[] pc : patternConfiguration.getPortsConnection().get(taskName)) { - if (pc[0].equals(extPort.name)) { - pc[0] = oldNewEventName.get(extPort.name); - } - } - } - extPort.name = oldNewEventName.get(extPort.name); - } else { - boolean toRename = true; - if (patternConfiguration.getPortsConnection().containsKey(taskName)) { - for (String[] portConnection : patternConfiguration.getPortsConnection().get(taskName)) { - if (portConnection[0].equals(extPort.getName()) && portConnection[2].equals(extPort.getName()) && portConnection.length == 3) { - if (tmlmModel.getEventByName(extPort.name).getOriginTask().getName().equals(portConnection[1]) && extPort.mode.equals(PatternCreation.MODE_INPUT)) { - toRename = false; - break; - } - if (tmlmModel.getEventByName(extPort.name).getDestinationTask().getName().equals(portConnection[1]) && extPort.mode.equals(PatternCreation.MODE_OUTPUT)) { - toRename = false; - break; - } - } - } - } - if (toRename) { - int indexEvent = 0; - String eventNameWithIndex = extPort.name + indexEvent; - while (tmlmModel.getEventByName(eventNameWithIndex) != null || oldNewEventName.values().contains(extPort.name)) { - indexEvent += 1; - eventNameWithIndex= extPort.name + indexEvent; - } - TMLEvent eventPattern = tmlmPattern.getEventByName(extPort.name); - eventPattern.setName(eventNameWithIndex); - oldNewEventName.put(extPort.name, eventNameWithIndex); - if (patternConfiguration.getPortsConnection().containsKey(taskName)) { - for (String[] pc : patternConfiguration.getPortsConnection().get(taskName)) { - if (pc[0].equals(extPort.name)) { - pc[0] = eventNameWithIndex; - } - } - } - extPort.name = eventNameWithIndex; - } - } - } - } - for (int i = 0 ; i < tp.getInternalPorts().size() ; i++) { PortTaskJsonFile extPort = tp.getInternalPorts().get(i); - if (tmlmModel.getChannelByName(extPort.name) != null) { - TraceManager.addDev("tmlmModel.getChannelByName(extPort.name) != null :" + extPort.name); - if (oldNewChannelName.containsKey(extPort.name)) { - if (patternConfiguration.getChannelsMapping().containsKey(taskName)) { - for (String[] cm : patternConfiguration.getChannelsMapping().get(taskName)) { - if (cm[0].equals(extPort.name)) { - cm[0] = oldNewChannelName.get(extPort.name); - } - } - } - if (patternConfiguration.getChannelsWithSecurity().containsKey(taskName)) { - for (PortTaskJsonFile portTask : patternConfiguration.getChannelsWithSecurity().get(taskName)) { - if (portTask.getName().equals(extPort.name)) { - portTask.name = oldNewChannelName.get(extPort.name); - } - } - } - extPort.name = oldNewChannelName.get(extPort.name); - TraceManager.addDev("oldNewChannelName.containsKey(extPort.name) :" + extPort.name); - } else { + if (extPort.getMode().equals(PatternCreation.MODE_OUTPUT)) { + if (tmlmModel.getChannelByName(extPort.getName()) != null) { int indexChannel = 0; - String channelNameWithIndex = extPort.name + indexChannel; - while (tmlmModel.getChannelByName(channelNameWithIndex) != null) { + String channelNameWithIndex = extPort.getName() + indexChannel; + while (tmlmModel.getChannelByName(channelNameWithIndex) != null || channelsOfPatternIntoModel.containsValue(channelNameWithIndex) || channelsClonedIntoModel.containsValue(channelNameWithIndex)) { indexChannel += 1; - channelNameWithIndex= extPort.name + indexChannel; + channelNameWithIndex= extPort.getName() + indexChannel; } - TMLChannel channelPattern = tmlmPattern.getChannelByName(extPort.name); + /*TMLChannel channelPattern = tmlmPattern.getChannelByName(extPort.name); oldNewChannelName.put(extPort.name, channelNameWithIndex); channelPattern.setName(channelNameWithIndex); if (patternConfiguration.getChannelsMapping().containsKey(taskName)) { @@ -456,107 +383,77 @@ public class PatternIntegration implements Runnable { } } } - extPort.name = channelNameWithIndex; - TraceManager.addDev("oldNewChannelName.containsKey(extPort.name) else :" + extPort.name); - } - - } else if (tmlmModel.getEventByName(extPort.name) != null) { - if (oldNewEventName.containsKey(extPort.name)) { - extPort.name = oldNewEventName.get(extPort.name); - TraceManager.addDev("else if oldNewEventName.containsKey(extPort.name) :" + extPort.name); - } else { + extPort.name = channelNameWithIndex;*/ + channelsOfPatternIntoModel.put(Map.entry(taskName, extPort.getName()), channelNameWithIndex); + TraceManager.addDev("oldNewChannelName.containsKey(extPort.name) else :" + extPort.getName()); + + } else if (tmlmModel.getEventByName(extPort.getName()) != null) { int indexEvent = 0; String eventNameWithIndex = extPort.name + indexEvent; - while (tmlmModel.getEventByName(eventNameWithIndex) != null) { + while (tmlmModel.getEventByName(eventNameWithIndex) != null || channelsOfPatternIntoModel.containsValue(eventNameWithIndex) || channelsClonedIntoModel.containsValue(eventNameWithIndex)) { indexEvent += 1; - eventNameWithIndex= extPort.name + indexEvent; + eventNameWithIndex= extPort.getName() + indexEvent; } - TMLEvent eventPattern = tmlmPattern.getEventByName(extPort.name); + /*TMLEvent eventPattern = tmlmPattern.getEventByName(extPort.name); oldNewEventName.put(extPort.name, eventNameWithIndex); eventPattern.setName(eventNameWithIndex); - extPort.name = eventNameWithIndex; + extPort.name = eventNameWithIndex;*/ + channelsOfPatternIntoModel.put(Map.entry(taskName, extPort.getName()), eventNameWithIndex); TraceManager.addDev("else if oldNewEventName.containsKey(extPort.name) else :" + extPort.name); + } else if (channelsOfPatternIntoModel.containsValue(extPort.getName()) || channelsClonedIntoModel.containsValue(extPort.getName())) { + int index = 0; + String nameWithIndex = extPort.getName() + index; + while (channelsOfPatternIntoModel.containsValue(nameWithIndex) || channelsClonedIntoModel.containsValue(nameWithIndex)) { + index += 1; + nameWithIndex= extPort.getName() + index; + } + channelsOfPatternIntoModel.put(Map.entry(taskName, extPort.getName()), nameWithIndex); + } else { + channelsOfPatternIntoModel.put(Map.entry(taskName, extPort.getName()), extPort.getName()); } } } } - } - - public TMLMapping<?> addPatternTasksInModel(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, LinkedHashMap<String, TaskPattern> _patternTasks) { - TMLModeling<?> _tmlmModel = _tmapModel.getTMLModeling(); - TMLModeling<?> _tmlmPattern = _tmapPattern.getTMLModeling(); - for (String taskName : _patternTasks.keySet()) { - - TMLTask taskPattern = _tmlmPattern.getTMLTaskByName(taskName); - if (taskPattern != null) { - /*int indexTask = 0; - String taskNameWithIndex = taskName + indexTask; - while (_tmlmModel.getTMLTaskByName(taskNameWithIndex) != null) { - indexTask += 1; - taskNameWithIndex= taskName + indexTask; - } - taskPattern.setName(taskNameWithIndex);*/ - if (_tmlmModel.getTMLTaskByName(taskName) == null) { - _tmlmModel.addTask(taskPattern); - TraceManager.addDev("addPatternTasksInModel: taskName="+taskName); - } - } - } - return _tmapModel; - } - - public TMLMapping<?> addPatternInternalChannelsInModel(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, LinkedHashMap<String, TaskPattern> _patternTasks) { - TMLModeling<?> _tmlmModel = _tmapModel.getTMLModeling(); - TMLModeling<?> _tmlmPattern = _tmapPattern.getTMLModeling(); - for (String taskName : _patternTasks.keySet()) { - for (PortTaskJsonFile portTask : _patternTasks.get(taskName).internalPorts) { - TMLChannel channelPattern = _tmlmPattern.getChannelByName(portTask.name); - TMLEvent eventPattern = _tmlmPattern.getEventByName(portTask.name); - if (channelPattern != null) { - /*if (_tmlmModel.getChannelByName(portTask.name) != null) { - int indexChannel = 0; - String channelNameWithIndex = portTask.name + indexChannel; - while (_tmlmModel.getChannelByName(channelNameWithIndex) != null) { - indexChannel += 1; - channelNameWithIndex = portTask.name + indexChannel; - } - }*/ - if (_tmlmModel.getChannelByName(portTask.name) == null) { - _tmlmModel.addChannel(channelPattern); - channelsFromPatternToMap.add(channelPattern); - TraceManager.addDev("addPatternInternalChannelsInModel: channelName="+portTask.name); + for (PatternConnection patternConnection : patternConfiguration.getPortsConnection()) { + if (patternConnection.isANewChannelRequired(patternConfiguration.getPortsConnection(), patternTasks, patternConfiguration.getClonedTasks())) { + if (tmlmModel.getChannelByName(patternConnection.getPatternChannel()) != null) { + int indexChannel = 0; + String channelNameWithIndex = patternConnection.getPatternChannel() + indexChannel; + while (tmlmModel.getChannelByName(channelNameWithIndex) != null || channelsOfPatternIntoModel.containsValue(channelNameWithIndex) || channelsClonedIntoModel.containsValue(channelNameWithIndex)) { + indexChannel += 1; + channelNameWithIndex= patternConnection.getPatternChannel() + indexChannel; + } + channelsOfPatternIntoModel.put(Map.entry(patternConnection.getPatternTaskName(), patternConnection.getPatternChannel()), channelNameWithIndex); + + } else if (tmlmModel.getEventByName(patternConnection.getPatternChannel()) != null) { + int indexEvent = 0; + String eventNameWithIndex = patternConnection.getPatternChannel() + indexEvent; + while (tmlmModel.getEventByName(eventNameWithIndex) != null || channelsOfPatternIntoModel.containsValue(eventNameWithIndex) || channelsClonedIntoModel.containsValue(eventNameWithIndex)) { + indexEvent += 1; + eventNameWithIndex= patternConnection.getPatternChannel() + indexEvent; } - } else if (eventPattern != null) { - if (_tmlmModel.getEventByName(portTask.name) == null) { - _tmlmModel.addEvent(eventPattern); - TraceManager.addDev("addPatternInternalChannelsInModel: eventName="+portTask.name); + channelsOfPatternIntoModel.put(Map.entry(patternConnection.getPatternTaskName(), patternConnection.getPatternChannel()), eventNameWithIndex); + } else if (channelsOfPatternIntoModel.containsValue(patternConnection.getPatternChannel()) || channelsClonedIntoModel.containsValue(patternConnection.getPatternChannel())) { + int index = 0; + String nameWithIndex = patternConnection.getPatternChannel() + index; + while (channelsOfPatternIntoModel.containsValue(nameWithIndex) || channelsClonedIntoModel.containsValue(nameWithIndex)) { + index += 1; + nameWithIndex= patternConnection.getPatternChannel() + index; } + channelsOfPatternIntoModel.put(Map.entry(patternConnection.getPatternTaskName(), patternConnection.getPatternChannel()), nameWithIndex); + } else { + channelsOfPatternIntoModel.put(Map.entry(patternConnection.getPatternTaskName(), patternConnection.getPatternChannel()), patternConnection.getPatternChannel()); } } } - return _tmapModel; } - /*public TMLMapping<?> updatePatternTasksAttributes(TMLMapping<?> _tmapPattern, LinkedHashMap<String, TaskPattern> _patternTasks) { - TMLModeling<?> _tmlmPattern = _tmapPattern.getTMLModeling(); - for (String taskName : _patternTasks.keySet()) { - TMLTask taskPattern = _tmlmPattern.getTMLTaskByName(taskName); - if (taskPattern != null) { - for (int i=0; i < _patternTasks.get(taskName).getAttributes().size(); i++) { - TMLAttribute attribTaskPattern = taskPattern.getAttributeByName(_patternTasks.get(taskName).getAttributes().get(i).getName()); - attribTaskPattern.initialValue = _patternTasks.get(taskName).getAttributes().get(i).getValue(); - } - } - } - return _tmapPattern; - }*/ - public TMLMapping<?> updatePatternTasksAttributes(TMLMapping<?> _tmapPattern, LinkedHashMap<String, List<AttributeTaskJsonFile>> _updatedPatternAttributes) { TMLModeling<?> _tmlmPattern = _tmapPattern.getTMLModeling(); for (String taskName : _updatedPatternAttributes.keySet()) { TMLTask taskPattern = _tmlmPattern.getTMLTaskByName(taskName); if (taskPattern != null) { - for (int i=0; i < _updatedPatternAttributes.get(taskName).size(); i++) { + for (int i = 0; i < _updatedPatternAttributes.get(taskName).size(); i++) { TMLAttribute attribTaskPattern = taskPattern.getAttributeByName(_updatedPatternAttributes.get(taskName).get(i).getName()); attribTaskPattern.initialValue = _updatedPatternAttributes.get(taskName).get(i).getValue(); } @@ -565,183 +462,134 @@ public class PatternIntegration implements Runnable { return _tmapPattern; } + public TMLMapping<?> addPatternTasksInModel(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, LinkedHashMap<String, TaskPattern> _patternTasks) { + TMLModeling<?> _tmlmModel = _tmapModel.getTMLModeling(); + TMLModeling<?> _tmlmPattern = _tmapPattern.getTMLModeling(); + try { + TMLModeling<?> _tmlmPatternClone = _tmlmPattern.deepClone(); + for (String taskName : _patternTasks.keySet()) { + TMLTask taskPattern = _tmlmPatternClone.getTMLTaskByName(taskName); + if (taskPattern != null) { + if (_tmlmModel.getTMLTaskByName(tasksOfPatternIntoModel.get(taskName)) == null) { + taskPattern.setName(tasksOfPatternIntoModel.get(taskName)); + _tmlmModel.addTask(taskPattern); + TraceManager.addDev("addPatternTasksInModel: taskName=" + tasksOfPatternIntoModel.get(taskName)); + } + } + } + } catch (TMLCheckingError err) { - public TMLMapping<?> addClonedTask(TMLMapping<?> _tmapModel, PatternConfiguration _patternConfiguration) { + } + return _tmapModel; + } + + public TMLMapping<?> addPatternInternalChannelsInModel(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, LinkedHashMap<String, TaskPattern> _patternTasks) { TMLModeling<?> _tmlmModel = _tmapModel.getTMLModeling(); - for (String clonedTask : _patternConfiguration.getClonedTasks().keySet()) { - try { - TMLModeling<?> _tmlmModelClone = _tmlmModel.deepClone(); - TMLTask taskClone = _tmlmModelClone.getTMLTaskByName(_patternConfiguration.getClonedTasks().get(clonedTask)); - - if (taskClone != null) { - taskClone.setName(clonedTask); - /*if (_tmlmModel.getTMLTaskByName(taskClone.getName()) != null) { - int indexTask = 0; - String taskNameWithIndex = taskClone.getName() + indexTask; - while (_tmlmModel.getTMLTaskByName(taskNameWithIndex) != null) { - indexTask += 1; - taskNameWithIndex= taskClone.getName() + indexTask; - } - taskClone.setName(taskNameWithIndex); - _patternConfiguration.getClonedTasks().put(taskNameWithIndex, _patternConfiguration.getClonedTasks().remove(clonedTask)); - _patternConfiguration.getTasksMapping().put(taskNameWithIndex, _patternConfiguration.getTasksMapping().remove(clonedTask)); - for (String taskPattern : _patternConfiguration.getPortsConnection().keySet()) { - for (String[] st : _patternConfiguration.getPortsConnection().get(taskPattern)) { - if (st[1].equals(clonedTask)) { - st[1] = taskNameWithIndex; - } - } - } - for (String taskPattern : _patternConfiguration.getChannelsMapping().keySet()) { - for (String[] st : _patternConfiguration.getPortsConnection().get(taskPattern)) { - if (st[1].equals(clonedTask)) { - st[1] = taskNameWithIndex; - } - } - } - _patternConfiguration.getChannelsMapping().put(taskNameWithIndex, _patternConfiguration.getTasksMapping().remove(clonedTask)); - _patternConfiguration.getPortsConnection().put(taskNameWithIndex, _patternConfiguration.getTasksMapping().remove(clonedTask)); - }*/ - //List<String> usedChannelsOfClonedTask = new ArrayList<String>(); - Map<String, String> oldNewChannelsClonedTaskName = new HashMap<String, String>(); - Map<String, String> oldNewEventsClonedTaskName = new HashMap<String, String>(); - List<TMLActivityElement> aeElemsToRemove = new ArrayList<TMLActivityElement>(); - for (String taskPattern : _patternConfiguration.getPortsConnection().keySet()) { - for (String[] st : _patternConfiguration.getPortsConnection().get(taskPattern)) { - if (st[1].equals(clonedTask) && st.length == 3) { - if (_tmlmModel.getChannelByName(st[2]) != null) { - int indexChannel = 0; - String channelNameWithIndex = st[2] + indexChannel; - while (_tmlmModel.getChannelByName(channelNameWithIndex) != null) { - indexChannel += 1; - channelNameWithIndex = st[2] + indexChannel; - } - oldNewChannelsClonedTaskName.put(st[2], channelNameWithIndex); - TraceManager.addDev("Channel : old =" + st[2] + " New=" + channelNameWithIndex); - st[2] = channelNameWithIndex; - } else if (_tmlmModel.getEventByName(st[2]) != null) { - int indexEvent = 0; - String eventNameWithIndex = st[2] + indexEvent; - while (_tmlmModel.getEventByName(eventNameWithIndex) != null) { - indexEvent += 1; - eventNameWithIndex = st[2] + indexEvent; + TMLModeling<?> _tmlmPattern = _tmapPattern.getTMLModeling(); + try { + TMLModeling<?> _tmlmPatternClone = _tmlmPattern.deepClone(); + for (String taskName : _patternTasks.keySet()) { + for (PortTaskJsonFile portTask : _patternTasks.get(taskName).internalPorts) { + TMLChannel channelPattern = _tmlmPatternClone.getChannelByName(portTask.getName()); + TMLEvent eventPattern = _tmlmPatternClone.getEventByName(portTask.getName()); + if (portTask.getMode().equals(PatternCreation.MODE_OUTPUT)) { + if (channelPattern != null) { + if (_tmlmModel.getChannelByName(channelsOfPatternIntoModel.get(Map.entry(taskName, portTask.getName()))) == null) { + channelPattern.setName(channelsOfPatternIntoModel.get(Map.entry(taskName, portTask.getName()))); + channelPattern.setTasks(_tmlmModel.getTMLTaskByName(tasksOfPatternIntoModel.get(channelPattern.getOriginTask().getName())), _tmlmModel.getTMLTaskByName(tasksOfPatternIntoModel.get(channelPattern.getDestinationTask().getName()))); + channelPattern.setPorts(new TMLPort(channelPattern.getName(), channelPattern.getReferenceObject()), new TMLPort(channelPattern.getName(), channelPattern.getReferenceObject())); + _tmlmModel.addChannel(channelPattern); + for (TMLActivityElement elem : channelPattern.getDestinationTask().getActivityDiagram().getElements()) { + if (elem instanceof TMLActivityElementChannel) { + TMLActivityElementChannel acElemChannel = (TMLActivityElementChannel) elem; + for (int indexChannel = 0 ; indexChannel < acElemChannel.getNbOfChannels() ; indexChannel++) { + if (acElemChannel.getChannel(indexChannel).getName().equals(portTask.getName())) { + acElemChannel.replaceChannelWith(acElemChannel.getChannel(indexChannel), channelPattern); + } + } } - oldNewEventsClonedTaskName.put(st[2], eventNameWithIndex); - st[2] = eventNameWithIndex; } - } - } - } - for (String taskOfChannelToMap : _patternConfiguration.getChannelsMapping().keySet()) { - for (String[] st : _patternConfiguration.getChannelsMapping().get(taskOfChannelToMap)) { - if (taskOfChannelToMap.equals(clonedTask)) { - if (oldNewChannelsClonedTaskName.keySet().contains(st[1])) { - st[1] = oldNewChannelsClonedTaskName.get(st[1]); - } else if (oldNewEventsClonedTaskName.keySet().contains(st[1])) { - st[1] = oldNewEventsClonedTaskName.get(st[1]); - } - } - if (st.length == 4) { - if (st[2].equals(clonedTask)) { - if (oldNewChannelsClonedTaskName.keySet().contains(st[3])) { - st[3] = oldNewChannelsClonedTaskName.get(st[3]); - } else if (oldNewEventsClonedTaskName.keySet().contains(st[3])) { - st[3] = oldNewEventsClonedTaskName.get(st[3]); + for (TMLActivityElement elem : channelPattern.getOriginTask().getActivityDiagram().getElements()) { + if (elem instanceof TMLActivityElementChannel) { + TMLActivityElementChannel acElemChannel = (TMLActivityElementChannel) elem; + for (int indexChannel = 0 ; indexChannel < acElemChannel.getNbOfChannels() ; indexChannel++) { + if (acElemChannel.getChannel(indexChannel).getName().equals(portTask.getName())) { + acElemChannel.replaceChannelWith(acElemChannel.getChannel(indexChannel), channelPattern); + } + } } } + //channelsFromPatternToMap.add(channelPattern); } - } - } - for (TMLActivityElement ae : taskClone.getActivityDiagram().getElements()) { - if (ae instanceof TMLActivityElementChannel) { - TMLActivityElementChannel aeChannel = (TMLActivityElementChannel) ae; - for (int i=0; i < aeChannel.getNbOfChannels(); i++) { - if (!oldNewChannelsClonedTaskName.keySet().contains(aeChannel.getChannel(i).getName())) { - TMLActivityElement prevElem = taskClone.getActivityDiagram().getPrevious(ae); - prevElem.setNewNext(ae, ae.getNextElement(0)); - aeElemsToRemove.add(ae); - } else { - - for (TMLPort port : aeChannel.getChannel(i).getOriginPorts()) { - port.setName(oldNewChannelsClonedTaskName.get(aeChannel.getChannel(i).getName())); - } - for (TMLPort port : aeChannel.getChannel(i).getDestinationPorts()) { - port.setName(oldNewChannelsClonedTaskName.get(aeChannel.getChannel(i).getName())); - } - if (aeChannel.getChannel(i).getOriginPort() != null) { - aeChannel.getChannel(i).getOriginPort().setName(oldNewChannelsClonedTaskName.get(aeChannel.getChannel(i).getName())); - TraceManager.addDev("Port Origin New Name = " + aeChannel.getChannel(i).getOriginPort().getName()); - } - if (aeChannel.getChannel(i).getDestinationPort() != null) { - aeChannel.getChannel(i).getDestinationPort().setName(oldNewChannelsClonedTaskName.get(aeChannel.getChannel(i).getName())); - } - TraceManager.addDev("Name Channel Clone Before =" + aeChannel.getChannel(i).getName()); - aeChannel.getChannel(i).setName(oldNewChannelsClonedTaskName.get(aeChannel.getChannel(i).getName())); - TraceManager.addDev("Name Channel Clone After =" + aeChannel.getChannel(i).getName()); - if (_tmlmModel.getChannelByName(aeChannel.getChannel(i).getName()) == null) { - _tmlmModel.addChannel(aeChannel.getChannel(i)); - channelsFromClonedToMap.add(aeChannel.getChannel(i)); + } else if (eventPattern != null) { + if (_tmlmModel.getEventByName(channelsOfPatternIntoModel.get(Map.entry(taskName, portTask.getName()))) == null) { + eventPattern.setName(channelsOfPatternIntoModel.get(Map.entry(taskName, portTask.getName()))); + eventPattern.setTasks(_tmlmModel.getTMLTaskByName(tasksOfPatternIntoModel.get(eventPattern.getOriginTask().getName())), _tmlmModel.getTMLTaskByName(tasksOfPatternIntoModel.get(eventPattern.getDestinationTask().getName()))); + eventPattern.setPorts(new TMLPort(eventPattern.getName(), eventPattern.getReferenceObject()), new TMLPort(eventPattern.getName(), eventPattern.getReferenceObject())); + _tmlmModel.addEvent(eventPattern); + for (TMLActivityElement elem : eventPattern.getDestinationTask().getActivityDiagram().getElements()) { + if (elem instanceof TMLActivityElementEvent) { + TMLActivityElementEvent acElemEvent = (TMLActivityElementEvent) elem; + if (acElemEvent.getEvent().getName().equals(portTask.getName())) { + acElemEvent.replaceEventWith(acElemEvent.getEvent(), eventPattern); + } } } - } - } else if (ae instanceof TMLActivityElementEvent) { - TMLActivityElementEvent aeEvent = (TMLActivityElementEvent) ae; - if (!oldNewEventsClonedTaskName.keySet().contains(aeEvent.getEvent().getName())) { - TMLActivityElement prevElem = taskClone.getActivityDiagram().getPrevious(ae); - prevElem.setNewNext(ae, ae.getNextElement(0)); - aeElemsToRemove.add(ae); - } else { - - for (TMLPort port : aeEvent.getEvent().getOriginPorts()) { - port.setName(oldNewEventsClonedTaskName.get(aeEvent.getEvent().getName())); - } - for (TMLPort port : aeEvent.getEvent().getDestinationPorts()) { - port.setName(oldNewEventsClonedTaskName.get(aeEvent.getEvent().getName())); - } - if (aeEvent.getEvent().getOriginPort() != null) { - aeEvent.getEvent().getOriginPort().setName(oldNewEventsClonedTaskName.get(aeEvent.getEvent().getName())); - } - if (aeEvent.getEvent().getDestinationPort() != null) { - aeEvent.getEvent().getDestinationPort().setName(oldNewEventsClonedTaskName.get(aeEvent.getEvent().getName())); - } - aeEvent.getEvent().setName(oldNewEventsClonedTaskName.get(aeEvent.getEvent().getName())); - if (_tmlmModel.getEventByName(aeEvent.getEvent().getName()) == null) { - _tmlmModel.addEvent(aeEvent.getEvent()); + for (TMLActivityElement elem : eventPattern.getOriginTask().getActivityDiagram().getElements()) { + if (elem instanceof TMLActivityElementEvent) { + TMLActivityElementEvent acElemEvent = (TMLActivityElementEvent) elem; + if (acElemEvent.getEvent().getName().equals(portTask.getName())) { + acElemEvent.replaceEventWith(acElemEvent.getEvent(), eventPattern); + } + } } } } } - for (TMLActivityElement ae : aeElemsToRemove) { - taskClone.getActivityDiagram().removeElement(ae); - } - _tmlmModel.addTask(taskClone); - } - } catch (TMLCheckingError err) { - + } } + } catch (TMLCheckingError err) { + } return _tmapModel; } + /*public TMLMapping<?> updatePatternTasksAttributes(TMLMapping<?> _tmapPattern, LinkedHashMap<String, TaskPattern> _patternTasks) { + TMLModeling<?> _tmlmPattern = _tmapPattern.getTMLModeling(); + for (String taskName : _patternTasks.keySet()) { + TMLTask taskPattern = _tmlmPattern.getTMLTaskByName(taskName); + if (taskPattern != null) { + for (int i=0; i < _patternTasks.get(taskName).getAttributes().size(); i++) { + TMLAttribute attribTaskPattern = taskPattern.getAttributeByName(_patternTasks.get(taskName).getAttributes().get(i).getName()); + attribTaskPattern.initialValue = _patternTasks.get(taskName).getAttributes().get(i).getValue(); + } + } + } + return _tmapPattern; + }*/ + + public TMLMapping<?> addNewPortToATask(TMLMapping<?> _tmapModel, LinkedHashMap<String, TaskPattern> _patternTasks, TMLTask _taskToAddPort, String _patternTaskName, String _portPatternName, String _portTolink) { TMLModeling<?> _tmlmModel = _tmapModel.getTMLModeling(); TaskPattern tp = _patternTasks.get(_patternTaskName); TMLActivity adTaskToAddPort = _taskToAddPort.getActivityDiagram(); List<TMLActivityElement> actElemsToAdd = new ArrayList<TMLActivityElement>(); + TMLChannel channelInModel = _tmlmModel.getChannelByName(channelsOfPatternIntoModel.get(Map.entry(_patternTaskName, _portPatternName))); + TMLEvent eventInModel = _tmlmModel.getEventByName(channelsOfPatternIntoModel.get(Map.entry(_patternTaskName, _portPatternName))); for (PortTaskJsonFile pTaskJson : tp.externalPorts) { if (pTaskJson.name.equals(_portPatternName)) { if (pTaskJson.getMode().equals(PatternCreation.MODE_INPUT)) { if (pTaskJson.getType().equals(PatternCreation.CHANNEL)) { - _taskToAddPort.addWriteTMLChannel(_tmlmModel.getChannelByName(_portPatternName)); + _taskToAddPort.addWriteTMLChannel(channelInModel); for (TMLActivityElement acElem : adTaskToAddPort.getElements()) { if (acElem instanceof TMLActivityElementChannel) { TMLActivityElementChannel acElemChannel = (TMLActivityElementChannel) acElem; for (int indexChannel = 0 ; indexChannel < acElemChannel.getNbOfChannels() ; indexChannel++) { if (acElemChannel.getChannel(indexChannel).getName().equals(_portTolink)) { TMLActivityElement prevElem = adTaskToAddPort.getPrevious(acElem); - TMLWriteChannel wrChannel = new TMLWriteChannel(_tmlmModel.getChannelByName(_portPatternName).getName(), adTaskToAddPort.getReferenceObject()); + TMLWriteChannel wrChannel = new TMLWriteChannel(channelInModel.getName(), adTaskToAddPort.getReferenceObject()); wrChannel.setNbOfSamples("1"); /// TO UPDATE - wrChannel.addChannel(_tmlmModel.getChannelByName(_portPatternName)); + wrChannel.addChannel(channelInModel); wrChannel.addNext(acElem); prevElem.setNewNext(acElem, wrChannel); //adTaskToAddPort.addElement(wrChannel); @@ -752,9 +600,9 @@ public class PatternIntegration implements Runnable { TMLActivityElementEvent acElemEvent = (TMLActivityElementEvent) acElem; if (acElemEvent.getEvent().getName().equals(_portTolink)) { TMLActivityElement prevElem = adTaskToAddPort.getPrevious(acElem); - TMLWriteChannel wrChannel = new TMLWriteChannel(_tmlmModel.getChannelByName(_portPatternName).getName(), adTaskToAddPort.getReferenceObject()); + TMLWriteChannel wrChannel = new TMLWriteChannel(channelInModel.getName(), adTaskToAddPort.getReferenceObject()); wrChannel.setNbOfSamples("1"); /// TO UPDATE - wrChannel.addChannel(_tmlmModel.getChannelByName(_portPatternName)); + wrChannel.addChannel(channelInModel); wrChannel.addNext(acElem); prevElem.setNewNext(acElem, wrChannel); //adTaskToAddPort.addElement(wrChannel); @@ -763,24 +611,24 @@ public class PatternIntegration implements Runnable { } } } else if (pTaskJson.getType().equals(PatternCreation.EVENT)) { - _taskToAddPort.addTMLEvent(_tmlmModel.getEventByName(_portPatternName)); - _tmlmModel.getEventByName(_portPatternName).setOriginTask(_taskToAddPort); + _taskToAddPort.addTMLEvent(eventInModel); + eventInModel.setOriginTask(_taskToAddPort); for (TMLActivityElement acElem : adTaskToAddPort.getElements()) { if (acElem instanceof TMLActivityElementEvent) { TMLActivityElementEvent acElemEvent = (TMLActivityElementEvent) acElem; if (acElemEvent.getEvent().getName().equals(_portTolink)) { TMLActivityElement prevElem = adTaskToAddPort.getPrevious(acElem); - TMLSendEvent sdEvent = new TMLSendEvent(_tmlmModel.getEventByName(_portPatternName).getName(), adTaskToAddPort.getReferenceObject()); - sdEvent.setEvent(_tmlmModel.getEventByName(_portPatternName)); - for (TMLWaitEvent we : _tmlmModel.getEventByName(_portPatternName).getDestinationTask().getWaitEvents()) { - if (we.getEvent().getName().equals(_tmlmModel.getEventByName(_portPatternName).getName())) { + TMLSendEvent sdEvent = new TMLSendEvent(eventInModel.getName(), adTaskToAddPort.getReferenceObject()); + sdEvent.setEvent(eventInModel); + for (TMLWaitEvent we : eventInModel.getDestinationTask().getWaitEvents()) { + if (we.getEvent().getName().equals(eventInModel.getName())) { for (String param : we.getVectorAllParams()) { if (param.matches("-?\\d+") || param.matches("(?i)^(true|false)")) { sdEvent.addParam(param); } else { sdEvent.addParam(param); if (_taskToAddPort.getAttributeByName(param) == null) { - _taskToAddPort.addAttribute(_tmlmModel.getEventByName(_portPatternName).getDestinationTask().getAttributeByName(param).deepClone(_tmlmModel)); + _taskToAddPort.addAttribute(eventInModel.getDestinationTask().getAttributeByName(param).deepClone(_tmlmModel)); } } @@ -797,23 +645,22 @@ public class PatternIntegration implements Runnable { for (int indexChannel = 0 ; indexChannel < acElemChannel.getNbOfChannels() ; indexChannel++) { if (acElemChannel.getChannel(indexChannel).getName().equals(_portTolink)) { TMLActivityElement prevElem = adTaskToAddPort.getPrevious(acElem); - TMLSendEvent sdEvent = new TMLSendEvent(_tmlmModel.getEventByName(_portPatternName).getName(), adTaskToAddPort.getReferenceObject()); - sdEvent.setEvent(_tmlmModel.getEventByName(_portPatternName)); - for (TMLWaitEvent we : _tmlmModel.getEventByName(_portPatternName).getDestinationTask().getWaitEvents()) { - if (we.getEvent().getName().equals(_tmlmModel.getEventByName(_portPatternName).getName())) { + TMLSendEvent sdEvent = new TMLSendEvent(eventInModel.getName(), adTaskToAddPort.getReferenceObject()); + sdEvent.setEvent(eventInModel); + for (TMLWaitEvent we : eventInModel.getDestinationTask().getWaitEvents()) { + if (we.getEvent().getName().equals(eventInModel.getName())) { for (String param : we.getVectorAllParams()) { if (param.matches("-?\\d+") || param.matches("(?i)^(true|false)")) { sdEvent.addParam(param); } else { sdEvent.addParam(param); if (_taskToAddPort.getAttributeByName(param) == null) { - _taskToAddPort.addAttribute(_tmlmModel.getEventByName(_portPatternName).getDestinationTask().getAttributeByName(param).deepClone(_tmlmModel)); + _taskToAddPort.addAttribute(eventInModel.getDestinationTask().getAttributeByName(param).deepClone(_tmlmModel)); } } } } - } sdEvent.addNext(acElem); prevElem.setNewNext(acElem, sdEvent); @@ -826,16 +673,16 @@ public class PatternIntegration implements Runnable { } } else if (pTaskJson.getMode().equals(PatternCreation.MODE_OUTPUT)) { if (pTaskJson.getType().equals(PatternCreation.CHANNEL)) { - _taskToAddPort.addReadTMLChannel(_tmlmModel.getChannelByName(_portPatternName)); + _taskToAddPort.addReadTMLChannel(channelInModel); for (TMLActivityElement acElem : adTaskToAddPort.getElements()) { if (acElem instanceof TMLActivityElementChannel) { TMLActivityElementChannel acElemChannel = (TMLActivityElementChannel) acElem; for (int indexChannel = 0 ; indexChannel < acElemChannel.getNbOfChannels() ; indexChannel++) { if (acElemChannel.getChannel(indexChannel).getName().equals(_portTolink)) { TMLActivityElement prevElem = adTaskToAddPort.getPrevious(acElem); - TMLReadChannel rdChannel = new TMLReadChannel(_tmlmModel.getChannelByName(_portPatternName).getName(), adTaskToAddPort.getReferenceObject()); + TMLReadChannel rdChannel = new TMLReadChannel(channelInModel.getName(), adTaskToAddPort.getReferenceObject()); rdChannel.setNbOfSamples("1"); /// TO UPDATE - rdChannel.addChannel(_tmlmModel.getChannelByName(_portPatternName)); + rdChannel.addChannel(channelInModel); rdChannel.addNext(acElem); prevElem.setNewNext(acElem, rdChannel); //adTaskToAddPort.addElement(rdChannel); @@ -846,9 +693,9 @@ public class PatternIntegration implements Runnable { TMLActivityElementEvent acElemEvent = (TMLActivityElementEvent) acElem; if (acElemEvent.getEvent().getName().equals(_portTolink)) { TMLActivityElement prevElem = adTaskToAddPort.getPrevious(acElem); - TMLReadChannel rdChannel = new TMLReadChannel(_tmlmModel.getChannelByName(_portPatternName).getName(), adTaskToAddPort.getReferenceObject()); + TMLReadChannel rdChannel = new TMLReadChannel(channelInModel.getName(), adTaskToAddPort.getReferenceObject()); rdChannel.setNbOfSamples("1"); /// TO UPDATE - rdChannel.addChannel(_tmlmModel.getChannelByName(_portPatternName)); + rdChannel.addChannel(channelInModel); rdChannel.addNext(acElem); prevElem.setNewNext(acElem, rdChannel); //adTaskToAddPort.addElement(rdChannel); @@ -857,30 +704,30 @@ public class PatternIntegration implements Runnable { } } } else if (pTaskJson.getType().equals(PatternCreation.EVENT)) { - _taskToAddPort.addTMLEvent(_tmlmModel.getEventByName(_portPatternName)); - _tmlmModel.getEventByName(_portPatternName).setDestinationTask(_taskToAddPort); + _taskToAddPort.addTMLEvent(eventInModel); + eventInModel.setDestinationTask(_taskToAddPort); for (TMLActivityElement acElem : adTaskToAddPort.getElements()) { if (acElem instanceof TMLActivityElementEvent) { TMLActivityElementEvent acElemEvent = (TMLActivityElementEvent) acElem; if (acElemEvent.getEvent().getName().equals(_portTolink)) { TMLActivityElement prevElem = adTaskToAddPort.getPrevious(acElem); - TMLWaitEvent wtEvent = new TMLWaitEvent(_tmlmModel.getEventByName(_portPatternName).getName(), adTaskToAddPort.getReferenceObject()); - wtEvent.setEvent(_tmlmModel.getEventByName(_portPatternName)); - for (TMLSendEvent sd : _tmlmModel.getEventByName(_portPatternName).getOriginTask().getSendEvents()) { - if (sd.getEvent().getName().equals(_tmlmModel.getEventByName(_portPatternName).getName())) { + TMLWaitEvent wtEvent = new TMLWaitEvent(eventInModel.getName(), adTaskToAddPort.getReferenceObject()); + wtEvent.setEvent(eventInModel); + for (TMLSendEvent sd : eventInModel.getOriginTask().getSendEvents()) { + if (sd.getEvent().getName().equals(eventInModel.getName())) { for (int indexParam=0; indexParam < sd.getNbOfParams(); indexParam++) { String param = sd.getParam(indexParam); if (param.matches("-?\\d+") || param.matches("(?i)^(true|false)")) { - String paramName = _tmlmModel.getEventByName(_portPatternName).getName()+indexParam; + String paramName = eventInModel.getName()+indexParam; if (_taskToAddPort.getAttributeByName(paramName) == null) { - TMLAttribute attribParam = new TMLAttribute(paramName, _tmlmModel.getEventByName(_portPatternName).getParams().get(indexParam).deepClone(_tmlmModel), ""); + TMLAttribute attribParam = new TMLAttribute(paramName, eventInModel.getParams().get(indexParam).deepClone(_tmlmModel), ""); _taskToAddPort.addAttribute(attribParam); } wtEvent.addParam(paramName); } else { wtEvent.addParam(param); if (_taskToAddPort.getAttributeByName(param) == null) { - _taskToAddPort.addAttribute(_tmlmModel.getEventByName(_portPatternName).getOriginTask().getAttributeByName(param).deepClone(_tmlmModel)); + _taskToAddPort.addAttribute(eventInModel.getOriginTask().getAttributeByName(param).deepClone(_tmlmModel)); } } } @@ -896,23 +743,23 @@ public class PatternIntegration implements Runnable { for (int indexChannel = 0 ; indexChannel < acElemChannel.getNbOfChannels() ; indexChannel++) { if (acElemChannel.getChannel(indexChannel).getName().equals(_portTolink)) { TMLActivityElement prevElem = adTaskToAddPort.getPrevious(acElem); - TMLWaitEvent wtEvent = new TMLWaitEvent(_tmlmModel.getEventByName(_portPatternName).getName(), adTaskToAddPort.getReferenceObject()); - wtEvent.setEvent(_tmlmModel.getEventByName(_portPatternName)); - for (TMLSendEvent sd : _tmlmModel.getEventByName(_portPatternName).getOriginTask().getSendEvents()) { - if (sd.getEvent().getName().equals(_tmlmModel.getEventByName(_portPatternName).getName())) { + TMLWaitEvent wtEvent = new TMLWaitEvent(eventInModel.getName(), adTaskToAddPort.getReferenceObject()); + wtEvent.setEvent(eventInModel); + for (TMLSendEvent sd : eventInModel.getOriginTask().getSendEvents()) { + if (sd.getEvent().getName().equals(eventInModel.getName())) { for (int indexParam=0; indexParam < sd.getNbOfParams(); indexParam++) { String param = sd.getParam(indexParam); if (param.matches("-?\\d+") || param.matches("(?i)^(true|false)")) { - String paramName = _tmlmModel.getEventByName(_portPatternName).getName()+indexParam; + String paramName = eventInModel.getName()+indexParam; if (_taskToAddPort.getAttributeByName(paramName) == null) { - TMLAttribute attribParam = new TMLAttribute(paramName, _tmlmModel.getEventByName(_portPatternName).getParams().get(indexParam).deepClone(_tmlmModel), ""); + TMLAttribute attribParam = new TMLAttribute(paramName, eventInModel.getParams().get(indexParam).deepClone(_tmlmModel), ""); _taskToAddPort.addAttribute(attribParam); } wtEvent.addParam(paramName); } else { wtEvent.addParam(param); if (_taskToAddPort.getAttributeByName(param) == null) { - _taskToAddPort.addAttribute(_tmlmModel.getEventByName(_portPatternName).getOriginTask().getAttributeByName(param).deepClone(_tmlmModel)); + _taskToAddPort.addAttribute(eventInModel.getOriginTask().getAttributeByName(param).deepClone(_tmlmModel)); } } } @@ -937,7 +784,7 @@ public class PatternIntegration implements Runnable { return _tmapModel; } - public TMLMapping<?> addNewPortToTasks(TMLMapping<?> _tmapModel, LinkedHashMap<String,List<String[]>> _portsConnection, LinkedHashMap<String, TaskPattern> _patternTasks) { + /*public TMLMapping<?> addNewPortToTasks(TMLMapping<?> _tmapModel, LinkedHashMap<String,List<String[]>> _portsConnection, LinkedHashMap<String, TaskPattern> _patternTasks) { TMLModeling<?> _tmlmModel = _tmapModel.getTMLModeling(); for (String patternTaskName : _portsConnection.keySet()) { for (String[] elemP : _portsConnection.get(patternTaskName)) { @@ -1031,217 +878,240 @@ public class PatternIntegration implements Runnable { } } return _tmapModel; - } + }*/ - public TMLMapping<?> makeConnectionBetweenPatternAndModel(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, LinkedHashMap<String,List<String[]>> _portsConnection, LinkedHashMap<String, TaskPattern> _patternTasks) { + public TMLMapping<?> makeConnectionBetweenPatternAndModel(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, List<PatternConnection> _portsConnection, LinkedHashMap<String, TaskPattern> _patternTasks, List<PatternCloneTask> _patternCloneTasks) { TMLModeling<?> _tmlmModel = _tmapModel.getTMLModeling(); TMLModeling<?> _tmlmPattern = _tmapPattern.getTMLModeling(); - for (String patternTaskName : _portsConnection.keySet()) { - for (String[] portConn : _portsConnection.get(patternTaskName)) { - String patternTaskPortName = portConn[0]; - String modelTaskName = portConn[1]; - String modelTaskPortName = portConn[2]; - TMLTask patternTask = _tmlmModel.getTMLTaskByName(patternTaskName); - TMLTask modelTask = _tmlmModel.getTMLTaskByName(modelTaskName); - TMLChannel chInModel = _tmlmModel.getChannelByName(modelTaskPortName); - TMLEvent evtInModel = _tmlmModel.getEventByName(modelTaskPortName); - TMLChannel chInPattern = _tmlmPattern.getChannelByName(patternTaskPortName); - TMLEvent evtInPattern = _tmlmPattern.getEventByName(patternTaskPortName); - TraceManager.addDev("patternTaskName = " + patternTaskName); - TraceManager.addDev("patternTaskPortName = " + patternTaskPortName); - TraceManager.addDev("modelTaskName = " + modelTaskName); - TraceManager.addDev("modelTaskPortName = " + modelTaskPortName); - TraceManager.addDev("portConn.length = " + portConn.length); - if (chInModel == null) { - TraceManager.addDev("chInModel == null"); + for (PatternConnection portConnection : _portsConnection) { + String patternTaskName = portConnection.getPatternTaskName(); + String patternTaskPortName = portConnection.getPatternChannel(); + String modelTaskName = portConnection.getModelTaskName(); + String modelTaskPortName = portConnection.getModelChannelName(); + + PortTaskJsonFile relatedPortInPattern = null; + + for (PortTaskJsonFile portTaskJsonFile : _patternTasks.get(patternTaskName).getExternalPorts()) { + if (portTaskJsonFile.getName().equals(patternTaskPortName)) { + relatedPortInPattern = portTaskJsonFile; + break; } - - if (portConn.length == 3) { - if (chInModel != null) { - if (chInPattern.getOriginTask().equals(patternTask)) { - chInPattern.setDestinationTask(modelTask); - chInPattern.setPorts(chInPattern.getOriginPort(), new TMLPort(chInPattern.getName(), chInPattern.getReferenceObject())); - _tmlmModel.addChannel(chInPattern); - channelsFromPatternToMap.add(chInPattern); - renamedChannels.put(chInModel.getName(), chInPattern.getName()); - for (TMLActivityElement ae : modelTask.getActivityDiagram().getElements()) { - if (ae instanceof TMLReadChannel) { - TMLReadChannel aeRead = (TMLReadChannel) ae; - if (aeRead.getChannel(0).getName().equals(chInModel.getName())) { - TraceManager.addDev("replace: " + chInModel.getName() + " with " + chInPattern.getName()); - aeRead.replaceChannelWith(chInModel, chInPattern); - } + } + + TMLTask patternTaskInModel = _tmlmModel.getTMLTaskByName(tasksOfPatternIntoModel.get(patternTaskName)); + + if (tasksClonedIntoModel.containsKey(modelTaskName)) { + modelTaskName = tasksClonedIntoModel.get(modelTaskName); + if (!portConnection.isNewPort()) { + modelTaskPortName = channelsClonedIntoModel.get(Map.entry(modelTaskName, modelTaskPortName)); + } + } + TMLTask modelTask = _tmlmModel.getTMLTaskByName(modelTaskName); + + TMLChannel chInModel = _tmlmModel.getChannelByName(modelTaskPortName); + TMLEvent evtInModel = _tmlmModel.getEventByName(modelTaskPortName); + + TMLChannel chInPattern = _tmlmPattern.getChannelByName(patternTaskPortName); + TMLEvent evtInPattern = _tmlmPattern.getEventByName(patternTaskPortName); + + TraceManager.addDev("patternTaskName = " + patternTaskName); + TraceManager.addDev("patternTaskPortName = " + patternTaskPortName); + TraceManager.addDev("modelTaskName = " + modelTaskName); + TraceManager.addDev("modelTaskPortName = " + modelTaskPortName); + if (portConnection.isANewChannelRequired(_portsConnection, patternTasks, _patternCloneTasks)) { + if (chInPattern != null) { + TraceManager.addDev("New channel !"); + try { + TMLChannel chToAdd = chInPattern.deepClone(_tmlmPattern); + chToAdd.setName(channelsOfPatternIntoModel.get(Map.entry(patternTaskName, patternTaskPortName))); + if (relatedPortInPattern.getMode().equals(PatternCreation.MODE_INPUT)) { + chToAdd.setDestinationTask(patternTaskInModel); + chToAdd.setOriginTask(modelTask); + } else if (relatedPortInPattern.getMode().equals(PatternCreation.MODE_OUTPUT)) { + chToAdd.setDestinationTask(modelTask); + chToAdd.setOriginTask(patternTaskInModel); + } + chToAdd.setPorts(new TMLPort(chToAdd.getName(), chToAdd.getReferenceObject()), new TMLPort(chToAdd.getName(), chToAdd.getReferenceObject())); + _tmlmModel.addChannel(chToAdd); + + for (TMLActivityElement ae : patternTaskInModel.getActivityDiagram().getElements()) { + if (ae instanceof TMLActivityElementChannel) { + TMLActivityElementChannel aeCh = (TMLActivityElementChannel) ae; + if (aeCh.getChannel(0).getName().equals(chInPattern.getName())) { + aeCh.replaceChannelWith(aeCh.getChannel(0), chToAdd); + TraceManager.addDev("Pattern Task : Replace channel : " + chInPattern.getName() + " with : " + chToAdd.getName()); } } - //chInModel.setOriginTask(patternTask); - //chInModel.setPorts(new TMLPort(chInModel.getName(), chInModel.getReferenceObject()), chInModel.getDestinationPort()); - } else if (chInModel.getOriginTask().equals(modelTask)) { - chInModel.setDestinationTask(patternTask); - chInModel.setPorts(chInModel.getOriginPort(), new TMLPort(chInModel.getName(), chInModel.getReferenceObject())); - if (patternConfiguration.getChannelsWithSecurity().containsKey(patternTaskName)) { - for (PortTaskJsonFile pt : patternConfiguration.getChannelsWithSecurity().get(patternTaskName)) { - if (pt.getName().equals(patternTaskPortName)) { - pt.name = chInModel.getName(); - } - } + } + if (portConnection.isNewPort()) { + String modelTaskNameForNewPort = modelTaskPortName; + TraceManager.addDev("Before : modelTaskNameForNewPort=" + modelTaskNameForNewPort); + if (renamedModelChannels.containsKey(Map.entry(portConnection.getModelTaskName(), portConnection.getModelChannelName()))) { + modelTaskNameForNewPort = renamedModelChannels.get(Map.entry(portConnection.getModelTaskName(), portConnection.getModelChannelName())); } - - for (TMLActivityElement ae : patternTask.getActivityDiagram().getElements()) { - if (ae instanceof TMLReadChannel) { - TMLReadChannel aeRead = (TMLReadChannel) ae; - if (aeRead.getChannel(0).getName().equals(chInPattern.getName())) { - aeRead.replaceChannelWith(chInPattern, chInModel); + TraceManager.addDev("After : modelTaskNameForNewPort=" + modelTaskNameForNewPort); + _tmapModel = addNewPortToATask(_tmapModel, _patternTasks, modelTask, patternTaskName, patternTaskPortName, modelTaskNameForNewPort); + } else { + for (TMLActivityElement ae : modelTask.getActivityDiagram().getElements()) { + if (ae instanceof TMLActivityElementChannel) { + TMLActivityElementChannel aeCh = (TMLActivityElementChannel) ae; + if (aeCh.getChannel(0).getName().equals(chInModel.getName())) { + aeCh.replaceChannelWith(aeCh.getChannel(0), chToAdd); + TraceManager.addDev("model Task : Replace channel : " + chInModel.getName() + " with : " + chToAdd.getName()); + renamedModelChannels.put(Map.entry(portConnection.getModelTaskName(), portConnection.getModelChannelName()), chToAdd.getName()); } } } } - } else if (evtInModel != null) { - if (evtInPattern.getOriginTask().equals(patternTask)) { - evtInPattern.setDestinationTask(modelTask); - evtInPattern.setPorts(evtInPattern.getOriginPort(), new TMLPort(evtInPattern.getName(), evtInPattern.getReferenceObject())); - _tmlmModel.addEvent(evtInPattern); - renamedChannels.put(evtInModel.getName(), evtInPattern.getName()); - for (TMLActivityElement ae : modelTask.getActivityDiagram().getElements()) { - if (ae instanceof TMLWaitEvent) { - TMLWaitEvent aeWait = (TMLWaitEvent) ae; - if (aeWait.getEvent().getName().equals(evtInModel.getName())) { - aeWait.replaceEventWith(evtInModel, evtInPattern); - } + } catch (TMLCheckingError err) { + } + } else if (evtInPattern != null) { + TraceManager.addDev("New event !"); + try { + TMLEvent evtToAdd = evtInPattern.deepClone(_tmlmPattern); + evtToAdd.setName(channelsOfPatternIntoModel.get(Map.entry(patternTaskName, patternTaskPortName))); + if (relatedPortInPattern.getMode().equals(PatternCreation.MODE_INPUT)) { + evtToAdd.setDestinationTask(patternTaskInModel); + evtToAdd.setOriginTask(modelTask); + } else if (relatedPortInPattern.getMode().equals(PatternCreation.MODE_OUTPUT)) { + evtToAdd.setDestinationTask(modelTask); + evtToAdd.setOriginTask(patternTaskInModel); + } + evtToAdd.setPorts(new TMLPort(evtToAdd.getName(), evtToAdd.getReferenceObject()), new TMLPort(evtToAdd.getName(), evtToAdd.getReferenceObject())); + _tmlmModel.addEvent(evtToAdd); + + for (TMLActivityElement ae : patternTaskInModel.getActivityDiagram().getElements()) { + if (ae instanceof TMLActivityElementEvent) { + TMLActivityElementEvent aeEvt = (TMLActivityElementEvent) ae; + if (aeEvt.getEvent().getName().equals(evtInPattern.getName())) { + aeEvt.replaceEventWith(aeEvt.getEvent(), evtToAdd); + TraceManager.addDev("Pattern Task : Replace event : " + evtInPattern.getName() + " with : " + evtToAdd.getName()); } } - //evtInModel.setOriginTask(patternTask); - //evtInModel.setPorts(new TMLPort(evtInModel.getName(), evtInModel.getReferenceObject()), evtInModel.getDestinationPort()); - } else if (evtInModel.getOriginTask().equals(modelTask)) { - evtInModel.setDestinationTask(patternTask); - evtInModel.setPorts(evtInModel.getOriginPort(), new TMLPort(evtInModel.getName(), evtInModel.getReferenceObject())); - for (TMLActivityElement ae : patternTask.getActivityDiagram().getElements()) { - if (ae instanceof TMLWaitEvent) { - TMLWaitEvent aeWait = (TMLWaitEvent) ae; - if (aeWait.getEvent().getName().equals(evtInPattern.getName())) { - aeWait.replaceEventWith(evtInPattern, evtInModel); + } + if (portConnection.isNewPort()) { + String modelTaskNameForNewPort = modelTaskPortName; + if (renamedModelChannels.containsKey(Map.entry(portConnection.getModelTaskName(), portConnection.getModelChannelName()))) { + modelTaskNameForNewPort = renamedModelChannels.get(Map.entry(portConnection.getModelTaskName(), portConnection.getModelChannelName())); + } + _tmapModel = addNewPortToATask(_tmapModel, _patternTasks, modelTask, patternTaskName, patternTaskPortName, modelTaskNameForNewPort); + } else { + for (TMLActivityElement ae : modelTask.getActivityDiagram().getElements()) { + if (ae instanceof TMLActivityElementEvent) { + TMLActivityElementEvent aeEvt = (TMLActivityElementEvent) ae; + if (aeEvt.getEvent().getName().equals(evtInModel.getName())) { + aeEvt.replaceEventWith(aeEvt.getEvent(), evtToAdd); + TraceManager.addDev("model Task : Replace event : " + evtInModel.getName() + " with : " + evtToAdd.getName()); + renamedModelChannels.put(Map.entry(portConnection.getModelTaskName(), portConnection.getModelChannelName()), evtToAdd.getName()); } } } } + } catch (TMLCheckingError err) { } - } else if (portConn.length == 4) { - if (chInPattern != null) { - if (renamedChannels.containsKey(modelTaskPortName)) { - modelTaskPortName = renamedChannels.get(modelTaskPortName); - } - if (chInPattern.getDestinationTask().equals(patternTask)) { - chInPattern.setOriginTask(modelTask); - chInPattern.setPorts(new TMLPort(chInPattern.getName(), chInPattern.getReferenceObject()), chInPattern.getDestinationPort()); - _tmlmModel.addChannel(chInPattern); - channelsFromPatternToMap.add(chInPattern); - _tmapModel = addNewPortToATask(_tmapModel, _patternTasks, modelTask, patternTaskName, patternTaskPortName, modelTaskPortName); - } else if (chInPattern.getOriginTask().equals(patternTask)) { - chInPattern.setDestinationTask(modelTask); - chInPattern.setPorts(chInPattern.getOriginPort(), new TMLPort(chInPattern.getName(), chInPattern.getReferenceObject())); - _tmlmModel.addChannel(chInPattern); - channelsFromPatternToMap.add(chInPattern); - _tmapModel = addNewPortToATask(_tmapModel, _patternTasks, modelTask, patternTaskName, patternTaskPortName, modelTaskPortName); - } - } else if (evtInPattern != null) { - if (renamedChannels.containsKey(modelTaskPortName)) { - modelTaskPortName = renamedChannels.get(modelTaskPortName); - } - if (evtInPattern.getDestinationTask().equals(patternTask)) { - evtInPattern.setOriginTask(modelTask); - evtInPattern.setPorts(new TMLPort(evtInPattern.getName(), evtInPattern.getReferenceObject()), evtInPattern.getDestinationPort()); - _tmlmModel.addEvent(evtInPattern); - _tmapModel = addNewPortToATask(_tmapModel, _patternTasks, modelTask, patternTaskName, patternTaskPortName, modelTaskPortName); - } else if (evtInPattern.getOriginTask().equals(patternTask)) { - evtInPattern.setDestinationTask(modelTask); - evtInPattern.setPorts(evtInPattern.getOriginPort(), new TMLPort(evtInPattern.getName(), evtInPattern.getReferenceObject())); - _tmlmModel.addEvent(evtInPattern); - _tmapModel = addNewPortToATask(_tmapModel, _patternTasks, modelTask, patternTaskName, patternTaskPortName, modelTaskPortName); + } + } else { + if (chInModel != null) { + TraceManager.addDev("Existant channel !"); + if (relatedPortInPattern.getMode().equals(PatternCreation.MODE_INPUT)) { + chInModel.setDestinationTask(patternTaskInModel); + chInModel.setPorts(chInModel.getOriginPort(), new TMLPort(chInModel.getName(), chInModel.getReferenceObject())); + } else if (relatedPortInPattern.getMode().equals(PatternCreation.MODE_OUTPUT)) { + chInModel.setOriginTask(patternTaskInModel); + chInModel.setPorts(new TMLPort(chInModel.getName(), chInModel.getReferenceObject()), chInModel.getDestinationPort()); + } + + for (TMLActivityElement ae : patternTaskInModel.getActivityDiagram().getElements()) { + if (ae instanceof TMLActivityElementChannel) { + TMLActivityElementChannel aeCh = (TMLActivityElementChannel) ae; + if (aeCh.getChannel(0).getName().equals(chInPattern.getName())) { + aeCh.replaceChannelWith(aeCh.getChannel(0), chInModel); + TraceManager.addDev("Replace channel : " + chInPattern.getName() + " with : " + chInModel.getName()); + } } } } - + if (evtInModel != null) { + TraceManager.addDev("Existant event !"); + if (relatedPortInPattern.getMode().equals(PatternCreation.MODE_INPUT)) { + evtInModel.setDestinationTask(patternTaskInModel); + evtInModel.setPorts(evtInModel.getOriginPort(), new TMLPort(evtInModel.getName(), evtInModel.getReferenceObject())); + } else if (relatedPortInPattern.getMode().equals(PatternCreation.MODE_OUTPUT)) { + evtInModel.setOriginTask(patternTaskInModel); + evtInModel.setPorts(new TMLPort(evtInModel.getName(), evtInModel.getReferenceObject()), evtInModel.getDestinationPort()); + } + + for (TMLActivityElement ae : patternTaskInModel.getActivityDiagram().getElements()) { + if (ae instanceof TMLActivityElementEvent) { + TMLActivityElementEvent aeEvt = (TMLActivityElementEvent) ae; + if (aeEvt.getEvent().getName().equals(evtInPattern.getName())) { + aeEvt.replaceEventWith(aeEvt.getEvent(), evtInModel); + TraceManager.addDev("Replace event : " + evtInPattern.getName() + " with : " + evtInModel.getName()); + } + } + } + } } } return _tmapModel; } - public TMLMapping<?> configDisconnectedChannels(TMLMapping<?> _tmapModel, LinkedHashMap<String, List<Entry<String, String>>> _portsConfig, HashMap<String, String> _renamedChannels) { + public TMLMapping<?> configDisconnectedChannels(TMLMapping<?> _tmapModel, List<PatternPortsConfig> _portsConfig) { TMLModeling<?> _tmlmModel = _tmapModel.getTMLModeling(); TraceManager.addDev("configDisconnectedChannels"); - for (String taskName : _portsConfig.keySet()) { - TraceManager.addDev("taskName = " + taskName); - for (Entry<String, String> portDecision : _portsConfig.get(taskName)) { - String portName = portDecision.getKey(); - String decision = portDecision.getValue(); - TraceManager.addDev("decision = " + decision); - TraceManager.addDev("portName = " + portName); - TMLTask task = _tmlmModel.getTMLTaskByName(taskName); - if (task != null) { - TMLActivity adTask = task.getActivityDiagram(); - TMLActivityElement elemMerge = null; - if (decision != "") { - for (TMLActivityElement acElem : adTask.getElements()) { - if (acElem instanceof TMLActivityElementChannel) { - TMLActivityElementChannel acElemChannel = (TMLActivityElementChannel) acElem; - for (int indexChannel = 0 ; indexChannel < acElemChannel.getNbOfChannels() ; indexChannel++) { - if (_renamedChannels.containsKey(decision)) { - decision = _renamedChannels.get(decision); - } - if (acElemChannel.getChannel(indexChannel).getName().equals(decision)) { - try { - elemMerge = acElem.deepClone(_tmlmModel); - } catch (TMLCheckingError err) { - - } - } - } - } else if (acElem instanceof TMLActivityElementEvent) { - TMLActivityElementEvent acElemEvent = (TMLActivityElementEvent) acElem; - if (_renamedChannels.containsKey(decision)) { - decision = _renamedChannels.get(decision); - } - if (acElemEvent.getEvent().getName().equals(decision)) { - try { - elemMerge = acElem.deepClone(_tmlmModel); - } catch (TMLCheckingError err) { - - } - } - } - } + for (PatternPortsConfig portConfig : _portsConfig) { + TMLTask task = _tmlmModel.getTMLTaskByName(portConfig.getTaskOfChannelToConfig()); + //String portName = portDecision.getKey(); + //String decision = portDecision.getValue(); + + if (task != null) { + TMLActivity adTask = task.getActivityDiagram(); + TMLActivityElement elemMerge = null; + String mergeWith = portConfig.getMergeWith(); + if (mergeWith != null) { + if (renamedModelChannels.containsKey(Map.entry(portConfig.getTaskOfChannelToConfig(), mergeWith))) { + mergeWith = renamedModelChannels.get(Map.entry(portConfig.getTaskOfChannelToConfig(), mergeWith)); } - - List<TMLActivityElement> elemsToRemove = new ArrayList<TMLActivityElement>(); for (TMLActivityElement acElem : adTask.getElements()) { if (acElem instanceof TMLActivityElementChannel) { TMLActivityElementChannel acElemChannel = (TMLActivityElementChannel) acElem; - for (int indexChannel = 0 ; indexChannel < acElemChannel.getNbOfChannels() ; indexChannel++) { - if (acElemChannel.getChannel(indexChannel).getName().equals(portName)) { - TMLActivityElement prevElem = adTask.getPrevious(acElem); - TMLActivityElement nextElem = acElem.getNextElement(0); - if (decision.equals("")) { - prevElem.setNewNext(acElem, nextElem); - elemsToRemove.add(acElem); - } else { - try { - TMLActivityElement newNextElem = elemMerge.deepClone(_tmlmModel); - prevElem.setNewNext(acElem, newNextElem); - newNextElem.clearNexts(); - newNextElem.addNext(nextElem); - elemsToRemove.add(acElem); - } catch (TMLCheckingError err) { + for (int indexChannel = 0 ; indexChannel < acElemChannel.getNbOfChannels() ; indexChannel++) { + if (acElemChannel.getChannel(indexChannel).getName().equals(mergeWith)) { + try { + elemMerge = acElem.deepClone(_tmlmModel); + } catch (TMLCheckingError err) { - } - } + break; } } } else if (acElem instanceof TMLActivityElementEvent) { TMLActivityElementEvent acElemEvent = (TMLActivityElementEvent) acElem; - if (acElemEvent.getEvent().getName().equals(portName)) { + if (acElemEvent.getEvent().getName().equals(mergeWith)) { + try { + elemMerge = acElem.deepClone(_tmlmModel); + } catch (TMLCheckingError err) { + + } + break; + } + } + } + } + + List<TMLActivityElement> elemsToRemove = new ArrayList<TMLActivityElement>(); + for (TMLActivityElement acElem : adTask.getElements()) { + if (acElem instanceof TMLActivityElementChannel) { + TMLActivityElementChannel acElemChannel = (TMLActivityElementChannel) acElem; + for (int indexChannel = 0 ; indexChannel < acElemChannel.getNbOfChannels() ; indexChannel++) { + if (acElemChannel.getChannel(indexChannel).getName().equals(portConfig.getChannelToConfig())) { TMLActivityElement prevElem = adTask.getPrevious(acElem); TMLActivityElement nextElem = acElem.getNextElement(0); - if (decision.equals("")) { + if (elemMerge == null) { + while (nextElem instanceof TMLActivityElementChannel && ((TMLActivityElementChannel)nextElem).getChannel(0).getName().equals(portConfig.getChannelToConfig())) { + elemsToRemove.add(nextElem); + nextElem = nextElem.getNextElement(0); + } prevElem.setNewNext(acElem, nextElem); elemsToRemove.add(acElem); } else { @@ -1254,87 +1124,160 @@ public class PatternIntegration implements Runnable { } catch (TMLCheckingError err) { } + } } } - } - for (TMLActivityElement elemToRemove : elemsToRemove) { - TraceManager.addDev("elemToRemove = " + elemToRemove.getName()); - adTask.removeElement(elemToRemove); - /*task.getReadTMLChannelSet().remove(elemToRemove); - task.getReadTMLChannels().remove(elemToRemove); - task.getReadChannels().remove(elemToRemove); - task.getChannelSet().remove(elemToRemove);*/ - } + } else if (acElem instanceof TMLActivityElementEvent) { + TMLActivityElementEvent acElemEvent = (TMLActivityElementEvent) acElem; + if (acElemEvent.getEvent().getName().equals(portConfig.getChannelToConfig())) { + TMLActivityElement prevElem = adTask.getPrevious(acElem); + TMLActivityElement nextElem = acElem.getNextElement(0); + if (elemMerge == null) { + while (nextElem instanceof TMLActivityElementEvent && ((TMLActivityElementEvent)nextElem).getEvent().getName().equals(portConfig.getChannelToConfig())) { + elemsToRemove.add(nextElem); + nextElem = nextElem.getNextElement(0); + } + prevElem.setNewNext(acElem, nextElem); + elemsToRemove.add(acElem); + } else { + try { + TMLActivityElement newNextElem = elemMerge.deepClone(_tmlmModel); + prevElem.setNewNext(acElem, newNextElem); + newNextElem.clearNexts(); + newNextElem.addNext(nextElem); + elemsToRemove.add(acElem); + } catch (TMLCheckingError err) { - TraceManager.addDev("task.getReadTMLChannelSet().size() = " + task.getReadTMLChannelSet().size()); - TraceManager.addDev("task.getReadTMLChannels().size() = " + task.getReadTMLChannels().size()); - TraceManager.addDev("task.getReadChannels().size() = " + task.getReadChannels().size()); - TraceManager.addDev("task.getChannels().size() = " + task.getChannelSet().size()); - TraceManager.addDev("task.getTMLEvents().size() = " + task.getTMLEvents().size()); - TraceManager.addDev("task.getEventSet().size() = " + task.getEventSet().size()); - TraceManager.addDev("task.getSendEvents().size() = " + task.getSendEvents().size()); - TraceManager.addDev("task.getWaitEvents().size() = " + task.getWaitEvents().size()); - for (TMLActivityElement acElem : adTask.getElements()) { - TraceManager.addDev("acElem = " + acElem.getName()); + } + } + } } } - - } - + for (TMLActivityElement elemToRemove : elemsToRemove) { + TraceManager.addDev("elemToRemove = " + elemToRemove.getName()); + adTask.removeElement(elemToRemove); + } + } } return _tmapModel; } - public TMLMapping<?> mapTasksInArch(TMLMapping<?> _tmapModel, LinkedHashMap<String, Entry<String, String>> _taskMapping) { + public TMLMapping<?> mapTasksInArch(TMLMapping<?> _tmapModel, List<MappingPatternTask> _tasksMapping) { TMLArchitecture _tmlarchModel = _tmapModel.getArch(); - for (String taskName : _taskMapping.keySet()) { - String modeMapping = _taskMapping.get(taskName).getKey(); - String relatedMapping = _taskMapping.get(taskName).getValue(); - TMLTask taskToMap = _tmapModel.getTaskByName(taskName); - if (taskToMap != null) { - if (modeMapping.equals(JDialogPatternHandling.SAME_HW)) { - TMLTask inSameTask = _tmapModel.getTaskByName(relatedMapping); - if (inSameTask != null) { - HwExecutionNode hwMapTask = _tmapModel.getHwNodeOf(inSameTask); - if (hwMapTask != null) { - _tmapModel.addTaskToHwExecutionNode(taskToMap, hwMapTask); + for (MappingPatternTask taskMapping : _tasksMapping) { + if (taskMapping.getOrigin() == MappingPatternTask.ORIGIN_CLONE) { + TMLTask taskCloneToMap = _tmapModel.getTaskByName(tasksClonedIntoModel.get(taskMapping.getTaskToMapName())); + if (taskCloneToMap != null) { + if (taskMapping.getSameHwAs() != null) { + String sameTaskName = taskMapping.getSameHwAs(); + int sameTaskOrigin = taskMapping.getSameHwAsOrigin(); + TMLTask inSameTask = null; + if (sameTaskOrigin == MappingPatternTask.ORIGIN_MODEL) { + inSameTask = _tmapModel.getTaskByName(sameTaskName); + } else if (sameTaskOrigin == MappingPatternTask.ORIGIN_CLONE) { + inSameTask = _tmapModel.getTaskByName(tasksClonedIntoModel.get(sameTaskName)); + } else if (sameTaskOrigin == MappingPatternTask.ORIGIN_PATTERN) { + inSameTask = _tmapModel.getTaskByName(tasksOfPatternIntoModel.get(sameTaskName)); + } + if (inSameTask != null) { + HwExecutionNode hwMapTask = _tmapModel.getHwNodeOf(inSameTask); + if (hwMapTask != null) { + _tmapModel.addTaskToHwExecutionNode(taskCloneToMap, hwMapTask); + } + } + } else if (taskMapping.getBusNameForNewHw() != null) { + HwBus bus = _tmlarchModel.getHwBusByName(taskMapping.getBusNameForNewHw()); + if (bus != null) { + String nameCPU = "CPU_" + tasksClonedIntoModel.get(taskMapping.getTaskToMapName()); + HwNode node = _tmlarchModel.getHwNodeByName(nameCPU); + if (node != null) { + int indexCPU = 0; + String nameCPUWithIndex = nameCPU + indexCPU; + while(_tmlarchModel.getHwNodeByName(nameCPUWithIndex) != null) { + indexCPU += 1; + nameCPUWithIndex = nameCPU + indexCPU; + } + nameCPU = nameCPUWithIndex; + } + HwCPU _newCpu = new HwCPU(nameCPU); + _tmapModel.addTaskToHwExecutionNode(taskCloneToMap, _newCpu); + _tmlarchModel.addHwNode(_newCpu); + HwLink linkNewCPUWithBus = new HwLink("link_" + _newCpu.getName() + "_to_" + bus.getName()); + linkNewCPUWithBus.bus = bus; + linkNewCPUWithBus.hwnode = _newCpu; + _tmlarchModel.addHwLink(linkNewCPUWithBus); } } - } else if (modeMapping.equals(JDialogPatternHandling.NEW_HW)) { - HwBus bus = _tmlarchModel.getHwBusByName(relatedMapping); - if (bus != null) { - String nameCPU = "CPU_" + taskName; - HwNode node = _tmlarchModel.getHwNodeByName(nameCPU); - if (node != null) { - int indexCPU = 0; - String nameCPUWithIndex = nameCPU + indexCPU; - while(_tmlarchModel.getHwNodeByName(nameCPUWithIndex) != null) { - indexCPU += 1; - nameCPUWithIndex = nameCPU + indexCPU; + } + } else if (taskMapping.getOrigin() == MappingPatternTask.ORIGIN_PATTERN) { + TMLTask taskPatternToMap = _tmapModel.getTaskByName(tasksOfPatternIntoModel.get(taskMapping.getTaskToMapName())); + if (taskPatternToMap != null) { + if (taskMapping.getSameHwAs() != null) { + String sameTaskName = taskMapping.getSameHwAs(); + int sameTaskOrigin = taskMapping.getSameHwAsOrigin(); + TMLTask inSameTask = null; + if (sameTaskOrigin == MappingPatternTask.ORIGIN_MODEL) { + inSameTask = _tmapModel.getTaskByName(sameTaskName); + } else if (sameTaskOrigin == MappingPatternTask.ORIGIN_CLONE) { + inSameTask = _tmapModel.getTaskByName(tasksClonedIntoModel.get(sameTaskName)); + } else if (sameTaskOrigin == MappingPatternTask.ORIGIN_PATTERN) { + inSameTask = _tmapModel.getTaskByName(tasksOfPatternIntoModel.get(sameTaskName)); + } + if (inSameTask != null) { + HwExecutionNode hwMapTask = _tmapModel.getHwNodeOf(inSameTask); + if (hwMapTask != null) { + _tmapModel.addTaskToHwExecutionNode(taskPatternToMap, hwMapTask); + } + } + } else if (taskMapping.getBusNameForNewHw() != null) { + HwBus bus = _tmlarchModel.getHwBusByName(taskMapping.getBusNameForNewHw()); + if (bus != null) { + String nameCPU = "CPU_" + tasksOfPatternIntoModel.get(taskMapping.getTaskToMapName()); + HwNode node = _tmlarchModel.getHwNodeByName(nameCPU); + if (node != null) { + int indexCPU = 0; + String nameCPUWithIndex = nameCPU + indexCPU; + while(_tmlarchModel.getHwNodeByName(nameCPUWithIndex) != null) { + indexCPU += 1; + nameCPUWithIndex = nameCPU + indexCPU; + } + nameCPU = nameCPUWithIndex; } - nameCPU = nameCPUWithIndex; + HwCPU _newCpu = new HwCPU(nameCPU); + _tmapModel.addTaskToHwExecutionNode(taskPatternToMap, _newCpu); + _tmlarchModel.addHwNode(_newCpu); + HwLink linkNewCPUWithBus = new HwLink("link_" + _newCpu.getName() + "_to_" + bus.getName()); + linkNewCPUWithBus.bus = bus; + linkNewCPUWithBus.hwnode = _newCpu; + _tmlarchModel.addHwLink(linkNewCPUWithBus); } - HwCPU _newCpu = new HwCPU(nameCPU); - _tmapModel.addTaskToHwExecutionNode(taskToMap, _newCpu); - _tmlarchModel.addHwNode(_newCpu); - HwLink linkNewCPUWithBus = new HwLink("link_" + _newCpu.getName() + "_to_" + bus.getName()); - linkNewCPUWithBus.bus = bus; - linkNewCPUWithBus.hwnode = _newCpu; - _tmlarchModel.addHwLink(linkNewCPUWithBus); } } } + + + } return _tmapModel; } - public TMLMapping<?> mapTasksInArchAuto(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, Set<String> mappedTasks, PatternConfiguration _patternConfiguration, LinkedHashMap<String, TaskPattern> _patternTasks) { + public TMLMapping<?> mapTasksInArchAuto(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, List<MappingPatternTask> _mappingPatternTasks, PatternConfiguration _patternConfiguration, LinkedHashMap<String, TaskPattern> _patternTasks) { TMLModeling<?> tmlmModel = _tmapModel.getTMLModeling(); TMLModeling<?> tmlmPattern = _tmapPattern.getTMLModeling(); Map<TMLTask, TMLTask> correspTasks = correspondenceForTasks(_tmapModel, _tmapPattern, _patternConfiguration, _patternTasks); + Set<String> mappedTasks = new HashSet<String>(); + for (MappingPatternTask mappingPatternTask : _mappingPatternTasks) { + mappedTasks.add(mappingPatternTask.getTaskToMapName()); + } Map<TMLTask, TMLTask> correspondenceForClonedTasks = correspondenceForClonedTasks(_tmapModel, _tmapPattern, mappedTasks, _patternConfiguration, _patternTasks); + for (TMLTask correspTask : correspTasks.keySet()) { + TraceManager.addDev("correspTask: In pattern :" + correspTask.getName() + " In model : " + correspTasks.get(correspTask).getName()); + } + for (TMLTask correspTask : correspondenceForClonedTasks.keySet()) { + TraceManager.addDev("correspondenceForClonedTasks: In Model :" + correspTask.getName() + " In pattern : " + correspondenceForClonedTasks.get(correspTask).getName()); + } LinkedHashMap<String, TaskPattern> _patternTasksSorted = new LinkedHashMap<String, TaskPattern>(); LinkedHashMap<String, TaskPattern> _patternTasksInEnd = new LinkedHashMap<String, TaskPattern>(); for (String taskName : _patternTasks.keySet()) { @@ -1345,177 +1288,182 @@ public class PatternIntegration implements Runnable { } } _patternTasksSorted.putAll(_patternTasksInEnd); - outerloop: for (String taskName : _patternTasksSorted.keySet()) { TMLTask task = tmlmPattern.getTMLTaskByName(taskName); + boolean taskIsMapped = false; if (task != null && !mappedTasks.contains(taskName)) { HwExecutionNode hwMapTask = _tmapPattern.getHwNodeOf(task); HashSet<TMLTask> tasksInThisCPU = _tmapPattern.getLisMappedTasks(hwMapTask); for (TMLTask taskInCPU : tasksInThisCPU) { - if (_patternTasks.containsKey(taskInCPU.getName())) { - TMLTask taskInModel = tmlmModel.getTMLTaskByName(taskInCPU.getName()); - HwExecutionNode hwMapTaskInModel = _tmapModel.getHwNodeOf(taskInModel); - if (hwMapTaskInModel != null) { - TMLTask taskToMap = tmlmModel.getTMLTaskByName(taskName); - _tmapModel.addTaskToHwExecutionNode(taskToMap, hwMapTaskInModel); - break outerloop; - } - } else if (correspTasks.containsKey(taskInCPU)) { - TMLTask taskInModel = tmlmModel.getTMLTaskByName((correspTasks.get(taskInCPU)).getName()); + if (correspTasks.containsKey(taskInCPU)) { + TMLTask taskInModel = correspTasks.get(taskInCPU); HwExecutionNode hwMapTaskInModel = _tmapModel.getHwNodeOf(taskInModel); if (hwMapTaskInModel != null) { - TMLTask taskToMap = tmlmModel.getTMLTaskByName(taskName); + TMLTask taskToMap = tmlmModel.getTMLTaskByName(tasksOfPatternIntoModel.get(taskName)); _tmapModel.addTaskToHwExecutionNode(taskToMap, hwMapTaskInModel); - break outerloop; + taskIsMapped = true; + break; } } } - String nameNewCPU = hwMapTask.getName(); - HwExecutionNode newCPU = _tmapModel.getHwExecutionNodeByName(nameNewCPU); - int ind = 0; - while (newCPU != null) { - nameNewCPU = hwMapTask.getName() + ind; - newCPU = _tmapModel.getHwExecutionNodeByName(nameNewCPU); - ind += 1; - } - HwCPU _newCpu = new HwCPU(nameNewCPU); - TMLTask taskToMap = tmlmModel.getTMLTaskByName(taskName); - _tmapModel.addTaskToHwExecutionNode(taskToMap, _newCpu); - _tmapModel.getArch().addHwNode(_newCpu); - HwBus bus = null; - for (TMLChannel ch : tmlmModel.getChannelsFromMe(taskToMap)) { - TMLTask taskInConn = ch.getDestinationTask(); - HwExecutionNode hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); - if (hwOfTaskInConn != null) { - for (HwLink link : _tmapModel.getArch().getHwLinks()) { - if (link.hwnode == hwOfTaskInConn) { - bus = link.bus; + if (!taskIsMapped) { + String nameNewCPU = hwMapTask.getName(); + HwExecutionNode newCPU = _tmapModel.getHwExecutionNodeByName(nameNewCPU); + int ind = 0; + while (newCPU != null) { + nameNewCPU = hwMapTask.getName() + ind; + newCPU = _tmapModel.getHwExecutionNodeByName(nameNewCPU); + ind += 1; + } + HwCPU _newCpu = new HwCPU(nameNewCPU); + TMLTask taskToMap = tmlmModel.getTMLTaskByName(tasksOfPatternIntoModel.get(taskName)); + _tmapModel.addTaskToHwExecutionNode(taskToMap, _newCpu); + _tmapModel.getArch().addHwNode(_newCpu); + HwBus bus = null; + for (TMLChannel ch : tmlmModel.getChannelsFromMe(taskToMap)) { + if (bus == null) { + TMLTask taskInConn = ch.getDestinationTask(); + HwExecutionNode hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); + if (hwOfTaskInConn != null) { + for (HwLink link : _tmapModel.getArch().getHwLinks()) { + if (link.hwnode == hwOfTaskInConn) { + bus = link.bus; + break; + } + } } } } - } - for (TMLChannel ch : tmlmModel.getChannelsToMe(taskToMap)) { - TMLTask taskInConn = ch.getOriginTask(); - HwExecutionNode hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); - if (hwOfTaskInConn != null) { - for (HwLink link : _tmapModel.getArch().getHwLinks()) { - if (link.hwnode == hwOfTaskInConn) { - bus = link.bus; + + for (TMLChannel ch : tmlmModel.getChannelsToMe(taskToMap)) { + if (bus == null) { + TMLTask taskInConn = ch.getOriginTask(); + HwExecutionNode hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); + if (hwOfTaskInConn != null) { + for (HwLink link : _tmapModel.getArch().getHwLinks()) { + if (link.hwnode == hwOfTaskInConn) { + bus = link.bus; + break; + } + } } } } - } - if (bus == null) { - int nbConnections = 0 ; - for (HwNode busModel : _tmapModel.getArch().getBUSs()) { - if (busModel instanceof HwBus) { - int curNbConnections = 0 ; - for (HwLink link : _tmapModel.getArch().getHwLinks()) { - if (link.bus == busModel) { - nbConnections += 1; + + if (bus == null) { + int nbConnections = 0 ; + for (HwNode busModel : _tmapModel.getArch().getBUSs()) { + if (busModel instanceof HwBus) { + int curNbConnections = 0 ; + for (HwLink link : _tmapModel.getArch().getHwLinks()) { + if (link.bus == busModel) { + nbConnections += 1; + } + } + if (curNbConnections > nbConnections) { + bus = (HwBus) busModel; + nbConnections = curNbConnections; } - } - if (curNbConnections > nbConnections) { - bus = (HwBus) busModel; - nbConnections = curNbConnections; } } } + HwLink linkNewCPUWithBus = new HwLink("link_" + _newCpu.getName() + "_to_" + bus.getName()); + linkNewCPUWithBus.bus = bus; + linkNewCPUWithBus.hwnode = _newCpu; + _tmapModel.getArch().addHwLink(linkNewCPUWithBus); } - - HwLink linkNewCPUWithBus = new HwLink("link_" + _newCpu.getName() + "_to_" + bus.getName()); - linkNewCPUWithBus.bus = bus; - linkNewCPUWithBus.hwnode = _newCpu; - _tmapModel.getArch().addHwLink(linkNewCPUWithBus); } } - outerloop1: - for (String taskName : _patternConfiguration.getClonedTasks().keySet()) { + + for (PatternCloneTask patternCloneTask : _patternConfiguration.getClonedTasks()) { + String taskName = tasksClonedIntoModel.get(patternCloneTask.getClonedTask()); TMLTask task = tmlmModel.getTMLTaskByName(taskName); - if (task != null && !mappedTasks.contains(taskName)) { + boolean taskIsMapped = false; + if (task != null && !mappedTasks.contains(patternCloneTask.getClonedTask())) { TMLTask taskInPattern = correspondenceForClonedTasks.get(task); HwExecutionNode hwMapTask = _tmapPattern.getHwNodeOf(taskInPattern); HashSet<TMLTask> tasksInThisCPU = _tmapPattern.getLisMappedTasks(hwMapTask); for (TMLTask taskInCPU : tasksInThisCPU) { - if (_patternTasks.containsKey(taskInCPU.getName())) { - TMLTask taskInModel = tmlmModel.getTMLTaskByName(taskInCPU.getName()); - HwExecutionNode hwMapTaskInModel = _tmapModel.getHwNodeOf(taskInModel); - if (hwMapTaskInModel != null) { - _tmapModel.addTaskToHwExecutionNode(task, hwMapTaskInModel); - break outerloop1; - } - } else if (correspTasks.containsKey(taskInCPU)) { - TMLTask taskInModel = tmlmModel.getTMLTaskByName((correspTasks.get(taskInCPU)).getName()); + if (correspTasks.containsKey(taskInCPU)) { + TMLTask taskInModel = correspTasks.get(taskInCPU); HwExecutionNode hwMapTaskInModel = _tmapModel.getHwNodeOf(taskInModel); if (hwMapTaskInModel != null) { _tmapModel.addTaskToHwExecutionNode(task, hwMapTaskInModel); - break outerloop1; + taskIsMapped = true; + break; } } } - String nameNewCPU = hwMapTask.getName(); - HwExecutionNode newCPU = _tmapModel.getHwExecutionNodeByName(nameNewCPU); - int ind = 0; - while (newCPU != null) { - nameNewCPU = hwMapTask.getName() + ind; - newCPU = _tmapModel.getHwExecutionNodeByName(nameNewCPU); - ind += 1; - } - HwCPU _newCpu = new HwCPU(nameNewCPU); - TMLTask taskToMap = tmlmModel.getTMLTaskByName(taskName); - _tmapModel.addTaskToHwExecutionNode(taskToMap, _newCpu); - _tmapModel.getArch().addHwNode(_newCpu); + if (!taskIsMapped) { + String nameNewCPU = hwMapTask.getName(); + HwExecutionNode newCPU = _tmapModel.getHwExecutionNodeByName(nameNewCPU); + int ind = 0; + while (newCPU != null) { + nameNewCPU = hwMapTask.getName() + ind; + newCPU = _tmapModel.getHwExecutionNodeByName(nameNewCPU); + ind += 1; + } + HwCPU _newCpu = new HwCPU(nameNewCPU); + TMLTask taskToMap = tmlmModel.getTMLTaskByName(taskName); + _tmapModel.addTaskToHwExecutionNode(taskToMap, _newCpu); + _tmapModel.getArch().addHwNode(_newCpu); - HwBus bus = null; - for (TMLChannel ch : tmlmModel.getChannelsFromMe(taskToMap)) { - TMLTask taskInConn = ch.getDestinationTask(); - HwExecutionNode hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); - if (hwOfTaskInConn != null) { - for (HwLink link : _tmapModel.getArch().getHwLinks()) { - if (link.hwnode == hwOfTaskInConn) { - bus = link.bus; + HwBus bus = null; + for (TMLChannel ch : tmlmModel.getChannelsFromMe(taskToMap)) { + if (bus == null) { + TMLTask taskInConn = ch.getDestinationTask(); + HwExecutionNode hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); + if (hwOfTaskInConn != null) { + for (HwLink link : _tmapModel.getArch().getHwLinks()) { + if (link.hwnode == hwOfTaskInConn) { + bus = link.bus; + break; + } + } } } + } - } - for (TMLChannel ch : tmlmModel.getChannelsToMe(taskToMap)) { - TMLTask taskInConn = ch.getOriginTask(); - HwExecutionNode hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); - if (hwOfTaskInConn != null) { - for (HwLink link : _tmapModel.getArch().getHwLinks()) { - if (link.hwnode == hwOfTaskInConn) { - bus = link.bus; + for (TMLChannel ch : tmlmModel.getChannelsToMe(taskToMap)) { + if (bus == null) { + TMLTask taskInConn = ch.getOriginTask(); + HwExecutionNode hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); + if (hwOfTaskInConn != null) { + for (HwLink link : _tmapModel.getArch().getHwLinks()) { + if (link.hwnode == hwOfTaskInConn) { + bus = link.bus; + break; + } + } } } } - } - if (bus == null) { - int nbConnections = 0 ; - for (HwNode busModel : _tmapModel.getArch().getBUSs()) { - if (busModel instanceof HwBus) { - int curNbConnections = 0 ; - for (HwLink link : _tmapModel.getArch().getHwLinks()) { - if (link.bus == busModel) { - nbConnections += 1; + if (bus == null) { + int nbConnections = 0 ; + for (HwNode busModel : _tmapModel.getArch().getBUSs()) { + if (busModel instanceof HwBus) { + int curNbConnections = 0 ; + for (HwLink link : _tmapModel.getArch().getHwLinks()) { + if (link.bus == busModel) { + nbConnections += 1; + } + } + if (curNbConnections > nbConnections) { + bus = (HwBus) busModel; + nbConnections = curNbConnections; } - } - if (curNbConnections > nbConnections) { - bus = (HwBus) busModel; - nbConnections = curNbConnections; } } } + HwLink linkNewCPUWithBus = new HwLink("link_" + _newCpu.getName() + "_to_" + bus.getName()); + linkNewCPUWithBus.bus = bus; + linkNewCPUWithBus.hwnode = _newCpu; + _tmapModel.getArch().addHwLink(linkNewCPUWithBus); } - HwLink linkNewCPUWithBus = new HwLink("link_" + _newCpu.getName() + "_to_" + bus.getName()); - linkNewCPUWithBus.bus = bus; - linkNewCPUWithBus.hwnode = _newCpu; - _tmapModel.getArch().addHwLink(linkNewCPUWithBus); - } } - return _tmapModel; } @@ -1525,8 +1473,9 @@ public class PatternIntegration implements Runnable { TMLModeling<?> tmlmPattern = _tmapPattern.getTMLModeling(); List <String> clonedTasksToMap = new ArrayList<String>(); // List <TMLTask> patternTasksToMap = new ArrayList<TMLTask>(); - for (String taskName : _patternConfiguration.getClonedTasks().keySet()) { - TMLTask task = tmlmModel.getTMLTaskByName(taskName); + for (PatternCloneTask patternCloneTask : _patternConfiguration.getClonedTasks()) { + String taskName = patternCloneTask.getClonedTask(); + TMLTask task = tmlmModel.getTMLTaskByName(tasksClonedIntoModel.get(taskName)); if (task != null && !mappedTasks.contains(taskName)) { clonedTasksToMap.add(task.getName()); } @@ -1538,81 +1487,35 @@ public class PatternIntegration implements Runnable { } } */ Map<TMLTask, TMLTask> correspTasks = new HashMap<TMLTask, TMLTask>(); - for (String taskPatternName : _patternConfiguration.getPortsConnection().keySet()) { - for (String[] pc : _patternConfiguration.getPortsConnection().get(taskPatternName)) { - if (clonedTasksToMap.contains(pc[1])) { - - String modeChInPattern = ""; - String typeChInPattern = ""; - for (PortTaskJsonFile pt : _patternTasks.get(taskPatternName).getExternalPorts()) { - if (pt.getName().equals(pc[0])) { - modeChInPattern = pt.getMode(); - typeChInPattern = pt.getType(); - break; - } - } - if (typeChInPattern.equals(PatternCreation.CHANNEL)) { - TMLChannel chInPattern = tmlmPattern.getChannelByName(pc[0]); - if (chInPattern != null) { - if (modeChInPattern.equals(PatternCreation.MODE_INPUT)) { - correspTasks.put(tmlmModel.getTMLTaskByName(pc[1]), chInPattern.getOriginTask()); - } else if (modeChInPattern.equals(PatternCreation.MODE_OUTPUT)) { - correspTasks.put(tmlmModel.getTMLTaskByName(pc[1]), chInPattern.getDestinationTask()); - } - - } - } else if (typeChInPattern.equals(PatternCreation.EVENT)) { - TMLEvent evtInPattern = tmlmPattern.getEventByName(pc[0]); - if (evtInPattern != null) { - if (modeChInPattern.equals(PatternCreation.MODE_INPUT)) { - correspTasks.put(tmlmModel.getTMLTaskByName(pc[1]), evtInPattern.getOriginTask()); - } else if (modeChInPattern.equals(PatternCreation.MODE_OUTPUT)) { - correspTasks.put(tmlmModel.getTMLTaskByName(pc[1]), evtInPattern.getDestinationTask()); - } - - } - } - } - } - } - return correspTasks; - } - - // Find correspondence between Tasks of the pattern model and the tasks of current Model - public Map<TMLTask, TMLTask> correspondenceForTasks(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, PatternConfiguration _patternConfiguration, LinkedHashMap<String, TaskPattern> _patternTasks) { - TMLModeling<?> tmlmModel = _tmapModel.getTMLModeling(); - TMLModeling<?> tmlmPattern = _tmapPattern.getTMLModeling(); - Map<TMLTask, TMLTask> correspTasks = new HashMap<TMLTask, TMLTask>(); - for (String taskPatternName : _patternConfiguration.getPortsConnection().keySet()) { - for (String[] pc : _patternConfiguration.getPortsConnection().get(taskPatternName)) { - + for (PatternConnection patternConnection : _patternConfiguration.getPortsConnection()) { + String taskPatternName = patternConnection.getPatternTaskName(); + if (clonedTasksToMap.contains(tasksClonedIntoModel.get(patternConnection.getModelTaskName()))) { String modeChInPattern = ""; String typeChInPattern = ""; for (PortTaskJsonFile pt : _patternTasks.get(taskPatternName).getExternalPorts()) { - if (pt.getName().equals(pc[0])) { + if (pt.getName().equals(patternConnection.getPatternChannel())) { modeChInPattern = pt.getMode(); typeChInPattern = pt.getType(); break; } } - - if (typeChInPattern.equals(PatternCreation.CHANNEL)) { - TMLChannel chInPattern = tmlmPattern.getChannelByName(pc[0]); + TMLChannel chInPattern = tmlmPattern.getChannelByName(patternConnection.getPatternChannel()); if (chInPattern != null) { if (modeChInPattern.equals(PatternCreation.MODE_INPUT)) { - correspTasks.put(chInPattern.getOriginTask(), tmlmModel.getTMLTaskByName(pc[1])); + correspTasks.put(tmlmModel.getTMLTaskByName(tasksClonedIntoModel.get(patternConnection.getModelTaskName())), chInPattern.getOriginTask()); } else if (modeChInPattern.equals(PatternCreation.MODE_OUTPUT)) { - correspTasks.put(chInPattern.getDestinationTask(), tmlmModel.getTMLTaskByName(pc[1])); + correspTasks.put(tmlmModel.getTMLTaskByName(tasksClonedIntoModel.get(patternConnection.getModelTaskName())), chInPattern.getDestinationTask()); } + } } else if (typeChInPattern.equals(PatternCreation.EVENT)) { - TMLEvent evtInPattern = tmlmPattern.getEventByName(pc[0]); + TMLEvent evtInPattern = tmlmPattern.getEventByName(patternConnection.getPatternChannel()); if (evtInPattern != null) { if (modeChInPattern.equals(PatternCreation.MODE_INPUT)) { - correspTasks.put(evtInPattern.getOriginTask(), tmlmModel.getTMLTaskByName(pc[1])); + correspTasks.put(tmlmModel.getTMLTaskByName(tasksClonedIntoModel.get(patternConnection.getModelTaskName())), evtInPattern.getOriginTask()); } else if (modeChInPattern.equals(PatternCreation.MODE_OUTPUT)) { - correspTasks.put(evtInPattern.getDestinationTask(), tmlmModel.getTMLTaskByName(pc[1])); + correspTasks.put(tmlmModel.getTMLTaskByName(tasksClonedIntoModel.get(patternConnection.getModelTaskName())), evtInPattern.getDestinationTask()); } } } @@ -1621,104 +1524,177 @@ public class PatternIntegration implements Runnable { return correspTasks; } + // Find correspondence between Tasks of the pattern model and the tasks of current Model + public Map<TMLTask, TMLTask> correspondenceForTasks(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, PatternConfiguration _patternConfiguration, LinkedHashMap<String, TaskPattern> _patternTasks) { + TMLModeling<?> tmlmModel = _tmapModel.getTMLModeling(); + TMLModeling<?> tmlmPattern = _tmapPattern.getTMLModeling(); + Map<TMLTask, TMLTask> correspTasks = new HashMap<TMLTask, TMLTask>(); + for (PatternConnection patternConnection : _patternConfiguration.getPortsConnection()) { + String taskPatternName = patternConnection.getPatternTaskName(); + String modelTask = patternConnection.getModelTaskName(); + if (tasksClonedIntoModel.containsKey(modelTask)) { + modelTask = tasksClonedIntoModel.get(modelTask); + } + String modeChInPattern = ""; + String typeChInPattern = ""; + for (PortTaskJsonFile pt : _patternTasks.get(taskPatternName).getExternalPorts()) { + if (pt.getName().equals(patternConnection.getPatternChannel())) { + modeChInPattern = pt.getMode(); + typeChInPattern = pt.getType(); + break; + } + } + if (typeChInPattern.equals(PatternCreation.CHANNEL)) { + TMLChannel chInPattern = tmlmPattern.getChannelByName(patternConnection.getPatternChannel()); + if (chInPattern != null) { + if (modeChInPattern.equals(PatternCreation.MODE_INPUT)) { + correspTasks.put(chInPattern.getOriginTask(), tmlmModel.getTMLTaskByName(modelTask)); + } else if (modeChInPattern.equals(PatternCreation.MODE_OUTPUT)) { + correspTasks.put(chInPattern.getDestinationTask(), tmlmModel.getTMLTaskByName(modelTask)); + } + } + } else if (typeChInPattern.equals(PatternCreation.EVENT)) { + TMLEvent evtInPattern = tmlmPattern.getEventByName(patternConnection.getPatternChannel()); + if (evtInPattern != null) { + if (modeChInPattern.equals(PatternCreation.MODE_INPUT)) { + correspTasks.put(evtInPattern.getOriginTask(), tmlmModel.getTMLTaskByName(modelTask)); + } else if (modeChInPattern.equals(PatternCreation.MODE_OUTPUT)) { + correspTasks.put(evtInPattern.getDestinationTask(), tmlmModel.getTMLTaskByName(modelTask)); + } + } + } + } + for (String patternTask: _patternTasks.keySet()) { + correspTasks.put(tmlmPattern.getTMLTaskByName(patternTask), tmlmModel.getTMLTaskByName(tasksOfPatternIntoModel.get(patternTask))); + } + return correspTasks; + } + - public TMLMapping<?> mapChannelsInArch(TMLMapping<?> _tmapModel, LinkedHashMap<String, List<String[]>> _channelMapping) { + public TMLMapping<?> mapChannelsInArch(TMLMapping<?> _tmapModel, List<MappingPatternChannel> _channelMapping) { TMLArchitecture _tmlarchModel = _tmapModel.getArch(); - for (String taskName : _channelMapping.keySet()) { - for (String[] channelMap : _channelMapping.get(taskName)) { - String modeMapping = channelMap[0]; - String channelToMapName = channelMap[1]; - if (renamedChannels.containsKey(channelToMapName)) { - channelToMapName = renamedChannels.get(channelToMapName); - } - - TMLChannel channelToMap = _tmapModel.getChannelByName(channelToMapName); - TraceManager.addDev("channelToMapName= " + channelToMapName); - if (channelToMap != null) { - TraceManager.addDev("channelToMap != null"); - if (modeMapping.equals(JDialogPatternHandling.SAME_MEMORY)) { - String sameChannel = channelMap[3]; - if (renamedChannels.containsKey(sameChannel)) { - sameChannel = renamedChannels.get(sameChannel); - } - TraceManager.addDev("sameChannel= " + sameChannel); - TMLChannel inSameChannel = _tmapModel.getChannelByName(sameChannel); - if (inSameChannel != null) { - TraceManager.addDev("inSameChannel != null"); - HwMemory memoryOfSameChannel = _tmapModel.getMemoryOfChannel(inSameChannel); - if (memoryOfSameChannel != null) { - _tmapModel.addCommToHwCommNode(channelToMap, memoryOfSameChannel); - TraceManager.addDev("memoryOfSameChannel != null"); - } - for (HwCommunicationNode mappedNode : _tmapModel.getAllCommunicationNodesOfChannel(inSameChannel)) { - if (mappedNode instanceof HwBus) { - TraceManager.addDev("mappedNode instanceof HwBus"); - _tmapModel.addCommToHwCommNode(channelToMap, mappedNode); - } - } + for (MappingPatternChannel channelMapping : _channelMapping) { + String channelToMapName = channelMapping.getChannelToMapName(); + String taskOfChannelToMap = channelMapping.getTaskOfChannelToMap(); + /*if (renamedChannels.containsKey(channelToMapName)) { + channelToMapName = renamedChannels.get(channelToMapName); + }*/ + String channelToMapNameInModel = channelToMapName; + if (channelMapping.getOrigin() == MappingPatternChannel.ORIGIN_CLONE && channelsClonedIntoModel.containsKey(Map.entry(taskOfChannelToMap, channelToMapName))) { + channelToMapNameInModel = channelsClonedIntoModel.get(Map.entry(taskOfChannelToMap, channelToMapName)); + } else if (channelMapping.getOrigin() == MappingPatternChannel.ORIGIN_PATTERN && channelsOfPatternIntoModel.containsKey(Map.entry(taskOfChannelToMap, channelToMapName))) { + channelToMapNameInModel = channelsOfPatternIntoModel.get(Map.entry(taskOfChannelToMap, channelToMapName)); + } + TMLChannel channelToMap = _tmapModel.getChannelByName(channelToMapNameInModel); + if (channelToMap != null) { + TraceManager.addDev("channelToMap != null"); + if (channelMapping.getChannelInSameMemAs() != null) { + String sameChannel = channelMapping.getChannelInSameMemAs(); + String sameChannelTask = channelMapping.getTaskOfChannelInSameMem(); + String sameChannelInModel = sameChannel; + if (channelMapping.getSameMemAsOrigin() == MappingPatternChannel.ORIGIN_CLONE && channelsClonedIntoModel.containsKey(Map.entry(sameChannelTask, sameChannel))) { + sameChannelInModel = channelsClonedIntoModel.get(Map.entry(sameChannelTask, sameChannel)); + } else if (channelMapping.getSameMemAsOrigin() == MappingPatternChannel.ORIGIN_PATTERN && channelsOfPatternIntoModel.containsKey(Map.entry(sameChannelTask, sameChannel))) { + sameChannelInModel = channelsOfPatternIntoModel.get(Map.entry(sameChannelTask, sameChannel)); + } + TraceManager.addDev("sameChannel= " + sameChannel); + TMLChannel inSameChannel = _tmapModel.getChannelByName(sameChannelInModel); + if (inSameChannel != null) { + TraceManager.addDev("inSameChannel != null"); + HwMemory memoryOfSameChannel = _tmapModel.getMemoryOfChannel(inSameChannel); + if (memoryOfSameChannel != null) { + _tmapModel.addCommToHwCommNode(channelToMap, memoryOfSameChannel); + TraceManager.addDev("memoryOfSameChannel != null"); + } + for (HwCommunicationNode mappedNode : _tmapModel.getAllCommunicationNodesOfChannel(inSameChannel)) { + if (mappedNode instanceof HwBus) { + TraceManager.addDev("mappedNode instanceof HwBus"); + _tmapModel.addCommToHwCommNode(channelToMap, mappedNode); + } } - } else if (modeMapping.equals(JDialogPatternHandling.NEW_MEMORY)) { - String busName = channelMap[2]; - HwBus bus = _tmlarchModel.getHwBusByName(busName); - if (bus != null) { - String nameMem = "Memory_" + channelToMapName; - HwNode node = _tmlarchModel.getHwNodeByName(nameMem); - if (node != null) { - int indexMem = 0; - String nameMemWithIndex = nameMem + indexMem; - while(_tmlarchModel.getHwNodeByName(nameMemWithIndex) != null) { - indexMem += 1; - nameMemWithIndex = nameMem + indexMem; - } - nameMem = nameMemWithIndex; + } + } else if (channelMapping.getBusNameForNewMem() != null) { + String busName = channelMapping.getBusNameForNewMem(); + HwBus bus = _tmlarchModel.getHwBusByName(busName); + if (bus != null) { + String nameMem = "Memory_" + channelToMapName; + HwNode node = _tmlarchModel.getHwNodeByName(nameMem); + if (node != null) { + int indexMem = 0; + String nameMemWithIndex = nameMem + indexMem; + while(_tmlarchModel.getHwNodeByName(nameMemWithIndex) != null) { + indexMem += 1; + nameMemWithIndex = nameMem + indexMem; } - HwMemory _newMem = new HwMemory(nameMem); - _tmapModel.addCommToHwCommNode(channelToMap, _newMem); - _tmapModel.addCommToHwCommNode(channelToMap, bus); - _tmlarchModel.addHwNode(_newMem); - HwLink linkNewMemWithBus = new HwLink("link_" + _newMem.getName() + "_to_" + bus.getName()); - linkNewMemWithBus.bus = bus; - linkNewMemWithBus.hwnode = _newMem; - _tmlarchModel.addHwLink(linkNewMemWithBus); - } + nameMem = nameMemWithIndex; + } + HwMemory _newMem = new HwMemory(nameMem); + _tmapModel.addCommToHwCommNode(channelToMap, _newMem); + _tmapModel.addCommToHwCommNode(channelToMap, bus); + _tmlarchModel.addHwNode(_newMem); + HwLink linkNewMemWithBus = new HwLink("link_" + _newMem.getName() + "_to_" + bus.getName()); + linkNewMemWithBus.bus = bus; + linkNewMemWithBus.hwnode = _newMem; + _tmlarchModel.addHwLink(linkNewMemWithBus); } } } - } return _tmapModel; } - public TMLMapping<?> mapChannelsInArchAuto(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, Set<String> mappedTasks, Set<String> mappedChannels, PatternConfiguration _patternConfiguration, LinkedHashMap<String, TaskPattern> _patternTasks) { - TMLModeling<?> tmlmModel = _tmapModel.getTMLModeling(); - TMLModeling<?> tmlmPattern = _tmapPattern.getTMLModeling(); + public TMLMapping<?> mapChannelsInArchAuto(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, List<MappingPatternTask> _mappingPatternTasks, List<MappingPatternChannel> _mappingPatternChannels, PatternConfiguration _patternConfiguration, LinkedHashMap<String, TaskPattern> _patternTasks) { Map<TMLChannel, TMLChannel> correspChannels = correspondenceForChannels(_tmapModel, _tmapPattern, _patternConfiguration, _patternTasks); - Map<TMLChannel, TMLChannel> correspondenceForClonedChannels = correspondenceForClonedChannels(_tmapModel, _tmapPattern, mappedTasks, _patternConfiguration); for (TMLChannel corresp : correspChannels.keySet()) { TraceManager.addDev("chInPattern=" + corresp.getName() + " chInModel=" + correspChannels.get(corresp).getName()); } - - for (TMLChannel chToMap : channelsFromPatternToMap) { - TraceManager.addDev("0 chToMap=" + chToMap.getName()); - if (!mappedChannels.contains(chToMap.getName())) { - TMLChannel chInPattern = _tmapPattern.getChannelByName(chToMap.getName()); - TraceManager.addDev("chToMap=" + chToMap.getName()); - TraceManager.addDev("chInPattern=" + chInPattern.getName()); + List<MappingPatternChannel> allChannelsToMap = MappingPatternChannel.getChannelsToMap(_patternConfiguration.getPortsConnection(), _patternTasks, _patternConfiguration.getClonedTasks()); + List<MappingPatternChannel> channelsToMapAuto = new ArrayList<MappingPatternChannel>(); + for (MappingPatternChannel mappingPatternChannel : allChannelsToMap) { + TraceManager.addDev("getTaskOfChannelToMap: " + mappingPatternChannel.getTaskOfChannelToMap() + " getChannelToMapName: " + mappingPatternChannel.getChannelToMapName() + " getOrigin: " + mappingPatternChannel.getOrigin()); + boolean isMapped = false; + for (MappingPatternChannel mappedPatternChannel : _mappingPatternChannels) { + if (mappingPatternChannel.getChannelToMapName().equals(mappedPatternChannel.getChannelToMapName()) && mappingPatternChannel.getTaskOfChannelToMap().equals(mappedPatternChannel.getTaskOfChannelToMap())) { + isMapped = true; + break; + } + } + if (!isMapped) { + channelsToMapAuto.add(mappingPatternChannel); + } + } + for (MappingPatternChannel mappingPatternChannel : channelsToMapAuto) { + String chToMapName = mappingPatternChannel.getChannelToMapName(); + String taskOfChToMapName = mappingPatternChannel.getTaskOfChannelToMap(); + TMLChannel chToMap = null; + TMLChannel chInPattern = null; + TraceManager.addDev("chToMapName: " + chToMapName + " taskOfChToMapName: " + taskOfChToMapName); + if (mappingPatternChannel.getOrigin() == MappingPatternChannel.ORIGIN_CLONE) { + String chToMapNameInModel = channelsClonedIntoModel.get(Map.entry(taskOfChToMapName, chToMapName)); + chToMap = _tmapModel.getChannelByName(chToMapNameInModel); + TraceManager.addDev("ORIGIN_CLONE: chToMap=" + chToMap.getName()); + chInPattern = getKeyByValue(correspChannels, chToMap); + TraceManager.addDev("ORIGIN_CLONE: chInPattern=" + chInPattern.getName()); + } else if (mappingPatternChannel.getOrigin() == MappingPatternChannel.ORIGIN_PATTERN) { + chInPattern = _tmapPattern.getChannelByName(chToMapName); + chToMap = _tmapModel.getChannelByName(channelsOfPatternIntoModel.get(Map.entry(taskOfChToMapName, chToMapName))); + TraceManager.addDev("ORIGIN_PATTERN: chInPattern=" + chInPattern.getName()); + TraceManager.addDev("ORIGIN_PATTERN: chToMap=" + chToMap.getName()); + } + if (chToMap != null && chInPattern != null) { ArrayList<HwCommunicationNode> hwComsOfChannel = _tmapPattern.getAllCommunicationNodesOfChannel(chInPattern); TraceManager.addDev("hwComsOfChannel size=" + hwComsOfChannel.size()); Boolean chIsMappedToMem = false; Boolean chIsMappedToBuses = false; for (HwCommunicationNode hwComOfChannel : hwComsOfChannel) { - TraceManager.addDev("hwComOfChannel=" + hwComOfChannel.getName()); if (hwComOfChannel instanceof HwMemory) { if (!chIsMappedToMem) { HashSet<TMLElement> channelsInThisHwCom = _tmapPattern.getLisMappedChannels(hwComOfChannel); for (TMLElement elemInHwCom : channelsInThisHwCom) { if (elemInHwCom instanceof TMLChannel) { TMLChannel channelInHwCom = (TMLChannel) elemInHwCom; - TraceManager.addDev("Mem channelInHwCom=" + channelInHwCom.getName()); - if (correspChannels.containsKey(channelInHwCom)) { - TMLChannel channelInModel = tmlmModel.getChannelByName((correspChannels.get(channelInHwCom)).getName()); + if (channelInHwCom != chInPattern && correspChannels.containsKey(channelInHwCom)) { + TMLChannel channelInModel = correspChannels.get(channelInHwCom); ArrayList<HwCommunicationNode> hwsMapChannelInModel = _tmapModel.getAllCommunicationNodesOfChannel(channelInModel); if (hwsMapChannelInModel.size() > 0) { for (HwCommunicationNode hwMapChannelInModel : hwsMapChannelInModel) { @@ -1733,38 +1709,29 @@ public class PatternIntegration implements Runnable { } } } - TraceManager.addDev("hwComsOfChannel ELEM MEM"); } else { if (!chIsMappedToBuses) { HashSet<TMLElement> channelsInThisHwCom = _tmapPattern.getLisMappedChannels(hwComOfChannel); for (TMLElement elemInHwCom : channelsInThisHwCom) { if (elemInHwCom instanceof TMLChannel) { TMLChannel channelInHwCom = (TMLChannel) elemInHwCom; - TraceManager.addDev("Bus channelInHwCom=" + channelInHwCom.getName()); - if (correspChannels.containsKey(channelInHwCom)) { - TMLChannel channelInModel = tmlmModel.getChannelByName((correspChannels.get(channelInHwCom)).getName()); + if (channelInHwCom != chInPattern && correspChannels.containsKey(channelInHwCom)) { + TMLChannel channelInModel = correspChannels.get(channelInHwCom); ArrayList<HwCommunicationNode> hwsMapChannelInModel = _tmapModel.getAllCommunicationNodesOfChannel(channelInModel); - TraceManager.addDev("Bus channelInModel=" + channelInModel.getName()); if (hwsMapChannelInModel.size() > 0) { for (HwCommunicationNode hwMapChannelInModel : hwsMapChannelInModel) { - TraceManager.addDev("Bus hwMapChannelInModel=" + hwMapChannelInModel.getName()); if (!(hwMapChannelInModel instanceof HwMemory) && !(_tmapModel.isCommNodeMappedOn(chToMap, hwMapChannelInModel))) { _tmapModel.addCommToHwCommNode(chToMap, hwMapChannelInModel); - TraceManager.addDev("Bus addCommToHwCommNode"); } } - break; + //break; } } } } - } - - TraceManager.addDev("hwComsOfChannel ELEM BUS"); + } } - TraceManager.addDev("hwComsOfChannel END 0 "); } - TraceManager.addDev("hwComsOfChannel END"); if (!chIsMappedToMem) { HwMemory memMapChannel = _tmapPattern.getMemoryOfChannel(chInPattern); String nameNewMem = memMapChannel.getName(); @@ -1785,6 +1752,7 @@ public class PatternIntegration implements Runnable { for (HwLink link : _tmapModel.getArch().getHwLinks()) { if (link.hwnode == hwOfTaskInConn) { bus = link.bus; + break; } } } @@ -1795,6 +1763,7 @@ public class PatternIntegration implements Runnable { for (HwLink link : _tmapModel.getArch().getHwLinks()) { if (link.hwnode == hwOfTaskInConn) { bus = link.bus; + break; } } } @@ -1825,110 +1794,26 @@ public class PatternIntegration implements Runnable { } } } - outerloop1: - for (TMLChannel chToMap : channelsFromClonedToMap) { - if (!mappedChannels.contains(chToMap.getName())) { - TMLChannel chInPattern = correspondenceForClonedChannels.get(chToMap); - - ArrayList<HwCommunicationNode> hwComsOfChannel = _tmapPattern.getAllCommunicationNodesOfChannel(chInPattern); - for (HwCommunicationNode hwComOfChannel : hwComsOfChannel) { - HashSet<TMLElement> channelsInThisHwCom = _tmapPattern.getLisMappedChannels(hwComOfChannel); - for (TMLElement elemInHwCom : channelsInThisHwCom) { - if (elemInHwCom instanceof TMLChannel) { - TMLChannel channelInHwCom = (TMLChannel) elemInHwCom; - if (correspChannels.containsKey(channelInHwCom)) { - TMLChannel channelInModel = tmlmModel.getChannelByName((correspChannels.get(channelInHwCom)).getName()); - ArrayList<HwCommunicationNode> hwsMapChannelInModel = _tmapModel.getAllCommunicationNodesOfChannel(channelInModel); - if (hwsMapChannelInModel.size() > 0) { - for (HwCommunicationNode hwMapChannelInModel : hwsMapChannelInModel) { - _tmapModel.addCommToHwCommNode(chToMap, hwMapChannelInModel); - } - break outerloop1; - } - } - } - } - } - HwMemory memMapChannel = _tmapPattern.getMemoryOfChannel(chInPattern); - String nameNewMem = memMapChannel.getName(); - HwCommunicationNode newMem = _tmapModel.getHwCommunicationNodeByName(nameNewMem); - int ind = 0; - while (newMem != null) { - nameNewMem = memMapChannel.getName() + ind; - newMem = _tmapModel.getHwCommunicationNodeByName(nameNewMem); - ind += 1; - } - HwMemory _newMem = new HwMemory(nameNewMem); - _tmapModel.addCommToHwCommNode(chToMap, _newMem); - _tmapModel.getArch().addHwNode(_newMem); - HwBus bus = null; - TMLTask taskInConn = chToMap.getDestinationTask(); - HwExecutionNode hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); - if (hwOfTaskInConn != null) { - for (HwLink link : _tmapModel.getArch().getHwLinks()) { - if (link.hwnode == hwOfTaskInConn) { - bus = link.bus; - } - } - } - if (bus == null) { - taskInConn = chToMap.getOriginTask(); - hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); - if (hwOfTaskInConn != null) { - for (HwLink link : _tmapModel.getArch().getHwLinks()) { - if (link.hwnode == hwOfTaskInConn) { - bus = link.bus; - } - } - } - } - - if (bus == null) { - int nbConnections = 0 ; - for (HwNode busModel : _tmapModel.getArch().getBUSs()) { - if (busModel instanceof HwBus) { - int curNbConnections = 0 ; - for (HwLink link : _tmapModel.getArch().getHwLinks()) { - if (link.bus == busModel) { - nbConnections += 1; - } - } - if (curNbConnections > nbConnections) { - bus = (HwBus) busModel; - nbConnections = curNbConnections; - } - } - } - - } - - HwLink linkNewMemWithBus = new HwLink("link_" + _newMem.getName() + "_to_" + bus.getName()); - linkNewMemWithBus.bus = bus; - linkNewMemWithBus.hwnode = _newMem; - _tmapModel.getArch().addHwLink(linkNewMemWithBus); - - } - } return _tmapModel; } // Find correspondence between Channels of the pattern model and the channels of cloned tasks of current Model - public Map<TMLChannel, TMLChannel> correspondenceForClonedChannels(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, Set<String> mappedTasks, PatternConfiguration _patternConfiguration) { + /*public Map<TMLChannel, TMLChannel> correspondenceForClonedChannels(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, Set<String> mappedTasks, PatternConfiguration _patternConfiguration) { TMLModeling<?> tmlmModel = _tmapModel.getTMLModeling(); TMLModeling<?> tmlmPattern = _tmapPattern.getTMLModeling(); - List <String> clonedTasksToMap = new ArrayList<String>(); + List <String> clonedChannelsToMap = new ArrayList<String>(); // List <TMLTask> patternTasksToMap = new ArrayList<TMLTask>(); for (String taskName : _patternConfiguration.getClonedTasks().keySet()) { TMLTask task = tmlmModel.getTMLTaskByName(taskName); if (task != null && !mappedTasks.contains(taskName)) { - clonedTasksToMap.add(task.getName()); + clonedChannelsToMap.add(task.getName()); } } Map<TMLChannel, TMLChannel> correspChannels = new HashMap<TMLChannel, TMLChannel>(); for (String taskPatternName : _patternConfiguration.getPortsConnection().keySet()) { for (String[] pc : _patternConfiguration.getPortsConnection().get(taskPatternName)) { - if (clonedTasksToMap.contains(pc[1])) { + if (clonedChannelsToMap.contains(pc[1])) { TMLChannel chInPattern = tmlmPattern.getChannelByName(pc[0]); if (chInPattern != null) { String nameChInModel = pc[2]; @@ -1941,33 +1826,31 @@ public class PatternIntegration implements Runnable { } } return correspChannels; - } + }*/ // Find correspondence between channels of the pattern model and the channels of current Model public Map<TMLChannel, TMLChannel> correspondenceForChannels(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, PatternConfiguration _patternConfiguration, LinkedHashMap<String, TaskPattern> _patternTasks) { TMLModeling<?> tmlmModel = _tmapModel.getTMLModeling(); TMLModeling<?> tmlmPattern = _tmapPattern.getTMLModeling(); Map<TMLChannel, TMLChannel> correspChannels = new HashMap<TMLChannel, TMLChannel>(); - for (String taskPatternName : _patternConfiguration.getPortsConnection().keySet()) { - for (String[] pc : _patternConfiguration.getPortsConnection().get(taskPatternName)) { - TMLChannel chInPattern = tmlmPattern.getChannelByName(pc[0]); - if (chInPattern != null) { - String nameChInModel = pc[2]; - if (renamedChannels.containsKey(nameChInModel)) { - nameChInModel = renamedChannels.get(nameChInModel); - } - TMLChannel chInModel = tmlmModel.getChannelByName(nameChInModel); - if (chInModel != null) { - correspChannels.put(chInPattern, chInModel); - } - } + for (Entry<String, String> chTask : channelsOfPatternIntoModel.keySet()) { + TMLChannel chInPattern = tmlmPattern.getChannelByName(chTask.getValue()); + TMLChannel chInModel = tmlmModel.getChannelByName(channelsOfPatternIntoModel.get(chTask)); + if (chInModel != null && chInPattern != null) { + correspChannels.put(chInPattern, chInModel); } } - for (String taskName : _patternTasks.keySet()) { - for (PortTaskJsonFile portTask : _patternTasks.get(taskName).internalPorts) { - TMLChannel chInPattern = tmlmPattern.getChannelByName(portTask.name); - TMLChannel chInModel = tmlmModel.getChannelByName(portTask.name); - if (chInPattern != null && chInModel != null) { + for (PatternConnection patternConnection : _patternConfiguration.getPortsConnection()) { + if (!patternConnection.isANewChannelRequired(_patternConfiguration.getPortsConnection(), _patternTasks, _patternConfiguration.getClonedTasks())) { + String chNameInModel = patternConnection.getModelChannelName(); + String taskNameInModel = patternConnection.getModelTaskName(); + if (channelsClonedIntoModel.containsKey(Map.entry(taskNameInModel, chNameInModel))) { + chNameInModel = channelsClonedIntoModel.get(Map.entry(taskNameInModel, chNameInModel)); + } + + TMLChannel chInPattern = tmlmPattern.getChannelByName(patternConnection.getPatternChannel()); + TMLChannel chInModel = tmlmModel.getChannelByName(chNameInModel); + if (chInModel != null && chInPattern != null) { correspChannels.put(chInPattern, chInModel); } } @@ -1975,6 +1858,94 @@ public class PatternIntegration implements Runnable { return correspChannels; } + public TMLMapping<?> generateSecurityForChannels(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, PatternConfiguration _patternConfiguration, LinkedHashMap<String, TaskPattern> _patternTasks, String _appTabName) { + boolean hasSecChannel = false; + Map<TMLChannel, TMLChannel> correspChannels = correspondenceForChannels(_tmapModel, _tmapPattern, _patternConfiguration, _patternTasks); + for (PatternChannelWithSecurity channelWithSec : _patternConfiguration.getChannelsWithSecurity()) { + TMLChannel chSec = correspChannels.get(_tmapPattern.getChannelByName(channelWithSec.getChannelName())); + if (chSec != null) { + TraceManager.addDev("channelsWithSec = " + chSec.getName()); + if (channelWithSec.isConfidential()) { + TraceManager.addDev("channelsWithSec with conf "); + chSec.setEnsureConf(true); + chSec.checkConf = true; + } + if (channelWithSec.getAuthenticity() == PatternChannelWithSecurity.WEAK_AUTHENTICITY) { + TraceManager.addDev("channelsWithSec with weak auth "); + chSec.setEnsureWeakAuth(true); + chSec.checkAuth = true; + } + if (channelWithSec.getAuthenticity() == PatternChannelWithSecurity.STRONG_AUTHENTICITY) { + TraceManager.addDev("channelsWithSec with strong auth"); + chSec.setEnsureStrongAuth(true); + chSec.setEnsureWeakAuth(true); + chSec.checkAuth = true; + } + hasSecChannel = true; + } + } + if (hasSecChannel) { + TraceManager.addDev("hasSecChannel"); + if (_appTabName != "") { + TraceManager.addDev("appName=" + _appTabName); + for (TMLTask task : _tmapModel.getTMLModeling().getTasks()) { + String[] taskNameSplit = task.getName().split("__"); + if (taskNameSplit.length == 1) { + task.setName(_appTabName + "__" + task.getName()); + } + } + for (TMLChannel ch : _tmapModel.getTMLModeling().getChannels()) { + String[] channelNameSplit = ch.getName().split("__"); + if (channelNameSplit.length == 1) { + ch.setName(_appTabName + "__" + ch.getName()); + } + } + for (TMLEvent evt : _tmapModel.getTMLModeling().getEvents()) { + String[] eventNameSplit = evt.getName().split("__"); + if (eventNameSplit.length == 1) { + evt.setName(_appTabName + "__" + evt.getName()); + } + } + for (TMLRequest req : _tmapModel.getTMLModeling().getRequests()) { + String[] requestNameSplit = req.getName().split("__"); + if (requestNameSplit.length == 1) { + req.setName(_appTabName + "__" + req.getName()); + } + } + + SecurityGenerationForTMAP secgen = new SecurityGenerationForTMAP(_appTabName, _tmapModel, "100", "0", "100", new HashMap<String, java.util.List<String>>()); + _tmapModel = secgen.startThread(); + _tmapModel = secgen.autoMapKeys(); + for (TMLTask task : _tmapModel.getTMLModeling().getTasks()) { + String[] taskNameSplit = task.getName().split("__"); + task.setName(taskNameSplit[taskNameSplit.length-1]); + } + for (TMLChannel ch : _tmapModel.getTMLModeling().getChannels()) { + String[] channelNameSplit = ch.getName().split("__"); + ch.setName(channelNameSplit[channelNameSplit.length-1]); + } + for (TMLEvent evt : _tmapModel.getTMLModeling().getEvents()) { + String[] eventNameSplit = evt.getName().split("__"); + evt.setName(eventNameSplit[eventNameSplit.length-1]); + } + for (TMLRequest req : _tmapModel.getTMLModeling().getRequests()) { + String[] requestNameSplit = req.getName().split("__"); + req.setName(requestNameSplit[requestNameSplit.length-1]); + } + } + } + return _tmapModel; + } + + public static <T, E> T getKeyByValue(Map<T, E> map, E value) { + for (Entry<T, E> entry : map.entrySet()) { + if (Objects.equals(value, entry.getValue())) { + return entry.getKey(); + } + } + return null; + } + @SuppressWarnings("unchecked") public TMLMapping<?> getTMLMappingOfPattern(String _path, String fileName) { TMLMappingTextSpecification<Class<?>> tmts = new TMLMappingTextSpecification<Class<?>>(fileName); diff --git a/src/main/java/tmltranslator/patternhandling/PatternPortsConfig.java b/src/main/java/tmltranslator/patternhandling/PatternPortsConfig.java index 217e90fae2a4c0de6ca81f959e25bd175df827dc..ccea9e5d7e20edc9590c51854473bcd4829de6e0 100644 --- a/src/main/java/tmltranslator/patternhandling/PatternPortsConfig.java +++ b/src/main/java/tmltranslator/patternhandling/PatternPortsConfig.java @@ -1,6 +1,6 @@ package tmltranslator.patternhandling; /** - * Class MappingPatternTask + * Class PatternPortsConfig * * Creation: 25/10/2023 * @@ -8,21 +8,26 @@ package tmltranslator.patternhandling; * @version 1.0 25/10/2023 */ -import myutil.TraceManager; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; + import tmltranslator.*; public class PatternPortsConfig { + public final static String REMOVE_PORT_OPTION = " Remove"; + public final static String MERGE_PORT_OPTION = " Merge with "; + public final static String TASK_CHANNEL_SEPARATOR = "::"; + String taskOfChannelToConfig; String channelToConfig; Boolean isChannelToRemove; String mergeWith; - public PatternPortsConfig(String taskOfChannelToConfig, String channelToConfig, Boolean isChannelToRemove, String mergeWith) { + public PatternPortsConfig(String taskOfChannelToConfig, String channelToConfig) { this.taskOfChannelToConfig = taskOfChannelToConfig; this.channelToConfig = channelToConfig; - this.isChannelToRemove = isChannelToRemove; - this.mergeWith = mergeWith; } public String getTaskOfChannelToConfig() { @@ -52,10 +57,108 @@ public class PatternPortsConfig { public void setIsChannelToRemove(Boolean _isChannelToRemove) { isChannelToRemove = _isChannelToRemove; + mergeWith = null; } public void setMergeWith(String _mergeWith) { mergeWith = _mergeWith; + isChannelToRemove = false; } + public String getStringDisplay() { + if (isChannelToRemove) { + return (taskOfChannelToConfig + TASK_CHANNEL_SEPARATOR + channelToConfig + REMOVE_PORT_OPTION); + } else { + return (taskOfChannelToConfig + TASK_CHANNEL_SEPARATOR + channelToConfig + MERGE_PORT_OPTION + mergeWith); + } + } + + public String getTaskChannelToConfig() { + return (taskOfChannelToConfig + TASK_CHANNEL_SEPARATOR + channelToConfig); + } + + public static String[] seperateTaskAndChannel(String st) { + String[] split = st.split(TASK_CHANNEL_SEPARATOR); + String task, channel; + if (split.length == 2) { + task = split[0]; + channel = split[1]; + return new String[]{task, channel}; + } else { + return null; + } + } + + public static List<PatternPortsConfig> getPortsToConfig(LinkedHashMap<String, TaskPorts> _portsTaskOfModelAll, LinkedHashMap<String, TaskPorts> _portsTaskOfModelLeft, List<String> clonedTasks, TMLModeling<?> tmlmodel) { + List<PatternPortsConfig> portsToConf = new ArrayList<PatternPortsConfig>(); + for (String task : _portsTaskOfModelLeft.keySet()) { + if (!clonedTasks.contains(task)) { + TMLTask tmlTask = tmlmodel.getTMLTaskByName(task); + TaskPorts pt = _portsTaskOfModelLeft.get(task); + if (tmlTask != null) { + for (String wc : pt.getWriteChannels()) { + for (int i = 0; i < tmlTask.getWriteChannels().size() ; i++) { + if (tmlTask.getWriteChannels().get(i).getChannel(0).getName().equals(wc)) { + for (String taskAll : _portsTaskOfModelAll.keySet()) { + if (!clonedTasks.contains(taskAll) && _portsTaskOfModelAll.get(taskAll).getReadChannels().contains(wc) && !_portsTaskOfModelLeft.get(taskAll).getReadChannels().contains(wc)) { + PatternPortsConfig patternPortsConfig = new PatternPortsConfig(task, wc); + if (!portsToConf.contains(patternPortsConfig)) { + portsToConf.add(patternPortsConfig); + } + } + } + } + } + } + + for (String rc : pt.getReadChannels()) { + for (int i = 0; i < tmlTask.getReadChannels().size() ; i++) { + if (tmlTask.getReadChannels().get(i).getChannel(0).getName().equals(rc)) { + for (String taskAll : _portsTaskOfModelAll.keySet()) { + if (!clonedTasks.contains(taskAll) && _portsTaskOfModelAll.get(taskAll).getWriteChannels().contains(rc) && !_portsTaskOfModelLeft.get(taskAll).getWriteChannels().contains(rc)) { + PatternPortsConfig patternPortsConfig = new PatternPortsConfig(task, rc); + if (!portsToConf.contains(patternPortsConfig)) { + portsToConf.add(patternPortsConfig); + } + } + } + } + } + } + + for (String se : pt.getSendEvents()) { + for (int i = 0; i < tmlTask.getSendEvents().size() ; i++) { + if (tmlTask.getSendEvents().get(i).getEvent().getName().equals(se)) { + for (String taskAll : _portsTaskOfModelAll.keySet()) { + if (!clonedTasks.contains(taskAll) && _portsTaskOfModelAll.get(taskAll).getWaitEvents().contains(se) && !_portsTaskOfModelLeft.get(taskAll).getWaitEvents().contains(se)) { + PatternPortsConfig patternPortsConfig = new PatternPortsConfig(task, se); + if (!portsToConf.contains(patternPortsConfig)) { + portsToConf.add(patternPortsConfig); + } + } + } + } + } + } + for (String we : pt.getWaitEvents()) { + for (int i = 0; i < tmlTask.getWaitEvents().size() ; i++) { + if (tmlTask.getWaitEvents().get(i).getEvent().getName().equals(we)) { + for (String taskAll : _portsTaskOfModelAll.keySet()) { + if (!clonedTasks.contains(taskAll) && _portsTaskOfModelAll.get(taskAll).getSendEvents().contains(we) && !_portsTaskOfModelLeft.get(taskAll).getSendEvents().contains(we)) { + PatternPortsConfig patternPortsConfig = new PatternPortsConfig(task, we); + if (!portsToConf.contains(patternPortsConfig)) { + portsToConf.add(patternPortsConfig); + } + } + } + } + } + } + + } + } + } + + return portsToConf; + } } diff --git a/src/main/java/tmltranslator/patternhandling/PortTaskJsonFile.java b/src/main/java/tmltranslator/patternhandling/PortTaskJsonFile.java index 8c90067a0bdef068e38270fb1d0449c6ba030a7e..8d64f29253c1b56d45ec64a587ce1c91e48674ac 100644 --- a/src/main/java/tmltranslator/patternhandling/PortTaskJsonFile.java +++ b/src/main/java/tmltranslator/patternhandling/PortTaskJsonFile.java @@ -8,7 +8,6 @@ package tmltranslator.patternhandling; * @version 1.0 28/08/2023 */ -import myutil.TraceManager; import tmltranslator.*; diff --git a/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java b/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java index 04f0cbaa9d51f2de6f501f4397a5b30df2090bf1..bc792153bc3cd74c7029fe01b34916548bd3dc76 100644 --- a/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java +++ b/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java @@ -18,8 +18,6 @@ import ui.TGComponent; import java.io.Reader; import java.util.*; -import org.apache.batik.anim.timing.Trace; - public class SecurityGenerationForTMAP implements Runnable { String appName; diff --git a/src/main/java/tmltranslator/patternhandling/TaskPorts.java b/src/main/java/tmltranslator/patternhandling/TaskPorts.java index 969599977146b2b409a6f02e45c17f2178ad8c55..b08ced5c06ce10d6a3fbd48968a914273d8be73b 100644 --- a/src/main/java/tmltranslator/patternhandling/TaskPorts.java +++ b/src/main/java/tmltranslator/patternhandling/TaskPorts.java @@ -8,17 +8,10 @@ package tmltranslator.patternhandling; * @version 1.0 07/09/2023 */ -import myutil.TraceManager; import tmltranslator.*; -import java.io.IOException; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.*; -import org.json.JSONArray; - public class TaskPorts { List<String> writeChannels = new ArrayList<String>(); List<String> readChannels = new ArrayList<String>(); diff --git a/src/main/java/ui/GTURTLEModeling.java b/src/main/java/ui/GTURTLEModeling.java index 4d8f67e42a074f65b3210095e113692e673c6aa6..d7d38824aa92c82354b4539618021c9ac0e200b6 100644 --- a/src/main/java/ui/GTURTLEModeling.java +++ b/src/main/java/ui/GTURTLEModeling.java @@ -76,7 +76,6 @@ import tmltranslator.patternhandling.PatternConfig2Json; import tmltranslator.patternhandling.PatternConfiguration; import tmltranslator.patternhandling.PatternCreation; import tmltranslator.patternhandling.PatternIntegration; -import tmltranslator.patternhandling.PortTaskJsonFile; import tmltranslator.patternhandling.SecurityGenerationForTMAP; import tmltranslator.patternhandling.TMRGeneration; import tmltranslator.patternhandling.TaskPattern; @@ -1637,7 +1636,7 @@ public class GTURTLEModeling { } @SuppressWarnings("unchecked") - public void createPattern(MainGUI gui, List<String> selectedTasks, String patternName, String patternsPath) { + public void createPattern(List<String> selectedTasks, String patternName, String patternsPath) { PatternCreation pattern = new PatternCreation(selectedTasks, patternName, patternsPath, tmap); pattern.startThread(); } @@ -1659,111 +1658,6 @@ public class GTURTLEModeling { LinkedHashMap<String, TaskPattern> patternTasks = TaskPattern.parsePatternJsonFile(patternPath, patternName+".json"); PatternIntegration patternInteg = new PatternIntegration(patternPath, patternName, patternConfiguration, patternTasks, tmap); tmap = (TMLMapping<TGComponent>) patternInteg.startThread(); - - LinkedHashMap<String, List<PortTaskJsonFile>> channelsWithSec = patternConfiguration.getChannelsWithSecurity(); - boolean hasSecChannel = false; - for (String taskOfChannelWithSec : channelsWithSec.keySet()) { - for (PortTaskJsonFile portTask : channelsWithSec.get(taskOfChannelWithSec)) { - TMLChannel chSec = tmap.getChannelByName(portTask.getName()); - for (TMLChannel chann : tmap.getTMLModeling().getChannels()) { - TraceManager.addDev("chann= " + chann.getName()); - } - TraceManager.addDev("portTask = " + portTask.getName()); - if (chSec != null) { - TraceManager.addDev("channelsWithSec = " + chSec.getName()); - if (portTask.getConfidentiality().toUpperCase().equals(PatternCreation.WITH_CONFIDENTIALITY.toUpperCase())) { - TraceManager.addDev("channelsWithSec with conf "); - chSec.setEnsureConf(true); - chSec.checkConf = true; - } - if (portTask.getAuthenticity().toUpperCase().equals(PatternCreation.WEAK_AUTHENTICITY.toUpperCase())) { - TraceManager.addDev("channelsWithSec with weak auth "); - chSec.setEnsureWeakAuth(true); - chSec.checkAuth = true; - } - if (portTask.getAuthenticity().toUpperCase().equals(PatternCreation.STRONG_AUTHENTICITY.toUpperCase())) { - TraceManager.addDev("channelsWithSec with strong auth"); - chSec.setEnsureStrongAuth(true); - chSec.setEnsureWeakAuth(true); - chSec.checkAuth = true; - } - - //tmap = autoSecure(gui, "", tmap, arch, "100", "0", "100", confToCheck, authWeakToCheck, authStrongToCheck, new HashMap<String, java.util.List<String>>()); - - - //GTMLModeling gtm = new GTMLModeling(newarch, true); - //tmap = gtm.translateToTMLMapping(true, true); - //listE = gtm.getCorrespondanceTable(); - /*TMLModeling<?> tmlmNew = tmap.getTMLModeling(); - for (TMLTask task : tmlmNew.getTasks()) { - String[] taskNameSplit = task.getName().split("__"); - task.setName(taskNameSplit[taskNameSplit.length-1]); - } - for (TMLChannel ch : tmlmNew.getChannels()) { - String[] channelNameSplit = ch.getName().split("__"); - ch.setName(channelNameSplit[channelNameSplit.length-1]); - } - for (TMLEvent evt : tmlmNew.getEvents()) { - String[] eventNameSplit = evt.getName().split("__"); - evt.setName(eventNameSplit[eventNameSplit.length-1]); - } - for (TMLRequest req : tmlmNew.getRequests()) { - String[] requestNameSplit = req.getName().split("__"); - req.setName(requestNameSplit[requestNameSplit.length-1]); - }*/ - hasSecChannel = true; - } - } - } - if (hasSecChannel) { - TraceManager.addDev("hasSecChannel"); - if (appTabName != "") { - TraceManager.addDev("appName="+appTabName); - for (TMLTask task : tmap.getTMLModeling().getTasks()) { - String[] taskNameSplit = task.getName().split("__"); - if (taskNameSplit.length == 1) { - task.setName(appTabName + "__" + task.getName()); - } - } - for (TMLChannel ch : tmap.getTMLModeling().getChannels()) { - String[] channelNameSplit = ch.getName().split("__"); - if (channelNameSplit.length == 1) { - ch.setName(appTabName + "__" + ch.getName()); - } - } - for (TMLEvent evt : tmap.getTMLModeling().getEvents()) { - String[] eventNameSplit = evt.getName().split("__"); - if (eventNameSplit.length == 1) { - evt.setName(appTabName + "__" + evt.getName()); - } - } - for (TMLRequest req : tmap.getTMLModeling().getRequests()) { - String[] requestNameSplit = req.getName().split("__"); - if (requestNameSplit.length == 1) { - req.setName(appTabName + "__" + req.getName()); - } - } - } - SecurityGenerationForTMAP secgen = new SecurityGenerationForTMAP(appTabName, tmap, "100", "0", "100", new HashMap<String, java.util.List<String>>()); - tmap = (TMLMapping<TGComponent>) secgen.startThread(); - tmap = (TMLMapping<TGComponent>) secgen.autoMapKeys(); - for (TMLTask task : tmap.getTMLModeling().getTasks()) { - String[] taskNameSplit = task.getName().split("__"); - task.setName(taskNameSplit[taskNameSplit.length-1]); - } - for (TMLChannel ch : tmap.getTMLModeling().getChannels()) { - String[] channelNameSplit = ch.getName().split("__"); - ch.setName(channelNameSplit[channelNameSplit.length-1]); - } - for (TMLEvent evt : tmap.getTMLModeling().getEvents()) { - String[] eventNameSplit = evt.getName().split("__"); - evt.setName(eventNameSplit[eventNameSplit.length-1]); - } - for (TMLRequest req : tmap.getTMLModeling().getRequests()) { - String[] requestNameSplit = req.getName().split("__"); - req.setName(requestNameSplit[requestNameSplit.length-1]); - } - } try { String archTabName = ((CorrespondanceTGElement)(tmap.getCorrespondanceList())).getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp.getNameOfTab(); gui.drawTMLAndTMAPSpecification(tmap, appTabName + "_" + patternName, archTabName + "_" + patternName); diff --git a/src/main/java/ui/window/JDialogPatternHandling.java b/src/main/java/ui/window/JDialogPatternHandling.java index a3e404e97f71ebbc27a27ebfbfa77877401a0e4e..4afedfce7b40e4b746d2f135269776c9758d4a73 100644 --- a/src/main/java/ui/window/JDialogPatternHandling.java +++ b/src/main/java/ui/window/JDialogPatternHandling.java @@ -123,8 +123,14 @@ import tmltranslator.TMLTask; import tmltranslator.TMLWaitEvent; import tmltranslator.TMLWriteChannel; import tmltranslator.patternhandling.AttributeTaskJsonFile; +import tmltranslator.patternhandling.MappingPatternChannel; +import tmltranslator.patternhandling.MappingPatternTask; +import tmltranslator.patternhandling.PatternChannelWithSecurity; +import tmltranslator.patternhandling.PatternCloneTask; import tmltranslator.patternhandling.PatternConfiguration; +import tmltranslator.patternhandling.PatternConnection; import tmltranslator.patternhandling.PatternCreation; +import tmltranslator.patternhandling.PatternPortsConfig; import tmltranslator.patternhandling.PortTaskJsonFile; import tmltranslator.patternhandling.TaskPattern; import tmltranslator.patternhandling.TaskPorts; @@ -153,22 +159,6 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L protected final static int NOT_STARTED = 1; protected final static int STARTED = 2; protected final static int STOPPED = 3; - - public final static String CLONE_TASK_SEPARATOR = " clone of "; - public final static String TASK_CHANNEL_SEPARATOR = "::"; - public final static String PORT_CONNECTION_SEPARATOR = " <-> "; - public final static String NEW_PORT_OPTION = " New port"; - public final static String REMOVE_PORT_OPTION = "Remove"; - public final static String MERGE_PORT_OPTION = "Merge with "; - public final static String PORT_CONFIGURATION_SEPARATOR = " "; - public final static String MAP_TASK_IN_SAME_HW_SEPARATOR = " mapped in the same HW as "; - public final static String MAP_TASK_IN_NEW_HW_SEPARATOR = " mapped in a new HW linked to "; - public final static String SAME_HW = "SAME"; - public final static String NEW_HW = "NEW"; - public final static String MAP_CHANNEL_IN_SAME_MEMORY_SEPARATOR = " mapped in the same Memory as "; - public final static String MAP_CHANNEL_IN_NEW_MEMORY_SEPARATOR = " mapped in a new memory linked to "; - public final static String SAME_MEMORY = "SAME"; - public final static String NEW_MEMORY = "NEW"; String pathPatterns; TURTLEPanel currPanel; @@ -207,7 +197,7 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L JComboBox<String> jComboBoxAddAuthenticity; JList<String> jListConnectedPorts; Vector<String> connectedPorts = new Vector<String>(); - Vector<String> connectedPortsFull = new Vector<String>(); + List<PatternConnection> patternConnectionList = new ArrayList<PatternConnection>(); JButton addConnectionBetweenSelectedPorts, removeConnectionBetweenPorts; //JPanel jPanelPatternIntegration; JButton buttonCloneTask, buttonAddPortInTask; @@ -221,6 +211,7 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L JComboBox<String> jComboBoxPortsConfigMerge; JList<String> jListConfigPorts; Vector<String> configuredPorts = new Vector<String>(); + List<PatternPortsConfig> configuredPortsList = new ArrayList<PatternPortsConfig>(); JButton addConfigPorts, removeConfigPorts; JButton buttonTasksMapInArch; JButton buttonChannelsMapInArch; @@ -234,12 +225,14 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L JButton addClonedTask, removeClonedTask; JList<String> jListClonedTasks; Vector<String> clonedTasks = new Vector<String>(); - Vector<String> clonedTasksName = new Vector<String>(); + List<PatternCloneTask> clonedTasksList = new ArrayList<PatternCloneTask>(); ButtonGroup mapTaskGroup; JRadioButton jRadioMapTaskInExistingHw, jRadioMapTaskInNewHw; Vector<String> tasksToMap = new Vector<String>(); + List<MappingPatternTask> tasksToMapList = new ArrayList<MappingPatternTask>(); Vector<String> tasksToMapInSameHw = new Vector<String>(); + List<MappingPatternTask> tasksToMapInSameHwList = new ArrayList<MappingPatternTask>(); Vector<String> busToLinkNewHw = new Vector<String>(); DefaultComboBoxModel<String> modelTaskToMap = new DefaultComboBoxModel<>(tasksToMap); DefaultComboBoxModel<String> modelMapTaskInSameHwAs = new DefaultComboBoxModel<>(tasksToMapInSameHw); @@ -247,11 +240,14 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L JButton addMappedTask, removeMappedTask; JList<String> jListMappedTasks; Vector<String> mappedTasks = new Vector<String>(); + List<MappingPatternTask> mappedTasksList = new ArrayList<MappingPatternTask>(); ButtonGroup mapChannelGroup; JRadioButton jRadioMapChannelInExistingMem, jRadioMapChannelInNewMem; Vector<String> channelsToMap = new Vector<String>(); + List<MappingPatternChannel> channelsToMapList = new ArrayList<MappingPatternChannel>(); Vector<String> channelsToMapInSameMem = new Vector<String>(); + List<MappingPatternChannel> channelsToMapInSameMemList = new ArrayList<MappingPatternChannel>(); Vector<String> busToLinkNewMem = new Vector<String>(); DefaultComboBoxModel<String> modelChannelToMap = new DefaultComboBoxModel<>(channelsToMap); DefaultComboBoxModel<String> modelMapChannelInSameMemAs = new DefaultComboBoxModel<>(channelsToMapInSameMem); @@ -259,6 +255,7 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L JButton addMappedChannel, removeMappedChannel; JList<String> jListMappedChannels; Vector<String> mappedChannels = new Vector<String>(); + List<MappingPatternChannel> mappedChannelsList = new ArrayList<MappingPatternChannel>(); Vector<String> tasksToUpdateAttributes = new Vector<String>(); DefaultComboBoxModel<String> modelTasksToUpdateAttributes = new DefaultComboBoxModel<>(tasksToUpdateAttributes); @@ -278,9 +275,9 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L LinkedHashMap<String, TaskPattern> patternTasksNotConnected = new LinkedHashMap<String, TaskPattern>(); LinkedHashMap<String, TaskPorts> portsTaskOfModelAll = new LinkedHashMap<String, TaskPorts>(); LinkedHashMap<String, TaskPorts> portsTaskOfModelLeft = new LinkedHashMap<String, TaskPorts>(); - LinkedHashMap<String, TaskPorts> portsTaskConfig = new LinkedHashMap<String, TaskPorts>(); + List<PatternPortsConfig> portsTaskConfig = new ArrayList<PatternPortsConfig>(); LinkedHashMap<String, List<AttributeTaskJsonFile>> updatedPatternAttributes = new LinkedHashMap<String, List<AttributeTaskJsonFile>>(); - LinkedHashMap<String, List<PortTaskJsonFile>> channelsWithSecurity = new LinkedHashMap<String, List<PortTaskJsonFile>>(); + List<PatternChannelWithSecurity> channelsWithSecurity = new ArrayList<PatternChannelWithSecurity>(); List<String> busesOfModel = new ArrayList<String>(); @@ -363,30 +360,6 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L return listBusName; } - Vector<String> getListChannelsBetweenTwoTasks(String originTaskName, String destinationTaskName) { - Vector<String> channels = new Vector<String>(); - if (mgui.gtm.getTMLMapping().getTaskByName(originTaskName) != null && mgui.gtm.getTMLMapping().getTaskByName(destinationTaskName) != null) { - if (mgui.gtm.getTMLMapping().getTaskByName(originTaskName).getWriteChannels().size() > 0) { - for (int i=0; i < mgui.gtm.getTMLMapping().getTaskByName(destinationTaskName).getReadChannels().size(); i++) { - for (int j=0 ; j < mgui.gtm.getTMLMapping().getTaskByName(destinationTaskName).getReadChannels().get(i).getNbOfChannels(); j++) { - for (int k=0; k < mgui.gtm.getTMLMapping().getTaskByName(originTaskName).getWriteChannels().size(); k++) { - for (int l=0; l < mgui.gtm.getTMLMapping().getTaskByName(originTaskName).getWriteChannels().get(k).getNbOfChannels(); l++) { - if (mgui.gtm.getTMLMapping().getTaskByName(originTaskName).getWriteChannels().get(k).getChannel(l) == mgui.gtm.getTMLMapping().getTaskByName(destinationTaskName).getReadChannels().get(i).getChannel(j)) { - String channelLongName = mgui.gtm.getTMLMapping().getTaskByName(destinationTaskName).getReadChannels().get(i).getChannel(j).getName(); - String channelShortName = channelLongName.split("__")[channelLongName.split("__").length - 1]; - if (!channels.contains(channelShortName)) { - channels.add(channelShortName); - } - } - } - } - } - } - } - } - return channels; - } - Vector<String> getFoldersName(String path) { Vector<String> folders = new Vector<String>(); File directoryPath = new File(path); @@ -1394,10 +1367,11 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L String patternTaskPortName = jComboBoxPatternExternalPortOfATask.getSelectedItem().toString(); String modelTaskName = jComboBoxModelsTask.getSelectedItem().toString(); String modelTaskPortName = jComboBoxModelsPortOfTask.getSelectedItem().toString(); - - if (!jCheckBoxConnectToNewPort.isSelected()) { - connectedPorts.add(patternTaskName+TASK_CHANNEL_SEPARATOR+patternTaskPortName+PORT_CONNECTION_SEPARATOR+modelTaskName+TASK_CHANNEL_SEPARATOR+modelTaskPortName); - connectedPortsFull.add(patternTaskName+TASK_CHANNEL_SEPARATOR+patternTaskPortName+PORT_CONNECTION_SEPARATOR+modelTaskName+TASK_CHANNEL_SEPARATOR+modelTaskPortName); + Boolean isNewPort = jCheckBoxConnectToNewPort.isSelected(); + PatternConnection patternConnection = new PatternConnection(patternTaskName, patternTaskPortName, modelTaskName, modelTaskPortName, isNewPort); + + connectedPorts.add(patternConnection.getStringDisplay()); + if (!isNewPort) { TaskPorts pt = portsTaskOfModelLeft.get(modelTaskName); if (pt.getWriteChannels().contains(modelTaskPortName)) { pt.getWriteChannels().remove(modelTaskPortName); @@ -1408,9 +1382,6 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L } else if (pt.getWaitEvents().contains(modelTaskPortName)) { pt.getWaitEvents().remove(modelTaskPortName); } - } else { - connectedPorts.add(patternTaskName+TASK_CHANNEL_SEPARATOR+patternTaskPortName + PORT_CONNECTION_SEPARATOR +modelTaskName+ TASK_CHANNEL_SEPARATOR+patternTaskPortName+ NEW_PORT_OPTION); - connectedPortsFull.add(patternTaskName+TASK_CHANNEL_SEPARATOR+patternTaskPortName + PORT_CONNECTION_SEPARATOR +modelTaskName+ TASK_CHANNEL_SEPARATOR+modelTaskPortName+ NEW_PORT_OPTION); } TaskPattern tp = patternTasksNotConnected.get(patternTaskName); int indexElemToRemove = -1; @@ -1420,8 +1391,6 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L break; } } - TraceManager.addDev("indexElemToRemove="+indexElemToRemove); - TraceManager.addDev("tp.getExternalPorts().size()="+tp.getExternalPorts().size()); if (indexElemToRemove >= 0) { tp.getExternalPorts().remove(indexElemToRemove); } @@ -1448,6 +1417,8 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L } } } + + patternConnectionList.add(patternConnection); /*if (jCheckBoxAddConfidentiality.isSelected() || (jComboBoxAddAuthenticity.getSelectedIndex() >= 0 && !jComboBoxAddAuthenticity.getSelectedItem().toString().toUpperCase().equals(PatternCreation.WITHOUT_AUTHENTICITY.toUpperCase()))) { if (channelsWithSecurity.containsKey(patternTaskName)) { @@ -1504,21 +1475,13 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L private void removeConnectionBetweenPorts() { int[] list = jListConnectedPorts.getSelectedIndices(); - Vector<String> v = new Vector<String>(); - Vector<String> vFull = new Vector<String>(); - String o, oFull; + List<PatternConnection> patternConnectionsToRemove = new ArrayList<PatternConnection>(); for (int i = 0; i < list.length; i++) { - o = connectedPorts.elementAt(list[i]); - oFull = connectedPortsFull.elementAt(list[i]); - - String[] splitO = o.split(TASK_CHANNEL_SEPARATOR, 2); - String patternTaskName = splitO[0]; - String[] splitCom = splitO[1].split(PORT_CONNECTION_SEPARATOR, 2); - String patternTaskPortName = splitCom[0]; - String[] splitComModel = splitCom[1].split(TASK_CHANNEL_SEPARATOR, 2); - String modelTaskName = splitComModel[0]; - String[] splitComModelPort = splitComModel[1].split(NEW_PORT_OPTION, 2); - String modelTaskPortName = splitComModelPort[0]; + PatternConnection patternConnection = patternConnectionList.get(list[i]); + String patternTaskName = patternConnection.getPatternTaskName(); + String patternTaskPortName = patternConnection.getPatternChannel(); + String modelTaskName = patternConnection.getModelTaskName(); + String modelTaskPortName = patternConnection.getModelChannelName(); for (String patternTask : patternTasksAll.keySet()) { for (PortTaskJsonFile portTaskJsonFile : patternTasksAll.get(patternTask).getExternalPorts()) { if (portTaskJsonFile.getName().equals(patternTaskPortName)) { @@ -1540,7 +1503,7 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L } } } - if (splitComModelPort.length == 1) { + if (!patternConnection.isNewPort()) { TaskPorts pt = portsTaskOfModelLeft.get(modelTaskName); TaskPorts ptAll = portsTaskOfModelAll.get(modelTaskName); if (ptAll.getWriteChannels().contains(modelTaskPortName)) { @@ -1553,14 +1516,12 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L pt.getWaitEvents().add(modelTaskPortName); } } - - v.addElement(o); - vFull.addElement(oFull); + connectedPorts.remove(list[i]); + patternConnectionsToRemove.add(patternConnection); jComboBoxPatternsTaskWithExternalPort.setSelectedIndex(-1); jCheckBoxConnectToNewPort.setSelected(false); } - connectedPorts.removeAll(v); - connectedPortsFull.removeAll(vFull); + patternConnectionList.removeAll(patternConnectionsToRemove); jListConnectedPorts.setListData(connectedPorts); setButtons(); } @@ -1570,8 +1531,9 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L String nameNewTaskToClone = jFieldNewClonedTaskName.getText(); if (!tasksCanBeCloned.contains(nameNewTaskToClone) && !tasksOfModel.contains(nameNewTaskToClone) && !nameNewTaskToClone.contains(" ")) { - clonedTasks.add(nameNewTaskToClone + CLONE_TASK_SEPARATOR + selectedTaskToClone); - clonedTasksName.add(nameNewTaskToClone); + PatternCloneTask patternCloneTask = new PatternCloneTask(nameNewTaskToClone, selectedTaskToClone); + clonedTasks.add(patternCloneTask.getStringDisplay()); + clonedTasksList.add(patternCloneTask); List<String> wcs = new ArrayList<String>(portsTaskOfModelAll.get(selectedTaskToClone).getWriteChannels()); List<String> rcs = new ArrayList<String>(portsTaskOfModelAll.get(selectedTaskToClone).getReadChannels()); List<String> ses = new ArrayList<String>(portsTaskOfModelAll.get(selectedTaskToClone).getSendEvents()); @@ -1597,35 +1559,19 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L private void removeClonedTask() { int[] list = jListClonedTasks.getSelectedIndices(); - Vector<String> v = new Vector<String>(); - Vector<String> vName = new Vector<String>(); - String o; + List<PatternCloneTask> patternCloneTasksToRemove = new ArrayList<PatternCloneTask>(); for (int i = 0; i < list.length; i++) { - String[] splitS = clonedTasks.elementAt(list[i]).split(CLONE_TASK_SEPARATOR); - o = splitS[0]; - v.addElement(clonedTasks.elementAt(list[i])); - vName.addElement(clonedTasksName.elementAt(list[i])); - portsTaskOfModelLeft.remove(o); - portsTaskOfModelAll.remove(o); - Vector<String> vConn = new Vector<String>(); - Vector<String> vConnFull = new Vector<String>(); - int indexC = 0; - for (String st : connectedPorts) { - String[] splitO = st.split(TASK_CHANNEL_SEPARATOR, 2); - String patternTaskName = splitO[0]; - String[] splitCom = splitO[1].split(PORT_CONNECTION_SEPARATOR, 2); - String patternTaskPortName = splitCom[0]; - String[] splitComModel = splitCom[1].split(TASK_CHANNEL_SEPARATOR, 2); - String modelTaskName = splitComModel[0]; - String[] splitComModelPort = splitComModel[1].split(NEW_PORT_OPTION, 2); - String modelTaskPortName = splitComModelPort[0]; - - /*String[] splitO = st.split(" "); - String patternTaskName = splitO[0]; - String patternTaskPortName = splitO[1]; - String modelTaskName = splitO[3]; - String modelTaskPortName = splitO[4];*/ - if (modelTaskName.equals(o)) { + PatternCloneTask patternCloneTask = clonedTasksList.get(list[i]); + patternCloneTasksToRemove.add(patternCloneTask); + portsTaskOfModelLeft.remove(patternCloneTask.getClonedTask()); + portsTaskOfModelAll.remove(patternCloneTask.getClonedTask()); + List<PatternConnection> patternConnectionsToRemove = new ArrayList<PatternConnection>(); + for (PatternConnection pConnection : patternConnectionList) { + String patternTaskName = pConnection.getPatternTaskName(); + String patternTaskPortName = pConnection.getPatternChannel(); + String modelTaskName = pConnection.getModelTaskName(); + + if (modelTaskName.equals(patternCloneTask.getClonedTask())) { for (String patternTask : patternTasksAll.keySet()) { for (PortTaskJsonFile portTaskJsonFile : patternTasksAll.get(patternTask).getExternalPorts()) { if (portTaskJsonFile.getName().equals(patternTaskPortName)) { @@ -1647,18 +1593,16 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L } } } - vConn.addElement(st); - vConnFull.addElement(connectedPortsFull.get(indexC)); + connectedPorts.remove(pConnection.getStringDisplay()); + patternConnectionsToRemove.add(pConnection); } - indexC += 1; } - connectedPorts.removeAll(vConn); - connectedPortsFull.removeAll(vConnFull); + clonedTasks.remove(list[i]); + patternConnectionList.removeAll(patternConnectionsToRemove); jListConnectedPorts.setListData(connectedPorts); } + clonedTasksList.removeAll(patternCloneTasksToRemove); - clonedTasks.removeAll(v); - clonedTasksName.removeAll(vName); tasksOfModel.removeAllElements(); for (String pTaskName : portsTaskOfModelLeft.keySet()) { tasksOfModel.add(pTaskName); @@ -1667,134 +1611,17 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L setButtons(); } - LinkedHashMap<String, TaskPorts> getPortsToConfig(LinkedHashMap<String, TaskPorts> _portsTaskOfModelAll, LinkedHashMap<String, TaskPorts> _portsTaskOfModelLeft, TMLModeling<?> tmlmodel) { - LinkedHashMap<String, TaskPorts> portsToConf = new LinkedHashMap<String, TaskPorts>(); - for (String task : _portsTaskOfModelLeft.keySet()) { - if (!clonedTasksName.contains(task)) { - TraceManager.addDev("getPortsToConfig: task=" + task); - TMLTask tmlTask = tmlmodel.getTMLTaskByName(task); - TaskPorts pt = _portsTaskOfModelLeft.get(task); - if (tmlTask != null) { - for (String wc : pt.getWriteChannels()) { - //TraceManager.addDev("getPortsToConfig: wc=" + wc); - for (int i = 0; i < tmlTask.getWriteChannels().size() ; i++) { - //TraceManager.addDev("getPortsToConfig: tmlTask.getWriteChannels()=" + tmlTask.getWriteChannels().get(i).getChannel(0).getName()); - if (tmlTask.getWriteChannels().get(i).getChannel(0).getName().equals(wc)) { - for (String taskAll : _portsTaskOfModelAll.keySet()) { - //String destPortName = tmlTask.getWriteChannels().get(i).getChannel(0).getDestinationPort().getName(); - //TraceManager.addDev("getPortsToConfig: destPortName=" + destPortName); - if (_portsTaskOfModelAll.get(taskAll).getReadChannels().contains(wc) && !_portsTaskOfModelLeft.get(taskAll).getReadChannels().contains(wc)) { - if (portsToConf.containsKey(task)) { - if (!portsToConf.get(task).getWriteChannels().contains(wc)) { - portsToConf.get(task).getWriteChannels().add(wc); - //TraceManager.addDev("getPortsToConfig: add wc=" + wc); - } - } else { - List<String> writeChannels = new ArrayList<String>(Arrays.asList(wc)); - List<String> readChannels = new ArrayList<String>(); - List<String> sendEvents = new ArrayList<String>(); - List<String> waitEvents = new ArrayList<String>(); - TaskPorts portTask = new TaskPorts(writeChannels, readChannels, sendEvents, waitEvents); - portsToConf.put(task, portTask); - //TraceManager.addDev("getPortsToConfig: new task add wc=" + wc); - } - } - } - } - } - } - - for (String rc : pt.getReadChannels()) { - TraceManager.addDev("getPortsToConfig: rc=" + rc); - for (int i = 0; i < tmlTask.getReadChannels().size() ; i++) { - TraceManager.addDev("getPortsToConfig: tmlTask.getReadChannels()=" + tmlTask.getReadChannels().get(i).getChannel(0).getName()); - if (tmlTask.getReadChannels().get(i).getChannel(0).getName().equals(rc)) { - for (String taskAll : _portsTaskOfModelAll.keySet()) { - //String originPortName = tmlTask.getReadChannels().get(i).getChannel(0).getOriginPort().getName(); - //String[] sOriginPortName = originPortName.split("__"); - //TraceManager.addDev("getPortsToConfig: originPortName=" + originPortName); - if (_portsTaskOfModelAll.get(taskAll).getWriteChannels().contains(rc) && !_portsTaskOfModelLeft.get(taskAll).getWriteChannels().contains(rc)) { - if (portsToConf.containsKey(task)) { - if (!portsToConf.get(task).getReadChannels().contains(rc)) { - portsToConf.get(task).getReadChannels().add(rc); - TraceManager.addDev("getPortsToConfig: add rc=" + rc); - } - } else { - List<String> writeChannels = new ArrayList<String>(); - List<String> readChannels = new ArrayList<String>(Arrays.asList(rc)); - List<String> sendEvents = new ArrayList<String>(); - List<String> waitEvents = new ArrayList<String>(); - TaskPorts portTask = new TaskPorts(writeChannels, readChannels, sendEvents, waitEvents); - portsToConf.put(task, portTask); - TraceManager.addDev("getPortsToConfig: new task add rc=" + rc); - } - } - } - } - } - } - - for (String se : pt.getSendEvents()) { - for (int i = 0; i < tmlTask.getSendEvents().size() ; i++) { - if (tmlTask.getSendEvents().get(i).getEvent().getName().equals(se)) { - for (String taskAll : _portsTaskOfModelAll.keySet()) { - //String destPortName = tmlTask.getSendEvents().get(i).getEvent().getDestinationPort().getName(); - if (_portsTaskOfModelAll.get(taskAll).getWaitEvents().contains(se) && !_portsTaskOfModelLeft.get(taskAll).getWaitEvents().contains(se)) { - if (portsToConf.containsKey(task)) { - if (!portsToConf.get(task).getSendEvents().contains(se)) { - portsToConf.get(task).getSendEvents().add(se); - } - } else { - List<String> writeChannels = new ArrayList<String>(); - List<String> readChannels = new ArrayList<String>(); - List<String> sendEvents = new ArrayList<String>(Arrays.asList(se)); - List<String> waitEvents = new ArrayList<String>(); - TaskPorts portTask = new TaskPorts(writeChannels, readChannels, sendEvents, waitEvents); - portsToConf.put(task, portTask); - } - } - } - } - } - } - for (String we : pt.getWaitEvents()) { - for (int i = 0; i < tmlTask.getWaitEvents().size() ; i++) { - if (tmlTask.getWaitEvents().get(i).getEvent().getName().equals(we)) { - for (String taskAll : _portsTaskOfModelAll.keySet()) { - //String originPortName = tmlTask.getWaitEvents().get(i).getEvent().getOriginPort().getName(); - if (_portsTaskOfModelAll.get(taskAll).getSendEvents().contains(we) && !_portsTaskOfModelLeft.get(taskAll).getSendEvents().contains(we)) { - if (portsToConf.containsKey(task)) { - if (!portsToConf.get(task).getWaitEvents().contains(we)) { - portsToConf.get(task).getWaitEvents().add(we); - } - } else { - List<String> writeChannels = new ArrayList<String>(); - List<String> readChannels = new ArrayList<String>(); - List<String> sendEvents = new ArrayList<String>(); - List<String> waitEvents = new ArrayList<String>(Arrays.asList(we)); - TaskPorts portTask = new TaskPorts(writeChannels, readChannels, sendEvents, waitEvents); - portsToConf.put(task, portTask); - } - } - } - } - } - } - - } - } - } - - return portsToConf; - } - private void addConfigPorts() { - String selectedTaskToConfig = jComboBoxPortsConfig.getSelectedItem().toString(); + String selectedTaskToConfig = jComboBoxPortsConfig.getSelectedItem().toString(); + String[] taskAndChannelSelected = PatternPortsConfig.seperateTaskAndChannel(selectedTaskToConfig); + PatternPortsConfig patternPortConfig = new PatternPortsConfig(taskAndChannelSelected[0], taskAndChannelSelected[1]); if (jRadioPortConfigRemove.isSelected()) { - configuredPorts.add(selectedTaskToConfig + PORT_CONFIGURATION_SEPARATOR + REMOVE_PORT_OPTION); + patternPortConfig.setIsChannelToRemove(true); } else if (jRadioPortConfigMerge.isSelected()) { - configuredPorts.add(selectedTaskToConfig + PORT_CONFIGURATION_SEPARATOR + MERGE_PORT_OPTION + jComboBoxPortsConfigMerge.getSelectedItem().toString()); + patternPortConfig.setMergeWith(jComboBoxPortsConfigMerge.getSelectedItem().toString()); } + configuredPorts.add(patternPortConfig.getStringDisplay()); + configuredPortsList.add(patternPortConfig); portsConfig.remove(selectedTaskToConfig); jComboBoxPortsConfig.setSelectedIndex(-1); jListConfigPorts.setListData(configuredPorts); @@ -1803,29 +1630,34 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L private void removeConfigPorts() { int[] list = jListConfigPorts.getSelectedIndices(); - Vector<String> v = new Vector<String>(); - String o; + List<PatternPortsConfig> patternPortsConfigToRemove = new ArrayList<PatternPortsConfig>(); for (int i = 0; i < list.length; i++) { - o = configuredPorts.elementAt(list[i]); - String[] splitO = o.split(PORT_CONFIGURATION_SEPARATOR); - portsConfig.add(splitO[0]); - v.addElement(o); + PatternPortsConfig patternPortConfigToRemove = configuredPortsList.get(list[i]); + portsConfig.add(patternPortConfigToRemove.getTaskChannelToConfig()); + configuredPorts.remove(list[i]); + patternPortsConfigToRemove.add(patternPortConfigToRemove); } - configuredPorts.removeAll(v); + configuredPortsList.removeAll(patternPortsConfigToRemove); jListConfigPorts.setListData(configuredPorts); jComboBoxPortsConfig.setSelectedIndex(-1); setButtons(); } private void addMappedTask() { - String selectedTaskToMap = jComboBoxTaskToMap.getSelectedItem().toString(); + //String selectedTaskToMap = jComboBoxTaskToMap.getSelectedItem().toString(); + int selectedTaskToMapIndice = jComboBoxTaskToMap.getSelectedIndex(); + MappingPatternTask mappingPatternTask = tasksToMapList.get(selectedTaskToMapIndice); if (jRadioMapTaskInExistingHw.isSelected()) { - mappedTasks.add(selectedTaskToMap + MAP_TASK_IN_SAME_HW_SEPARATOR + jComboBoxMapTaskInSameHwAs.getSelectedItem().toString()); + int selectedTaskInSameHwIndice = jComboBoxMapTaskInSameHwAs.getSelectedIndex(); + MappingPatternTask sameHwTask = tasksToMapInSameHwList.get(selectedTaskInSameHwIndice); + mappingPatternTask.setSameHwAs(sameHwTask.getTaskToMapName(), sameHwTask.getOrigin()); } else if (jRadioMapTaskInNewHw.isSelected()) { - mappedTasks.add(selectedTaskToMap + MAP_TASK_IN_NEW_HW_SEPARATOR + jComboBoxMapTaskInNewHw.getSelectedItem().toString()); + mappingPatternTask.setBusNameForNewHw(jComboBoxMapTaskInNewHw.getSelectedItem().toString()); } - tasksToMap.remove(selectedTaskToMap); - tasksToMapInSameHw.add(selectedTaskToMap); + mappedTasks.add(mappingPatternTask.getStringDisplay()); + mappedTasksList.add(mappingPatternTask); + tasksToMapInSameHw.add(tasksToMap.remove(selectedTaskToMapIndice)); + tasksToMapInSameHwList.add(tasksToMapList.remove(selectedTaskToMapIndice)); jComboBoxTaskToMap.setSelectedIndex(-1); jListMappedTasks.setListData(mappedTasks); setButtons(); @@ -1833,59 +1665,62 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L private void removeMappedTask() { int[] list = jListMappedTasks.getSelectedIndices(); - Vector<String> v = new Vector<String>(); - String o; + List<MappingPatternTask> mappingPatternTasksToRemove = new ArrayList<MappingPatternTask>(); for (int i = 0; i < list.length; i++) { - o = mappedTasks.elementAt(list[i]); - String[] splitONew = o.split(MAP_TASK_IN_NEW_HW_SEPARATOR); - String[] splitOSame = o.split(MAP_TASK_IN_SAME_HW_SEPARATOR); - if (splitONew.length > 1) { - tasksToMap.add(splitONew[0]); - tasksToMapInSameHw.remove(splitONew[0]); - } else if (splitOSame.length > 1) { - tasksToMap.add(splitOSame[0]); - tasksToMapInSameHw.remove(splitOSame[0]); - } - v.addElement(o); + MappingPatternTask mappingPatternTaskSelected = mappedTasksList.get(list[i]); + tasksToMap.add(mappingPatternTaskSelected.getTaskToMapName()); + tasksToMapList.add(mappingPatternTaskSelected); + tasksToMapInSameHw.remove(mappingPatternTaskSelected.getSameHwAs()); + tasksToMapInSameHwList.remove(mappingPatternTaskSelected); + mappingPatternTasksToRemove.add(mappingPatternTaskSelected); + mappedTasks.remove(list[i]); } - mappedTasks.removeAll(v); + mappedTasksList.removeAll(mappingPatternTasksToRemove); jListMappedTasks.setListData(mappedTasks); jComboBoxTaskToMap.setSelectedIndex(-1); setButtons(); } private void addMappedChannel() { - String selectedChannelToMap = jComboBoxChannelToMap.getSelectedItem().toString(); - if (jRadioMapChannelInExistingMem.isSelected()) { - mappedChannels.add(selectedChannelToMap + MAP_CHANNEL_IN_SAME_MEMORY_SEPARATOR + jComboBoxMapChannelInSameMemAs.getSelectedItem().toString()); - } else if (jRadioMapChannelInNewMem.isSelected()) { - mappedChannels.add(selectedChannelToMap + MAP_CHANNEL_IN_NEW_MEMORY_SEPARATOR + jComboBoxMapChannelInNewMem.getSelectedItem().toString()); - } - channelsToMap.remove(selectedChannelToMap); - channelsToMapInSameMem.add(selectedChannelToMap); - jComboBoxChannelToMap.setSelectedIndex(-1); - jListMappedChannels.setListData(mappedChannels); - setButtons(); + //String selectedChannelToMap = jComboBoxChannelToMap.getSelectedItem().toString(); + int selectedChannelToMapIndex = jComboBoxChannelToMap.getSelectedIndex(); + //String[] taskAndChannelSelected = MappingPatternChannel.seperateTaskAndChannel(selectedChannelToMap); + if (selectedChannelToMapIndex >= 0) { + MappingPatternChannel mappingPatternChannel = channelsToMapList.get(selectedChannelToMapIndex); + if (jRadioMapChannelInExistingMem.isSelected()) { + int selectedChannelSameMemIndex = jComboBoxMapChannelInSameMemAs.getSelectedIndex(); + if (selectedChannelSameMemIndex >= 0) { + MappingPatternChannel mappingPatternChannelSameMem = channelsToMapInSameMemList.get(selectedChannelSameMemIndex); + mappingPatternChannel.setTaskAndChannelInSameMem(mappingPatternChannelSameMem.getTaskOfChannelToMap(), mappingPatternChannelSameMem.getChannelToMapName(), mappingPatternChannelSameMem.getOrigin()); + } + } else if (jRadioMapChannelInNewMem.isSelected()) { + mappingPatternChannel.setBusNameForNewMem(jComboBoxMapChannelInNewMem.getSelectedItem().toString()); + } + mappedChannels.add(mappingPatternChannel.getStringDisplay()); + channelsToMap.remove(mappingPatternChannel.getTaskChannelToMap()); + channelsToMapList.remove(mappingPatternChannel); + mappedChannelsList.add(mappingPatternChannel); + channelsToMapInSameMem.add(mappingPatternChannel.getTaskChannelToMap()); + channelsToMapInSameMemList.add(mappingPatternChannel); + jComboBoxChannelToMap.setSelectedIndex(-1); + jListMappedChannels.setListData(mappedChannels); + setButtons(); + } } private void removeMappedChannel() { int[] list = jListMappedChannels.getSelectedIndices(); - Vector<String> v = new Vector<String>(); - String o; + List<MappingPatternChannel> mappingPatternChannelsToRemove = new ArrayList<MappingPatternChannel>(); for (int i = 0; i < list.length; i++) { - o = mappedChannels.elementAt(list[i]); - String[] splitONew = o.split(MAP_CHANNEL_IN_NEW_MEMORY_SEPARATOR); - String[] splitOSame = o.split(MAP_CHANNEL_IN_SAME_MEMORY_SEPARATOR); - if (splitONew.length > 1) { - channelsToMap.add(splitONew[0]); - channelsToMapInSameMem.remove(splitONew[0]); - } else if (splitOSame.length > 1) { - channelsToMap.add(splitOSame[0]); - channelsToMapInSameMem.remove(splitOSame[0]); - } - v.addElement(o); + MappingPatternChannel mappingPatternChannelSelected = mappedChannelsList.get(list[i]); + channelsToMap.add(mappingPatternChannelSelected.getTaskChannelToMap()); + channelsToMapList.add(mappingPatternChannelSelected); + channelsToMapInSameMem.remove(mappingPatternChannelSelected.getTaskChannelToMap()); + channelsToMapInSameMemList.remove(mappingPatternChannelSelected); + mappingPatternChannelsToRemove.add(mappingPatternChannelSelected); + mappedChannels.remove(list[i]); } - mappedChannels.removeAll(v); + mappedChannelsList.removeAll(mappingPatternChannelsToRemove); jListMappedChannels.setListData(mappedChannels); jComboBoxChannelToMap.setSelectedIndex(-1); setButtons(); @@ -1957,9 +1792,9 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L //Vector<String> patternTasksVector = new Vector<String>(); tasksOfPatternWithExternalPort.removeAllElements(); clonedTasks.removeAllElements(); + clonedTasksList.clear(); for (String pTaskName : patternTasksNotConnected.keySet()) { if (patternTasksNotConnected.get(pTaskName).getExternalPorts().size() > 0) { - TraceManager.addDev("pTaskName=" + pTaskName); tasksOfPatternWithExternalPort.add(pTaskName); } } @@ -1973,21 +1808,24 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L buttonCloneTask.setEnabled(true); removeConnectionBetweenPorts.setEnabled(true); connectedPorts.removeAllElements(); - connectedPortsFull.removeAllElements(); + patternConnectionList.clear(); jListConnectedPorts.setListData(connectedPorts); portsConfig.removeAllElements(); configuredPorts.removeAllElements(); mappedTasks.removeAllElements(); + mappedTasksList.clear(); tasksToMap.removeAllElements(); + tasksToMapList.clear(); channelsToMap.removeAllElements(); + channelsToMapList.clear(); mappedChannels.removeAllElements(); + mappedChannelsList.clear(); } if (evt.getSource() == jComboBoxPatternsTaskWithExternalPort) { externalPortsOfTaskInPattern.removeAllElements(); if (jComboBoxPatternsTaskWithExternalPort.getSelectedIndex() >= 0) { for (PortTaskJsonFile portTask : patternTasksNotConnected.get(jComboBoxPatternsTaskWithExternalPort.getSelectedItem().toString()).getExternalPorts()) { externalPortsOfTaskInPattern.add(portTask.getName()); - TraceManager.addDev("portTaskName=" + portTask.getName()); } jComboBoxPatternExternalPortOfATask.setEnabled(true); } else { @@ -2000,24 +1838,15 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L removeConfigPorts.setEnabled(true); configuredPorts.removeAllElements(); portsConfig.removeAllElements(); - portsTaskConfig = getPortsToConfig(portsTaskOfModelAll, portsTaskOfModelLeft, mgui.gtm.getTMLMapping().getTMLModeling()); - for (String st : portsTaskConfig.keySet()) { - for (String wc : portsTaskConfig.get(st).getWriteChannels()) { - //portsConfig.add(st + TASK_CHANNEL_SEPARATOR + wc); - configuredPorts.add(st + TASK_CHANNEL_SEPARATOR + wc + PORT_CONFIGURATION_SEPARATOR + REMOVE_PORT_OPTION); - } - for (String rc : portsTaskConfig.get(st).getReadChannels()) { - //portsConfig.add(st + TASK_CHANNEL_SEPARATOR + rc); - configuredPorts.add(st + TASK_CHANNEL_SEPARATOR + rc + PORT_CONFIGURATION_SEPARATOR + REMOVE_PORT_OPTION); - } - for (String se : portsTaskConfig.get(st).getSendEvents()) { - //portsConfig.add(st + TASK_CHANNEL_SEPARATOR + se); - configuredPorts.add(st + TASK_CHANNEL_SEPARATOR + se + PORT_CONFIGURATION_SEPARATOR + REMOVE_PORT_OPTION); - } - for (String we : portsTaskConfig.get(st).getWaitEvents()) { - //portsConfig.add(st + TASK_CHANNEL_SEPARATOR + we); - configuredPorts.add(st + TASK_CHANNEL_SEPARATOR + we + PORT_CONFIGURATION_SEPARATOR + REMOVE_PORT_OPTION); - } + List<String> clonedTasksAll = new ArrayList<String>(); + for (PatternCloneTask cloneT : clonedTasksList) { + clonedTasksAll.add(cloneT.getClonedTask()); + } + portsTaskConfig = PatternPortsConfig.getPortsToConfig(portsTaskOfModelAll, portsTaskOfModelLeft, clonedTasksAll, mgui.gtm.getTMLMapping().getTMLModeling()); + for (PatternPortsConfig portTaskConfig : portsTaskConfig) { + portTaskConfig.setIsChannelToRemove(true); + configuredPorts.add(portTaskConfig.getStringDisplay()); + configuredPortsList.add(portTaskConfig); } jListConfigPorts.setListData(configuredPorts); jComboBoxPortsConfig.setSelectedIndex(-1); @@ -2029,9 +1858,13 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L jComboBoxPortsConfig.setEnabled(false); removeConfigPorts.setEnabled(false); mappedTasks.removeAllElements(); + mappedTasksList.clear(); tasksToMap.removeAllElements(); + tasksToMapList.clear(); channelsToMap.removeAllElements(); + channelsToMapList.clear(); mappedChannels.removeAllElements(); + mappedChannelsList.clear(); buttonTasksMapInArch.setEnabled(false); buttonChannelsMapInArch.setEnabled(false); buttonUpdatePatternsAttributes.setEnabled(false); @@ -2062,32 +1895,22 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L if (!jCheckBoxConnectToNewPort.isSelected()) { String modeSelectedPatternPort = patternTasksNotConnected.get(selectedPatternTask).getExternalPorts().get(selectedIndexPatternPort).getMode(); String typeSelectedPatternPort = patternTasksNotConnected.get(selectedPatternTask).getExternalPorts().get(selectedIndexPatternPort).getType(); - TraceManager.addDev("modeSelectedPatternPort=" + modeSelectedPatternPort); - TraceManager.addDev("typeSelectedPatternPort=" + typeSelectedPatternPort); if (typeSelectedPatternPort.equals(PatternCreation.CHANNEL)) { - TraceManager.addDev("selectedModelTask0=" + selectedModelTask); if (modeSelectedPatternPort.equals(PatternCreation.MODE_INPUT)) { - TraceManager.addDev("selectedModelTas1k=" + selectedModelTask); - TraceManager.addDev("portsTaskOfModelLeft.get(selectedModelTask).getWriteChannels()=" + portsTaskOfModelLeft.get(selectedModelTask).getWriteChannels().size()); - //portsOfTaskInModel = new Vector<String>(portsTaskOfModelLeft.get(selectedModelTask).getWriteChannels()); for (String st : portsTaskOfModelLeft.get(selectedModelTask).getWriteChannels()) { portsOfTaskInModel.add(st); } } else if (modeSelectedPatternPort.equals(PatternCreation.MODE_OUTPUT)) { - //portsOfTaskInModel = new Vector<String>(portsTaskOfModelLeft.get(selectedModelTask).getReadChannels()); - TraceManager.addDev("selectedModelTask2=" + selectedModelTask); for (String st : portsTaskOfModelLeft.get(selectedModelTask).getReadChannels()) { portsOfTaskInModel.add(st); } } } else if (typeSelectedPatternPort.equals(PatternCreation.EVENT)) { if (modeSelectedPatternPort.equals(PatternCreation.MODE_INPUT)) { - //portsOfTaskInModel = new Vector<String>(portsTaskOfModelLeft.get(selectedModelTask).getSendEvents()); for (String st : portsTaskOfModelLeft.get(selectedModelTask).getSendEvents()) { portsOfTaskInModel.add(st); } } else if (modeSelectedPatternPort.equals(PatternCreation.MODE_OUTPUT)) { - //portsOfTaskInModel = new Vector<String>(portsTaskOfModelLeft.get(selectedModelTask).getWaitEvents()); for (String st : portsTaskOfModelLeft.get(selectedModelTask).getWaitEvents()) { portsOfTaskInModel.add(st); } @@ -2108,7 +1931,6 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L } } for (String st : portsOfTaskInModel) { - TraceManager.addDev("portsOfTaskInModel=" + st); } } else { @@ -2151,24 +1973,6 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L jLabelAddAuthenticity.setVisible(false); } } - /*if (evt.getSource() == jCheckBoxConnectToNewPort) { - portsOfTaskInModel.removeAllElements(); - String selectedModelTask = jComboBoxModelsTask.getSelectedItem().toString(); - if (jCheckBoxConnectToNewPort.isSelected()) { - for (String st : portsTaskOfModelLeft.get(selectedModelTask).getWriteChannels()) { - portsOfTaskInModel.add(st); - } - for (String st : portsTaskOfModelLeft.get(selectedModelTask).getReadChannels()) { - portsOfTaskInModel.add(st); - } - for (String st : portsTaskOfModelLeft.get(selectedModelTask).getSendEvents()) { - portsOfTaskInModel.add(st); - } - for (String st : portsTaskOfModelLeft.get(selectedModelTask).getWaitEvents()) { - portsOfTaskInModel.add(st); - } - } - }*/ if (evt.getSource() == jComboBoxTaskToClone) { if (jComboBoxTaskToClone.getSelectedIndex() >= 0) { jFieldNewClonedTaskName.setEnabled(true); @@ -2190,92 +1994,50 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L } if (portsConfig.size() == 0 && tasksOfPatternWithExternalPort.size() == 0) { tasksToMap.removeAllElements(); + tasksToMapList.clear(); tasksToMapInSameHw.removeAllElements(); + tasksToMapInSameHwList.clear(); mappedTasks.removeAllElements(); + mappedTasksList.clear(); channelsToMap.removeAllElements(); + channelsToMapList.clear(); channelsToMapInSameMem.removeAllElements(); + channelsToMapInSameMemList.clear(); mappedChannels.removeAllElements(); - for(String st : clonedTasksName) { - tasksToMap.add(st); + mappedChannelsList.clear(); + List<String> clonedTasksName = new ArrayList<String>(); + for(PatternCloneTask cloneT: clonedTasksList) { + tasksToMap.add(cloneT.getClonedTask()); + MappingPatternTask mapTask = new MappingPatternTask(cloneT.getClonedTask(), MappingPatternTask.ORIGIN_CLONE); + tasksToMapList.add(mapTask); + clonedTasksName.add(cloneT.getClonedTask()); } for(String st : patternTasksAll.keySet()) { tasksToMap.add(st); + MappingPatternTask mapTask = new MappingPatternTask(st, MappingPatternTask.ORIGIN_PATTERN); + tasksToMapList.add(mapTask); } for(String st : portsTaskOfModelAll.keySet()) { if (!clonedTasksName.contains(st)) { tasksToMapInSameHw.add(st); + MappingPatternTask mapTask = new MappingPatternTask(st, MappingPatternTask.ORIGIN_MODEL); + tasksToMapInSameHwList.add(mapTask); } } - - /*for(String st : portsTaskOfModelAll.keySet()) { - if (clonedTasksName.contains(st)) { - for (String wc : portsTaskOfModelAll.get(st).getWriteChannels()) { - if (!portsTaskOfModelLeft.get(st).getWriteChannels().contains(wc)) { - channelsToMap.add(st+TASK_CHANNEL_SEPARATOR+wc); - } - } - for (String rc : portsTaskOfModelAll.get(st).getReadChannels()) { - if (!portsTaskOfModelLeft.get(st).getReadChannels().contains(rc)) { - channelsToMap.add(st+TASK_CHANNEL_SEPARATOR+rc); - } - } - } - }*/ - for(String st : patternTasksAll.keySet()) { - for (PortTaskJsonFile portTaskJsonFile : patternTasksAll.get(st).getExternalPorts()) { - if (portTaskJsonFile.getType().equals(PatternCreation.CHANNEL)) { - boolean isChToMap = true; - for (String chToMap : channelsToMap) { - if (chToMap.split(TASK_CHANNEL_SEPARATOR)[1].equals(portTaskJsonFile.getName())) { - isChToMap = false; - break; - } - } - if (isChToMap) { - channelsToMap.add(st+TASK_CHANNEL_SEPARATOR+portTaskJsonFile.getName()); - } - } - } - for (PortTaskJsonFile portTaskJsonFile : patternTasksAll.get(st).getInternalPorts()) { - if (portTaskJsonFile.getType().equals(PatternCreation.CHANNEL)) { - boolean isChToMap = true; - for (String chToMap : channelsToMap) { - if (chToMap.split(TASK_CHANNEL_SEPARATOR)[1].equals(portTaskJsonFile.getName())) { - isChToMap = false; - break; - } - } - if (isChToMap) { - channelsToMap.add(st+TASK_CHANNEL_SEPARATOR+portTaskJsonFile.getName()); - } - } - } + List<MappingPatternChannel> channelsToMapListA = MappingPatternChannel.getChannelsToMap(patternConnectionList, patternTasksAll, clonedTasksList); + for(MappingPatternChannel channelToMap : channelsToMapListA) { + channelsToMap.add(channelToMap.getTaskChannelToMap()); + channelsToMapList.add(channelToMap); } + for(String st : portsTaskOfModelAll.keySet()) { if (!clonedTasksName.contains(st)) { for (String wc : portsTaskOfModelAll.get(st).getWriteChannels()) { - boolean isChToMap = true; - for (String chToMap : channelsToMapInSameMem) { - if (chToMap.split(TASK_CHANNEL_SEPARATOR)[1].equals(wc)) { - isChToMap = false; - break; - } - } - if (isChToMap) { - channelsToMapInSameMem.add(st+TASK_CHANNEL_SEPARATOR+wc); - } - } - for (String rc : portsTaskOfModelAll.get(st).getReadChannels()) { - boolean isChToMap = true; - for (String chToMap : channelsToMapInSameMem) { - if (chToMap.split(TASK_CHANNEL_SEPARATOR)[1].equals(rc)) { - isChToMap = false; - break; - } - } - if (isChToMap) { - channelsToMapInSameMem.add(st+TASK_CHANNEL_SEPARATOR+rc); - } + if (!channelsToMapInSameMem.contains(MappingPatternChannel.getTaskChannel(st, wc))) { + MappingPatternChannel mappingPatternChannel = new MappingPatternChannel(st, wc, MappingPatternChannel.ORIGIN_MODEL); + channelsToMapInSameMem.add(mappingPatternChannel.getTaskChannelToMap()); + channelsToMapInSameMemList.add(mappingPatternChannel); + } } } } @@ -2304,25 +2066,12 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L if (jRadioPortConfigMerge.isSelected()) { jComboBoxPortsConfigMerge.setEnabled(true); String jCo = jComboBoxPortsConfig.getSelectedItem().toString(); - String[] taskPortSelected = jCo.split(TASK_CHANNEL_SEPARATOR); + String[] taskPortSelected = PatternPortsConfig.seperateTaskAndChannel(jCo); String taskSelected = taskPortSelected[0]; - String portSelected = taskPortSelected[1]; List<String> portsToConfOfTaskAll = new ArrayList<String>(); - for (String st : portsConfig) { - String[] taskPort = st.split(TASK_CHANNEL_SEPARATOR); - String task = taskPort[0]; - String port = taskPort[1]; - if (taskSelected.equals(task)) { - portsToConfOfTaskAll.add(port); - } - } - for (String st : configuredPorts) { - String[] tp = st.split(PORT_CONFIGURATION_SEPARATOR); - String[] taskPort = tp[0].split(TASK_CHANNEL_SEPARATOR); - String task = taskPort[0]; - String port = taskPort[1]; - if (taskSelected.equals(task)) { - portsToConfOfTaskAll.add(port); + for (PatternPortsConfig portTaskConfig : portsTaskConfig) { + if (taskSelected.equals(portTaskConfig.getTaskOfChannelToConfig())) { + portsToConfOfTaskAll.add(portTaskConfig.getChannelToConfig()); } } for (String wc : portsTaskOfModelAll.get(taskSelected).getWriteChannels()) { @@ -2564,7 +2313,7 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L }*/ if (!findErr) { - mgui.gtm.createPattern(mgui, selectedTasksAsPattern, newPatternName, pathPatterns); + mgui.gtm.createPattern(selectedTasksAsPattern, newPatternName, pathPatterns); JLabel label = new JLabel("Pattern Creation Completed"); label.setAlignmentX(Component.LEFT_ALIGNMENT); this.jta.add(label, this.createGbc(currentPosY)); @@ -2592,50 +2341,50 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L int selectedPatternIndex = jComboBoxPatterns.getSelectedIndex(); String selectedPatternPath = pathPatterns+listPatterns.get(selectedPatternIndex)+"/"; String selectedPatternName = listPatterns.get(selectedPatternIndex); - PatternConfiguration patternConfiguration = new PatternConfiguration(); - patternConfiguration.loadClonedTasks(clonedTasks); - patternConfiguration.loadConnectedPorts(connectedPortsFull); - patternConfiguration.loadPortsConfig(configuredPorts); - patternConfiguration.loadMappedTasks(mappedTasks); - patternConfiguration.loadMappedChannels(mappedChannels); - patternConfiguration.setUpdatedPatternAttributes(updatedPatternAttributes); + for (String taskName : patternTasksAll.keySet()) { for (PortTaskJsonFile portTaskExt : patternTasksAll.get(taskName).getExternalPorts()) { if (portTaskExt.getType().equals(PatternCreation.CHANNEL)) { if (portTaskExt.getConfidentiality().toUpperCase().equals(PatternCreation.WITH_CONFIDENTIALITY.toUpperCase()) || !portTaskExt.getAuthenticity().toUpperCase().equals(PatternCreation.WITHOUT_AUTHENTICITY.toUpperCase())) { - if (channelsWithSecurity.containsKey(taskName)) { - channelsWithSecurity.get(taskName).add(portTaskExt); - } else { - List<PortTaskJsonFile> channelsWithSecurityList = new ArrayList<PortTaskJsonFile>(); - channelsWithSecurityList.add(portTaskExt); - channelsWithSecurity.put(taskName, channelsWithSecurityList); + PatternChannelWithSecurity patternChannelWithSecurity = new PatternChannelWithSecurity(taskName, portTaskExt.getName(), portTaskExt.getMode()); + if (portTaskExt.getConfidentiality().toUpperCase().equals(PatternCreation.WITH_CONFIDENTIALITY.toUpperCase())) { + patternChannelWithSecurity.setIsConfidential(true); + } else if (portTaskExt.getConfidentiality().toUpperCase().equals(PatternCreation.WITHOUT_CONFIDENTIALITY.toUpperCase())) { + patternChannelWithSecurity.setIsConfidential(false); } + if (portTaskExt.getAuthenticity().toUpperCase().equals(PatternCreation.WITHOUT_AUTHENTICITY.toUpperCase())) { + patternChannelWithSecurity.setAuthenticity(PatternChannelWithSecurity.NO_AUTHENTICITY); + } else if (portTaskExt.getAuthenticity().toUpperCase().equals(PatternCreation.WEAK_AUTHENTICITY.toUpperCase())) { + patternChannelWithSecurity.setAuthenticity(PatternChannelWithSecurity.WEAK_AUTHENTICITY); + } else if (portTaskExt.getAuthenticity().toUpperCase().equals(PatternCreation.STRONG_AUTHENTICITY.toUpperCase())) { + patternChannelWithSecurity.setAuthenticity(PatternChannelWithSecurity.STRONG_AUTHENTICITY); + } + channelsWithSecurity.add(patternChannelWithSecurity); } } } for (PortTaskJsonFile portTaskInt : patternTasksAll.get(taskName).getInternalPorts()) { if (portTaskInt.getType().equals(PatternCreation.CHANNEL)) { if (portTaskInt.getConfidentiality().toUpperCase().equals(PatternCreation.WITH_CONFIDENTIALITY.toUpperCase()) || !portTaskInt.getAuthenticity().toUpperCase().equals(PatternCreation.WITHOUT_AUTHENTICITY.toUpperCase())) { - if (channelsWithSecurity.containsKey(taskName)) { - channelsWithSecurity.get(taskName).add(portTaskInt); - } else { - List<PortTaskJsonFile> channelsWithSecurityList = new ArrayList<PortTaskJsonFile>(); - channelsWithSecurityList.add(portTaskInt); - channelsWithSecurity.put(taskName, channelsWithSecurityList); + PatternChannelWithSecurity patternChannelWithSecurity = new PatternChannelWithSecurity(taskName, portTaskInt.getName(), portTaskInt.getMode()); + if (portTaskInt.getConfidentiality().toUpperCase().equals(PatternCreation.WITH_CONFIDENTIALITY.toUpperCase())) { + patternChannelWithSecurity.setIsConfidential(true); + } else if (portTaskInt.getConfidentiality().toUpperCase().equals(PatternCreation.WITHOUT_CONFIDENTIALITY.toUpperCase())) { + patternChannelWithSecurity.setIsConfidential(false); } + if (portTaskInt.getAuthenticity().toUpperCase().equals(PatternCreation.WITHOUT_AUTHENTICITY.toUpperCase())) { + patternChannelWithSecurity.setAuthenticity(PatternChannelWithSecurity.NO_AUTHENTICITY); + } else if (portTaskInt.getAuthenticity().toUpperCase().equals(PatternCreation.WEAK_AUTHENTICITY.toUpperCase())) { + patternChannelWithSecurity.setAuthenticity(PatternChannelWithSecurity.WEAK_AUTHENTICITY); + } else if (portTaskInt.getAuthenticity().toUpperCase().equals(PatternCreation.STRONG_AUTHENTICITY.toUpperCase())) { + patternChannelWithSecurity.setAuthenticity(PatternChannelWithSecurity.STRONG_AUTHENTICITY); + } + channelsWithSecurity.add(patternChannelWithSecurity); } } } } - for(String taskCh : channelsWithSecurity.keySet()) { - TraceManager.addDev("taskCh=" + taskCh); - for (PortTaskJsonFile portTask : channelsWithSecurity.get(taskCh)) { - TraceManager.addDev("portTask Name=" + portTask.getName()); - TraceManager.addDev("portTask Conf=" + portTask.getConfidentiality()); - TraceManager.addDev("portTask Auth=" + portTask.getAuthenticity()); - } - } - patternConfiguration.setChannelsWithSecurity(channelsWithSecurity); + PatternConfiguration patternConfiguration = new PatternConfiguration(patternConnectionList, clonedTasksList, configuredPortsList, mappedTasksList, mappedChannelsList, updatedPatternAttributes, channelsWithSecurity); mgui.gtm.createJsonPatternConfigFile(selectedPatternPath, selectedPatternName, patternConfiguration); mgui.gtm.integratePattern(mgui, selectedPatternPath, selectedPatternName); JLabel label = new JLabel("Pattern Configuration Completed"); @@ -2701,42 +2450,6 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L break; } } - /* - private class AttributeTaskJsonFile { - String name; - String type; - String value; - - AttributeTaskJsonFile(String name, String type, String value) { - this.getName() = name; - this.getType() = type; - this.getValue() = value; - } - } - - private class PortTaskJsonFile { - String name; - String type; - String mode; - - PortTaskJsonFile(String name, String type, String mode) { - this.getName() = name; - this.getType() = type; - this.getMode() = mode; - } - } - - private class TaskPattern { - List<AttributeTaskJsonFile> attributes; - List<PortTaskJsonFile> internalPorts; - List<PortTaskJsonFile> externalPorts; - - TaskPattern(List<AttributeTaskJsonFile> attributes, List<PortTaskJsonFile> internalPorts, List<PortTaskJsonFile> externalPorts) { - this.getAttributes() = attributes; - this.getInternalPorts() = internalPorts; - this.getExternalPorts() = externalPorts; - } - } */ @Override public void setError() {