diff --git a/src/main/java/cli/PatternHandling.java b/src/main/java/cli/PatternHandling.java index 029e1d231c6a72cbd04ab19ff7a9f59d9562e925..f5f96cb9770461259eed84a3ba830855a38956da 100644 --- a/src/main/java/cli/PatternHandling.java +++ b/src/main/java/cli/PatternHandling.java @@ -32,6 +32,9 @@ import tmltranslator.patternhandling.PatternPortsConfig; import tmltranslator.patternhandling.PortTaskJsonFile; import tmltranslator.patternhandling.TaskPattern; import tmltranslator.patternhandling.TaskPorts; +import ui.TMLArchiPanel; +import ui.TURTLEPanel; +import ui.window.JDialogSystemCGeneration; /** * Class PatternHandling @@ -42,6 +45,7 @@ import tmltranslator.patternhandling.TaskPorts; */ public class PatternHandling extends Command { + private final static String SYNTAX_ERROR = "Syntax Error"; private final static String NO_NAME_NO_TASK_FOR_PATTERN = "No name or no tasks is giving for the pattern"; private final static String PATTERN_NOT_EXIST = "Pattern does not exist"; @@ -81,13 +85,13 @@ public class PatternHandling extends Command { private String selectedPatternPath, selectedPatternName; private PatternConfiguration patternConfiguration = new PatternConfiguration(); LinkedHashMap<String, TaskPattern> patternTasksAll, patternTasksLeft; - LinkedHashMap<String, TaskPorts> portsTaskOfModelAll = new LinkedHashMap<String, TaskPorts>(); + LinkedHashMap<String, TaskPorts> portsTaskOfModelAll; LinkedHashMap<String, TaskPorts> portsTaskModelLeft; List<PatternPortsConfig> portsLeftToConfig; List<MappingPatternTask> tasksLeftToMap; List<MappingPatternChannel> channelsLeftToMap; - private String selectedPatternToIntergrate, selectedJsonFilePath; + private String selectedPatternToIntergrate, selectedPatternPathToIntergrate, selectedJsonFilePath; public PatternHandling() { @@ -117,7 +121,7 @@ public class PatternHandling extends Command { // Create Pattern Command createPattern = new Command() { - final String [] options = {"-n", "-a", "-l", "-t", "-r", "-m"}; + final String [] options = {"-n", "-p","-a", "-l", "-t", "-r", "-m"}; public String getCommand() { return CREATE; } @@ -131,8 +135,9 @@ public class PatternHandling extends Command { } public String getUsage() { - return "[OPTION]... [NAME] [TASKS]\n" + return "[OPTION]... [NAME] [PATH] [TASKS]\n" + "-n NAME\tset a name for the pattern to create\n" + + "-p PATHE\tset a path for the files that will be generated for the pattern\n" + "-a TASKS\tselect tasks to add to the pattern (seperated by a space)\n" + "-l \tget the list of selected tasks to be added to the pattern\n" + "-t \tget all tasks of the model\n" @@ -146,14 +151,34 @@ public class PatternHandling extends Command { } if (tmap == null) { - tmap = interpreter.mgui.gtm.getTMLMapping(); + TURTLEPanel tp = interpreter.mgui.getCurrentTURTLEPanel(); + if (!(tp instanceof TMLArchiPanel)) { + return "Current panel does not contain TMAP (NB: you can load a textual TMAP Spec using " + DIPLO_LOAD_TMAP +" or move to Arch panel.)"; + } + if(!interpreter.mgui.checkModelingSyntax(tp, true)) { + return SYNTAX_ERROR + "in current panel (NB: you can load a textual TMAP Spec using " + DIPLO_LOAD_TMAP +")"; + } + tmap = interpreter.mgui.gtm.getTMLMapping(); + nullifyAll(); if (tmap == null) { - return Interpreter.TMAP_NO_SPEC + "\nLoad a TMAP Spec using " + DIPLO_LOAD_TMAP + " command or move to Arch tab."; + return Interpreter.TMAP_NO_SPEC + "\nLoad a textual TMAP Spec using " + DIPLO_LOAD_TMAP + " command or move to Arch panel."; } else { - allTasksOfModel.clear(); for (TMLTask task : tmap.getTMLModeling().getTasks()) { String[] taskNameSplit = task.getName().split("__"); allTasksOfModel.add(taskNameSplit[taskNameSplit.length-1]); + task.setName(taskNameSplit[taskNameSplit.length-1]); + } + for (TMLChannel ch : tmap.getTMLModeling().getChannels()) { + String[] chNameSplit = ch.getName().split("__"); + ch.setName(chNameSplit[chNameSplit.length-1]); + } + for (TMLEvent evt : tmap.getTMLModeling().getEvents()) { + String[] evtNameSplit = evt.getName().split("__"); + evt.setName(evtNameSplit[evtNameSplit.length-1]); + } + for (TMLRequest req : tmap.getTMLModeling().getRequests()) { + String[] reqNameSplit = req.getName().split("__"); + req.setName(reqNameSplit[reqNameSplit.length-1]); } } } @@ -173,6 +198,16 @@ public class PatternHandling extends Command { } patternName = argumentsOfOption.get(0); break; + case "-p": + while (i+1 < commands.length && !Arrays.asList(options).contains(commands[i+1])) { + argumentsOfOption.add(commands[i+1]); + i += 1; + } + if (argumentsOfOption.size() != 1) { + return Interpreter.BAD; + } + patternsPath = argumentsOfOption.get(0); + break; case "-a": while (i+1 < commands.length && !Arrays.asList(options).contains(commands[i+1])) { argumentsOfOption.add(commands[i+1]); @@ -254,6 +289,8 @@ public class PatternHandling extends Command { } if (patternName != null && !patternName.equals("") && selectedTasks.size() != 0) { interpreter.mgui.gtm.createPattern(new ArrayList<String>(selectedTasks), patternName, patternsPath); + selectedTasks.clear(); + patternName = null; } else { return NO_NAME_NO_TASK_FOR_PATTERN; } @@ -269,7 +306,7 @@ public class PatternHandling extends Command { // Create Pattern Command configurePattern = new Command() { - final String [] options = {"-s", "-p", "-sp", "-ct", "-ctr", "-co", "-cor", "-col", "-plnc", "-pl", "-t", "-cptl", "-cpd", "-cpm", "-cpml", "-cpr", "-cpl", "-tctl", "-tcm", "-tcml", "-tcn", "-tcr", "-tcl", "-mctl", "-mcm", "-mcml", "-mcn", "-mcr", "-mcl", "-ua", "-m"}; + final String [] options = {"-n", "-p", "-pal", "-sp", "-ct", "-ctr", "-co", "-cor", "-col", "-plnc", "-pl", "-t", "-b", "-cptl", "-cpd", "-cpm", "-cpml", "-cpr", "-cpl", "-tctl", "-tcm", "-tcml", "-tcn", "-tcr", "-tcl", "-mctl", "-mcm", "-mcml", "-mcn", "-mcr", "-mcl", "-ua", "-m"}; public String getCommand() { return CONFIGURE; } @@ -284,8 +321,9 @@ public class PatternHandling extends Command { public String getUsage() { return "[OPTION]... [NAME] [TASK]\n" - + "-s NAME\tselect a pattern by its name\n" - + "-p \tget the list of all the created patterns\n" + + "-n NAME\tselect a pattern by its name\n" + + "-p PATH\tselect a pattern by the path of its folder\n" + + "-pal \tget the list of all the created patterns\n" + "-sp \tget selected pattern\n" + "-ct TASK1 TASK2\tclone TASK1 from TASK2\n" + "-ctr TASK\t remove the clone task TASK\n" @@ -296,6 +334,7 @@ public class PatternHandling extends Command { + "-plnc \tget the list of pattern's ports that are not yet connected\n" + "-pl TASK.PORT \tget list of available ports in model that could be used to connect with PORT (pattern side)\n" + "-t \tget all tasks of the model\n" + + "-b \tget all buses of the model\n" + "-cptl \tget list of ports to be configured\n" + "-cpd [TASK.PORT] [ALL]\tchoose removing PORT as decision (or ALL to remove all the ports)\n" + "-cpm TASK.PORT1 PORT2\tchoose merging PORT1 with PORT2 as decision\n" @@ -315,7 +354,7 @@ public class PatternHandling extends Command { + "-mcr TASK.CHANNEL\tremove the mapping of CHANNEL\n" + "-mcl \tmap get list of mapped channels\n" + "-ua TASK ATTRIBUTE VALUE \tput the value VALUE of attribute ATTRIBUTE of the task TASK\n" - + "-m \tmake the configuration of the pattern\n"; + + "-m [PATH]\tmake the json configuration file of the pattern, you can optionally specify the path of this new file\n"; } public String executeCommand(String command, Interpreter interpreter) { @@ -324,11 +363,18 @@ public class PatternHandling extends Command { } if (tmap == null) { - tmap = interpreter.mgui.gtm.getTMLMapping(); + TURTLEPanel tp = interpreter.mgui.getCurrentTURTLEPanel(); + if (!(tp instanceof TMLArchiPanel)) { + return "Current panel does not contain TMAP (NB: you can load a textual TMAP Spec using " + DIPLO_LOAD_TMAP +" or move to Arch panel.)"; + } + if(!interpreter.mgui.checkModelingSyntax(tp, true)) { + return SYNTAX_ERROR + "in current panel (NB: you can load a textual TMAP Spec using " + DIPLO_LOAD_TMAP +")"; + } + tmap = interpreter.mgui.gtm.getTMLMapping(); + nullifyAll(); if (tmap == null) { - return Interpreter.TMAP_NO_SPEC + "\nLoad a TMAP Spec using " + DIPLO_LOAD_TMAP + " command or move to Arch tab."; + return Interpreter.TMAP_NO_SPEC + "\nLoad a textual TMAP Spec using " + DIPLO_LOAD_TMAP + " command or move to Arch panel."; } else { - allTasksOfModel.clear(); for (TMLTask task : tmap.getTMLModeling().getTasks()) { String[] taskNameSplit = task.getName().split("__"); allTasksOfModel.add(taskNameSplit[taskNameSplit.length-1]); @@ -346,7 +392,6 @@ public class PatternHandling extends Command { String[] reqNameSplit = req.getName().split("__"); req.setName(reqNameSplit[reqNameSplit.length-1]); } - } } @@ -355,7 +400,7 @@ public class PatternHandling extends Command { List<String> argumentsOfOption = new ArrayList<String>(); switch (commands[i]) { - case "-s": + case "-n": while (i+1 < commands.length && !Arrays.asList(options).contains(commands[i+1])) { argumentsOfOption.add(commands[i+1]); i += 1; @@ -366,14 +411,46 @@ public class PatternHandling extends Command { listPatterns = getFoldersName(patternsPath); if (listPatterns.contains(argumentsOfOption.get(0))) { selectedPatternName = argumentsOfOption.get(0); - patternTasksAll = TaskPattern.parsePatternJsonFile(patternsPath+selectedPatternName, selectedPatternName+".json"); + selectedPatternPath = patternsPath + selectedPatternName; + patternTasksAll = TaskPattern.parsePatternJsonFile(selectedPatternPath, selectedPatternName+".json"); portsTaskOfModelAll = TaskPorts.getListPortsTask(tmap.getTMLModeling()); + patternConfiguration = new PatternConfiguration(); + patternTasksLeft = null; + portsTaskModelLeft = null; + portsLeftToConfig = null; + tasksLeftToMap = null; + channelsLeftToMap = null; } else { //selectedPatternName = null; return PATTERN_NOT_EXIST; } break; case "-p": + while (i+1 < commands.length && !Arrays.asList(options).contains(commands[i+1])) { + argumentsOfOption.add(commands[i+1]); + i += 1; + } + if (argumentsOfOption.size() != 1) { + return Interpreter.BAD; + } + File folderPattern = new File(argumentsOfOption.get(0)); + if (folderPattern.isDirectory()) { + selectedPatternName = argumentsOfOption.get(0).split("/")[argumentsOfOption.get(0).split("/").length-1]; + selectedPatternPath = argumentsOfOption.get(0); + patternTasksAll = TaskPattern.parsePatternJsonFile(selectedPatternPath, selectedPatternName+".json"); + portsTaskOfModelAll = TaskPorts.getListPortsTask(tmap.getTMLModeling()); + patternConfiguration = new PatternConfiguration(); + patternTasksLeft = null; + portsTaskModelLeft = null; + portsLeftToConfig = null; + tasksLeftToMap = null; + channelsLeftToMap = null; + } else { + //selectedPatternName = null; + return PATTERN_NOT_EXIST; + } + break; + case "-pal": while (i+1 < commands.length && !Arrays.asList(options).contains(commands[i+1])) { argumentsOfOption.add(commands[i+1]); i += 1; @@ -398,7 +475,7 @@ public class PatternHandling extends Command { return Interpreter.BAD; } if (selectedPatternName != null) { - interpreter.print("The selected pattern is " + selectedPatternName); + interpreter.print("The selected pattern is " + selectedPatternName); } else { //selectedPatternName = null; return NO_PATTERN_SELECTED; @@ -463,6 +540,11 @@ public class PatternHandling extends Command { } } patternConfiguration.getPortsConnection().removeAll(patternConnectionsToRemove); + if (patternConnectionsToRemove != null) { + patternConfiguration.getTasksMapping().clear(); + patternConfiguration.getChannelsMapping().clear(); + patternConfiguration.getPortsConfig().clear(); + } } else { interpreter.print("The cloned task " + argumentOfOption + "does not exist, it will not be removed."); } @@ -614,25 +696,30 @@ public class PatternHandling extends Command { for (String argumentOfOption : argumentsOfOption) { String patternTaskToRemove = null, patternPortToRemove = null; String[] taskPortToRemove = argumentOfOption.split("\\."); - boolean taskPortExist = false; if (taskPortToRemove.length == 2) { patternTaskToRemove = taskPortToRemove[0]; patternPortToRemove = taskPortToRemove[1]; - taskPortExist = true; } else { - interpreter.print(argumentOfOption + " does not exist, it will not be removed."); + return Interpreter.BAD; } - if (taskPortExist) { - for (PatternConnection patternConnection : patternConfiguration.getPortsConnection()) { - if (patternConnection.getPatternTaskName().equals(patternTaskToRemove) && patternConnection.getPatternChannel().equals(patternPortToRemove)) { - patternConnectionsToRemove.add(patternConnection); - break; - } + boolean taskPortExist = false; + for (PatternConnection patternConnection : patternConfiguration.getPortsConnection()) { + if (patternConnection.getPatternTaskName().equals(patternTaskToRemove) && patternConnection.getPatternChannel().equals(patternPortToRemove)) { + patternConnectionsToRemove.add(patternConnection); + taskPortExist = true; + break; } } - + if (!taskPortExist) { + interpreter.print(argumentOfOption + " does not exist, it will not be removed."); + } } patternConfiguration.getPortsConnection().removeAll(patternConnectionsToRemove); + if (patternConnectionsToRemove != null) { + patternConfiguration.getTasksMapping().clear(); + patternConfiguration.getChannelsMapping().clear(); + patternConfiguration.getPortsConfig().clear(); + } break; case "-col": while (i+1 < commands.length && !Arrays.asList(options).contains(commands[i+1])) { @@ -726,7 +813,30 @@ public class PatternHandling extends Command { } } interpreter.print(printTasks); - break; + break; + case "-b": + while (i+1 < commands.length && !Arrays.asList(options).contains(commands[i+1])) { + argumentsOfOption.add(commands[i+1]); + i += 1; + } + if (argumentsOfOption.size() != 0) { + return Interpreter.BAD; + } + List<String> listBus = new ArrayList<String>(); + for (HwNode bus : tmap.getArch().getBUSs()) { + listBus.add(bus.getName()); + } + interpreter.print("This model contains " + listBus.size() + " bus(s) :"); + String printBuses = ""; + for (int ind = 0; ind < listBus.size(); ind++) { + if (ind == 0) { + printBuses = listBus.get(ind); + } else { + printBuses = printBuses + "\t" + listBus.get(ind); + } + } + interpreter.print(printBuses); + break; case "-cptl": while (i+1 < commands.length && !Arrays.asList(options).contains(commands[i+1])) { argumentsOfOption.add(commands[i+1]); @@ -1352,7 +1462,7 @@ public class PatternHandling extends Command { return Interpreter.BAD; } patternTasksLeft = TaskPattern.getPatternTasksLeft(patternTasksAll, patternConfiguration.getPortsConnection()); - if (patternTasksLeft.keySet().size() != 0) { + if (patternTasksLeft.keySet().size() > 1) { return PATTERN_NOT_CONNECTED; } portsTaskModelLeft = TaskPorts.getPortsTaskOfModelLeft(portsTaskOfModelAll, patternConfiguration.getPortsConnection()); @@ -1360,11 +1470,16 @@ public class PatternHandling extends Command { if (portsLeftToConfig.size() != 0) { return PORT_CONFIGURATION_NOT_FINISHED; } - if (selectedPatternName != null && !selectedPatternName.equals("")) { - selectedPatternPath = patternsPath + selectedPatternName; - interpreter.mgui.gtm.createJsonPatternConfigFile(selectedPatternPath, selectedPatternName, patternConfiguration); - } else { - return NO_NAME_NO_TASK_FOR_PATTERN; + if (argumentsOfOption.size() == 0) { + if (selectedPatternName != null && !selectedPatternName.equals("")) { + patternConfiguration.loadChannelsWithSecurity(patternTasksAll); + interpreter.mgui.gtm.createJsonPatternConfigFile(selectedPatternPath, selectedPatternName, patternConfiguration); + } else { + return NO_NAME_NO_TASK_FOR_PATTERN; + } + } else if (argumentsOfOption.size() == 1) { + patternConfiguration.loadChannelsWithSecurity(patternTasksAll); + interpreter.mgui.gtm.createJsonPatternConfigFile(argumentsOfOption.get(0), patternConfiguration); } break; default: @@ -1387,7 +1502,13 @@ public class PatternHandling extends Command { } public String getDescription() { - return "Load a textual TMAP specification"; + return "Load a TMAP specification"; + } + + public String getUsage() { + return "[PATH]\n" + + "[PATH]\tLoad a Textual TMAP specification\n" + + "\tLoad a TMAP specification from the current panel\n"; } public String executeCommand(String command, Interpreter interpreter) { @@ -1396,25 +1517,54 @@ public class PatternHandling extends Command { } String[] commands = command.split(" "); - if (commands.length < 1) { - return Interpreter.BAD; + for (String cmd : commands) { + TraceManager.addDev("cmd = " + cmd); } - - TMLMappingTextSpecification<?> ts = interpreter.mgui.loadTMAPTxt(commands[0]); - - if (ts == null) { - return "Fail to load TMAP specification"; + if (commands.length > 1) { + return Interpreter.BAD; } + if (commands.length == 1 && commands[0] != "") { + TMLMappingTextSpecification<?> ts = interpreter.mgui.loadTMAPTxt(commands[0]); + if (ts == null) { + return "Fail to load TMAP specification"; + } + if (ts.getErrors().size() > 0) { + return "TMAP specification has errors"; + } + tmap = ts.getTMLMapping(); + nullifyAll(); + } else { + TURTLEPanel tp = interpreter.mgui.getCurrentTURTLEPanel(); + if (!(tp instanceof TMLArchiPanel)) { + return "Current diagram is invalid for formal verification"; + } + if(!interpreter.mgui.checkModelingSyntax(tp, true)) { + return SYNTAX_ERROR; + } - if (ts.getErrors().size() > 0) { - return "TMAP specification has errors"; + tmap = interpreter.mgui.gtm.getTMLMapping(); + nullifyAll(); + if (tmap == null) { + return "Fail to load TMAP specification"; + } } - - tmap = ts.getTMLMapping(); - allTasksOfModel.clear(); + for (TMLTask task : tmap.getTMLModeling().getTasks()) { String[] taskNameSplit = task.getName().split("__"); allTasksOfModel.add(taskNameSplit[taskNameSplit.length-1]); + task.setName(taskNameSplit[taskNameSplit.length-1]); + } + for (TMLChannel ch : tmap.getTMLModeling().getChannels()) { + String[] chNameSplit = ch.getName().split("__"); + ch.setName(chNameSplit[chNameSplit.length-1]); + } + for (TMLEvent evt : tmap.getTMLModeling().getEvents()) { + String[] evtNameSplit = evt.getName().split("__"); + evt.setName(evtNameSplit[evtNameSplit.length-1]); + } + for (TMLRequest req : tmap.getTMLModeling().getRequests()) { + String[] reqNameSplit = req.getName().split("__"); + req.setName(reqNameSplit[reqNameSplit.length-1]); } return null; @@ -1422,7 +1572,7 @@ public class PatternHandling extends Command { }; Command integratePattern = new Command() { - final String [] options = {"-l", "-n", "-p", "-m"}; + final String [] options = {"-l", "-n", "-p", "-pc", "-g", "-m"}; public String getCommand() { return INTEGRATE; } @@ -1439,24 +1589,47 @@ public class PatternHandling extends Command { return "[OPTION]... [NAME] [PATH]\n" + "-l NAME\tlist of available patterns\n" + "-n NAME\tselect a pattern by its name\n" - + "-p PATH\tpath of the configuration json file\n" + + "-p PATH\tselect a pattern by the path of its folder\n" + + "-pc PATH\tpath of the configuration json file\n" + + "-g [PATH]\tgenerate TMAP file of the model after intergrating the pattern, you can optionally specify the path of this new tmap file\n" + "-m \tmake the pattern\n"; } - + + @SuppressWarnings("unchecked") public String executeCommand(String command, Interpreter interpreter) { if (!interpreter.isTToolStarted()) { return Interpreter.TTOOL_NOT_STARTED; } if (tmap == null) { - tmap = interpreter.mgui.gtm.getTMLMapping(); + TURTLEPanel tp = interpreter.mgui.getCurrentTURTLEPanel(); + if (!(tp instanceof TMLArchiPanel)) { + return "Current panel does not contain TMAP (NB: you can load a textual TMAP Spec using " + DIPLO_LOAD_TMAP +" or move to Arch panel.)"; + } + if(!interpreter.mgui.checkModelingSyntax(tp, true)) { + return SYNTAX_ERROR + "in current panel (NB: you can load a textual TMAP Spec using " + DIPLO_LOAD_TMAP +")"; + } + tmap = interpreter.mgui.gtm.getTMLMapping(); + nullifyAll(); if (tmap == null) { - return Interpreter.TMAP_NO_SPEC + "\nLoad a TMAP Spec using " + DIPLO_LOAD_TMAP + " command or move to Arch tab."; + return Interpreter.TMAP_NO_SPEC + "\nLoad a textual TMAP Spec using " + DIPLO_LOAD_TMAP + " command or move to Arch panel."; } else { - allTasksOfModel.clear(); for (TMLTask task : tmap.getTMLModeling().getTasks()) { String[] taskNameSplit = task.getName().split("__"); allTasksOfModel.add(taskNameSplit[taskNameSplit.length-1]); + task.setName(taskNameSplit[taskNameSplit.length-1]); + } + for (TMLChannel ch : tmap.getTMLModeling().getChannels()) { + String[] chNameSplit = ch.getName().split("__"); + ch.setName(chNameSplit[chNameSplit.length-1]); + } + for (TMLEvent evt : tmap.getTMLModeling().getEvents()) { + String[] evtNameSplit = evt.getName().split("__"); + evt.setName(evtNameSplit[evtNameSplit.length-1]); + } + for (TMLRequest req : tmap.getTMLModeling().getRequests()) { + String[] reqNameSplit = req.getName().split("__"); + req.setName(reqNameSplit[reqNameSplit.length-1]); } } } @@ -1491,11 +1664,29 @@ public class PatternHandling extends Command { listPatterns = getFoldersName(patternsPath); if (listPatterns.contains(argumentsOfOption.get(0))) { selectedPatternToIntergrate = argumentsOfOption.get(0); + selectedPatternPathToIntergrate = patternsPath + selectedPatternToIntergrate + "/"; } else { return PATTERN_NOT_EXIST; } break; case "-p": + while (i+1 < commands.length && !Arrays.asList(options).contains(commands[i+1])) { + argumentsOfOption.add(commands[i+1]); + i += 1; + } + if (argumentsOfOption.size() != 1) { + return Interpreter.BAD; + } + File folderPattern = new File(argumentsOfOption.get(0)); + if (folderPattern.isDirectory()) { + selectedPatternToIntergrate = argumentsOfOption.get(0).split("/")[argumentsOfOption.get(0).split("/").length-1]; + selectedPatternPathToIntergrate = argumentsOfOption.get(0); + } else { + return PATTERN_NOT_EXIST; + } + + break; + case "-pc": while (i+1 < commands.length && !Arrays.asList(options).contains(commands[i+1])) { argumentsOfOption.add(commands[i+1]); i += 1; @@ -1511,6 +1702,41 @@ public class PatternHandling extends Command { return CONFIG_JSON_FILE_NOT_EXIST; } break; + case "-g": + while (i+1 < commands.length && !Arrays.asList(options).contains(commands[i+1])) { + argumentsOfOption.add(commands[i+1]); + i += 1; + } + if (argumentsOfOption.size() > 1) { + return Interpreter.BAD; + } + if (selectedJsonFilePath != null && selectedPatternToIntergrate != null) { + TraceManager.addDev("selectedJsonFilePath= " + selectedJsonFilePath); + TraceManager.addDev("selectedPatternToIntergrate= " + selectedPatternToIntergrate); + + TMLMapping<?> tmapGen = interpreter.mgui.gtm.integratePatternTMAP(selectedPatternPathToIntergrate, selectedPatternToIntergrate, selectedJsonFilePath); + if (argumentsOfOption.size() == 0) { + TMLMapping<?> tmapPrev = interpreter.mgui.gtm.getTMLMapping(); + interpreter.mgui.gtm.setTMLMapping(tmapGen); + String tmp = interpreter.mgui.generateTMLTxt(); + interpreter.mgui.gtm.setTMLMapping(tmapPrev); + if (tmp == null) { + return "TML generation failed"; + } else { + return "TML spec generated in: " + tmp; + } + } else if (argumentsOfOption.size() == 1) { + TMLMappingTextSpecification<Class<?>> spec = new TMLMappingTextSpecification<Class<?>>(selectedPatternToIntergrate); + spec.toTextFormat((TMLMapping<Class<?>>) tmapGen); + try { + Files.createDirectories(Paths.get(argumentsOfOption.get(0))); + spec.saveFile(argumentsOfOption.get(0), selectedPatternToIntergrate); + } catch (Exception e) { + return "Files could not be saved: " + e.getMessage(); + } + } + } + break; case "-m": while (i+1 < commands.length && !Arrays.asList(options).contains(commands[i+1])) { argumentsOfOption.add(commands[i+1]); @@ -1522,7 +1748,7 @@ public class PatternHandling extends Command { if (selectedJsonFilePath != null && selectedPatternToIntergrate != null) { TraceManager.addDev("selectedJsonFilePath= " + selectedJsonFilePath); TraceManager.addDev("selectedPatternToIntergrate= " + selectedPatternToIntergrate); - String selectedPatternPathToIntergrate = patternsPath + selectedPatternToIntergrate + "/"; + interpreter.mgui.gtm.integratePattern(interpreter.mgui, selectedPatternPathToIntergrate, selectedPatternToIntergrate, selectedJsonFilePath); } break; @@ -1548,4 +1774,23 @@ public class PatternHandling extends Command { } return folders; } + + private void nullifyAll() { + selectedTasks.clear(); + patternName = null; + allTasksOfModel.clear(); + listPatterns.clear(); + selectedPatternPath = null; + selectedPatternName = null; + patternConfiguration = new PatternConfiguration(); + patternTasksAll = null; + patternTasksLeft = null; + portsTaskOfModelAll = null; + portsTaskModelLeft = null; + portsLeftToConfig = null; + tasksLeftToMap = null; + channelsLeftToMap = null; + selectedPatternToIntergrate = null; + selectedJsonFilePath = null; + } } diff --git a/src/main/java/tmltranslator/patternhandling/PatternConfiguration.java b/src/main/java/tmltranslator/patternhandling/PatternConfiguration.java index eeb71a0e602b8fc1aad1115bee056890dadcae48..e2374d6723c6d9e2cdf4ec49642114fd2135e443 100644 --- a/src/main/java/tmltranslator/patternhandling/PatternConfiguration.java +++ b/src/main/java/tmltranslator/patternhandling/PatternConfiguration.java @@ -131,6 +131,51 @@ public class PatternConfiguration { clonedTasks.remove(_clonedTasks); } + public void loadChannelsWithSecurity(LinkedHashMap<String, TaskPattern> patternTasksAll) { + 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())) { + 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())) { + 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); + } + } + } + } + + } /*public void loadConnectedPorts(Vector<String> connectedPortsFull) { for (String connectedPort : connectedPortsFull) { String[] splitO = connectedPort.split(JDialogPatternHandling.TASK_CHANNEL_SEPARATOR, 2); diff --git a/src/main/java/tmltranslator/patternhandling/PatternIntegration.java b/src/main/java/tmltranslator/patternhandling/PatternIntegration.java index 7a8101ff9ca1d4915055ccfcf7c426f0e292885b..fe66e0172c8359f75ca0cfc41697b31068d45da4 100644 --- a/src/main/java/tmltranslator/patternhandling/PatternIntegration.java +++ b/src/main/java/tmltranslator/patternhandling/PatternIntegration.java @@ -1100,7 +1100,8 @@ public class PatternIntegration implements Runnable { } List<TMLActivityElement> elemsToRemove = new ArrayList<TMLActivityElement>(); - for (TMLActivityElement acElem : adTask.getElements()) { + for (int ind = 0; ind < adTask.getElements().size() ; ind ++) { + TMLActivityElement acElem = adTask.getElements().get(ind); if (acElem instanceof TMLActivityElementChannel) { TMLActivityElementChannel acElemChannel = (TMLActivityElementChannel) acElem; for (int indexChannel = 0 ; indexChannel < acElemChannel.getNbOfChannels() ; indexChannel++) { @@ -1121,6 +1122,7 @@ public class PatternIntegration implements Runnable { newNextElem.clearNexts(); newNextElem.addNext(nextElem); elemsToRemove.add(acElem); + adTask.addElement(newNextElem); } catch (TMLCheckingError err) { } diff --git a/src/main/java/tmltranslator/patternhandling/TaskPattern.java b/src/main/java/tmltranslator/patternhandling/TaskPattern.java index 1912b1322fec9a7d942195ac49aa08ce730ed977..3a019926ed47d647d4f533477235ce481498a3d9 100644 --- a/src/main/java/tmltranslator/patternhandling/TaskPattern.java +++ b/src/main/java/tmltranslator/patternhandling/TaskPattern.java @@ -119,22 +119,56 @@ public class TaskPattern { } public static LinkedHashMap<String, TaskPattern> getPatternTasksLeft(LinkedHashMap<String, TaskPattern> _patternTasksAll, List<PatternConnection> patternConnections) { - LinkedHashMap<String, TaskPattern> patternTasksLeft = new LinkedHashMap<String, TaskPattern>(_patternTasksAll); + LinkedHashMap<String, TaskPattern> patternTasksLeft = new LinkedHashMap<String, TaskPattern>(); for (String taskPattern: _patternTasksAll.keySet()) { + for (PortTaskJsonFile portTask : _patternTasksAll.get(taskPattern).getExternalPorts()) { + boolean isPortMapped = false; + for (PatternConnection patternConnection: patternConnections) { + if (taskPattern.equals(patternConnection.getPatternTaskName()) && portTask.getName().equals(patternConnection.getPatternChannel())) { + isPortMapped = true; + break; + } + } + if (!isPortMapped) { + if (patternTasksLeft.containsKey(taskPattern)) { + patternTasksLeft.get(taskPattern).getExternalPorts().add(portTask); + } else { + List<PortTaskJsonFile> portsExternal = new ArrayList<PortTaskJsonFile>(); + List<PortTaskJsonFile> portsInternal = new ArrayList<PortTaskJsonFile>(); + List<AttributeTaskJsonFile> attributes = new ArrayList<AttributeTaskJsonFile>(); + portsExternal.add(portTask); + TaskPattern tp = new TaskPattern(attributes, portsInternal, portsExternal); + patternTasksLeft.put(taskPattern, tp); + } + } + } + } + /*for (String taskPattern: _patternTasksAll.keySet()) { + TaskPattern tp = new TaskPattern(_patternTasksAll.get(taskPattern).getAttributes(), _patternTasksAll.get(taskPattern).getInternalPorts(), _patternTasksAll.get(taskPattern).getExternalPorts()); + patternTasksLeft.put(taskPattern, tp); + } + + for (String taskPattern: _patternTasksAll.keySet()) { + TraceManager.addDev("_patternTasks: task=" + taskPattern); + for (PortTaskJsonFile portTask : _patternTasksAll.get(taskPattern).getExternalPorts()) { + TraceManager.addDev("Port=" + portTask.getName()); + } if (_patternTasksAll.get(taskPattern).getExternalPorts().size() == 0) { patternTasksLeft.remove(taskPattern); } } for (PatternConnection patternConnection: patternConnections) { + TraceManager.addDev("patternConnection=" + patternConnection.getStringDisplay()); if (patternTasksLeft.containsKey(patternConnection.getPatternTaskName())) { patternTasksLeft.get(patternConnection.getPatternTaskName()).removeExternalPort(patternConnection.getPatternChannel()); if (patternTasksLeft.get(patternConnection.getPatternTaskName()).getExternalPorts().size() == 0) { patternTasksLeft.remove(patternConnection.getPatternTaskName()); } } - } + }*/ return patternTasksLeft; } + public PortTaskJsonFile getExternalPortByName(String portName) { for (PortTaskJsonFile exPort : externalPorts) { if (exPort.getName().equals(portName)) { diff --git a/src/main/java/tmltranslator/patternhandling/TaskPorts.java b/src/main/java/tmltranslator/patternhandling/TaskPorts.java index d1e224bcbda56ddb207b7d9a001b2ceddd9bf567..168ada397e2c1ff78f5ef7e69527b95ed0ca86be 100644 --- a/src/main/java/tmltranslator/patternhandling/TaskPorts.java +++ b/src/main/java/tmltranslator/patternhandling/TaskPorts.java @@ -110,12 +110,75 @@ public class TaskPorts { } public static LinkedHashMap<String, TaskPorts> getPortsTaskOfModelLeft(LinkedHashMap<String, TaskPorts> _portsTaskOfModelAll, List<PatternConnection> patternConnections) { - LinkedHashMap<String, TaskPorts> portsTaskModelLeft = new LinkedHashMap<String, TaskPorts>(_portsTaskOfModelAll); + + LinkedHashMap<String, TaskPorts> portsTaskModelLeft = new LinkedHashMap<String, TaskPorts>(); + for (String task: _portsTaskOfModelAll.keySet()) { + List<String> wcs = new ArrayList<String>(); + List<String> rcs = new ArrayList<String>(); + List<String> ses = new ArrayList<String>(); + List<String> wes = new ArrayList<String>(); + TaskPorts tp = new TaskPorts(wcs, rcs, ses, wes); + portsTaskModelLeft.put(task, tp); + for (String wr : _portsTaskOfModelAll.get(task).getWriteChannels()) { + boolean isMappedPort = false; + for (PatternConnection patternConnection: patternConnections) { + if (patternConnection.getModelTaskName().equals(task) && patternConnection.getModelChannelName().equals(wr) && !patternConnection.isNewPort()) { + isMappedPort = true; + break; + } + } + if (!isMappedPort) { + portsTaskModelLeft.get(task).getWriteChannels().add(wr); + } + } + for (String rd : _portsTaskOfModelAll.get(task).getReadChannels()) { + boolean isMappedPort = false; + for (PatternConnection patternConnection: patternConnections) { + if (patternConnection.getModelTaskName().equals(task) && patternConnection.getModelChannelName().equals(rd) && !patternConnection.isNewPort()) { + isMappedPort = true; + break; + } + } + if (!isMappedPort) { + portsTaskModelLeft.get(task).getReadChannels().add(rd); + } + } + for (String se : _portsTaskOfModelAll.get(task).getSendEvents()) { + boolean isMappedPort = false; + for (PatternConnection patternConnection: patternConnections) { + if (patternConnection.getModelTaskName().equals(task) && patternConnection.getModelChannelName().equals(se) && !patternConnection.isNewPort()) { + isMappedPort = true; + break; + } + } + if (!isMappedPort) { + portsTaskModelLeft.get(task).getSendEvents().add(se); + } + } + for (String we : _portsTaskOfModelAll.get(task).getWaitEvents()) { + boolean isMappedPort = false; + for (PatternConnection patternConnection: patternConnections) { + if (patternConnection.getModelTaskName().equals(task) && patternConnection.getModelChannelName().equals(we) && !patternConnection.isNewPort()) { + isMappedPort = true; + break; + } + } + if (!isMappedPort) { + portsTaskModelLeft.get(task).getWaitEvents().add(we); + } + } + } + /*LinkedHashMap<String, TaskPorts> portsTaskModelLeft = new LinkedHashMap<String, TaskPorts>(_portsTaskOfModelAll); for (PatternConnection patternConnection: patternConnections) { if (portsTaskModelLeft.containsKey(patternConnection.getModelTaskName())) { portsTaskModelLeft.get(patternConnection.getModelTaskName()).removePort(patternConnection.getModelChannelName()); } } + for (PatternConnection patternConnection: patternConnections) { + if (portsTaskModelLeft.containsKey(patternConnection.getModelTaskName())) { + portsTaskModelLeft.get(patternConnection.getModelTaskName()).removePort(patternConnection.getModelChannelName()); + } + }*/ return portsTaskModelLeft; } } \ No newline at end of file diff --git a/src/main/java/ui/GTURTLEModeling.java b/src/main/java/ui/GTURTLEModeling.java index d7d38824aa92c82354b4539618021c9ac0e200b6..ae9484b80cdacef8b9870118a9f5f89947644201 100644 --- a/src/main/java/ui/GTURTLEModeling.java +++ b/src/main/java/ui/GTURTLEModeling.java @@ -1648,28 +1648,42 @@ public class GTURTLEModeling { @SuppressWarnings("unchecked") public void integratePattern(MainGUI gui, String patternPath, String patternName, String configPatternPath) { + tmap = (TMLMapping<TGComponent>) integratePatternTMAP(patternPath, patternName, configPatternPath); + String appTabName = ((TGComponent)tmap.getTMLModeling().getReference()).getTDiagramPanel().tp.getNameOfTab(); + try { + String archTabName = ((CorrespondanceTGElement)(tmap.getCorrespondanceList())).getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp.getNameOfTab(); + gui.drawTMLAndTMAPSpecification(tmap, appTabName + "_" + patternName, archTabName + "_" + patternName); + } catch (MalformedTMLDesignException e) { + TraceManager.addDev("Error when Drawing TML"); + } + } + + @SuppressWarnings("unchecked") + public TMLMapping<?> integratePatternTMAP(String patternPath, String patternName, String configPatternPath) { TraceManager.addDev("patternPath= " + patternPath); TraceManager.addDev("patternName= " + patternName); TraceManager.addDev("configPatternPath= " + configPatternPath); - String appTabName = ((TGComponent)tmap.getTMLModeling().getReference()).getTDiagramPanel().tp.getNameOfTab(); PatternConfig2Json patternConfig2Json = new PatternConfig2Json(configPatternPath); patternConfig2Json.json2patternConfiguration(); PatternConfiguration patternConfiguration = patternConfig2Json.getPaternConfiguration(); LinkedHashMap<String, TaskPattern> patternTasks = TaskPattern.parsePatternJsonFile(patternPath, patternName+".json"); PatternIntegration patternInteg = new PatternIntegration(patternPath, patternName, patternConfiguration, patternTasks, tmap); - tmap = (TMLMapping<TGComponent>) patternInteg.startThread(); - try { - String archTabName = ((CorrespondanceTGElement)(tmap.getCorrespondanceList())).getTG(tmap.getArch().getFirstCPU()).getTDiagramPanel().tp.getNameOfTab(); - gui.drawTMLAndTMAPSpecification(tmap, appTabName + "_" + patternName, archTabName + "_" + patternName); - } catch (MalformedTMLDesignException e) { - TraceManager.addDev("Error when Drawing TML"); - } + TMLMapping<?> tmapPattern = patternInteg.startThread(); + return tmapPattern; } public void createJsonPatternConfigFile(String patternPath, String patternName, PatternConfiguration patternConfiguration) { PatternConfig2Json patternConfig2Json = new PatternConfig2Json(patternPath+"/"+patternName+"-config.json", patternConfiguration); patternConfig2Json.patternConfiguration2Json(); } + + public void createJsonPatternConfigFile(String pathConfigJsonFile, PatternConfiguration patternConfiguration) { + if (!pathConfigJsonFile.endsWith(".json")) { + pathConfigJsonFile += ".json"; + } + PatternConfig2Json patternConfig2Json = new PatternConfig2Json(pathConfigJsonFile, patternConfiguration); + patternConfig2Json.patternConfiguration2Json(); + } @SuppressWarnings("unchecked") public boolean generateGraphicalMapping(TMLMapping map) { diff --git a/src/main/java/ui/window/JDialogPatternHandling.java b/src/main/java/ui/window/JDialogPatternHandling.java index 4afedfce7b40e4b746d2f135269776c9758d4a73..63e3d1bf61f5e4c2954f4a49e6f6e23398217895 100644 --- a/src/main/java/ui/window/JDialogPatternHandling.java +++ b/src/main/java/ui/window/JDialogPatternHandling.java @@ -2341,50 +2341,8 @@ public class JDialogPatternHandling extends JDialog implements ActionListener, L int selectedPatternIndex = jComboBoxPatterns.getSelectedIndex(); String selectedPatternPath = pathPatterns+listPatterns.get(selectedPatternIndex)+"/"; String selectedPatternName = listPatterns.get(selectedPatternIndex); - - 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())) { - 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())) { - 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); - } - } - } - } PatternConfiguration patternConfiguration = new PatternConfiguration(patternConnectionList, clonedTasksList, configuredPortsList, mappedTasksList, mappedChannelsList, updatedPatternAttributes, channelsWithSecurity); + patternConfiguration.loadChannelsWithSecurity(patternTasksAll); mgui.gtm.createJsonPatternConfigFile(selectedPatternPath, selectedPatternName, patternConfiguration); mgui.gtm.integratePattern(mgui, selectedPatternPath, selectedPatternName); JLabel label = new JLabel("Pattern Configuration Completed");