diff --git a/src/main/java/tmltranslator/patternhandling/PatternIntegration.java b/src/main/java/tmltranslator/patternhandling/PatternIntegration.java index fcd6731f29058498c06e32ea13ead095a8670e42..c62a19369014d58df35f49e3cf92b39d80928954 100644 --- a/src/main/java/tmltranslator/patternhandling/PatternIntegration.java +++ b/src/main/java/tmltranslator/patternhandling/PatternIntegration.java @@ -37,6 +37,8 @@ public class PatternIntegration implements Runnable { TMLMapping<?> tmapPattern; HashMap<String, String> renamedChannels = new HashMap<String, String>(); + 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; @@ -187,7 +189,7 @@ public class PatternIntegration implements Runnable { tmapModel = mapTasksInArch(tmapModel, patternConfiguration.getTasksMapping()); tmapModel = mapTasksInArchAuto(tmapModel, tmapPattern, patternConfiguration.getTasksMapping().keySet(), patternConfiguration, patternTasks); tmapModel = mapChannelsInArch(tmapModel, patternConfiguration.getChannelsMapping()); - tmapModel = mapChannelsInArchAuto(tmapModel, tmapPattern, patternConfiguration.getTasksMapping().keySet(), patternConfiguration, patternTasks); + tmapModel = mapChannelsInArchAuto(tmapModel, tmapPattern, patternConfiguration.getTasksMapping().keySet(), patternConfiguration.getChannelsMapping().keySet(), patternConfiguration, patternTasks); TraceManager.addDev("Model elems result :"); @@ -521,6 +523,7 @@ public class PatternIntegration implements Runnable { }*/ if (_tmlmModel.getChannelByName(portTask.name) == null) { _tmlmModel.addChannel(channelPattern); + channelsFromPatternToMap.add(channelPattern); TraceManager.addDev("addPatternInternalChannelsInModel: channelName="+portTask.name); } } else if (eventPattern != null) { @@ -677,6 +680,7 @@ public class PatternIntegration implements Runnable { 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)); } } } @@ -1058,6 +1062,7 @@ public class PatternIntegration implements Runnable { 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) { @@ -1128,11 +1133,13 @@ public class PatternIntegration implements Runnable { 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) { @@ -1534,21 +1541,36 @@ public class PatternIntegration implements Runnable { for (String taskPatternName : _patternConfiguration.getPortsConnection().keySet()) { for (String[] pc : _patternConfiguration.getPortsConnection().get(taskPatternName)) { if (clonedTasksToMap.contains(pc[1])) { - TMLChannel chInPattern = tmlmPattern.getChannelByName(pc[0]); + 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 (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()); + 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()); + } + } - } } } @@ -1563,19 +1585,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)) { - TMLChannel chInPattern = tmlmPattern.getChannelByName(pc[0]); + 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 (chInPattern != null) { - if (modeChInPattern.equals(PatternCreation.MODE_INPUT)) { - correspTasks.put(chInPattern.getOriginTask(), tmlmModel.getTMLTaskByName(pc[1])); - } else if (modeChInPattern.equals(PatternCreation.MODE_OUTPUT)) { - correspTasks.put(chInPattern.getDestinationTask(), tmlmModel.getTMLTaskByName(pc[1])); + + + if (typeChInPattern.equals(PatternCreation.CHANNEL)) { + TMLChannel chInPattern = tmlmPattern.getChannelByName(pc[0]); + if (chInPattern != null) { + if (modeChInPattern.equals(PatternCreation.MODE_INPUT)) { + correspTasks.put(chInPattern.getOriginTask(), tmlmModel.getTMLTaskByName(pc[1])); + } else if (modeChInPattern.equals(PatternCreation.MODE_OUTPUT)) { + correspTasks.put(chInPattern.getDestinationTask(), tmlmModel.getTMLTaskByName(pc[1])); + } + } + } else if (typeChInPattern.equals(PatternCreation.EVENT)) { + TMLEvent evtInPattern = tmlmPattern.getEventByName(pc[0]); + if (evtInPattern != null) { + if (modeChInPattern.equals(PatternCreation.MODE_INPUT)) { + correspTasks.put(evtInPattern.getOriginTask(), tmlmModel.getTMLTaskByName(pc[1])); + } else if (modeChInPattern.equals(PatternCreation.MODE_OUTPUT)) { + correspTasks.put(evtInPattern.getDestinationTask(), tmlmModel.getTMLTaskByName(pc[1])); + } } } } @@ -1590,6 +1628,9 @@ public class PatternIntegration implements Runnable { 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); @@ -1597,6 +1638,9 @@ public class PatternIntegration implements Runnable { 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) { @@ -1645,72 +1689,97 @@ public class PatternIntegration implements Runnable { return _tmapModel; } - public TMLMapping<?> mapChannelsInArchAuto(TMLMapping<?> _tmapModel, TMLMapping<?> _tmapPattern, Set<String> mappedTasks, PatternConfiguration _patternConfiguration, LinkedHashMap<String, TaskPattern> _patternTasks) { + 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(); - Map<TMLTask, TMLTask> correspTasks = correspondenceForTasks(_tmapModel, _tmapPattern, _patternConfiguration, _patternTasks); - Map<TMLTask, TMLTask> correspondenceForClonedTasks = correspondenceForClonedTasks(_tmapModel, _tmapPattern, mappedTasks, _patternConfiguration, _patternTasks); - LinkedHashMap<String, TaskPattern> _patternTasksSorted = new LinkedHashMap<String, TaskPattern>(); - LinkedHashMap<String, TaskPattern> _patternTasksInEnd = new LinkedHashMap<String, TaskPattern>(); - for (String taskName : _patternTasks.keySet()) { - if (_patternTasks.get(taskName).getExternalPorts().size() == 0) { - _patternTasksInEnd.put(taskName, _patternTasks.get(taskName)); - } else { - _patternTasksSorted.put(taskName, _patternTasks.get(taskName)); - } + 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()); } - _patternTasksSorted.putAll(_patternTasksInEnd); - outerloop: - for (String taskName : _patternTasksSorted.keySet()) { - TMLTask task = tmlmPattern.getTMLTaskByName(taskName); - 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()); - HwExecutionNode hwMapTaskInModel = _tmapModel.getHwNodeOf(taskInModel); - if (hwMapTaskInModel != null) { - TMLTask taskToMap = tmlmModel.getTMLTaskByName(taskName); - _tmapModel.addTaskToHwExecutionNode(taskToMap, hwMapTaskInModel); - break outerloop; + + 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()); + 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()); + ArrayList<HwCommunicationNode> hwsMapChannelInModel = _tmapModel.getAllCommunicationNodesOfChannel(channelInModel); + if (hwsMapChannelInModel.size() > 0) { + for (HwCommunicationNode hwMapChannelInModel : hwsMapChannelInModel) { + if ((!chIsMappedToMem) && (hwMapChannelInModel instanceof HwMemory) && !(_tmapModel.isCommNodeMappedOn(chToMap, hwMapChannelInModel))) { + _tmapModel.addCommToHwCommNode(chToMap, hwMapChannelInModel); + chIsMappedToMem = 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; + 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()); + 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; + } + } + } } } - } + + TraceManager.addDev("hwComsOfChannel ELEM BUS"); + } + TraceManager.addDev("hwComsOfChannel END 0 "); } - for (TMLChannel ch : tmlmModel.getChannelsToMe(taskToMap)) { - TMLTask taskInConn = ch.getOriginTask(); + TraceManager.addDev("hwComsOfChannel END"); + if (!chIsMappedToMem) { + 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()) { @@ -1719,85 +1788,92 @@ public class PatternIntegration implements Runnable { } } } - } - if (bus == null) { - int nbConnections = 0 ; - for (HwNode busModel : _tmapModel.getArch().getBUSs()) { - if (busModel instanceof HwBus) { - int curNbConnections = 0 ; + if (bus == null) { + taskInConn = chToMap.getOriginTask(); + hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); + if (hwOfTaskInConn != null) { for (HwLink link : _tmapModel.getArch().getHwLinks()) { - if (link.bus == busModel) { - nbConnections += 1; + if (link.hwnode == hwOfTaskInConn) { + bus = link.bus; } } - if (curNbConnections > nbConnections) { - bus = (HwBus) busModel; - nbConnections = curNbConnections; + } + } + 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); } - - 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()) { - TMLTask task = tmlmModel.getTMLTaskByName(taskName); - if (task != null && !mappedTasks.contains(taskName)) { - TMLTask taskInPattern = correspondenceForClonedTasks.get(task); + for (TMLChannel chToMap : channelsFromClonedToMap) { + if (!mappedChannels.contains(chToMap.getName())) { + TMLChannel chInPattern = correspondenceForClonedChannels.get(chToMap); - 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()); - HwExecutionNode hwMapTaskInModel = _tmapModel.getHwNodeOf(taskInModel); - if (hwMapTaskInModel != null) { - _tmapModel.addTaskToHwExecutionNode(task, hwMapTaskInModel); - break outerloop1; + 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; + } + } } } } - String nameNewCPU = hwMapTask.getName(); - HwExecutionNode newCPU = _tmapModel.getHwExecutionNodeByName(nameNewCPU); + HwMemory memMapChannel = _tmapPattern.getMemoryOfChannel(chInPattern); + String nameNewMem = memMapChannel.getName(); + HwCommunicationNode newMem = _tmapModel.getHwCommunicationNodeByName(nameNewMem); int ind = 0; - while (newCPU != null) { - nameNewCPU = hwMapTask.getName() + ind; - newCPU = _tmapModel.getHwExecutionNodeByName(nameNewCPU); + while (newMem != null) { + nameNewMem = memMapChannel.getName() + ind; + newMem = _tmapModel.getHwCommunicationNodeByName(nameNewMem); ind += 1; } - HwCPU _newCpu = new HwCPU(nameNewCPU); - TMLTask taskToMap = tmlmModel.getTMLTaskByName(taskName); - _tmapModel.addTaskToHwExecutionNode(taskToMap, _newCpu); - _tmapModel.getArch().addHwNode(_newCpu); - + HwMemory _newMem = new HwMemory(nameNewMem); + _tmapModel.addCommToHwCommNode(chToMap, _newMem); + _tmapModel.getArch().addHwNode(_newMem); 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; - } + 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; } } } - for (TMLChannel ch : tmlmModel.getChannelsToMe(taskToMap)) { - TMLTask taskInConn = ch.getOriginTask(); - HwExecutionNode hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); + if (bus == null) { + taskInConn = chToMap.getOriginTask(); + hwOfTaskInConn = _tmapModel.getHwNodeOf(taskInConn); if (hwOfTaskInConn != null) { for (HwLink link : _tmapModel.getArch().getHwLinks()) { if (link.hwnode == hwOfTaskInConn) { @@ -1806,6 +1882,7 @@ public class PatternIntegration implements Runnable { } } } + if (bus == null) { int nbConnections = 0 ; for (HwNode busModel : _tmapModel.getArch().getBUSs()) { @@ -1822,11 +1899,13 @@ public class PatternIntegration implements Runnable { } } } + } - HwLink linkNewCPUWithBus = new HwLink("link_" + _newCpu.getName() + "_to_" + bus.getName()); - linkNewCPUWithBus.bus = bus; - linkNewCPUWithBus.hwnode = _newCpu; - _tmapModel.getArch().addHwLink(linkNewCPUWithBus); + + HwLink linkNewMemWithBus = new HwLink("link_" + _newMem.getName() + "_to_" + bus.getName()); + linkNewMemWithBus.bus = bus; + linkNewMemWithBus.hwnode = _newMem; + _tmapModel.getArch().addHwLink(linkNewMemWithBus); } } @@ -1835,7 +1914,7 @@ public class PatternIntegration implements Runnable { } // 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, LinkedHashMap<String, TaskPattern> _patternTasks) { + 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>(); @@ -1851,9 +1930,12 @@ public class PatternIntegration implements Runnable { for (String[] pc : _patternConfiguration.getPortsConnection().get(taskPatternName)) { if (clonedTasksToMap.contains(pc[1])) { TMLChannel chInPattern = tmlmPattern.getChannelByName(pc[0]); - if (chInPattern != null) { - correspChannels.put(tmlmModel.getChannelByName(pc[2]), chInPattern); + String nameChInModel = pc[2]; + if (renamedChannels.containsKey(nameChInModel)) { + nameChInModel = renamedChannels.get(nameChInModel); + } + correspChannels.put(tmlmModel.getChannelByName(nameChInModel), chInPattern); } } } @@ -1870,7 +1952,23 @@ public class PatternIntegration implements Runnable { for (String[] pc : _patternConfiguration.getPortsConnection().get(taskPatternName)) { TMLChannel chInPattern = tmlmPattern.getChannelByName(pc[0]); if (chInPattern != null) { - correspChannels.put(chInPattern, tmlmModel.getChannelByName(pc[2])); + 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 (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) { + correspChannels.put(chInPattern, chInModel); } } }